summaryrefslogtreecommitdiff
path: root/compiler/nativeGen/PPC/CodeGen.hs
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2012-02-23 19:57:57 +0000
committerIan Lynagh <igloo@earth.li>2012-02-23 19:59:20 +0000
commit98acdf083c119b018f25097593668a816dc68068 (patch)
tree3ed98b700e687ed988519d54b574096e949a214e /compiler/nativeGen/PPC/CodeGen.hs
parent7d8b2c18eeb166ea64504fb3a8022edd6b36e870 (diff)
downloadhaskell-98acdf083c119b018f25097593668a816dc68068.tar.gz
Add a Word add-with-carry primop
No special-casing in any NCGs yet
Diffstat (limited to 'compiler/nativeGen/PPC/CodeGen.hs')
-rw-r--r--compiler/nativeGen/PPC/CodeGen.hs13
1 files changed, 6 insertions, 7 deletions
diff --git a/compiler/nativeGen/PPC/CodeGen.hs b/compiler/nativeGen/PPC/CodeGen.hs
index 169cd0cac4..9974fb582b 100644
--- a/compiler/nativeGen/PPC/CodeGen.hs
+++ b/compiler/nativeGen/PPC/CodeGen.hs
@@ -42,7 +42,6 @@ import Platform
import BlockId
import PprCmm ( pprExpr )
import OldCmm
-import OldCmmUtils
import CLabel
-- The rest:
@@ -899,12 +898,11 @@ genCCall'
-}
-genCCall' _ (CmmPrim MO_WriteBarrier) _ _
+genCCall' _ (CmmPrim MO_WriteBarrier _) _ _
= return $ unitOL LWSYNC
-genCCall' _ (CmmPrim op) results args
- | Just stmts <- expandCallishMachOp op results args
- = stmtsToInstrs stmts
+genCCall' _ (CmmPrim _ (Just mkStmts)) results args
+ = stmtsToInstrs (mkStmts results args)
genCCall' gcp target dest_regs argsAndHints
= ASSERT (not $ any (`elem` [II16]) $ map cmmTypeSize argReps)
@@ -919,7 +917,7 @@ genCCall' gcp target dest_regs argsAndHints
(labelOrExpr, reduceToFF32) <- case target of
CmmCallee (CmmLit (CmmLabel lbl)) _ -> return (Left lbl, False)
CmmCallee expr _ -> return (Right expr, False)
- CmmPrim mop -> outOfLineMachOp mop
+ CmmPrim mop _ -> outOfLineMachOp mop
let codeBefore = move_sp_down finalStack `appOL` passArgumentsCode
codeAfter = move_sp_up finalStack `appOL` moveResult reduceToFF32
@@ -948,7 +946,7 @@ genCCall' gcp target dest_regs argsAndHints
GCPLinux -> roundTo 16 finalStack
-- need to remove alignment information
- argsAndHints' | (CmmPrim mop) <- target,
+ argsAndHints' | (CmmPrim mop _) <- target,
(mop == MO_Memcpy ||
mop == MO_Memset ||
mop == MO_Memmove)
@@ -1149,6 +1147,7 @@ genCCall' gcp target dest_regs argsAndHints
MO_S_QuotRem {} -> unsupported
MO_U_QuotRem {} -> unsupported
+ MO_Add2 {} -> unsupported
MO_WriteBarrier -> unsupported
MO_Touch -> unsupported
unsupported = panic ("outOfLineCmmOp: " ++ show mop