12e386d3dSZoran Jovanovic//===-- MicroMipsDSPInstrFormats.td - Instruction Formats --*- tablegen -*-===// 22e386d3dSZoran Jovanovic// 3*2946cd70SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth// See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 62e386d3dSZoran Jovanovic// 72e386d3dSZoran Jovanovic//===----------------------------------------------------------------------===// 82e386d3dSZoran Jovanovic 92e386d3dSZoran Jovanovicclass MMDSPInst<string opstr = ""> 10f909058aSSimon Dardis : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther> { 111f0fe564SSimon Dardis let ASEPredicate = [HasDSP]; 12eae99120SSimon Dardis let EncodingPredicates = [InMicroMips]; 132e386d3dSZoran Jovanovic string BaseOpcode = opstr; 142e386d3dSZoran Jovanovic string Arch = "mmdsp"; 152e386d3dSZoran Jovanovic let DecoderNamespace = "MicroMips"; 162e386d3dSZoran Jovanovic} 172e386d3dSZoran Jovanovic 18252cca55SZlatko Buljanclass MMDSPInstAlias<string Asm, dag Result, bit Emit = 0b1> 19252cca55SZlatko Buljan : InstAlias<Asm, Result, Emit>, PredicateControl { 201f0fe564SSimon Dardis let ASEPredicate = [HasDSP]; 21252cca55SZlatko Buljan let AdditionalPredicates = [InMicroMips]; 22252cca55SZlatko Buljan} 23252cca55SZlatko Buljan 2454b1eb4cSZlatko Buljanclass POOL32A_3R_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { 252e386d3dSZoran Jovanovic bits<5> rd; 262e386d3dSZoran Jovanovic bits<5> rs; 272e386d3dSZoran Jovanovic bits<5> rt; 282e386d3dSZoran Jovanovic 292e386d3dSZoran Jovanovic let Inst{31-26} = 0b000000; 302e386d3dSZoran Jovanovic let Inst{25-21} = rt; 312e386d3dSZoran Jovanovic let Inst{20-16} = rs; 322e386d3dSZoran Jovanovic let Inst{15-11} = rd; 332e386d3dSZoran Jovanovic let Inst{10-0} = op; 342e386d3dSZoran Jovanovic} 3554b1eb4cSZlatko Buljan 36d0a7d6e4SZlatko Buljanclass POOL32A_2R_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 37d0a7d6e4SZlatko Buljan bits<5> rt; 38d0a7d6e4SZlatko Buljan bits<5> rs; 39d0a7d6e4SZlatko Buljan 40d0a7d6e4SZlatko Buljan let Inst{31-26} = 0b000000; 41d0a7d6e4SZlatko Buljan let Inst{25-21} = rt; 42d0a7d6e4SZlatko Buljan let Inst{20-16} = rs; 43d0a7d6e4SZlatko Buljan let Inst{15-6} = op; 44d0a7d6e4SZlatko Buljan let Inst{5-0} = 0b111100; 45d0a7d6e4SZlatko Buljan} 46d0a7d6e4SZlatko Buljan 47d0a7d6e4SZlatko Buljanclass POOL32A_2RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { 48d0a7d6e4SZlatko Buljan bits<5> rt; 49d0a7d6e4SZlatko Buljan bits<5> rs; 50d0a7d6e4SZlatko Buljan bits<2> ac; 51d0a7d6e4SZlatko Buljan 52d0a7d6e4SZlatko Buljan let Inst{31-26} = 0b000000; 53d0a7d6e4SZlatko Buljan let Inst{25-21} = rt; 54d0a7d6e4SZlatko Buljan let Inst{20-16} = rs; 55d0a7d6e4SZlatko Buljan let Inst{15-14} = ac; 56d0a7d6e4SZlatko Buljan let Inst{13-6} = op; 57d0a7d6e4SZlatko Buljan let Inst{5-0} = 0b111100; 58d0a7d6e4SZlatko Buljan} 5952920835SZlatko Buljan 6052920835SZlatko Buljanclass POOL32A_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 6152920835SZlatko Buljan bits<5> rd; 6252920835SZlatko Buljan bits<5> rs; 6352920835SZlatko Buljan bits<5> rt; 6452920835SZlatko Buljan 6552920835SZlatko Buljan let Inst{31-26} = 0b000000; 6652920835SZlatko Buljan let Inst{25-21} = rt; 6752920835SZlatko Buljan let Inst{20-16} = rs; 6852920835SZlatko Buljan let Inst{15-11} = rd; 6952920835SZlatko Buljan let Inst{10} = 0b0; 7052920835SZlatko Buljan let Inst{9-0} = op; 7152920835SZlatko Buljan} 722cf61020SZlatko Buljan 732cf61020SZlatko Buljanclass POOL32A_2RSA4_FMT<string opstr, bits<12> op> : MMDSPInst<opstr> { 742cf61020SZlatko Buljan bits<5> rt; 752cf61020SZlatko Buljan bits<5> rs; 762cf61020SZlatko Buljan bits<4> sa; 772cf61020SZlatko Buljan 782cf61020SZlatko Buljan let Inst{31-26} = 0b000000; 792cf61020SZlatko Buljan let Inst{25-21} = rt; 802cf61020SZlatko Buljan let Inst{20-16} = rs; 812cf61020SZlatko Buljan let Inst{15-12} = sa; 822cf61020SZlatko Buljan let Inst{11-0} = op; 832cf61020SZlatko Buljan} 842cf61020SZlatko Buljan 852cf61020SZlatko Buljanclass POOL32A_2RSA3_FMT<string opstr, bits<7> op> : MMDSPInst<opstr> { 862cf61020SZlatko Buljan bits<5> rt; 872cf61020SZlatko Buljan bits<5> rs; 882cf61020SZlatko Buljan bits<3> sa; 892cf61020SZlatko Buljan 902cf61020SZlatko Buljan let Inst{31-26} = 0b000000; 912cf61020SZlatko Buljan let Inst{25-21} = rt; 922cf61020SZlatko Buljan let Inst{20-16} = rs; 932cf61020SZlatko Buljan let Inst{15-13} = sa; 942cf61020SZlatko Buljan let Inst{12-6} = op; 952cf61020SZlatko Buljan let Inst{5-0} = 0b111100; 962cf61020SZlatko Buljan} 972cf61020SZlatko Buljan 982cf61020SZlatko Buljanclass POOL32A_2RSA5B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 992cf61020SZlatko Buljan bits<5> rt; 1002cf61020SZlatko Buljan bits<5> rs; 1012cf61020SZlatko Buljan bits<5> sa; 1022cf61020SZlatko Buljan 1032cf61020SZlatko Buljan let Inst{31-26} = 0b000000; 1042cf61020SZlatko Buljan let Inst{25-21} = rt; 1052cf61020SZlatko Buljan let Inst{20-16} = rs; 1062cf61020SZlatko Buljan let Inst{15-11} = sa; 1072cf61020SZlatko Buljan let Inst{10} = 0b0; 1082cf61020SZlatko Buljan let Inst{9-0} = op; 1092cf61020SZlatko Buljan} 11032fb5c40SZlatko Buljan 11132fb5c40SZlatko Buljanclass POOL32A_2RSA4B0_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { 11232fb5c40SZlatko Buljan bits<5> rt; 11332fb5c40SZlatko Buljan bits<5> rs; 11432fb5c40SZlatko Buljan bits<4> sa; 11532fb5c40SZlatko Buljan 11632fb5c40SZlatko Buljan let Inst{31-26} = 0b000000; 11732fb5c40SZlatko Buljan let Inst{25-21} = rt; 11832fb5c40SZlatko Buljan let Inst{20-16} = rs; 11932fb5c40SZlatko Buljan let Inst{15-12} = sa; 12032fb5c40SZlatko Buljan let Inst{11} = 0b0; 12132fb5c40SZlatko Buljan let Inst{10-0} = op; 12232fb5c40SZlatko Buljan} 12332fb5c40SZlatko Buljan 12432fb5c40SZlatko Buljanclass POOL32A_2RSA4OP6_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> { 12532fb5c40SZlatko Buljan bits<5> rt; 12632fb5c40SZlatko Buljan bits<5> rs; 12732fb5c40SZlatko Buljan bits<4> sa; 12832fb5c40SZlatko Buljan 12932fb5c40SZlatko Buljan let Inst{31-26} = 0b000000; 13032fb5c40SZlatko Buljan let Inst{25-21} = rt; 13132fb5c40SZlatko Buljan let Inst{20-16} = rs; 13232fb5c40SZlatko Buljan let Inst{15-12} = sa; 13332fb5c40SZlatko Buljan let Inst{11-6} = op; 13432fb5c40SZlatko Buljan let Inst{5-0} = 0b111100; 13532fb5c40SZlatko Buljan} 13672a7f9c1SZlatko Buljan 13772a7f9c1SZlatko Buljanclass POOL32A_1RIMM5AC_FMT<string opstr, bits<8> funct> : MMDSPInst<opstr> { 13872a7f9c1SZlatko Buljan bits<5> rt; 13972a7f9c1SZlatko Buljan bits<5> imm; 14072a7f9c1SZlatko Buljan bits<2> ac; 14172a7f9c1SZlatko Buljan 14272a7f9c1SZlatko Buljan let Inst{31-26} = 0b000000; 14372a7f9c1SZlatko Buljan let Inst{25-21} = rt; 14472a7f9c1SZlatko Buljan let Inst{20-16} = imm; 14572a7f9c1SZlatko Buljan let Inst{15-14} = ac; 14672a7f9c1SZlatko Buljan let Inst{13-6} = funct; 14772a7f9c1SZlatko Buljan let Inst{5-0} = 0b111100; 14872a7f9c1SZlatko Buljan} 14956f3b0e4SZlatko Buljan 15056f3b0e4SZlatko Buljanclass POOL32A_2RSA5_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { 15156f3b0e4SZlatko Buljan bits<5> rt; 15256f3b0e4SZlatko Buljan bits<5> rs; 15356f3b0e4SZlatko Buljan bits<5> sa; 15456f3b0e4SZlatko Buljan 15556f3b0e4SZlatko Buljan let Inst{31-26} = 0b000000; 15656f3b0e4SZlatko Buljan let Inst{25-21} = rt; 15756f3b0e4SZlatko Buljan let Inst{20-16} = rs; 15856f3b0e4SZlatko Buljan let Inst{15-11} = sa; 15956f3b0e4SZlatko Buljan let Inst{10-0} = op; 16056f3b0e4SZlatko Buljan} 161c03957f0SHrvoje Varga 162c03957f0SHrvoje Vargaclass POOL32A_1RMEMB0_FMT<string opstr, bits<10> funct> : MMDSPInst<opstr> { 163c03957f0SHrvoje Varga bits<5> index; 164c03957f0SHrvoje Varga bits<5> base; 165c03957f0SHrvoje Varga bits<5> rd; 166c03957f0SHrvoje Varga 167c03957f0SHrvoje Varga let Inst{31-26} = 0; 168c03957f0SHrvoje Varga let Inst{25-21} = index; 169c03957f0SHrvoje Varga let Inst{20-16} = base; 170c03957f0SHrvoje Varga let Inst{15-11} = rd; 171c03957f0SHrvoje Varga let Inst{10} = 0b0; 172c03957f0SHrvoje Varga let Inst{9-0} = funct; 173c03957f0SHrvoje Varga} 174c03957f0SHrvoje Varga 175c03957f0SHrvoje Vargaclass POOL32A_1RAC_FMT<string instr_asm, bits<8> funct> : MMDSPInst<instr_asm> { 176c03957f0SHrvoje Varga bits<5> rs; 177c03957f0SHrvoje Varga bits<2> ac; 178c03957f0SHrvoje Varga 179c03957f0SHrvoje Varga let Inst{31-26} = 0; 180c03957f0SHrvoje Varga let Inst{25-21} = 0; 181c03957f0SHrvoje Varga let Inst{20-16} = rs; 182c03957f0SHrvoje Varga let Inst{15-14} = ac; 183c03957f0SHrvoje Varga let Inst{13-6} = funct; 184c03957f0SHrvoje Varga let Inst{5-0} = 0b111100; 185c03957f0SHrvoje Varga} 186672b0f55SHrvoje Varga 187672b0f55SHrvoje Vargaclass POOL32A_1RMASK7_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { 188672b0f55SHrvoje Varga bits<5> rt; 189672b0f55SHrvoje Varga bits<7> mask; 190672b0f55SHrvoje Varga 191672b0f55SHrvoje Varga let Inst{31-26} = 0b000000; 192672b0f55SHrvoje Varga let Inst{25-21} = rt; 193672b0f55SHrvoje Varga let Inst{20-14} = mask; 194672b0f55SHrvoje Varga let Inst{13-6} = op; 195672b0f55SHrvoje Varga let Inst{5-0} = 0b111100; 196672b0f55SHrvoje Varga} 197672b0f55SHrvoje Varga 198672b0f55SHrvoje Vargaclass POOL32A_1RIMM10_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 199672b0f55SHrvoje Varga bits<5> rd; 200672b0f55SHrvoje Varga bits<10> imm; 201672b0f55SHrvoje Varga 202672b0f55SHrvoje Varga let Inst{31-26} = 0; 203672b0f55SHrvoje Varga let Inst{25-16} = imm; 204672b0f55SHrvoje Varga let Inst{15-11} = rd; 205672b0f55SHrvoje Varga let Inst{10} = 0; 206672b0f55SHrvoje Varga let Inst{9-0} = op; 207672b0f55SHrvoje Varga} 208672b0f55SHrvoje Varga 209672b0f55SHrvoje Vargaclass POOL32A_1RIMM8_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> { 210672b0f55SHrvoje Varga bits<5> rt; 211672b0f55SHrvoje Varga bits<8> imm; 212672b0f55SHrvoje Varga 213672b0f55SHrvoje Varga let Inst{31-26} = 0; 214672b0f55SHrvoje Varga let Inst{25-21} = rt; 215672b0f55SHrvoje Varga let Inst{20-13} = imm; 216672b0f55SHrvoje Varga let Inst{12} = 0; 217672b0f55SHrvoje Varga let Inst{11-6} = op; 218672b0f55SHrvoje Varga let Inst{5-0} = 0b111100; 219672b0f55SHrvoje Varga} 220252cca55SZlatko Buljan 221252cca55SZlatko Buljanclass POOL32A_4B0SHIFT6AC4B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 222252cca55SZlatko Buljan bits<6> shift; 223252cca55SZlatko Buljan bits<2> ac; 224252cca55SZlatko Buljan 225252cca55SZlatko Buljan let Inst{31-26} = 0b000000; 226252cca55SZlatko Buljan let Inst{25-22} = 0b0000; 227252cca55SZlatko Buljan let Inst{21-16} = shift; 228252cca55SZlatko Buljan let Inst{15-14} = ac; 229252cca55SZlatko Buljan let Inst{13-10} = 0b0000; 230252cca55SZlatko Buljan let Inst{9-0} = op; 231252cca55SZlatko Buljan} 232252cca55SZlatko Buljan 233252cca55SZlatko Buljanclass POOL32A_5B01RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { 234252cca55SZlatko Buljan bits<5> rs; 235252cca55SZlatko Buljan bits<2> ac; 236252cca55SZlatko Buljan 237252cca55SZlatko Buljan let Inst{31-26} = 0b000000; 238252cca55SZlatko Buljan let Inst{25-21} = 0b00000; 239252cca55SZlatko Buljan let Inst{20-16} = rs; 240252cca55SZlatko Buljan let Inst{15-14} = ac; 241252cca55SZlatko Buljan let Inst{13-6} = op; 242252cca55SZlatko Buljan let Inst{5-0} = 0b111100; 243252cca55SZlatko Buljan} 2446f09cdfdSHrvoje Varga 2456f09cdfdSHrvoje Vargaclass POOL32I_IMMB0_FMT<string opstr, bits<5> op> : MMDSPInst<opstr> { 2466f09cdfdSHrvoje Varga bits<16> offset; 2476f09cdfdSHrvoje Varga 2486f09cdfdSHrvoje Varga let Inst{31-26} = 0b010000; 2496f09cdfdSHrvoje Varga let Inst{25-21} = op; 2506f09cdfdSHrvoje Varga let Inst{20-16} = 0; 2516f09cdfdSHrvoje Varga let Inst{15-0} = offset; 252e9abe881SZlatko Buljan} 253e9abe881SZlatko Buljan 254e9abe881SZlatko Buljanclass POOL32A_2RBP_FMT<string opstr> : MMDSPInst<opstr> { 255e9abe881SZlatko Buljan bits<5> rt; 256e9abe881SZlatko Buljan bits<5> rs; 257e9abe881SZlatko Buljan bits<2> bp; 258e9abe881SZlatko Buljan 259e9abe881SZlatko Buljan let Inst{31-26} = 0; 260e9abe881SZlatko Buljan let Inst{25-21} = rt; 261e9abe881SZlatko Buljan let Inst{20-16} = rs; 262e9abe881SZlatko Buljan let Inst{15-14} = bp; 263e9abe881SZlatko Buljan let Inst{13-6} = 0b00100010; 264e9abe881SZlatko Buljan let Inst{5-0} = 0b111100; 265e9abe881SZlatko Buljan} 266e9abe881SZlatko Buljan 267e9abe881SZlatko Buljanclass POOL32A_2RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 268e9abe881SZlatko Buljan bits<5> rt; 269e9abe881SZlatko Buljan bits<5> rs; 270e9abe881SZlatko Buljan 271e9abe881SZlatko Buljan let Inst{31-26} = 0; 272e9abe881SZlatko Buljan let Inst{25-21} = rt; 273e9abe881SZlatko Buljan let Inst{20-16} = rs; 274e9abe881SZlatko Buljan let Inst{15-10} = 0; 275e9abe881SZlatko Buljan let Inst{9-0} = op; 276e9abe881SZlatko Buljan} 277e9abe881SZlatko Buljan 278e9abe881SZlatko Buljanclass POOL32S_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 279e9abe881SZlatko Buljan bits<5> rt; 280e9abe881SZlatko Buljan bits<5> rs; 281e9abe881SZlatko Buljan bits<5> rd; 282e9abe881SZlatko Buljan 283e9abe881SZlatko Buljan let Inst{31-26} = 0b010110; 284e9abe881SZlatko Buljan let Inst{25-21} = rt; 285e9abe881SZlatko Buljan let Inst{20-16} = rs; 286e9abe881SZlatko Buljan let Inst{15-11} = rd; 287e9abe881SZlatko Buljan let Inst{10} = 0b0; 288e9abe881SZlatko Buljan let Inst{9-0} = op; 289e9abe881SZlatko Buljan} 290e9abe881SZlatko Buljan 291e9abe881SZlatko Buljanclass POOL32A_2R2B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { 292e9abe881SZlatko Buljan bits<5> rt; 293e9abe881SZlatko Buljan bits<5> rs; 294e9abe881SZlatko Buljan 295e9abe881SZlatko Buljan let Inst{31-26} = 0; 296e9abe881SZlatko Buljan let Inst{25-21} = rt; 297e9abe881SZlatko Buljan let Inst{20-16} = rs; 298e9abe881SZlatko Buljan let Inst{15-11} = 0; 299e9abe881SZlatko Buljan let Inst{10} = 0; 300e9abe881SZlatko Buljan let Inst{9-0} = op; 3016f09cdfdSHrvoje Varga} 302