summaryrefslogtreecommitdiff
path: root/compiler/nativeGen
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2012-03-21 23:47:59 +0000
committerIan Lynagh <igloo@earth.li>2012-03-21 23:47:59 +0000
commit1dee0bbad9ebd94d3690d178a1b882db3ed6def6 (patch)
tree6691c5fdd7bdaf2b7a5e9be9c63e3710a1bb869a /compiler/nativeGen
parent7641d6160a049252e402ea2b2864969a839ce711 (diff)
downloadhaskell-1dee0bbad9ebd94d3690d178a1b882db3ed6def6.tar.gz
Implement the Adjustor for Win64
Diffstat (limited to 'compiler/nativeGen')
-rw-r--r--compiler/nativeGen/X86/CodeGen.hs8
1 files changed, 6 insertions, 2 deletions
diff --git a/compiler/nativeGen/X86/CodeGen.hs b/compiler/nativeGen/X86/CodeGen.hs
index 8e66bff349..be07078c1a 100644
--- a/compiler/nativeGen/X86/CodeGen.hs
+++ b/compiler/nativeGen/X86/CodeGen.hs
@@ -2110,10 +2110,14 @@ genCCall64' platform target dest_regs args = do
load_args_win ((CmmHinted arg _) : rest) usedInt usedFP
((ireg, freg) : regs) code
| isFloatType arg_rep = do
- -- XXX Should also set ireg?
arg_code <- getAnyReg arg
load_args_win rest (ireg : usedInt) (freg : usedFP) regs
- (code `appOL` arg_code freg)
+ (code `appOL`
+ arg_code freg `snocOL`
+ -- If we are calling a varargs function
+ -- then we need to define ireg as well
+ -- as freg
+ MOV II64 (OpReg freg) (OpReg ireg))
| otherwise = do
arg_code <- getAnyReg arg
load_args_win rest (ireg : usedInt) usedFP regs