X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FcodeGen%2FCgCallConv.hs;h=f463255807ac2580ca2702d7b0a8debce94996dc;hb=04db0e9fa47ce4dfbcb73ec1752d94195f3b394e;hp=9b73c3bcf7de941c0e556c97623eecae45030701;hpb=d1c1b7d0e7b94ede238845c91f58582bad3b3ef3;p=ghc-hetmet.git diff --git a/ghc/compiler/codeGen/CgCallConv.hs b/ghc/compiler/codeGen/CgCallConv.hs index 9b73c3b..f463255 100644 --- a/ghc/compiler/codeGen/CgCallConv.hs +++ b/ghc/compiler/codeGen/CgCallConv.hs @@ -108,6 +108,8 @@ argBits (PtrArg : args) = False : argBits args argBits (arg : args) = take (cgRepSizeW arg) (repeat True) ++ argBits args stdPattern :: [CgRep] -> Maybe Int +stdPattern [] = Just ARG_NONE -- just void args, probably + stdPattern [PtrArg] = Just ARG_P stdPattern [FloatArg] = Just ARG_F stdPattern [DoubleArg] = Just ARG_D @@ -204,17 +206,20 @@ mkRegLiveness regs ptrs nptrs -- For a slow call, we must take a bunch of arguments and intersperse -- some stg_ap__ret_info return addresses. -constructSlowCall :: [(CgRep,CmmExpr)] -> (CLabel, [(CgRep,CmmExpr)]) +constructSlowCall + :: [(CgRep,CmmExpr)] + -> (CLabel, -- RTS entry point for call + [(CgRep,CmmExpr)], -- args to pass to the entry point + [(CgRep,CmmExpr)]) -- stuff to save on the stack + -- don't forget the zero case constructSlowCall [] - = (stg_ap_0, []) - where - stg_ap_0 = enterRtsRetLabel SLIT("stg_ap_0") + = (mkRtsApFastLabel SLIT("stg_ap_0"), [], []) constructSlowCall amodes - = (stg_ap_pat, these ++ slowArgs rest) + = (stg_ap_pat, these, rest) where - stg_ap_pat = enterRtsRetLabel arg_pat + stg_ap_pat = mkRtsApFastLabel arg_pat (arg_pat, these, rest) = matchSlowPattern amodes enterRtsRetLabel arg_pat