    module RegAlloc.Linear.FreeRegs (
    	FreeRegs(),
    	noFreeRegs,
    	releaseReg,
    	initFreeRegs,
    	getFreeRegs,
    	allocateReg,
    	maxSpillSlots
    )

    #include "HsVersions.h"

    where

    -- -----------------------------------------------------------------------------
    -- The free register set
    -- This needs to be *efficient*
    -- Here's an inefficient 'executable specification' of the FreeRegs data type:
    --
    --	type FreeRegs = [RegNo]
    --	noFreeRegs = 0
    --	releaseReg n f = if n `elem` f then f else (n : f)
    --	initFreeRegs = allocatableRegs
    --	getFreeRegs cls f = filter ( (==cls) . regClass . RealReg ) f
    --	allocateReg f r = filter (/= r) f

    #if   defined(powerpc_TARGET_ARCH)
    import RegAlloc.Linear.PPC.FreeRegs
    import PPC.Instr	(maxSpillSlots)

    #elif defined(sparc_TARGET_ARCH)
    import RegAlloc.Linear.SPARC.FreeRegs
    import SPARC.Instr	(maxSpillSlots)

    #elif defined(i386_TARGET_ARCH) || defined(x86_64_TARGET_ARCH)
    import RegAlloc.Linear.X86.FreeRegs
    import X86.Instr	(maxSpillSlots)

    #else
    #error "RegAlloc.Linear.FreeRegs not defined for this architecture."

    #endif