diff --git a/ghc/compiler/nativeGen/MachCode.lhs b/ghc/compiler/nativeGen/MachCode.lhs
index 222cf09bc25a3754471adc5f0caab8ecc677acfc..599c132ba2c32645896cc5b04a8fcde5feef3a1f 100644
--- a/ghc/compiler/nativeGen/MachCode.lhs
+++ b/ghc/compiler/nativeGen/MachCode.lhs
@@ -2307,15 +2307,14 @@ genCCall fn cconv kind args
     get_call_arg arg old_sz
       = get_op arg		`thenUs` \ (code, reg, sz) ->
         let new_sz = old_sz + arg_size sz
-        in
-        case sz of
-           DF -> returnUs (new_sz,
+        in  if   (case sz of DF -> True; F -> True; _ -> False)
+            then returnUs (new_sz,
                            code .
-                           mkSeqInstr (GST DF reg
+                           mkSeqInstr (GST sz reg
                                               (AddrBaseIndex (Just esp) 
                                                   Nothing (ImmInt (- new_sz))))
                           )
-	   _  -> returnUs (new_sz,
+	    else returnUs (new_sz,
                            code . 
                            mkSeqInstr (MOV sz (OpReg reg)
                                               (OpAddr