/compiler/nativeGen/X86/RegInfo.hs

http://github.com/ghc/ghc · Haskell · 67 lines · 54 code · 12 blank · 1 comment · 1 complexity · d77ab8620648dfdd27c1174a616b00db MD5 · raw file

  1. {-# LANGUAGE CPP #-}
  2. module X86.RegInfo (
  3. mkVirtualReg,
  4. regDotColor
  5. )
  6. where
  7. #include "nativeGen/NCG.h"
  8. #include "HsVersions.h"
  9. import Format
  10. import Reg
  11. import Outputable
  12. import Platform
  13. import Unique
  14. import UniqFM
  15. import X86.Regs
  16. mkVirtualReg :: Unique -> Format -> VirtualReg
  17. mkVirtualReg u format
  18. = case format of
  19. FF32 -> VirtualRegSSE u
  20. FF64 -> VirtualRegSSE u
  21. FF80 -> VirtualRegD u
  22. _other -> VirtualRegI u
  23. regDotColor :: Platform -> RealReg -> SDoc
  24. regDotColor platform reg
  25. = let Just str = lookupUFM (regColors platform) reg
  26. in text str
  27. regColors :: Platform -> UniqFM [Char]
  28. regColors platform = listToUFM (normalRegColors platform ++ fpRegColors)
  29. normalRegColors :: Platform -> [(Reg,String)]
  30. normalRegColors platform
  31. | target32Bit platform = [ (eax, "#00ff00")
  32. , (ebx, "#0000ff")
  33. , (ecx, "#00ffff")
  34. , (edx, "#0080ff") ]
  35. | otherwise = [ (rax, "#00ff00"), (eax, "#00ff00")
  36. , (rbx, "#0000ff"), (ebx, "#0000ff")
  37. , (rcx, "#00ffff"), (ecx, "#00ffff")
  38. , (rdx, "#0080ff"), (edx, "#00ffff")
  39. , (r8, "#00ff80")
  40. , (r9, "#008080")
  41. , (r10, "#0040ff")
  42. , (r11, "#00ff40")
  43. , (r12, "#008040")
  44. , (r13, "#004080")
  45. , (r14, "#004040")
  46. , (r15, "#002080") ]
  47. fpRegColors :: [(Reg,String)]
  48. fpRegColors =
  49. [ (fake0, "#ff00ff")
  50. , (fake1, "#ff00aa")
  51. , (fake2, "#aa00ff")
  52. , (fake3, "#aa00aa")
  53. , (fake4, "#ff0055")
  54. , (fake5, "#5500ff") ]
  55. ++ zip (map regSingle [24..39]) (repeat "red")