X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=ghc%2Fcompiler%2FcodeGen%2FCgCallConv.hs;h=f463255807ac2580ca2702d7b0a8debce94996dc;hb=04db0e9fa47ce4dfbcb73ec1752d94195f3b394e;hp=7be8b849821ed4ed960411983b711507d47cc84c;hpb=59c796f8e77325d35f29ddd3e724bfa780466d40;p=ghc-hetmet.git diff --git a/ghc/compiler/codeGen/CgCallConv.hs b/ghc/compiler/codeGen/CgCallConv.hs index 7be8b84..f463255 100644 --- a/ghc/compiler/codeGen/CgCallConv.hs +++ b/ghc/compiler/codeGen/CgCallConv.hs @@ -58,7 +58,7 @@ import TyCon ( TyCon, tyConFamilySize ) import Bitmap ( Bitmap, mAX_SMALL_BITMAP_SIZE, mkBitmap, intsToReverseBitmap ) import Util ( isn'tIn, sortLe ) -import CmdLineOpts ( opt_Unregisterised ) +import StaticFlags ( opt_Unregisterised ) import FastString ( LitString ) import Outputable import DATA_BITS @@ -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