brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 2652407 Raw
86 lines · plain
1// RUN: llvm-tblgen -gen-disassembler -I %p/../../../include %s | FileCheck %s2 3include "llvm/Target/Target.td"4 5class Enc {6  int Size = 2;7  bits<16> Inst;8}9 10class EncSHIFT<bits<2> opc> : Enc {11  bits<6> shamt;12  let Inst{15...14} = {0, 0};13  let Inst{13...12} = opc;14  let Inst{11...6} = shamt;15}16 17class EncNOP<bits<2> opc> : Enc {18  let Inst{15...14} = {0, 0};19  let Inst{13...12} = opc;20  let Inst{11...6} = {0, 0, 0, 0, 0, 0};21}22 23def ShAmtOp : Operand<i32> {24  let DecoderMethod = "decodeShAmt";25  let hasCompleteDecoder = false;26}27 28class I<dag out_ops, dag in_ops> : Instruction {29  let InOperandList = in_ops;30  let OutOperandList = out_ops;31}32 33// CHECK-LABEL: static const uint8_t DecoderTable16[67] = {34// CHECK-NEXT:    OPC_SwitchField, 12, 4,      //  0: switch Inst[15:12] {35// CHECK-NEXT:    0, 14,                       //  3: case 0x0: {36// CHECK-NEXT:    OPC_Scope, 8,                //  5:  try {37// CHECK-NEXT:    OPC_CheckField, 6, 6, 0,     //  7:   check Inst[11:6] == 0x038// CHECK-NEXT:    OPC_Decode, {{[0-9, ]+}}, 0, // 11:   decode to NOP using decoder 039// CHECK-NEXT:                                 // 11:  } else try {40// CHECK-NEXT:    OPC_Decode, {{[0-9, ]+}}, 1, // 15:   decode to SHIFT0 using decoder 141// CHECK-NEXT:                                 // 15:  }42// CHECK-NEXT:                                 // 15: }43// CHECK-NEXT:    1, 14,                       // 19: case 0x1: {44// CHECK-NEXT:    OPC_Scope, 8,                // 21:  try {45// CHECK-NEXT:    OPC_CheckField, 6, 6, 0,     // 23:   check Inst[11:6] == 0x046// CHECK-NEXT:    OPC_Decode, {{[0-9, ]+}}, 0, // 27:   decode to {{.*}}:NOP using decoder 047// CHECK-NEXT:                                 // 27:  } else try {48// CHECK-NEXT:    OPC_Decode, {{[0-9, ]+}}, 1, // 31:   decode to SHIFT1 using decoder 149// CHECK-NEXT:                                 // 31:  }50// CHECK-NEXT:                                 // 31: }51// CHECK-NEXT:    2, 14,                       // 35: case 0x2: {52// CHECK-NEXT:    OPC_Scope, 8,                // 37:  try {53// CHECK-NEXT:    OPC_CheckField, 6, 6, 0,     // 39:   check Inst[11:6] == 0x054// CHECK-NEXT:    OPC_Decode, {{[0-9, ]+}}, 0, // 43:   decode to {{.*}}:NOP using decoder 055// CHECK-NEXT:                                 // 43:  } else try {56// CHECK-NEXT:    OPC_Decode, {{[0-9, ]+}}, 1, // 47:   decode to SHIFT2 using decoder 157// CHECK-NEXT:                                 // 47:  }58// CHECK-NEXT:                                 // 47: }59// CHECK-NEXT:    3, 0,                        // 51: case 0x3: {60// CHECK-NEXT:    OPC_Scope, 8,                // 53:  try {61// CHECK-NEXT:    OPC_CheckField, 6, 6, 0,     // 55:   check Inst[11:6] == 0x062// CHECK-NEXT:    OPC_Decode, {{[0-9, ]+}}, 0, // 59:   decode to {{.*}}:NOP using decoder 063// CHECK-NEXT:                                 // 59:  } else try {64// CHECK-NEXT:    OPC_Decode, {{[0-9, ]+}}, 1, // 63:   decode to SHIFT3 using decoder 165// CHECK-NEXT:                                 // 63:  }66// CHECK-NEXT:                                 // 63: }67// CHECK-NEXT:                                 // 63: } // switch Inst[15:12]68// CHECK-NEXT:  };69 70class SHIFT<bits<2> opc> : I<(outs), (ins ShAmtOp:$shamt)>, EncSHIFT<opc>;71def SHIFT0 : SHIFT<0>;72def SHIFT1 : SHIFT<1>;73def SHIFT2 : SHIFT<2>;74def SHIFT3 : SHIFT<3>;75 76def NOP : I<(outs), (ins)>, EncNOP<0>;77def : AdditionalEncoding<NOP>, EncNOP<1>;78def : AdditionalEncoding<NOP>, EncNOP<2>;79def : AdditionalEncoding<NOP>, EncNOP<3>;80 81def II : InstrInfo;82 83def MyTarget : Target {84  let InstructionSet = II;85}86