summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@well-typed.com>2022-06-23 12:21:33 -0400
committerZubin Duggal <zubin.duggal@gmail.com>2022-07-14 14:39:37 +0530
commitae114f51337c734444ddf1295f26442d9d7fcb43 (patch)
tree86c848cc81b7c5bc0969848169c0e33a34ea802a
parent60bce16eb1cdab8eeb23ff0522395647d190e833 (diff)
downloadhaskell-ae114f51337c734444ddf1295f26442d9d7fcb43.tar.gz
CmmToAsm/AArch64: Re-format argument handling logic
Previously there were very long, hard to parse lines. Fix this. (cherry picked from commit 70f0c1f84213f7a09bc31e0eeefb5b089708f04b)
-rw-r--r--compiler/GHC/CmmToAsm/AArch64/CodeGen.hs24
1 files changed, 19 insertions, 5 deletions
diff --git a/compiler/GHC/CmmToAsm/AArch64/CodeGen.hs b/compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
index 06cacc664a..01881d9e8b 100644
--- a/compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
+++ b/compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
@@ -1621,12 +1621,20 @@ genCCall target dest_regs arg_regs bid = do
passArguments pack (gpReg:gpRegs) fpRegs ((r, format, _hint, code_r):args) stackSpace accumRegs accumCode | isIntFormat format = do
let w = formatToWidth format
- passArguments pack gpRegs fpRegs args stackSpace (gpReg:accumRegs) (accumCode `appOL` code_r `snocOL` (ann (text "Pass gp argument: " <> ppr r) $ MOV (OpReg w gpReg) (OpReg w r)))
+ mov = MOV (OpReg w gpReg) (OpReg w r)
+ accumCode' = accumCode `appOL`
+ code_r `snocOL`
+ ann (text "Pass gp argument: " <> ppr r) mov
+ passArguments pack gpRegs fpRegs args stackSpace (gpReg:accumRegs) accumCode'
-- Still have FP regs, and we want to pass an FP argument.
passArguments pack gpRegs (fpReg:fpRegs) ((r, format, _hint, code_r):args) stackSpace accumRegs accumCode | isFloatFormat format = do
let w = formatToWidth format
- passArguments pack gpRegs fpRegs args stackSpace (fpReg:accumRegs) (accumCode `appOL` code_r `snocOL` (ann (text "Pass fp argument: " <> ppr r) $ MOV (OpReg w fpReg) (OpReg w r)))
+ mov = MOV (OpReg w fpReg) (OpReg w r)
+ accumCode' = accumCode `appOL`
+ code_r `snocOL`
+ ann (text "Pass fp argument: " <> ppr r) mov
+ passArguments pack gpRegs fpRegs args stackSpace (fpReg:accumRegs) accumCode'
-- No mor regs left to pass. Must pass on stack.
passArguments pack [] [] ((r, format, _hint, code_r):args) stackSpace accumRegs accumCode = do
@@ -1635,7 +1643,9 @@ genCCall target dest_regs arg_regs bid = do
space = if pack then bytes else 8
stackSpace' | pack && stackSpace `mod` space /= 0 = stackSpace + space - (stackSpace `mod` space)
| otherwise = stackSpace
- stackCode = code_r `snocOL` (ann (text "Pass argument (size " <> ppr w <> text ") on the stack: " <> ppr r) $ STR format (OpReg w r) (OpAddr (AddrRegImm (regSingle 31) (ImmInt stackSpace'))))
+ str = STR format (OpReg w r) (OpAddr (AddrRegImm (regSingle 31) (ImmInt stackSpace')))
+ stackCode = code_r `snocOL`
+ ann (text "Pass argument (size " <> ppr w <> text ") on the stack: " <> ppr r) str
passArguments pack [] [] args (stackSpace'+space) accumRegs (stackCode `appOL` accumCode)
-- Still have fpRegs left, but want to pass a GP argument. Must be passed on the stack then.
@@ -1645,7 +1655,9 @@ genCCall target dest_regs arg_regs bid = do
space = if pack then bytes else 8
stackSpace' | pack && stackSpace `mod` space /= 0 = stackSpace + space - (stackSpace `mod` space)
| otherwise = stackSpace
- stackCode = code_r `snocOL` (ann (text "Pass argument (size " <> ppr w <> text ") on the stack: " <> ppr r) $ STR format (OpReg w r) (OpAddr (AddrRegImm (regSingle 31) (ImmInt stackSpace'))))
+ str = STR format (OpReg w r) (OpAddr (AddrRegImm (regSingle 31) (ImmInt stackSpace')))
+ stackCode = code_r `snocOL`
+ ann (text "Pass argument (size " <> ppr w <> text ") on the stack: " <> ppr r) str
passArguments pack [] fpRegs args (stackSpace'+space) accumRegs (stackCode `appOL` accumCode)
-- Still have gpRegs left, but want to pass a FP argument. Must be passed on the stack then.
@@ -1655,7 +1667,9 @@ genCCall target dest_regs arg_regs bid = do
space = if pack then bytes else 8
stackSpace' | pack && stackSpace `mod` space /= 0 = stackSpace + space - (stackSpace `mod` space)
| otherwise = stackSpace
- stackCode = code_r `snocOL` (ann (text "Pass argument (size " <> ppr w <> text ") on the stack: " <> ppr r) $ STR format (OpReg w r) (OpAddr (AddrRegImm (regSingle 31) (ImmInt stackSpace'))))
+ str = STR format (OpReg w r) (OpAddr (AddrRegImm (regSingle 31) (ImmInt stackSpace')))
+ stackCode = code_r `snocOL`
+ ann (text "Pass argument (size " <> ppr w <> text ") on the stack: " <> ppr r) str
passArguments pack gpRegs [] args (stackSpace'+space) accumRegs (stackCode `appOL` accumCode)
passArguments _ _ _ _ _ _ _ = pprPanic "passArguments" (text "invalid state")