mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-01 15:21:00 +00:00
91fd65c3a6
Summary: The `"patchable-function"` attribute can be used by an LLVM client to influence LLVM's code generation in ways that makes the generated code easily patchable at runtime (for instance, to redirect control). Right now only one patchability scheme is supported, `"prologue-short-redirect"`, but this can be expanded in the future. Reviewers: joker.eph, rnk, echristo, dberris Subscribers: joker.eph, echristo, mcrosier, llvm-commits Differential Revision: http://reviews.llvm.org/D19046 llvm-svn: 266715
45 lines
1.6 KiB
TableGen
45 lines
1.6 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;
|
|
}
|
|
|
|
class TestInstruction : Instruction {
|
|
let Size = 1;
|
|
let OutOperandList = (outs);
|
|
let InOperandList = (ins);
|
|
field bits<8> Inst;
|
|
field bits<8> SoftFail = 0;
|
|
}
|
|
|
|
def InstA : TestInstruction {
|
|
let Inst = {0,0,0,0,0,0,?,?};
|
|
let AsmString = "InstA";
|
|
let DecoderMethod = "DecodeInstA";
|
|
let hasCompleteDecoder = 0;
|
|
}
|
|
|
|
def InstB : TestInstruction {
|
|
let Inst = {0,0,0,?,?,0,1,1};
|
|
let AsmString = "InstB";
|
|
let DecoderMethod = "DecodeInstB";
|
|
let hasCompleteDecoder = 0;
|
|
}
|
|
|
|
// CHECK: /* 0 */ MCD::OPC_ExtractField, 2, 1, // Inst{2} ...
|
|
// CHECK-NEXT: /* 3 */ MCD::OPC_FilterValue, 0, 29, 0, // Skip to: 36
|
|
// CHECK-NEXT: /* 7 */ MCD::OPC_ExtractField, 5, 3, // Inst{7-5} ...
|
|
// CHECK-NEXT: /* 10 */ MCD::OPC_FilterValue, 0, 22, 0, // Skip to: 36
|
|
// CHECK-NEXT: /* 14 */ MCD::OPC_CheckField, 0, 2, 3, 5, 0, // Skip to: 25
|
|
// CHECK-NEXT: /* 20 */ MCD::OPC_TryDecode, 27, 0, 0, 0, // Opcode: InstB, skip to: 25
|
|
// CHECK-NEXT: /* 25 */ MCD::OPC_CheckField, 3, 2, 0, 5, 0, // Skip to: 36
|
|
// CHECK-NEXT: /* 31 */ MCD::OPC_TryDecode, 26, 1, 0, 0, // Opcode: InstA, skip to: 36
|
|
// CHECK-NEXT: /* 36 */ MCD::OPC_Fail,
|
|
|
|
// CHECK: if (DecodeInstB(MI, insn, Address, Decoder) == MCDisassembler::Fail) { DecodeComplete = false; return MCDisassembler::Fail; }
|
|
// CHECK: if (DecodeInstA(MI, insn, Address, Decoder) == MCDisassembler::Fail) { DecodeComplete = false; return MCDisassembler::Fail; }
|