mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
b28dc096d7
Summary: There are various places where resolving and constant folds can get stuck, especially around casts. We don't always signal an error for those, because in many cases they can legitimately occur without being an error in the "untaken branch" of an !if. Change-Id: I3befc0e4234c8e6cc61190504702918c9f29ce5c Reviewers: arsenm, craig.topper, tra, MartinO Subscribers: wdng, llvm-commits Differential Revision: https://reviews.llvm.org/D43754 llvm-svn: 326786
65 lines
1.7 KiB
TableGen
65 lines
1.7 KiB
TableGen
// RUN: llvm-tblgen -gen-disassembler -I %p/../../include %s | FileCheck %s
|
|
|
|
include "llvm/Target/Target.td"
|
|
|
|
def archInstrInfo : InstrInfo { }
|
|
|
|
def arch : Target {
|
|
let InstructionSet = archInstrInfo;
|
|
}
|
|
|
|
def Myi32 : Operand<i32> {
|
|
let DecoderMethod = "DecodeMyi32";
|
|
}
|
|
|
|
|
|
let OutOperandList = (outs), Size = 2 in {
|
|
|
|
def foo : Instruction {
|
|
let InOperandList = (ins i32imm:$factor);
|
|
field bits<16> Inst;
|
|
bits<32> factor;
|
|
let Inst{7-0} = 0xAA;
|
|
let Inst{14-8} = factor{6-0}; // no offset
|
|
let AsmString = "foo $factor";
|
|
field bits<16> SoftFail = 0;
|
|
}
|
|
|
|
def bar : Instruction {
|
|
let InOperandList = (ins i32imm:$factor);
|
|
field bits<16> Inst;
|
|
bits<32> factor;
|
|
let Inst{7-0} = 0xBB;
|
|
let Inst{15-8} = factor{10-3}; // offset by 3
|
|
let AsmString = "bar $factor";
|
|
field bits<16> SoftFail = 0;
|
|
}
|
|
|
|
def biz : Instruction {
|
|
let InOperandList = (ins i32imm:$factor);
|
|
field bits<16> Inst;
|
|
bits<32> factor;
|
|
let Inst{7-0} = 0xCC;
|
|
let Inst{11-8,15-12} = factor{10-3}; // offset by 3, multipart
|
|
let AsmString = "biz $factor";
|
|
field bits<16> SoftFail = 0;
|
|
}
|
|
|
|
def baz : Instruction {
|
|
let InOperandList = (ins Myi32:$factor);
|
|
field bits<16> Inst;
|
|
bits<32> factor;
|
|
let Inst{7-0} = 0xDD;
|
|
let Inst{15-8} = factor{11-4}; // offset by 4 + custom decode
|
|
let AsmString = "baz $factor";
|
|
field bits<16> SoftFail = 0;
|
|
}
|
|
|
|
}
|
|
|
|
// CHECK: tmp = fieldFromInstruction(insn, 8, 7);
|
|
// CHECK: tmp = fieldFromInstruction(insn, 8, 8) << 3;
|
|
// CHECK: tmp |= fieldFromInstruction(insn, 8, 4) << 7;
|
|
// CHECK: tmp |= fieldFromInstruction(insn, 12, 4) << 3;
|
|
// CHECK: tmp = fieldFromInstruction(insn, 8, 8) << 4;
|