diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2011-04-20 12:27:31 +0100 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2011-04-20 12:27:31 +0100 |
commit | 25fa4bdbff4a84d6717c4ff7cdf7080687616818 (patch) | |
tree | f0b59c46247272a938d75d2661c1c3fefd9fc688 | |
parent | fd26d0ac1b48890dc7c3b5b60b42373fa964cdc8 (diff) | |
parent | 40859045bf3e74efb5443b407bb01978e742e49d (diff) | |
download | haskell-25fa4bdbff4a84d6717c4ff7cdf7080687616818.tar.gz |
Merge branch 'master' of http://darcs.haskell.org/ghc
-rw-r--r-- | compiler/cmm/CLabel.hs | 12 | ||||
-rw-r--r-- | compiler/cmm/PprC.hs | 2 | ||||
-rw-r--r-- | compiler/llvmGen/LlvmCodeGen/Regs.hs | 2 | ||||
-rw-r--r-- | compiler/main/StaticFlagParser.hs | 1 | ||||
-rw-r--r-- | ghc/ghc.mk | 24 |
5 files changed, 26 insertions, 15 deletions
diff --git a/compiler/cmm/CLabel.hs b/compiler/cmm/CLabel.hs index c151a26391..901b13b342 100644 --- a/compiler/cmm/CLabel.hs +++ b/compiler/cmm/CLabel.hs @@ -101,7 +101,7 @@ module CLabel ( hasCAF, infoLblToEntryLbl, entryLblToInfoLbl, cvtToClosureLbl, cvtToSRTLbl, needsCDecl, isAsmTemp, maybeAsmTemp, externallyVisibleCLabel, - isMathFun, + isMathFun, isCas, isCFunctionLabel, isGcPtrLabel, labelDynamic, pprCLabel @@ -590,9 +590,17 @@ maybeAsmTemp (AsmTempLabel uq) = Just uq maybeAsmTemp _ = Nothing +-- | Check whether a label corresponds to our cas function. +-- We #include the prototype for this, so we need to avoid +-- generating out own C prototypes. +isCas :: CLabel -> Bool +isCas (CmmLabel pkgId fn _) = pkgId == rtsPackageId && fn == fsLit "cas" +isCas _ = False + + -- | Check whether a label corresponds to a C function that has -- a prototype in a system header somehere, or is built-in --- to the C compiler. For these labels we abovoid generating our +-- to the C compiler. For these labels we avoid generating our -- own C prototypes. isMathFun :: CLabel -> Bool isMathFun (ForeignLabel fs _ _ _) = fs `elementOfUniqSet` math_funs diff --git a/compiler/cmm/PprC.hs b/compiler/cmm/PprC.hs index 10f4e8bacf..d363cef50b 100644 --- a/compiler/cmm/PprC.hs +++ b/compiler/cmm/PprC.hs @@ -248,7 +248,7 @@ pprStmt stmt = case stmt of | CmmNeverReturns <- ret -> let myCall = pprCall (pprCLabel lbl) cconv results args safety in (real_fun_proto lbl, myCall) - | not (isMathFun lbl) -> + | not (isMathFun lbl || isCas lbl) -> let myCall = braces ( pprCFunType (char '*' <> text "ghcFunPtr") cconv results args <> semi $$ text "ghcFunPtr" <+> equals <+> cast_fn <> semi diff --git a/compiler/llvmGen/LlvmCodeGen/Regs.hs b/compiler/llvmGen/LlvmCodeGen/Regs.hs index 661dc9afe4..b0c63a4c34 100644 --- a/compiler/llvmGen/LlvmCodeGen/Regs.hs +++ b/compiler/llvmGen/LlvmCodeGen/Regs.hs @@ -38,6 +38,8 @@ lmGlobalReg suf reg VanillaReg 4 _ -> wordGlobal $ "R4" ++ suf VanillaReg 5 _ -> wordGlobal $ "R5" ++ suf VanillaReg 6 _ -> wordGlobal $ "R6" ++ suf + VanillaReg 7 _ -> wordGlobal $ "R7" ++ suf + VanillaReg 8 _ -> wordGlobal $ "R8" ++ suf SpLim -> wordGlobal $ "SpLim" ++ suf FloatReg 1 -> floatGlobal $"F1" ++ suf FloatReg 2 -> floatGlobal $"F2" ++ suf diff --git a/compiler/main/StaticFlagParser.hs b/compiler/main/StaticFlagParser.hs index 54f0a92115..5767a52552 100644 --- a/compiler/main/StaticFlagParser.hs +++ b/compiler/main/StaticFlagParser.hs @@ -210,7 +210,6 @@ unregFlags :: [Located String] unregFlags = map (mkGeneralLocated "in unregFlags") [ "-optc-DNO_REGS" , "-optc-DUSE_MINIINTERPRETER" - , "-fno-asm-mangling" , "-funregisterised" ] ----------------------------------------------------------------------------- diff --git a/ghc/ghc.mk b/ghc/ghc.mk index 8776566106..93199d9e68 100644 --- a/ghc/ghc.mk +++ b/ghc/ghc.mk @@ -111,21 +111,23 @@ all_ghc_stage3 : $(GHC_STAGE3) $(INPLACE_LIB)/extra-gcc-opts : extra-gcc-opts "$(CP)" $< $@ -# The GHC programs need to depend on all the helper programs they might call +# The GHC programs need to depend on all the helper programs they might call, +# and the settings files they use + +$(GHC_STAGE1) : | $(UNLIT) $(INPLACE_LIB)/extra-gcc-opts +$(GHC_STAGE2) : | $(UNLIT) $(INPLACE_LIB)/extra-gcc-opts +$(GHC_STAGE3) : | $(UNLIT) $(INPLACE_LIB)/extra-gcc-opts + ifeq "$(GhcUnregisterised)" "NO" -$(GHC_STAGE1) : $(SPLIT) -$(GHC_STAGE2) : $(SPLIT) -$(GHC_STAGE3) : $(SPLIT) +$(GHC_STAGE1) : | $(SPLIT) +$(GHC_STAGE2) : | $(SPLIT) +$(GHC_STAGE3) : | $(SPLIT) endif -$(GHC_STAGE1) : $(INPLACE_LIB)/extra-gcc-opts -$(GHC_STAGE2) : $(INPLACE_LIB)/extra-gcc-opts -$(GHC_STAGE3) : $(INPLACE_LIB)/extra-gcc-opts - ifeq "$(Windows)" "YES" -$(GHC_STAGE1) : $(TOUCHY) -$(GHC_STAGE2) : $(TOUCHY) -$(GHC_STAGE3) : $(TOUCHY) +$(GHC_STAGE1) : | $(TOUCHY) +$(GHC_STAGE2) : | $(TOUCHY) +$(GHC_STAGE3) : | $(TOUCHY) endif ifeq "$(BootingFromHc)" "YES" |