[project @ 2003-02-08 20:14:19 by wolfgang]
[ghc-hetmet.git] / ghc / compiler / nativeGen / MachCode.lhs
index 1910ef1..ffb603e 100644 (file)
@@ -1565,7 +1565,6 @@ getRegister (StMachOp mop [x]) -- unary MachOps
   = case mop of
       MO_NatS_Neg  -> trivialUCode NEG x
       MO_Nat_Not   -> trivialUCode NOT x
-      -- MO_32U_to_8U -> trivialUCode (AND (RIImm (ImmInt 255))) x
       MO_32U_to_8U     -> trivialCode AND x (StInt 255)
 
       MO_Flt_to_NatS -> coerceFP2Int FloatRep x
@@ -1573,7 +1572,7 @@ getRegister (StMachOp mop [x]) -- unary MachOps
       MO_Dbl_to_NatS -> coerceFP2Int DoubleRep x
       MO_NatS_to_Dbl -> coerceInt2FP DoubleRep x
 
-      -- Conversions which are a nop on x86
+      -- Conversions which are a nop on PPC
       MO_NatS_to_32U  -> conversionNop WordRep   x
       MO_32U_to_NatS  -> conversionNop IntRep    x
       MO_32U_to_NatU  -> conversionNop WordRep   x
@@ -2497,6 +2496,9 @@ assignReg_IntCode pk reg src
     getRegister src                `thenNat` \ registers ->
     getNewRegNCG IntRep            `thenNat` \ tmp ->
     let 
+        r_dst = registerName registerd tmp
+        r_src = registerName registers r_dst
+        c_src = registerCode registers r_dst
          
         code = c_src `snocOL` 
                MOV L (OpReg r_src) (OpReg r_dst)
@@ -3471,7 +3473,7 @@ genCCall fn cconv kind args
        (argReps,argCodes,vregs) = unzip3 preppedArgs
 
            -- size of linkage area + size of arguments, in bytes
-       stackDelta = roundTo16 $ (24 +) $ (4 *) $ sum $ map getPrimRepSize argReps
+       stackDelta = roundTo16 $ (24 +) $ max 32 $ (4 *) $ sum $ map getPrimRepSize argReps
        roundTo16 x | x `mod` 16 == 0 = x
                    | otherwise = x + 16 - (x `mod` 16)
 
@@ -4211,7 +4213,7 @@ trivialFCode pk instr x y
        code__2 dst =
                if pk1 == pk2 then
                    code1 `appOL` code2 `snocOL`
-                   instr (primRepToSize pk) src1 src2 dst
+                   instr (primRepToSize pk) dst src1 src2
                else panic "###PPC MachCode.trivialFCode: type mismatch"
     in
     returnNat (Any (if pk1 == pk2 then pk1 else DoubleRep) code__2)