x86_64 NCG: fix register usage for CALLs
authorwolfgang.thaller@gmx.net <unknown>
Wed, 29 Nov 2006 01:34:29 +0000 (01:34 +0000)
committerwolfgang.thaller@gmx.net <unknown>
Wed, 29 Nov 2006 01:34:29 +0000 (01:34 +0000)
For varargs calls, CALL reads the %al register; record that fact for the benefit of the
register allocator.
(There was a previous attempt to do this, but it was broken.)

compiler/nativeGen/MachCodeGen.hs
compiler/nativeGen/RegAllocInfo.hs

index 9dbe316..769d17b 100644 (file)
@@ -3164,7 +3164,7 @@ genCCall target dest_regs args vols = do
     let
        fp_regs_used  = reverse (drop (length fregs) (reverse allFPArgRegs))
        int_regs_used = reverse (drop (length aregs) (reverse allArgRegs))
-       arg_regs = int_regs_used ++ fp_regs_used
+       arg_regs = [eax] ++ int_regs_used ++ fp_regs_used
                -- for annotating the call instruction with
 
        sse_regs = length fp_regs_used
index 98c4e2d..df74218 100644 (file)
@@ -224,12 +224,6 @@ regUsage instr = case instr of
     _other             -> panic "regUsage: unrecognised instr"
 
  where
-#if x86_64_TARGET_ARCH
-       -- call parameters: include %eax, because it is used
-       -- to pass the number of SSE reg arguments to varargs fns.
-    params = eax : allArgRegs ++ allFPArgRegs
-#endif
-
     -- 2 operand form; first operand Read; second Written
     usageRW :: Operand -> Operand -> RegUsage
     usageRW op (OpReg reg) = mkRU (use_R op) [reg]