Commit 1276aa3f authored by simonpj's avatar simonpj

[project @ 2004-10-01 09:49:14 by simonpj]

Generate in the @size suffix for a stdcall symbol properly.
parent 352def90
......@@ -92,14 +92,23 @@ emitForeignCall results (CCall (CCallSpec target cconv safety)) args live
(call_args, cmm_target)
= case target of
StaticTarget lbl -> (args, CmmLit (CmmLabel
(mkForeignLabel lbl Nothing False)))
-- ToDo: what about the size here?
-- it is currently tacked on by the NCG.
(mkForeignLabel lbl call_size False)))
DynamicTarget -> case args of (fn,_):rest -> (rest, fn)
the_call vols = CmmCall (CmmForeignCall cmm_target cconv)
results call_args (Just vols)
-- in the stdcall calling convention, the symbol needs @size appended
-- to it, where size is the total number of bytes of arguments. We
-- attach this info to the CLabel here, and the CLabel pretty printer
-- will generate the suffix when the label is printed.
call_size
| StdCallConv <- cconv = Just (sum (map (arg_size.cmmExprRep.fst) args))
| otherwise = Nothing
-- ToDo: this might not be correct for 64-bit API
arg_size rep = max (machRepByteWidth rep) wORD_SIZE
emitForeignCall results (DNCall _) args live
= panic "emitForeignCall: DNCall"
......
Markdown is supported
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