NCG: Split linear allocator into separate modules.
[ghc-hetmet.git] / compiler / nativeGen / RegAlloc / Linear / FreeRegs.hs
diff --git a/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs b/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs
new file mode 100644 (file)
index 0000000..bee8c98
--- /dev/null
@@ -0,0 +1,41 @@
+
+module RegAlloc.Linear.FreeRegs (
+       FreeRegs(),
+       noFreeRegs,
+       releaseReg,
+       initFreeRegs,
+       getFreeRegs,
+       allocateReg
+)
+
+#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
+
+#elif defined(sparc_TARGET_ARCH)
+import RegAlloc.Linear.SPARC.FreeRegs
+
+#elif defined(i386_TARGET_ARCH) || defined(x86_64_TARGET_ARCH)
+import RegAlloc.Linear.X86.FreeRegs
+
+#else
+#error "RegAlloc.Linear.FreeRegs not defined for this architecture."
+
+#endif
+