1//===-- MicroMipsDSPInstrFormats.td - Instruction Formats --*- tablegen -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9class MMDSPInst<string opstr = ""> 10 : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther> { 11 let ASEPredicate = [HasDSP]; 12 let EncodingPredicates = [InMicroMips]; 13 string BaseOpcode = opstr; 14 string Arch = "mmdsp"; 15 let DecoderNamespace = "MicroMips"; 16} 17 18class MMDSPInstAlias<string Asm, dag Result, bit Emit = 0b1> 19 : InstAlias<Asm, Result, Emit>, PredicateControl { 20 let ASEPredicate = [HasDSP]; 21 let AdditionalPredicates = [InMicroMips]; 22} 23 24class POOL32A_3R_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { 25 bits<5> rd; 26 bits<5> rs; 27 bits<5> rt; 28 29 let Inst{31-26} = 0b000000; 30 let Inst{25-21} = rt; 31 let Inst{20-16} = rs; 32 let Inst{15-11} = rd; 33 let Inst{10-0} = op; 34} 35 36class POOL32A_2R_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 37 bits<5> rt; 38 bits<5> rs; 39 40 let Inst{31-26} = 0b000000; 41 let Inst{25-21} = rt; 42 let Inst{20-16} = rs; 43 let Inst{15-6} = op; 44 let Inst{5-0} = 0b111100; 45} 46 47class POOL32A_2RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { 48 bits<5> rt; 49 bits<5> rs; 50 bits<2> ac; 51 52 let Inst{31-26} = 0b000000; 53 let Inst{25-21} = rt; 54 let Inst{20-16} = rs; 55 let Inst{15-14} = ac; 56 let Inst{13-6} = op; 57 let Inst{5-0} = 0b111100; 58} 59 60class POOL32A_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 61 bits<5> rd; 62 bits<5> rs; 63 bits<5> rt; 64 65 let Inst{31-26} = 0b000000; 66 let Inst{25-21} = rt; 67 let Inst{20-16} = rs; 68 let Inst{15-11} = rd; 69 let Inst{10} = 0b0; 70 let Inst{9-0} = op; 71} 72 73class POOL32A_2RSA4_FMT<string opstr, bits<12> op> : MMDSPInst<opstr> { 74 bits<5> rt; 75 bits<5> rs; 76 bits<4> sa; 77 78 let Inst{31-26} = 0b000000; 79 let Inst{25-21} = rt; 80 let Inst{20-16} = rs; 81 let Inst{15-12} = sa; 82 let Inst{11-0} = op; 83} 84 85class POOL32A_2RSA3_FMT<string opstr, bits<7> op> : MMDSPInst<opstr> { 86 bits<5> rt; 87 bits<5> rs; 88 bits<3> sa; 89 90 let Inst{31-26} = 0b000000; 91 let Inst{25-21} = rt; 92 let Inst{20-16} = rs; 93 let Inst{15-13} = sa; 94 let Inst{12-6} = op; 95 let Inst{5-0} = 0b111100; 96} 97 98class POOL32A_2RSA5B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 99 bits<5> rt; 100 bits<5> rs; 101 bits<5> sa; 102 103 let Inst{31-26} = 0b000000; 104 let Inst{25-21} = rt; 105 let Inst{20-16} = rs; 106 let Inst{15-11} = sa; 107 let Inst{10} = 0b0; 108 let Inst{9-0} = op; 109} 110 111class POOL32A_2RSA4B0_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { 112 bits<5> rt; 113 bits<5> rs; 114 bits<4> sa; 115 116 let Inst{31-26} = 0b000000; 117 let Inst{25-21} = rt; 118 let Inst{20-16} = rs; 119 let Inst{15-12} = sa; 120 let Inst{11} = 0b0; 121 let Inst{10-0} = op; 122} 123 124class POOL32A_2RSA4OP6_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> { 125 bits<5> rt; 126 bits<5> rs; 127 bits<4> sa; 128 129 let Inst{31-26} = 0b000000; 130 let Inst{25-21} = rt; 131 let Inst{20-16} = rs; 132 let Inst{15-12} = sa; 133 let Inst{11-6} = op; 134 let Inst{5-0} = 0b111100; 135} 136 137class POOL32A_1RIMM5AC_FMT<string opstr, bits<8> funct> : MMDSPInst<opstr> { 138 bits<5> rt; 139 bits<5> imm; 140 bits<2> ac; 141 142 let Inst{31-26} = 0b000000; 143 let Inst{25-21} = rt; 144 let Inst{20-16} = imm; 145 let Inst{15-14} = ac; 146 let Inst{13-6} = funct; 147 let Inst{5-0} = 0b111100; 148} 149 150class POOL32A_2RSA5_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { 151 bits<5> rt; 152 bits<5> rs; 153 bits<5> sa; 154 155 let Inst{31-26} = 0b000000; 156 let Inst{25-21} = rt; 157 let Inst{20-16} = rs; 158 let Inst{15-11} = sa; 159 let Inst{10-0} = op; 160} 161 162class POOL32A_1RMEMB0_FMT<string opstr, bits<10> funct> : MMDSPInst<opstr> { 163 bits<5> index; 164 bits<5> base; 165 bits<5> rd; 166 167 let Inst{31-26} = 0; 168 let Inst{25-21} = index; 169 let Inst{20-16} = base; 170 let Inst{15-11} = rd; 171 let Inst{10} = 0b0; 172 let Inst{9-0} = funct; 173} 174 175class POOL32A_1RAC_FMT<string instr_asm, bits<8> funct> : MMDSPInst<instr_asm> { 176 bits<5> rs; 177 bits<2> ac; 178 179 let Inst{31-26} = 0; 180 let Inst{25-21} = 0; 181 let Inst{20-16} = rs; 182 let Inst{15-14} = ac; 183 let Inst{13-6} = funct; 184 let Inst{5-0} = 0b111100; 185} 186 187class POOL32A_1RMASK7_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { 188 bits<5> rt; 189 bits<7> mask; 190 191 let Inst{31-26} = 0b000000; 192 let Inst{25-21} = rt; 193 let Inst{20-14} = mask; 194 let Inst{13-6} = op; 195 let Inst{5-0} = 0b111100; 196} 197 198class POOL32A_1RIMM10_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 199 bits<5> rd; 200 bits<10> imm; 201 202 let Inst{31-26} = 0; 203 let Inst{25-16} = imm; 204 let Inst{15-11} = rd; 205 let Inst{10} = 0; 206 let Inst{9-0} = op; 207} 208 209class POOL32A_1RIMM8_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> { 210 bits<5> rt; 211 bits<8> imm; 212 213 let Inst{31-26} = 0; 214 let Inst{25-21} = rt; 215 let Inst{20-13} = imm; 216 let Inst{12} = 0; 217 let Inst{11-6} = op; 218 let Inst{5-0} = 0b111100; 219} 220 221class POOL32A_4B0SHIFT6AC4B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 222 bits<6> shift; 223 bits<2> ac; 224 225 let Inst{31-26} = 0b000000; 226 let Inst{25-22} = 0b0000; 227 let Inst{21-16} = shift; 228 let Inst{15-14} = ac; 229 let Inst{13-10} = 0b0000; 230 let Inst{9-0} = op; 231} 232 233class POOL32A_5B01RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { 234 bits<5> rs; 235 bits<2> ac; 236 237 let Inst{31-26} = 0b000000; 238 let Inst{25-21} = 0b00000; 239 let Inst{20-16} = rs; 240 let Inst{15-14} = ac; 241 let Inst{13-6} = op; 242 let Inst{5-0} = 0b111100; 243} 244 245class POOL32I_IMMB0_FMT<string opstr, bits<5> op> : MMDSPInst<opstr> { 246 bits<16> offset; 247 248 let Inst{31-26} = 0b010000; 249 let Inst{25-21} = op; 250 let Inst{20-16} = 0; 251 let Inst{15-0} = offset; 252} 253 254class POOL32A_2RBP_FMT<string opstr> : MMDSPInst<opstr> { 255 bits<5> rt; 256 bits<5> rs; 257 bits<2> bp; 258 259 let Inst{31-26} = 0; 260 let Inst{25-21} = rt; 261 let Inst{20-16} = rs; 262 let Inst{15-14} = bp; 263 let Inst{13-6} = 0b00100010; 264 let Inst{5-0} = 0b111100; 265} 266 267class POOL32A_2RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 268 bits<5> rt; 269 bits<5> rs; 270 271 let Inst{31-26} = 0; 272 let Inst{25-21} = rt; 273 let Inst{20-16} = rs; 274 let Inst{15-10} = 0; 275 let Inst{9-0} = op; 276} 277 278class POOL32S_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 279 bits<5> rt; 280 bits<5> rs; 281 bits<5> rd; 282 283 let Inst{31-26} = 0b010110; 284 let Inst{25-21} = rt; 285 let Inst{20-16} = rs; 286 let Inst{15-11} = rd; 287 let Inst{10} = 0b0; 288 let Inst{9-0} = op; 289} 290 291class POOL32A_2R2B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 292 bits<5> rt; 293 bits<5> rs; 294 295 let Inst{31-26} = 0; 296 let Inst{25-21} = rt; 297 let Inst{20-16} = rs; 298 let Inst{15-11} = 0; 299 let Inst{10} = 0; 300 let Inst{9-0} = op; 301} 302