1292915Sdim//===-- MicroMipsDSPInstrFormats.td - Instruction Formats --*- tablegen -*-===// 2292915Sdim// 3292915Sdim// The LLVM Compiler Infrastructure 4292915Sdim// 5292915Sdim// This file is distributed under the University of Illinois Open Source 6292915Sdim// License. See LICENSE.TXT for details. 7292915Sdim// 8292915Sdim//===----------------------------------------------------------------------===// 9292915Sdim 10292915Sdimclass MMDSPInst<string opstr = ""> 11292915Sdim : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther>, PredicateControl { 12292915Sdim let InsnPredicates = [HasDSP]; 13292915Sdim let AdditionalPredicates = [InMicroMips]; 14292915Sdim string BaseOpcode = opstr; 15292915Sdim string Arch = "mmdsp"; 16292915Sdim let DecoderNamespace = "MicroMips"; 17292915Sdim} 18292915Sdim 19292915Sdimclass MMDSPInstAlias<string Asm, dag Result, bit Emit = 0b1> 20292915Sdim : InstAlias<Asm, Result, Emit>, PredicateControl { 21292915Sdim let InsnPredicates = [HasDSP]; 22292915Sdim let AdditionalPredicates = [InMicroMips]; 23292915Sdim} 24292915Sdim 25292915Sdimclass POOL32A_3R_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { 26292915Sdim bits<5> rd; 27292915Sdim bits<5> rs; 28292915Sdim bits<5> rt; 29292915Sdim 30292915Sdim let Inst{31-26} = 0b000000; 31292915Sdim let Inst{25-21} = rt; 32292915Sdim let Inst{20-16} = rs; 33292915Sdim let Inst{15-11} = rd; 34292915Sdim let Inst{10-0} = op; 35292915Sdim} 36292915Sdim 37292915Sdimclass POOL32A_2R_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 38292915Sdim bits<5> rt; 39292915Sdim bits<5> rs; 40292915Sdim 41292915Sdim let Inst{31-26} = 0b000000; 42292915Sdim let Inst{25-21} = rt; 43292915Sdim let Inst{20-16} = rs; 44292915Sdim let Inst{15-6} = op; 45292915Sdim let Inst{5-0} = 0b111100; 46292915Sdim} 47292915Sdim 48292915Sdimclass POOL32A_2RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { 49292915Sdim bits<5> rt; 50292915Sdim bits<5> rs; 51292915Sdim bits<2> ac; 52292915Sdim 53292915Sdim let Inst{31-26} = 0b000000; 54292915Sdim let Inst{25-21} = rt; 55292915Sdim let Inst{20-16} = rs; 56292915Sdim let Inst{15-14} = ac; 57292915Sdim let Inst{13-6} = op; 58292915Sdim let Inst{5-0} = 0b111100; 59292915Sdim} 60292915Sdim 61292915Sdimclass POOL32A_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 62292915Sdim bits<5> rd; 63292915Sdim bits<5> rs; 64292915Sdim bits<5> rt; 65292915Sdim 66292915Sdim let Inst{31-26} = 0b000000; 67292915Sdim let Inst{25-21} = rt; 68292915Sdim let Inst{20-16} = rs; 69292915Sdim let Inst{15-11} = rd; 70292915Sdim let Inst{10} = 0b0; 71292915Sdim let Inst{9-0} = op; 72292915Sdim} 73292915Sdim 74292915Sdimclass POOL32A_2RSA4_FMT<string opstr, bits<12> op> : MMDSPInst<opstr> { 75292915Sdim bits<5> rt; 76292915Sdim bits<5> rs; 77292915Sdim bits<4> sa; 78292915Sdim 79292915Sdim let Inst{31-26} = 0b000000; 80292915Sdim let Inst{25-21} = rt; 81292915Sdim let Inst{20-16} = rs; 82292915Sdim let Inst{15-12} = sa; 83292915Sdim let Inst{11-0} = op; 84292915Sdim} 85292915Sdim 86292915Sdimclass POOL32A_2RSA3_FMT<string opstr, bits<7> op> : MMDSPInst<opstr> { 87292915Sdim bits<5> rt; 88292915Sdim bits<5> rs; 89292915Sdim bits<3> sa; 90292915Sdim 91292915Sdim let Inst{31-26} = 0b000000; 92292915Sdim let Inst{25-21} = rt; 93292915Sdim let Inst{20-16} = rs; 94292915Sdim let Inst{15-13} = sa; 95292915Sdim let Inst{12-6} = op; 96292915Sdim let Inst{5-0} = 0b111100; 97292915Sdim} 98292915Sdim 99292915Sdimclass POOL32A_2RSA5B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 100292915Sdim bits<5> rt; 101292915Sdim bits<5> rs; 102292915Sdim bits<5> sa; 103292915Sdim 104292915Sdim let Inst{31-26} = 0b000000; 105292915Sdim let Inst{25-21} = rt; 106292915Sdim let Inst{20-16} = rs; 107292915Sdim let Inst{15-11} = sa; 108292915Sdim let Inst{10} = 0b0; 109292915Sdim let Inst{9-0} = op; 110292915Sdim} 111292915Sdim 112292915Sdimclass POOL32A_2RSA4B0_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { 113292915Sdim bits<5> rt; 114292915Sdim bits<5> rs; 115292915Sdim bits<4> sa; 116292915Sdim 117292915Sdim let Inst{31-26} = 0b000000; 118292915Sdim let Inst{25-21} = rt; 119292915Sdim let Inst{20-16} = rs; 120292915Sdim let Inst{15-12} = sa; 121292915Sdim let Inst{11} = 0b0; 122292915Sdim let Inst{10-0} = op; 123292915Sdim} 124292915Sdim 125292915Sdimclass POOL32A_2RSA4OP6_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> { 126292915Sdim bits<5> rt; 127292915Sdim bits<5> rs; 128292915Sdim bits<4> sa; 129292915Sdim 130292915Sdim let Inst{31-26} = 0b000000; 131292915Sdim let Inst{25-21} = rt; 132292915Sdim let Inst{20-16} = rs; 133292915Sdim let Inst{15-12} = sa; 134292915Sdim let Inst{11-6} = op; 135292915Sdim let Inst{5-0} = 0b111100; 136292915Sdim} 137292915Sdim 138292915Sdimclass POOL32A_1RIMM5AC_FMT<string opstr, bits<8> funct> : MMDSPInst<opstr> { 139292915Sdim bits<5> rt; 140292915Sdim bits<5> imm; 141292915Sdim bits<2> ac; 142292915Sdim 143292915Sdim let Inst{31-26} = 0b000000; 144292915Sdim let Inst{25-21} = rt; 145292915Sdim let Inst{20-16} = imm; 146292915Sdim let Inst{15-14} = ac; 147292915Sdim let Inst{13-6} = funct; 148292915Sdim let Inst{5-0} = 0b111100; 149292915Sdim} 150292915Sdim 151292915Sdimclass POOL32A_2RSA5_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { 152292915Sdim bits<5> rt; 153292915Sdim bits<5> rs; 154292915Sdim bits<5> sa; 155292915Sdim 156292915Sdim let Inst{31-26} = 0b000000; 157292915Sdim let Inst{25-21} = rt; 158292915Sdim let Inst{20-16} = rs; 159292915Sdim let Inst{15-11} = sa; 160292915Sdim let Inst{10-0} = op; 161292915Sdim} 162292915Sdim 163292915Sdimclass POOL32A_1RMEMB0_FMT<string opstr, bits<10> funct> : MMDSPInst<opstr> { 164292915Sdim bits<5> index; 165292915Sdim bits<5> base; 166292915Sdim bits<5> rd; 167292915Sdim 168292915Sdim let Inst{31-26} = 0; 169292915Sdim let Inst{25-21} = index; 170292915Sdim let Inst{20-16} = base; 171292915Sdim let Inst{15-11} = rd; 172292915Sdim let Inst{10} = 0b0; 173292915Sdim let Inst{9-0} = funct; 174292915Sdim} 175292915Sdim 176292915Sdimclass POOL32A_1RAC_FMT<string instr_asm, bits<8> funct> : MMDSPInst<instr_asm> { 177292915Sdim bits<5> rs; 178292915Sdim bits<2> ac; 179292915Sdim 180292915Sdim let Inst{31-26} = 0; 181292915Sdim let Inst{25-21} = 0; 182292915Sdim let Inst{20-16} = rs; 183292915Sdim let Inst{15-14} = ac; 184292915Sdim let Inst{13-6} = funct; 185292915Sdim let Inst{5-0} = 0b111100; 186292915Sdim} 187292915Sdim 188292915Sdimclass POOL32A_1RMASK7_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { 189292915Sdim bits<5> rt; 190292915Sdim bits<7> mask; 191292915Sdim 192292915Sdim let Inst{31-26} = 0b000000; 193292915Sdim let Inst{25-21} = rt; 194292915Sdim let Inst{20-14} = mask; 195292915Sdim let Inst{13-6} = op; 196292915Sdim let Inst{5-0} = 0b111100; 197292915Sdim} 198292915Sdim 199292915Sdimclass POOL32A_1RIMM10_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 200292915Sdim bits<5> rd; 201292915Sdim bits<10> imm; 202292915Sdim 203292915Sdim let Inst{31-26} = 0; 204292915Sdim let Inst{25-16} = imm; 205292915Sdim let Inst{15-11} = rd; 206292915Sdim let Inst{10} = 0; 207292915Sdim let Inst{9-0} = op; 208292915Sdim} 209292915Sdim 210292915Sdimclass POOL32A_1RIMM8_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> { 211292915Sdim bits<5> rt; 212292915Sdim bits<8> imm; 213292915Sdim 214292915Sdim let Inst{31-26} = 0; 215292915Sdim let Inst{25-21} = rt; 216292915Sdim let Inst{20-13} = imm; 217292915Sdim let Inst{12} = 0; 218292915Sdim let Inst{11-6} = op; 219292915Sdim let Inst{5-0} = 0b111100; 220292915Sdim} 221292915Sdim 222292915Sdimclass POOL32A_4B0SHIFT6AC4B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 223292915Sdim bits<6> shift; 224292915Sdim bits<2> ac; 225292915Sdim 226292915Sdim let Inst{31-26} = 0b000000; 227292915Sdim let Inst{25-22} = 0b0000; 228292915Sdim let Inst{21-16} = shift; 229292915Sdim let Inst{15-14} = ac; 230292915Sdim let Inst{13-10} = 0b0000; 231292915Sdim let Inst{9-0} = op; 232292915Sdim} 233292915Sdim 234292915Sdimclass POOL32A_5B01RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { 235292915Sdim bits<5> rs; 236292915Sdim bits<2> ac; 237292915Sdim 238292915Sdim let Inst{31-26} = 0b000000; 239292915Sdim let Inst{25-21} = 0b00000; 240292915Sdim let Inst{20-16} = rs; 241292915Sdim let Inst{15-14} = ac; 242292915Sdim let Inst{13-6} = op; 243292915Sdim let Inst{5-0} = 0b111100; 244292915Sdim} 245