X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FnativeGen%2FX86%2FRegInfo.hs;h=ed420a41b083e4876ec733badf55e107d5e6856f;hb=7854ec4b11e117f8514553890851d14a66690fbb;hp=39ff4063b02a7227e62d2db445101a0d211b0dee;hpb=31a9d04804d9cacda35695c5397590516b964964;p=ghc-hetmet.git diff --git a/compiler/nativeGen/X86/RegInfo.hs b/compiler/nativeGen/X86/RegInfo.hs index 39ff406..ed420a4 100644 --- a/compiler/nativeGen/X86/RegInfo.hs +++ b/compiler/nativeGen/X86/RegInfo.hs @@ -1,12 +1,6 @@ module X86.RegInfo ( - mkVReg, - - JumpDest, - canShortcut, - shortcutJump, - - shortcutStatic, + mkVirtualReg, regDotColor ) @@ -15,86 +9,31 @@ where #include "nativeGen/NCG.h" #include "HsVersions.h" -import X86.Instr -import X86.Cond -import X86.Regs import Size import Reg -import Cmm -import CLabel -import BlockId import Outputable import Unique #if i386_TARGET_ARCH || x86_64_TARGET_ARCH import UniqFM +import X86.Regs #endif -mkVReg :: Unique -> Size -> Reg -mkVReg u size +mkVirtualReg :: Unique -> Size -> VirtualReg +mkVirtualReg u size | not (isFloatSize size) = VirtualRegI u | otherwise = case size of FF32 -> VirtualRegD u FF64 -> VirtualRegD u - _ -> panic "mkVReg" - - -data JumpDest = DestBlockId BlockId | DestImm Imm - - -canShortcut :: Instr -> Maybe JumpDest -canShortcut (JXX ALWAYS id) = Just (DestBlockId id) -canShortcut (JMP (OpImm imm)) = Just (DestImm imm) -canShortcut _ = Nothing - - --- The helper ensures that we don't follow cycles. -shortcutJump :: (BlockId -> Maybe JumpDest) -> Instr -> Instr -shortcutJump fn insn = shortcutJump' fn emptyBlockSet insn - where shortcutJump' fn seen insn@(JXX cc id) = - if elemBlockSet id seen then insn - else case fn id of - Nothing -> insn - Just (DestBlockId id') -> shortcutJump' fn seen' (JXX cc id') - Just (DestImm imm) -> shortcutJump' fn seen' (JXX_GBL cc imm) - where seen' = extendBlockSet seen id - shortcutJump' _ _ other = other - - --- Here because it knows about JumpDest -shortcutStatic :: (BlockId -> Maybe JumpDest) -> CmmStatic -> CmmStatic -shortcutStatic fn (CmmStaticLit (CmmLabel lab)) - | Just uq <- maybeAsmTemp lab - = CmmStaticLit (CmmLabel (shortBlockId fn (BlockId uq))) -shortcutStatic fn (CmmStaticLit (CmmLabelDiffOff lbl1 lbl2 off)) - | Just uq <- maybeAsmTemp lbl1 - = CmmStaticLit (CmmLabelDiffOff (shortBlockId fn (BlockId uq)) lbl2 off) - -- slightly dodgy, we're ignoring the second label, but this - -- works with the way we use CmmLabelDiffOff for jump tables now. - -shortcutStatic _ other_static - = other_static - -shortBlockId - :: (BlockId -> Maybe JumpDest) - -> BlockId - -> CLabel - -shortBlockId fn blockid@(BlockId uq) = - case fn blockid of - Nothing -> mkAsmTempLabel uq - Just (DestBlockId blockid') -> shortBlockId fn blockid' - Just (DestImm (ImmCLbl lbl)) -> lbl - _other -> panic "shortBlockId" - + _ -> panic "mkVirtualReg" -- reg colors for x86 #if i386_TARGET_ARCH -regDotColor :: Reg -> SDoc +regDotColor :: RealReg -> SDoc regDotColor reg = let Just str = lookupUFM regColors reg in text str @@ -117,7 +56,7 @@ regColors -- reg colors for x86_64 #elif x86_64_TARGET_ARCH -regDotColor :: Reg -> SDoc +regDotColor :: RealReg -> SDoc regDotColor reg = let Just str = lookupUFM regColors reg in text str @@ -138,7 +77,7 @@ regColors , (r14, "#004040") , (r15, "#002080") ] - ++ zip (map RealReg [16..31]) (repeat "red") + ++ zip (map regSingle [16..31]) (repeat "red") #else regDotColor :: Reg -> SDoc regDotColor = panic "not defined"