Commit c9aa9bb5 authored by Simon Marlow's avatar Simon Marlow
Browse files

re-instate missing parts of "put the @N suffix on stdcall foreign calls in .cmm code"

These changes were apparently lost during "massive changes to add a
'zipper' representation of C-"
parent eb731f15
...@@ -909,15 +909,29 @@ foreignCall conv_string results_code expr_code args_code vols safety ret ...@@ -909,15 +909,29 @@ foreignCall conv_string results_code expr_code args_code vols safety ret
case convention of case convention of
-- Temporary hack so at least some functions are CmmSafe -- Temporary hack so at least some functions are CmmSafe
CmmCallConv -> code (stmtC (CmmCall (CmmCallee expr convention) results args safety ret)) CmmCallConv -> code (stmtC (CmmCall (CmmCallee expr convention) results args safety ret))
_ -> case safety of _ ->
let expr' = adjCallTarget convention expr args in
case safety of
CmmUnsafe -> CmmUnsafe ->
code (emitForeignCall' PlayRisky results code (emitForeignCall' PlayRisky results
(CmmCallee expr convention) args vols NoC_SRT ret) (CmmCallee expr' convention) args vols NoC_SRT ret)
CmmSafe srt -> CmmSafe srt ->
code (emitForeignCall' (PlaySafe unused) results code (emitForeignCall' (PlaySafe unused) results
(CmmCallee expr convention) args vols NoC_SRT ret) where (CmmCallee expr' convention) args vols NoC_SRT ret) where
unused = panic "not used by emitForeignCall'" unused = panic "not used by emitForeignCall'"
adjCallTarget :: CCallConv -> CmmExpr -> [(CmmExpr,MachHint)] -> CmmExpr
#ifdef mingw32_TARGET_OS
-- On Windows, we have to add the '@N' suffix to the label when making
-- a call with the stdcall calling convention.
adjCallTarget StdCallConv (CmmLit (CmmLabel lbl)) args
= CmmLit (CmmLabel (addLabelSize lbl (sum (map size args))))
where size (e,_) = max wORD_SIZE (machRepByteWidth (cmmExprRep e))
-- c.f. CgForeignCall.emitForeignCall
#endif
adjCallTarget _ expr _
= expr
primCall primCall
:: [ExtFCode CmmFormal] :: [ExtFCode CmmFormal]
-> FastString -> FastString
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment