X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FcodeGen%2FStgCmmCon.hs;h=cebd743e94dd1f914a72b4e7925a56954728e598;hb=83d563cb9ede0ba792836e529b1e2929db926355;hp=18c2509ccdfd32428de91758ae2614c96a529a34;hpb=8c84944d5782f2ee60d96c02977f15ba9e7ab935;p=ghc-hetmet.git diff --git a/compiler/codeGen/StgCmmCon.hs b/compiler/codeGen/StgCmmCon.hs index 18c2509..cebd743 100644 --- a/compiler/codeGen/StgCmmCon.hs +++ b/compiler/codeGen/StgCmmCon.hs @@ -39,8 +39,13 @@ import Literal import PrelInfo import Outputable import Util ( lengthIs ) + import Data.Char +#if defined(mingw32_TARGET_OS) +import StaticFlags ( opt_PIC ) +#endif + --------------------------------------------------------------- -- Top-level constructors @@ -153,9 +158,11 @@ We don't support this optimisation when compiling into Windows DLLs yet because they don't support cross package data references well. -} -#if !(defined(__PIC__) && defined(mingw32_HOST_OS)) buildDynCon binder _cc con [arg] | maybeIntLikeCon con +#if defined(mingw32_TARGET_OS) + , not opt_PIC +#endif , StgLitArg (MachInt val) <- arg , val <= fromIntegral mAX_INTLIKE -- Comparisons at type Integer! , val >= fromIntegral mIN_INTLIKE -- ...ditto... @@ -167,7 +174,10 @@ buildDynCon binder _cc con [arg] ; return (litIdInfo binder (mkConLFInfo con) intlike_amode, mkNop) } buildDynCon binder _cc con [arg] - | maybeCharLikeCon con + | maybeCharLikeCon con +#if defined(mingw32_TARGET_OS) + , not opt_PIC +#endif , StgLitArg (MachChar val) <- arg , let val_int = ord val :: Int , val_int <= mAX_CHARLIKE @@ -177,7 +187,6 @@ buildDynCon binder _cc con [arg] -- CHARLIKE closures consist of a header and one word payload charlike_amode = cmmLabelOffW charlike_lbl offsetW ; return (litIdInfo binder (mkConLFInfo con) charlike_amode, mkNop) } -#endif -------- buildDynCon: the general case ----------- buildDynCon binder ccs con args