summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2012-08-24 20:52:44 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2012-08-24 20:52:44 +0000
commitb50cf8b30f490bd45b8a1f8b0849ef8a7c67dc23 (patch)
treedb3e3b4ef25604b8376c1af395d6f95207537c3e /llvm/lib/Target
parent10cdd09318eb5a074f31fec1a1087c88a229354d (diff)
downloadbcm5719-llvm-b50cf8b30f490bd45b8a1f8b0849ef8a7c67dc23.tar.gz
bcm5719-llvm-b50cf8b30f490bd45b8a1f8b0849ef8a7c67dc23.zip
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
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/X86/X86InstrControl.td7
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86InstrControl.td b/llvm/lib/Target/X86/X86InstrControl.td
index b0c27c88271..bfe954114c5 100644
--- a/llvm/lib/Target/X86/X86InstrControl.td
+++ b/llvm/lib/Target/X86/X86InstrControl.td
@@ -16,15 +16,18 @@
//
// 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,
hasCtrlDep = 1, FPForm = SpecialFP in {
- def RET : I <0xC3, RawFrm, (outs), (ins),
+ def RET : I <0xC3, RawFrm, (outs), (ins variable_ops),
"ret",
[(X86retflag 0)], IIC_RET>;
def RETW : I <0xC3, RawFrm, (outs), (ins),
"ret{w}",
[], 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",
[(X86retflag timm:$amt)], IIC_RET_IMM>;
def RETIW : Ii16<0xC2, RawFrm, (outs), (ins i16imm:$amt),
OpenPOWER on IntegriCloud