From d1d60a159386d104224416e6b025627802e5955c Mon Sep 17 00:00:00 2001 From: simonpj Date: Tue, 26 Jun 2001 11:07:42 +0000 Subject: [PATCH] [project @ 2001-06-26 11:07:42 by simonpj] Add comments --- ghc/compiler/nativeGen/MachCode.lhs | 5 ++++- ghc/compiler/prelude/ForeignCall.lhs | 16 +++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/ghc/compiler/nativeGen/MachCode.lhs b/ghc/compiler/nativeGen/MachCode.lhs index e509666..01b9c6e 100644 --- a/ghc/compiler/nativeGen/MachCode.lhs +++ b/ghc/compiler/nativeGen/MachCode.lhs @@ -2441,9 +2441,12 @@ genCCall fn cconv kind args call = toOL ( [CALL (fn__2 tot_arg_size)] ++ + -- Deallocate parameters after call for ccall; + -- but not for stdcall (callee does it) (if cconv == StdCallConv then [] else [ADD L (OpImm (ImmInt tot_arg_size)) (OpReg esp)]) ++ + [DELTA (delta + tot_arg_size)] ) in @@ -2459,7 +2462,7 @@ genCCall fn cconv kind args fn__2 tot_arg_size | head fn_u == '.' = ImmLit (text (fn_u ++ stdcallsize tot_arg_size)) - | otherwise + | otherwise -- General case = ImmLab False (text (fn_u ++ stdcallsize tot_arg_size)) stdcallsize tot_arg_size diff --git a/ghc/compiler/prelude/ForeignCall.lhs b/ghc/compiler/prelude/ForeignCall.lhs index 47eafed..bceb024 100644 --- a/ghc/compiler/prelude/ForeignCall.lhs +++ b/ghc/compiler/prelude/ForeignCall.lhs @@ -104,7 +104,17 @@ isCasmTarget other = False \end{code} -Stuff to do with calling convention +Stuff to do with calling convention: + +ccall: Caller allocates parameters, *and* deallocates them. + +stdcall: Caller allocates parameters, callee deallocates. + Function name has @N after it, where N is number of arg bytes + e.g. _Foo@8 + +ToDo: The stdcall calling convention is x86 (win32) specific, +so perhaps we should emit a warning if it's being used on other +platforms. \begin{code} data CCallConv = CCallConv | StdCallConv @@ -125,10 +135,6 @@ ccallConvToInt CCallConv = 1 Generate the gcc attribute corresponding to the given calling convention (used by PprAbsC): -ToDo: The stdcall calling convention is x86 (win32) specific, -so perhaps we should emit a warning if it's being used on other -platforms. - \begin{code} ccallConvAttribute :: CCallConv -> String ccallConvAttribute StdCallConv = "__stdcall" -- 1.7.10.4