forked from OSchip/llvm-project
Port operand types for ARM and X86 over from EDIS to the .td files.
llvm-svn: 135198
This commit is contained in:
parent
c8dc46bc01
commit
9654eef493
|
@ -314,16 +314,19 @@ def fsub_mlx : PatFrag<(ops node:$lhs, node:$rhs),(fsub node:$lhs, node:$rhs),[{
|
|||
// FIXME: rename brtarget to t2_brtarget
|
||||
def brtarget : Operand<OtherVT> {
|
||||
let EncoderMethod = "getBranchTargetOpValue";
|
||||
let OperandType = "OPERAND_PCREL";
|
||||
}
|
||||
|
||||
// FIXME: get rid of this one?
|
||||
def uncondbrtarget : Operand<OtherVT> {
|
||||
let EncoderMethod = "getUnconditionalBranchTargetOpValue";
|
||||
let OperandType = "OPERAND_PCREL";
|
||||
}
|
||||
|
||||
// Branch target for ARM. Handles conditional/unconditional
|
||||
def br_target : Operand<OtherVT> {
|
||||
let EncoderMethod = "getARMBranchTargetOpValue";
|
||||
let OperandType = "OPERAND_PCREL";
|
||||
}
|
||||
|
||||
// Call target.
|
||||
|
@ -331,6 +334,7 @@ def br_target : Operand<OtherVT> {
|
|||
def bltarget : Operand<i32> {
|
||||
// Encoded the same as branch targets.
|
||||
let EncoderMethod = "getBranchTargetOpValue";
|
||||
let OperandType = "OPERAND_PCREL";
|
||||
}
|
||||
|
||||
// Call target for ARM. Handles conditional/unconditional
|
||||
|
@ -338,6 +342,7 @@ def bltarget : Operand<i32> {
|
|||
def bl_target : Operand<i32> {
|
||||
// Encoded the same as branch targets.
|
||||
let EncoderMethod = "getARMBranchTargetOpValue";
|
||||
let OperandType = "OPERAND_PCREL";
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -168,11 +168,13 @@ def ssmem : Operand<v4f32> {
|
|||
let PrintMethod = "printf32mem";
|
||||
let MIOperandInfo = (ops ptr_rc, i8imm, ptr_rc_nosp, i32imm, i8imm);
|
||||
let ParserMatchClass = X86MemAsmOperand;
|
||||
let OperandType = "OPERAND_MEMORY";
|
||||
}
|
||||
def sdmem : Operand<v2f64> {
|
||||
let PrintMethod = "printf64mem";
|
||||
let MIOperandInfo = (ops ptr_rc, i8imm, ptr_rc_nosp, i32imm, i8imm);
|
||||
let ParserMatchClass = X86MemAsmOperand;
|
||||
let OperandType = "OPERAND_MEMORY";
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -251,6 +251,7 @@ class X86MemOperand<string printMethod> : Operand<iPTR> {
|
|||
let ParserMatchClass = X86MemAsmOperand;
|
||||
}
|
||||
|
||||
let OperandType = "OPERAND_MEMORY" in {
|
||||
def opaque32mem : X86MemOperand<"printopaquemem">;
|
||||
def opaque48mem : X86MemOperand<"printopaquemem">;
|
||||
def opaque80mem : X86MemOperand<"printopaquemem">;
|
||||
|
@ -267,6 +268,7 @@ def f64mem : X86MemOperand<"printf64mem">;
|
|||
def f80mem : X86MemOperand<"printf80mem">;
|
||||
def f128mem : X86MemOperand<"printf128mem">;
|
||||
def f256mem : X86MemOperand<"printf256mem">;
|
||||
}
|
||||
|
||||
// A version of i8mem for use on x86-64 that uses GR64_NOREX instead of
|
||||
// plain GR64, so that it doesn't potentially require a REX prefix.
|
||||
|
@ -274,6 +276,7 @@ def i8mem_NOREX : Operand<i64> {
|
|||
let PrintMethod = "printi8mem";
|
||||
let MIOperandInfo = (ops GR64_NOREX, i8imm, GR64_NOREX_NOSP, i32imm, i8imm);
|
||||
let ParserMatchClass = X86MemAsmOperand;
|
||||
let OperandType = "OPERAND_MEMORY";
|
||||
}
|
||||
|
||||
// GPRs available for tailcall.
|
||||
|
@ -287,6 +290,7 @@ def i32mem_TC : Operand<i32> {
|
|||
let PrintMethod = "printi32mem";
|
||||
let MIOperandInfo = (ops GR32_TC, i8imm, GR32_TC, i32imm, i8imm);
|
||||
let ParserMatchClass = X86MemAsmOperand;
|
||||
let OperandType = "OPERAND_MEMORY";
|
||||
}
|
||||
|
||||
// Special i64mem for addresses of load folding tail calls. These are not
|
||||
|
@ -297,9 +301,11 @@ def i64mem_TC : Operand<i64> {
|
|||
let MIOperandInfo = (ops ptr_rc_tailcall, i8imm,
|
||||
ptr_rc_tailcall, i32imm, i8imm);
|
||||
let ParserMatchClass = X86MemAsmOperand;
|
||||
let OperandType = "OPERAND_MEMORY";
|
||||
}
|
||||
|
||||
let ParserMatchClass = X86AbsMemAsmOperand,
|
||||
let OperandType = "OPERAND_PCREL",
|
||||
ParserMatchClass = X86AbsMemAsmOperand,
|
||||
PrintMethod = "print_pcrel_imm" in {
|
||||
def i32imm_pcrel : Operand<i32>;
|
||||
def i16imm_pcrel : Operand<i16>;
|
||||
|
@ -317,6 +323,7 @@ def brtarget8 : Operand<OtherVT>;
|
|||
|
||||
def SSECC : Operand<i8> {
|
||||
let PrintMethod = "printSSECC";
|
||||
let OperandType = "OPERAND_IMMEDIATE";
|
||||
}
|
||||
|
||||
class ImmSExtAsmOperandClass : AsmOperandClass {
|
||||
|
@ -363,15 +370,18 @@ def ImmSExti64i8AsmOperand : ImmSExtAsmOperandClass {
|
|||
// 16-bits but only 8 bits are significant.
|
||||
def i16i8imm : Operand<i16> {
|
||||
let ParserMatchClass = ImmSExti16i8AsmOperand;
|
||||
let OperandType = "OPERAND_IMMEDIATE";
|
||||
}
|
||||
// 32-bits but only 8 bits are significant.
|
||||
def i32i8imm : Operand<i32> {
|
||||
let ParserMatchClass = ImmSExti32i8AsmOperand;
|
||||
let OperandType = "OPERAND_IMMEDIATE";
|
||||
}
|
||||
|
||||
// 64-bits but only 32 bits are significant.
|
||||
def i64i32imm : Operand<i64> {
|
||||
let ParserMatchClass = ImmSExti64i32AsmOperand;
|
||||
let OperandType = "OPERAND_IMMEDIATE";
|
||||
}
|
||||
|
||||
// 64-bits but only 32 bits are significant, and those bits are treated as being
|
||||
|
|
Loading…
Reference in New Issue