|  | //===-- MicroMipsDSPInstrFormats.td - Instruction Formats --*- tablegen -*-===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | class MMDSPInst<string opstr = ""> | 
|  | : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther> { | 
|  | let ASEPredicate = [HasDSP]; | 
|  | let EncodingPredicates = [InMicroMips]; | 
|  | string BaseOpcode = opstr; | 
|  | string Arch = "mmdsp"; | 
|  | let DecoderNamespace = "MicroMips"; | 
|  | } | 
|  |  | 
|  | class MMDSPInstAlias<string Asm, dag Result, bit Emit = 0b1> | 
|  | : InstAlias<Asm, Result, Emit>, PredicateControl { | 
|  | let ASEPredicate = [HasDSP]; | 
|  | let AdditionalPredicates = [InMicroMips]; | 
|  | } | 
|  |  | 
|  | class POOL32A_3R_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { | 
|  | bits<5> rd; | 
|  | bits<5> rs; | 
|  | bits<5> rt; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-11} = rd; | 
|  | let Inst{10-0}  = op; | 
|  | } | 
|  |  | 
|  | class POOL32A_2R_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-6}  = op; | 
|  | let Inst{5-0}   = 0b111100; | 
|  | } | 
|  |  | 
|  | class POOL32A_2RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  | bits<2> ac; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-14} = ac; | 
|  | let Inst{13-6}  = op; | 
|  | let Inst{5-0}   = 0b111100; | 
|  | } | 
|  |  | 
|  | class POOL32A_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { | 
|  | bits<5> rd; | 
|  | bits<5> rs; | 
|  | bits<5> rt; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-11} = rd; | 
|  | let Inst{10}    = 0b0; | 
|  | let Inst{9-0}   = op; | 
|  | } | 
|  |  | 
|  | class POOL32A_2RSA4_FMT<string opstr, bits<12> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  | bits<4> sa; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-12} = sa; | 
|  | let Inst{11-0}  = op; | 
|  | } | 
|  |  | 
|  | class POOL32A_2RSA3_FMT<string opstr, bits<7> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  | bits<3> sa; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-13} = sa; | 
|  | let Inst{12-6}  = op; | 
|  | let Inst{5-0}   = 0b111100; | 
|  | } | 
|  |  | 
|  | class POOL32A_2RSA5B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  | bits<5> sa; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-11} = sa; | 
|  | let Inst{10}    = 0b0; | 
|  | let Inst{9-0}   = op; | 
|  | } | 
|  |  | 
|  | class POOL32A_2RSA4B0_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  | bits<4> sa; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-12} = sa; | 
|  | let Inst{11}    = 0b0; | 
|  | let Inst{10-0}  = op; | 
|  | } | 
|  |  | 
|  | class POOL32A_2RSA4OP6_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  | bits<4> sa; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-12} = sa; | 
|  | let Inst{11-6}  = op; | 
|  | let Inst{5-0}   = 0b111100; | 
|  | } | 
|  |  | 
|  | class POOL32A_1RIMM5AC_FMT<string opstr, bits<8> funct> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> imm; | 
|  | bits<2> ac; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = imm; | 
|  | let Inst{15-14} = ac; | 
|  | let Inst{13-6}  = funct; | 
|  | let Inst{5-0}   = 0b111100; | 
|  | } | 
|  |  | 
|  | class POOL32A_2RSA5_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  | bits<5> sa; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-11} = sa; | 
|  | let Inst{10-0}  = op; | 
|  | } | 
|  |  | 
|  | class POOL32A_1RMEMB0_FMT<string opstr, bits<10> funct> : MMDSPInst<opstr> { | 
|  | bits<5> index; | 
|  | bits<5> base; | 
|  | bits<5> rd; | 
|  |  | 
|  | let Inst{31-26} = 0; | 
|  | let Inst{25-21} = index; | 
|  | let Inst{20-16} = base; | 
|  | let Inst{15-11} = rd; | 
|  | let Inst{10}    = 0b0; | 
|  | let Inst{9-0}   = funct; | 
|  | } | 
|  |  | 
|  | class POOL32A_1RAC_FMT<string instr_asm, bits<8> funct> : MMDSPInst<instr_asm> { | 
|  | bits<5> rs; | 
|  | bits<2> ac; | 
|  |  | 
|  | let Inst{31-26} = 0; | 
|  | let Inst{25-21} = 0; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-14} = ac; | 
|  | let Inst{13-6}  = funct; | 
|  | let Inst{5-0}   = 0b111100; | 
|  | } | 
|  |  | 
|  | class POOL32A_1RMASK7_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<7> mask; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-14} = mask; | 
|  | let Inst{13-6}  = op; | 
|  | let Inst{5-0}   = 0b111100; | 
|  | } | 
|  |  | 
|  | class POOL32A_1RIMM10_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { | 
|  | bits<5> rd; | 
|  | bits<10> imm; | 
|  |  | 
|  | let Inst{31-26} = 0; | 
|  | let Inst{25-16} = imm; | 
|  | let Inst{15-11} = rd; | 
|  | let Inst{10}    = 0; | 
|  | let Inst{9-0}   = op; | 
|  | } | 
|  |  | 
|  | class POOL32A_1RIMM8_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<8> imm; | 
|  |  | 
|  | let Inst{31-26} = 0; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-13} = imm; | 
|  | let Inst{12}    = 0; | 
|  | let Inst{11-6}  = op; | 
|  | let Inst{5-0}   = 0b111100; | 
|  | } | 
|  |  | 
|  | class POOL32A_4B0SHIFT6AC4B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { | 
|  | bits<6> shift; | 
|  | bits<2> ac; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-22} = 0b0000; | 
|  | let Inst{21-16} = shift; | 
|  | let Inst{15-14} = ac; | 
|  | let Inst{13-10} = 0b0000; | 
|  | let Inst{9-0}   = op; | 
|  | } | 
|  |  | 
|  | class POOL32A_5B01RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> { | 
|  | bits<5> rs; | 
|  | bits<2> ac; | 
|  |  | 
|  | let Inst{31-26} = 0b000000; | 
|  | let Inst{25-21} = 0b00000; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-14} = ac; | 
|  | let Inst{13-6}  = op; | 
|  | let Inst{5-0}   = 0b111100; | 
|  | } | 
|  |  | 
|  | class POOL32I_IMMB0_FMT<string opstr, bits<5> op> : MMDSPInst<opstr> { | 
|  | bits<16> offset; | 
|  |  | 
|  | let Inst{31-26} = 0b010000; | 
|  | let Inst{25-21} = op; | 
|  | let Inst{20-16} = 0; | 
|  | let Inst{15-0}  = offset; | 
|  | } | 
|  |  | 
|  | class POOL32A_2RBP_FMT<string opstr> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  | bits<2> bp; | 
|  |  | 
|  | let Inst{31-26} = 0; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-14} = bp; | 
|  | let Inst{13-6}  = 0b00100010; | 
|  | let Inst{5-0}   = 0b111100; | 
|  | } | 
|  |  | 
|  | class POOL32A_2RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  |  | 
|  | let Inst{31-26} = 0; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-10} = 0; | 
|  | let Inst{9-0}   = op; | 
|  | } | 
|  |  | 
|  | class POOL32S_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  | bits<5> rd; | 
|  |  | 
|  | let Inst{31-26} = 0b010110; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-11} = rd; | 
|  | let Inst{10}    = 0b0; | 
|  | let Inst{9-0}   = op; | 
|  | } | 
|  |  | 
|  | class POOL32A_2R2B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> { | 
|  | bits<5> rt; | 
|  | bits<5> rs; | 
|  |  | 
|  | let Inst{31-26} = 0; | 
|  | let Inst{25-21} = rt; | 
|  | let Inst{20-16} = rs; | 
|  | let Inst{15-11} = 0; | 
|  | let Inst{10}    = 0; | 
|  | let Inst{9-0}   = op; | 
|  | } |