summaryrefslogtreecommitdiff
path: root/compiler/codeGen/StgCmmForeign.hs
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2012-02-14 11:44:55 +0000
committerSimon Marlow <marlowsd@gmail.com>2012-02-14 11:44:55 +0000
commitb8172ba1e6b463fbacf21fc39474a1b5580c13a0 (patch)
treef197e7efcd8a3f3582971f1c86aad19eea774d0e /compiler/codeGen/StgCmmForeign.hs
parent3a47819657f6b8542107d14cbd883d93f6fbf442 (diff)
downloadhaskell-b8172ba1e6b463fbacf21fc39474a1b5580c13a0.tar.gz
Fix an SRT-related bug
We were using the SRT information generated by the computeSRTs pass to decide whether to add a static link field to a constructor or not, and this broke when I disabled computeSRTs for the new code generator. So I've hacked it for now to only rely on the SRT information generated by CoreToStg.
Diffstat (limited to 'compiler/codeGen/StgCmmForeign.hs')
-rw-r--r--compiler/codeGen/StgCmmForeign.hs14
1 files changed, 4 insertions, 10 deletions
diff --git a/compiler/codeGen/StgCmmForeign.hs b/compiler/codeGen/StgCmmForeign.hs
index 3580481043..d6aa19a2da 100644
--- a/compiler/codeGen/StgCmmForeign.hs
+++ b/compiler/codeGen/StgCmmForeign.hs
@@ -72,10 +72,7 @@ cgForeignCall results result_hints (CCall (CCallSpec target cconv safety)) stg_a
fc = ForeignConvention cconv arg_hints result_hints
call_target = ForeignTarget cmm_target fc
- ; srt <- getSRTInfo NoSRT -- SLPJ: Not sure what SRT
- -- is right here
- -- JD: Does it matter in the new codegen?
- ; emitForeignCall safety results call_target call_args srt CmmMayReturn }
+ ; emitForeignCall safety results call_target call_args CmmMayReturn }
where
-- in the stdcall calling convention, the symbol needs @size appended
-- to it, where size is the total number of bytes of arguments. We
@@ -93,9 +90,7 @@ emitCCall :: [(CmmFormal,ForeignHint)]
-> [(CmmActual,ForeignHint)]
-> FCode ()
emitCCall hinted_results fn hinted_args
- = emitForeignCall PlayRisky results target args
- NoC_SRT -- No SRT b/c we PlayRisky
- CmmMayReturn
+ = emitForeignCall PlayRisky results target args CmmMayReturn
where
(args, arg_hints) = unzip hinted_args
(results, result_hints) = unzip hinted_results
@@ -105,7 +100,7 @@ emitCCall hinted_results fn hinted_args
emitPrimCall :: [CmmFormal] -> CallishMachOp -> [CmmActual] -> FCode ()
emitPrimCall res op args
- = emitForeignCall PlayRisky res (PrimTarget op) args NoC_SRT CmmMayReturn
+ = emitForeignCall PlayRisky res (PrimTarget op) args CmmMayReturn
-- alternative entry point, used by CmmParse
emitForeignCall
@@ -113,11 +108,10 @@ emitForeignCall
-> [CmmFormal] -- where to put the results
-> ForeignTarget -- the op
-> [CmmActual] -- arguments
- -> C_SRT -- the SRT of the calls continuation
-> CmmReturnInfo -- This can say "never returns"
-- only RTS procedures do this
-> FCode ()
-emitForeignCall safety results target args _srt _ret
+emitForeignCall safety results target args _ret
| not (playSafe safety) = do
let (caller_save, caller_load) = callerSaveVolatileRegs
emit caller_save