    module X86.RegInfo (
    	mkVirtualReg,
    	regDotColor
    )

    where

    #include "nativeGen/NCG.h"
    #include "HsVersions.h"

    import Size
    import Reg

    import Outputable
    import Unique

    #if i386_TARGET_ARCH || x86_64_TARGET_ARCH
    import UniqFM
    import X86.Regs
    #endif

    mkVirtualReg :: Unique -> Size -> VirtualReg
    mkVirtualReg u size
       = case size of
            FF32	-> VirtualRegSSE u
            FF64	-> VirtualRegSSE u
            FF80	-> VirtualRegD   u
            _other  -> VirtualRegI   u

    -- reg colors for x86
    #if i386_TARGET_ARCH
    regDotColor :: RealReg -> SDoc
    regDotColor reg
     = let	Just	str	= lookupUFM regColors reg
       in	text str

    regColors :: UniqFM [Char]
    regColors
     = listToUFM
     $  	[ (eax,	"#00ff00")
    	, (ebx,	"#0000ff")
    	, (ecx,	"#00ffff")
    	, (edx,	"#0080ff") ]
            ++ fpRegColors

    -- reg colors for x86_64
    #elif x86_64_TARGET_ARCH
    regDotColor :: RealReg -> SDoc
    regDotColor reg
     = let	Just	str	= lookupUFM regColors reg
       in	text str

    regColors :: UniqFM [Char]
    regColors
     = listToUFM
     $	[ (rax, "#00ff00"), (eax, "#00ff00")
    	, (rbx,	"#0000ff"), (ebx, "#0000ff")
    	, (rcx,	"#00ffff"), (ecx, "#00ffff")
    	, (rdx,	"#0080ff"), (edx, "#00ffff")
    	, (r8,  "#00ff80")
    	, (r9,  "#008080")
    	, (r10, "#0040ff")
    	, (r11, "#00ff40")
    	, (r12, "#008040")
    	, (r13, "#004080")
    	, (r14, "#004040")
    	, (r15, "#002080") ]
    	++ fpRegColors
    #else
    regDotColor :: Reg -> SDoc
    regDotColor	= panic "not defined"
    #endif

    #if i386_TARGET_ARCH || x86_64_TARGET_ARCH
    fpRegColors :: [(Reg,String)]
    fpRegColors =
            [ (fake0, "#ff00ff")
    	, (fake1, "#ff00aa")
    	, (fake2, "#aa00ff")
    	, (fake3, "#aa00aa")
    	, (fake4, "#ff0055")
    	, (fake5, "#5500ff") ]

    	++ zip (map regSingle [24..39]) (repeat "red")
    #endif