• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//=-   MicroMips64r6InstrFormats.td - Instruction Formats  -*- tablegen -*  -=//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file describes microMIPS64r6 instruction formats.
11//
12//===----------------------------------------------------------------------===//
13
14class DAUI_FM_MMR6 {
15  bits<5> rt;
16  bits<5> rs;
17  bits<16> imm;
18
19  bits<32> Inst;
20
21  let Inst{31-26} = 0b111100;
22  let Inst{25-21} = rt;
23  let Inst{20-16} = rs;
24  let Inst{15-0}  = imm;
25}
26
27class POOL32I_ADD_IMM_FM_MMR6<bits<5> funct> {
28  bits<5> rs;
29  bits<16> imm;
30
31  bits<32> Inst;
32
33  let Inst{31-26} = 0b010000;
34  let Inst{25-21} = funct;
35  let Inst{20-16} = rs;
36  let Inst{15-0} = imm;
37}
38
39class POOL32S_EXTBITS_FM_MMR6<bits<6> funct> {
40  bits<5> rt;
41  bits<5> rs;
42  bits<5> size;
43  bits<5> pos;
44
45  bits<32> Inst;
46
47  let Inst{31-26} = 0b010110;
48  let Inst{25-21} = rt;
49  let Inst{20-16} = rs;
50  let Inst{15-11} = size;
51  let Inst{10-6}  = pos;
52  let Inst{5-0}   = funct;
53}
54
55class POOL32S_DALIGN_FM_MMR6 {
56  bits<5> rs;
57  bits<5> rt;
58  bits<5> rd;
59  bits<3> bp;
60
61  bits<32> Inst;
62
63  let Inst{31-26} = 0b010110;
64  let Inst{25-21} = rs;
65  let Inst{20-16} = rt;
66  let Inst{15-11} = rd;
67  let Inst{10-8}  = bp;
68  let Inst{7-6}   = 0b00;
69  let Inst{5-0}   = 0b011100;
70}
71
72class POOL32A_DIVMOD_FM_MMR6<string instr_asm, bits<9> funct>
73    : MMR6Arch<instr_asm> {
74  bits<5> rt;
75  bits<5> rs;
76  bits<5> rd;
77
78  bits<32> Inst;
79
80  let Inst{31-26} = 0b010110;
81  let Inst{25-21} = rt;
82  let Inst{20-16} = rs;
83  let Inst{15-11} = rd;
84  let Inst{10-9}  = 0b00;
85  let Inst{8-0}  = funct;
86}
87
88class POOL32S_DMFTC0_FM_MMR6<string instr_asm, bits<5> funct>
89    : MMR6Arch<instr_asm>, MipsR6Inst {
90  bits<5> rt;
91  bits<5> rs;
92  bits<3> sel;
93
94  bits<32> Inst;
95
96  let Inst{31-26} = 0b010110;
97  let Inst{25-21} = rt;
98  let Inst{20-16} = rs;
99  let Inst{15-14} = 0;
100  let Inst{13-11} = sel;
101  let Inst{10-6}  = funct;
102  let Inst{5-0}   = 0b111100;
103}
104
105class POOL32S_ARITH_FM_MMR6<string opstr, bits<9> funct>
106    : MMR6Arch<opstr> {
107  bits<5> rt;
108  bits<5> rs;
109  bits<5> rd;
110
111  bits<32> Inst;
112
113  let Inst{31-26} = 0b010110;
114  let Inst{25-21} = rt;
115  let Inst{20-16} = rs;
116  let Inst{15-11} = rd;
117  let Inst{10-9}  = 0b00;
118  let Inst{8-0}   = funct;
119}
120
121class DADDIU_FM_MMR6<string opstr> : MMR6Arch<opstr> {
122  bits<5> rt;
123  bits<5> rs;
124  bits<16> imm16;
125
126  bits<32> Inst;
127
128  let Inst{31-26} = 0b010111;
129  let Inst{25-21} = rt;
130  let Inst{20-16} = rs;
131  let Inst{15-0}  = imm16;
132}
133
134class PCREL18_FM_MMR6<bits<3> funct> : MipsR6Inst {
135  bits<5> rt;
136  bits<18> imm;
137
138  bits<32> Inst;
139
140  let Inst{31-26} = 0b011110;
141  let Inst{25-21} = rt;
142  let Inst{20-18} = funct;
143  let Inst{17-0} = imm;
144}
145
146class POOL32S_2R_FM_MMR6<string instr_asm, bits<10> funct>
147    : MMR6Arch<instr_asm>, MipsR6Inst {
148  bits<5> rt;
149  bits<5> rs;
150
151  bits<32> Inst;
152
153  let Inst{31-26} = 0b010110;
154  let Inst{25-21} = rt;
155  let Inst{20-16} = rs;
156  let Inst{15-6} = funct;
157  let Inst{5-0} = 0b111100;
158}
159
160class POOL32S_2RSA5B0_FM_MMR6<string instr_asm, bits<9> funct>
161    : MMR6Arch<instr_asm>, MipsR6Inst {
162  bits<5> rt;
163  bits<5> rs;
164  bits<5> sa;
165
166  bits<32> Inst;
167
168  let Inst{31-26} = 0b010110;
169  let Inst{25-21} = rt;
170  let Inst{20-16} = rs;
171  let Inst{15-11} = sa;
172  let Inst{10-9} = 0b00;
173  let Inst{8-0} = funct;
174}
175
176class LD_SD_32_2R_OFFSET16_FM_MMR6<string instr_asm, bits<6> op>
177    : MMR6Arch<instr_asm>, MipsR6Inst {
178  bits<5> rt;
179  bits<21> addr;
180  bits<5> base = addr{20-16};
181  bits<16> offset = addr{15-0};
182
183  bits<32> Inst;
184
185  let Inst{31-26} = op;
186  let Inst{25-21} = rt;
187  let Inst{20-16} = base;
188  let Inst{15-0}  = offset;
189}
190
191class POOL32C_2R_OFFSET12_FM_MMR6<string instr_asm, bits<4> funct>
192    : MMR6Arch<instr_asm>, MipsR6Inst {
193  bits<5> rt;
194  bits<21> addr;
195  bits<5> base = addr{20-16};
196  bits<12> offset = addr{11-0};
197
198  bits<32> Inst;
199
200  let Inst{31-26} = 0b011000;
201  let Inst{25-21} = rt;
202  let Inst{20-16} = base;
203  let Inst{15-12} = funct;
204  let Inst{11-0}  = offset;
205}
206
207class POOL32S_3R_FM_MMR6<string instr_asm, bits<9> funct>
208    : MMR6Arch<instr_asm>, MipsR6Inst {
209  bits<5> rt;
210  bits<5> rs;
211  bits<5> rd;
212
213  bits<32> Inst;
214
215  let Inst{31-26} = 0b010110;
216  let Inst{25-21} = rt;
217  let Inst{20-16} = rs;
218  let Inst{15-11} = rd;
219  let Inst{10-9}  = 0b00;
220  let Inst{8-0}   = funct;
221}
222