summaryrefslogtreecommitdiff
path: root/compiler/nativeGen/SPARC/CodeGen/Gen32.hs
diff options
context:
space:
mode:
authorBen.Lippmeier@anu.edu.au <unknown>2009-02-23 06:21:35 +0000
committerBen.Lippmeier@anu.edu.au <unknown>2009-02-23 06:21:35 +0000
commit5e048459a28b08601a203b25ae9ead6284e8198a (patch)
treeab168375efa3efc251f588fe98a3b8f88d2f4b1c /compiler/nativeGen/SPARC/CodeGen/Gen32.hs
parent724c086f69f2974212915f56fe809a61c7b5bfec (diff)
downloadhaskell-5e048459a28b08601a203b25ae9ead6284e8198a.tar.gz
SPARC NCG: Add jumps to end of blocks when working out condition codes
Diffstat (limited to 'compiler/nativeGen/SPARC/CodeGen/Gen32.hs')
-rw-r--r--compiler/nativeGen/SPARC/CodeGen/Gen32.hs54
1 files changed, 39 insertions, 15 deletions
diff --git a/compiler/nativeGen/SPARC/CodeGen/Gen32.hs b/compiler/nativeGen/SPARC/CodeGen/Gen32.hs
index eb302a7afe..4ae87df33d 100644
--- a/compiler/nativeGen/SPARC/CodeGen/Gen32.hs
+++ b/compiler/nativeGen/SPARC/CodeGen/Gen32.hs
@@ -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)
+
+
+
+