SPARC NCG: Add jumps to end of blocks when working out condition codes
[ghc-hetmet.git] / compiler / nativeGen / SPARC / CodeGen / Gen32.hs
index 24df6b0..4ae87df 100644 (file)
@@ -188,10 +188,10 @@ getRegister (CmmMachOp mop [x, y])
       MO_S_Lt _                -> condIntReg LTT x y
       MO_S_Le _                -> condIntReg LE x y
              
-      MO_U_Gt W32      -> condIntReg GTT x y
-      MO_U_Ge W32      -> condIntReg GE x y
-      MO_U_Lt W32      -> condIntReg LTT x y
-      MO_U_Le W32      -> condIntReg LE x y
+      MO_U_Gt W32      -> condIntReg GU  x y
+      MO_U_Ge W32      -> condIntReg GEU x y
+      MO_U_Lt W32      -> condIntReg LU  x y
+      MO_U_Le W32      -> condIntReg LEU x y
 
       MO_U_Gt W16      -> condIntReg GU  x y
       MO_U_Ge W16      -> condIntReg GEU x y
@@ -642,13 +642,23 @@ condIntReg cond x y = do
     bid2@(BlockId _) <- getBlockIdNat
     CondCode _ cond cond_code <- condIntCode cond x y
     let
-       code__2 dst = cond_code `appOL` toOL [
-           BI cond False bid1, NOP,
-           OR False g0 (RIImm (ImmInt 0)) dst,
-           BI ALWAYS False bid2, NOP,
-           NEWBLOCK bid1,
-           OR False g0 (RIImm (ImmInt 1)) dst,
-           NEWBLOCK bid2]
+       code__2 dst 
+        =      cond_code 
+         `appOL` toOL 
+               [ BI cond False bid1
+               , NOP
+
+               , OR False g0 (RIImm (ImmInt 0)) dst
+               , BI ALWAYS False bid2
+               , NOP
+
+               , NEWBLOCK bid1
+               , OR False g0 (RIImm (ImmInt 1)) dst
+               , BI ALWAYS False bid2
+               , NOP
+
+               , NEWBLOCK bid2]
+
     return (Any II32 code__2)
 
 
@@ -659,12 +669,26 @@ condFltReg cond x y = do
 
     CondCode _ cond cond_code <- condFltCode cond x y
     let
-       code__2 dst = cond_code `appOL` toOL [ 
-           NOP,
-           BF cond False bid1, NOP,
-           OR False g0 (RIImm (ImmInt 0)) dst,
-           BI ALWAYS False bid2, NOP,
-           NEWBLOCK bid1,
-           OR False g0 (RIImm (ImmInt 1)) dst,
-           NEWBLOCK bid2]
+       code__2 dst 
+        =      cond_code 
+         `appOL` toOL 
+               [ NOP
+               , BF cond False bid1
+               , NOP
+
+               , OR False g0 (RIImm (ImmInt 0)) dst
+               , BI ALWAYS False bid2
+               , NOP
+
+               , NEWBLOCK bid1
+               , OR False g0 (RIImm (ImmInt 1)) dst
+               , BI ALWAYS False bid2
+               , NOP
+
+               , NEWBLOCK bid2 ]
+
     return (Any II32 code__2)
+
+
+
+