forked from OSchip/llvm-project
Mark X86::RET and RETI instructions as variadic.
There is special magic happening when returning floating point values on the x87 stack. The RET instructions get extra f80 operands. llvm-svn: 162592
This commit is contained in:
parent
10cdd09318
commit
b50cf8b30f
|
@ -16,15 +16,18 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
// Return instructions.
|
// Return instructions.
|
||||||
|
//
|
||||||
|
// The X86retflag return instructions are variadic because we may add ST0 and
|
||||||
|
// ST1 arguments when returning values on the x87 stack.
|
||||||
let isTerminator = 1, isReturn = 1, isBarrier = 1,
|
let isTerminator = 1, isReturn = 1, isBarrier = 1,
|
||||||
hasCtrlDep = 1, FPForm = SpecialFP in {
|
hasCtrlDep = 1, FPForm = SpecialFP in {
|
||||||
def RET : I <0xC3, RawFrm, (outs), (ins),
|
def RET : I <0xC3, RawFrm, (outs), (ins variable_ops),
|
||||||
"ret",
|
"ret",
|
||||||
[(X86retflag 0)], IIC_RET>;
|
[(X86retflag 0)], IIC_RET>;
|
||||||
def RETW : I <0xC3, RawFrm, (outs), (ins),
|
def RETW : I <0xC3, RawFrm, (outs), (ins),
|
||||||
"ret{w}",
|
"ret{w}",
|
||||||
[], IIC_RET>, OpSize;
|
[], IIC_RET>, OpSize;
|
||||||
def RETI : Ii16<0xC2, RawFrm, (outs), (ins i16imm:$amt),
|
def RETI : Ii16<0xC2, RawFrm, (outs), (ins i16imm:$amt, variable_ops),
|
||||||
"ret\t$amt",
|
"ret\t$amt",
|
||||||
[(X86retflag timm:$amt)], IIC_RET_IMM>;
|
[(X86retflag timm:$amt)], IIC_RET_IMM>;
|
||||||
def RETIW : Ii16<0xC2, RawFrm, (outs), (ins i16imm:$amt),
|
def RETIW : Ii16<0xC2, RawFrm, (outs), (ins i16imm:$amt),
|
||||||
|
|
Loading…
Reference in New Issue