[project @ 2002-03-12 16:48:52 by simonmar]
[ghc-hetmet.git] / ghc / compiler / nativeGen / MachCode.lhs
index 1806565..3c89799 100644 (file)
@@ -2752,6 +2752,10 @@ genCCall fn cconv ret_rep args
        | cconv == StdCallConv = '@':show tot_arg_size
        | otherwise            = ""
 
+    -- floats are always promoted to doubles when passed to a ccall
+    promote_size F  = DF
+    promote_size sz = sz
+
     arg_size DF = 8
     arg_size F  = 4
     arg_size _  = 4
@@ -2775,14 +2779,17 @@ genCCall fn cconv ret_rep args
       | otherwise
       = get_op arg                     `thenNat` \ (code, reg, sz) ->
         getDeltaNat                    `thenNat` \ delta ->
-        arg_size sz                    `bind`    \ size ->
+       let 
+               real_sz = promote_size sz
+               size    = arg_size real_sz
+       in
         setDeltaNat (delta-size)       `thenNat` \ _ ->
-        if   (case sz of DF -> True; F -> True; _ -> False)
+        if   (case real_sz of DF -> True; _ -> False)
         then returnNat (size,
                         code `appOL`
                         toOL [SUB L (OpImm (ImmInt size)) (OpReg esp),
                               DELTA (delta-size),
-                              GST sz reg (AddrBaseIndex (Just esp) 
+                              GST DF reg (AddrBaseIndex (Just esp) 
                                                         Nothing 
                                                         (ImmInt 0))]
                        )