PageRenderTime 23ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/compiler/nativeGen/X86/RegInfo.hs

https://github.com/ezyang/ghc
Haskell | 69 lines | 55 code | 13 blank | 1 comment | 0 complexity | 64e579960bf762536662e5bb9137ee9c 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 GhcPrelude
  10. import Format
  11. import Reg
  12. import Outputable
  13. import Platform
  14. import Unique
  15. import UniqFM
  16. import X86.Regs
  17. mkVirtualReg :: Unique -> Format -> VirtualReg
  18. mkVirtualReg u format
  19. = case format of
  20. FF32 -> VirtualRegSSE u
  21. FF64 -> VirtualRegSSE u
  22. FF80 -> VirtualRegD u
  23. _other -> VirtualRegI u
  24. regDotColor :: Platform -> RealReg -> SDoc
  25. regDotColor platform reg
  26. = let Just str = lookupUFM (regColors platform) reg
  27. in text str
  28. regColors :: Platform -> UniqFM [Char]
  29. regColors platform = listToUFM (normalRegColors platform ++ fpRegColors)
  30. normalRegColors :: Platform -> [(Reg,String)]
  31. normalRegColors platform
  32. | target32Bit platform = [ (eax, "#00ff00")
  33. , (ebx, "#0000ff")
  34. , (ecx, "#00ffff")
  35. , (edx, "#0080ff") ]
  36. | otherwise = [ (rax, "#00ff00"), (eax, "#00ff00")
  37. , (rbx, "#0000ff"), (ebx, "#0000ff")
  38. , (rcx, "#00ffff"), (ecx, "#00ffff")
  39. , (rdx, "#0080ff"), (edx, "#00ffff")
  40. , (r8, "#00ff80")
  41. , (r9, "#008080")
  42. , (r10, "#0040ff")
  43. , (r11, "#00ff40")
  44. , (r12, "#008040")
  45. , (r13, "#004080")
  46. , (r14, "#004040")
  47. , (r15, "#002080") ]
  48. fpRegColors :: [(Reg,String)]
  49. fpRegColors =
  50. [ (fake0, "#ff00ff")
  51. , (fake1, "#ff00aa")
  52. , (fake2, "#aa00ff")
  53. , (fake3, "#aa00aa")
  54. , (fake4, "#ff0055")
  55. , (fake5, "#5500ff") ]
  56. ++ zip (map regSingle [24..39]) (repeat "red")