| // RUN: not llvm-tblgen -gen-disassembler -I %p/../../../include %s -o - 2>%t | |
| // RUN: FileCheck %s < %t | |
| include "llvm/Target/Target.td" | |
| def MyTargetISA : InstrInfo; | |
| def MyTarget : Target { let InstructionSet = MyTargetISA; } | |
| def R0 : Register<"r0"> { let Namespace = "MyTarget"; } | |
| def GPR32 : RegisterClass<"MyTarget", [i32], 32, (add R0)>; | |
| def X0 : Register<"x0"> { let Namespace = "MyTarget"; } | |
| def GPR64 : RegisterClass<"MyTarget", [i64], 64, (add X0)>; | |
| class I<dag OOps, dag IOps, list<dag> Pat> | |
| : Instruction { | |
| let Namespace = "MyTarget"; | |
| let OutOperandList = OOps; | |
| let InOperandList = IOps; | |
| let Pattern = Pat; | |
| let Size = 4; | |
| bits<32> Inst; | |
| bits<32> SoftFail; | |
| } | |
| // Assume there is a 2 bit encoding for the dst and src register. | |
| def A : I<(outs GPR32:$dst), (ins GPR32:$src1), []> { | |
| bits<2> dst; | |
| bits<2> src1; | |
| let Inst{31...4} = 0; | |
| let Inst{1...0} = dst; | |
| let Inst{3...2} = src1; | |
| } | |
| def B : I<(outs GPR32:$dst), (ins GPR32:$src1), []> { | |
| bits<2> dst; | |
| bits<2> src1; | |
| let Inst{31...4} = 0; | |
| let Inst{1...0} = dst; | |
| let Inst{3...2} = src1; | |
| } | |
| def C : I<(outs GPR64:$dst), (ins GPR64:$src1), []> { | |
| bits<2> dst; | |
| bits<2> src1; | |
| let Inst{31...4} = 1; | |
| let Inst{1...0} = dst; | |
| let Inst{3...2} = src1; | |
| } | |
| def D : I<(outs GPR64:$dst), (ins GPR64:$src1), []> { | |
| bits<2> dst; | |
| bits<2> src1; | |
| let Inst{31...4} = 1; | |
| let Inst{1...0} = dst; | |
| let Inst{3...2} = src1; | |
| } | |
| // CHECK: Decoding Conflict: | |
| // CHECK: ................................ | |
| // CHECK: 0000000000000000000000000000.... | |
| // CHECK: 0000000000000000000000000000____ A | |
| // CHECK: 0000000000000000000000000000____ B | |
| // CHECK: Decoding Conflict: | |
| // CHECK: ................................ | |
| // CHECK: 0000000000000000000000000001.... | |
| // CHECK: 0000000000000000000000000001____ C | |
| // CHECK: 0000000000000000000000000001____ D | |
| // CHECK: Decoding conflict encountered |