diff --git a/.gitignore b/.gitignore
index 093d1ed..86187e9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,25 +1,28 @@
-# Ignored folders #
-/lib/
-/obj/
-/bin/
-
-# Ignored files #
-*.obj
-*.lib
-*.log
-*.tlog
-*.exe
-*.ilk
-*.pdb
-*.sbr
-*.bsc
-*.dll
-*.res
-*.idb
-*.sdf
-*.suo
-*.o
-*.depend
-*.layout
-*.opensdf
-*.aps
+# Ignored folders #
+/lib/
+/obj/
+/bin/
+.vs
+
+# Ignored files #
+*.obj
+*.lib
+*.log
+*.tlog
+*.exe
+*.ilk
+*.pdb
+*.sbr
+*.bsc
+*.dll
+*.res
+*.idb
+*.sdf
+*.suo
+*.o
+*.depend
+*.layout
+*.opensdf
+*.aps
+*.opendb
+*.db
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c147ac9..5000bc3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -605,8 +605,10 @@
     ${SOURCE_DIR}/Reactor/Nucleus.hpp
     ${SOURCE_DIR}/Reactor/Routine.cpp
     ${SOURCE_DIR}/Reactor/Routine.hpp
-    ${SOURCE_DIR}/Reactor/RoutineManager.cpp
-    ${SOURCE_DIR}/Reactor/RoutineManager.hpp
+    ${SOURCE_DIR}/Reactor/LLVMRoutine.cpp
+    ${SOURCE_DIR}/Reactor/LLVMRoutine.hpp
+    ${SOURCE_DIR}/Reactor/LLVMRoutineManager.cpp
+    ${SOURCE_DIR}/Reactor/LLVMRoutineManager.hpp
 )
 
 file(GLOB_RECURSE EGL_LIST
diff --git a/src/Android.mk b/src/Android.mk
index d3efe38..9fffda3 100644
--- a/src/Android.mk
+++ b/src/Android.mk
@@ -38,7 +38,8 @@
 COMMON_SRC_FILES += \
 	Reactor/Nucleus.cpp \
 	Reactor/Routine.cpp \
-	Reactor/RoutineManager.cpp
+	Reactor/LLVMRoutine.cpp \
+	Reactor/LLVMRoutineManager.cpp
 
 COMMON_SRC_FILES += \
 	Renderer/Blitter.cpp \
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.cbp b/src/OpenGL/libGLES_CM/libGLES_CM.cbp
index e5028ba..1123a3e 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.cbp
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.cbp
@@ -178,8 +178,10 @@
 		<Unit filename="../../Reactor/Reactor.hpp" />
 		<Unit filename="../../Reactor/Routine.cpp" />
 		<Unit filename="../../Reactor/Routine.hpp" />
-		<Unit filename="../../Reactor/RoutineManager.cpp" />
-		<Unit filename="../../Reactor/RoutineManager.hpp" />
+		<Unit filename="../../Reactor/LLVMRoutine.cpp" />
+		<Unit filename="../../Reactor/LLVMRoutine.hpp" />
+		<Unit filename="../../Reactor/LLVMRoutineManager.cpp" />
+		<Unit filename="../../Reactor/LLVMRoutineManager.hpp" />
 		<Unit filename="../../Reactor/x86.hpp" />
 		<Unit filename="../../Renderer/Blitter.cpp" />
 		<Unit filename="../../Renderer/Blitter.hpp" />
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cbp b/src/OpenGL/libGLESv2/libGLESv2.cbp
index abd8fe8..7cc601f 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cbp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cbp
@@ -177,8 +177,10 @@
 		<Unit filename="../../Reactor/Reactor.hpp" />
 		<Unit filename="../../Reactor/Routine.cpp" />
 		<Unit filename="../../Reactor/Routine.hpp" />
-		<Unit filename="../../Reactor/RoutineManager.cpp" />
-		<Unit filename="../../Reactor/RoutineManager.hpp" />
+		<Unit filename="../../Reactor/LLVMRoutine.cpp" />
+		<Unit filename="../../Reactor/LLVMRoutine.hpp" />
+		<Unit filename="../../Reactor/LLVMRoutineManager.cpp" />
+		<Unit filename="../../Reactor/LLVMRoutineManager.hpp" />
 		<Unit filename="../../Reactor/x86.hpp" />
 		<Unit filename="../../Renderer/Blitter.cpp" />
 		<Unit filename="../../Renderer/Blitter.hpp" />
diff --git a/src/Reactor/BUILD.gn b/src/Reactor/BUILD.gn
index 0e3e8f4..ee04cbf 100644
--- a/src/Reactor/BUILD.gn
+++ b/src/Reactor/BUILD.gn
@@ -43,7 +43,8 @@
   sources = [
     "Nucleus.cpp",
     "Routine.cpp",
-    "RoutineManager.cpp",
+    "LLVMRoutine.cpp",
+    "LLVMRoutineManager.cpp",
   ]
 
   if (is_win) {
diff --git a/src/Reactor/LLVMRoutine.cpp b/src/Reactor/LLVMRoutine.cpp
new file mode 100644
index 0000000..df12337
--- /dev/null
+++ b/src/Reactor/LLVMRoutine.cpp
@@ -0,0 +1,46 @@
+// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "LLVMRoutine.hpp"
+
+#include "../Common/Memory.hpp"
+#include "../Common/Thread.hpp"
+#include "../Common/Types.hpp"
+
+namespace sw
+{
+	LLVMRoutine::LLVMRoutine(int bufferSize) : bufferSize(bufferSize)
+	{
+		void *memory = allocateExecutable(bufferSize);
+
+		buffer = memory;
+		entry = memory;
+		functionSize = bufferSize;   // Updated by LLVMRoutineManager::endFunctionBody
+	}
+
+	LLVMRoutine::~LLVMRoutine()
+	{
+		deallocateExecutable(buffer, bufferSize);
+	}
+
+	const void *LLVMRoutine::getEntry()
+	{
+		return entry;
+	}
+
+	int LLVMRoutine::getCodeSize()
+	{
+		return functionSize - static_cast<int>((uintptr_t)entry - (uintptr_t)buffer);
+	}
+}
diff --git a/src/Reactor/LLVMRoutine.hpp b/src/Reactor/LLVMRoutine.hpp
new file mode 100644
index 0000000..264990f
--- /dev/null
+++ b/src/Reactor/LLVMRoutine.hpp
@@ -0,0 +1,53 @@
+// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef sw_LLVMRoutine_hpp
+#define sw_LLVMRoutine_hpp
+
+#include "Routine.hpp"
+
+namespace sw
+{
+	class LLVMRoutineManager;
+
+	class LLVMRoutine : public Routine
+	{
+		friend class LLVMRoutineManager;
+
+	public:
+		LLVMRoutine(int bufferSize);
+		//LLVMRoutine(void *memory, int bufferSize, int offset);
+
+		virtual ~LLVMRoutine();
+
+		//void setFunctionSize(int functionSize);
+
+		//const void *getBuffer();
+		const void *getEntry();
+		//int getBufferSize();
+		//int getFunctionSize();   // Includes constants before the entry point
+		int getCodeSize();       // Executable code only
+		//bool isDynamic();
+
+	private:
+		void *buffer;
+		const void *entry;
+		int bufferSize;
+		int functionSize;
+
+		//const bool dynamic;   // Generated or precompiled
+	};
+}
+
+#endif   // sw_LLVMRoutine_hpp
diff --git a/src/Reactor/LLVMRoutineManager.cpp b/src/Reactor/LLVMRoutineManager.cpp
new file mode 100644
index 0000000..99a8e9d
--- /dev/null
+++ b/src/Reactor/LLVMRoutineManager.cpp
@@ -0,0 +1,148 @@
+// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "LLVMRoutineManager.hpp"
+
+#include "LLVMRoutine.hpp"
+#include "llvm/Function.h"
+#include "../Common/Memory.hpp"
+#include "../Common/Thread.hpp"
+#include "../Common/Debug.hpp"
+
+namespace sw
+{
+	using namespace llvm;
+
+	volatile int LLVMRoutineManager::averageInstructionSize = 4;
+
+	LLVMRoutineManager::LLVMRoutineManager()
+	{
+		routine = nullptr;
+	}
+
+	LLVMRoutineManager::~LLVMRoutineManager()
+	{
+		delete routine;
+	}
+
+	void LLVMRoutineManager::AllocateGOT()
+	{
+		UNIMPLEMENTED();
+	}
+
+	uint8_t *LLVMRoutineManager::allocateStub(const GlobalValue *function, unsigned stubSize, unsigned alignment)
+	{
+		UNIMPLEMENTED();
+		return nullptr;
+	}
+
+	uint8_t *LLVMRoutineManager::startFunctionBody(const llvm::Function *function, uintptr_t &actualSize)
+	{
+		if(actualSize == 0)   // Estimate size
+		{
+			size_t instructionCount = 0;
+			for(llvm::Function::const_iterator basicBlock = function->begin(); basicBlock != function->end(); basicBlock++)
+			{
+				instructionCount += basicBlock->size();
+			}
+
+			actualSize = instructionCount * averageInstructionSize;
+		}
+		else   // Estimate was too low
+		{
+			sw::atomicIncrement(&averageInstructionSize);
+		}
+
+		// Round up to the next page size
+		size_t pageSize = memoryPageSize();
+		actualSize = (actualSize + pageSize - 1) & ~(pageSize - 1);
+
+		delete routine;
+		routine = new LLVMRoutine(static_cast<int>(actualSize));
+
+		return (uint8_t*)routine->buffer;
+	}
+
+	void LLVMRoutineManager::endFunctionBody(const llvm::Function *function, uint8_t *functionStart, uint8_t *functionEnd)
+	{
+		routine->functionSize = static_cast<int>(static_cast<ptrdiff_t>(functionEnd - functionStart));
+	}
+
+	uint8_t *LLVMRoutineManager::startExceptionTable(const llvm::Function* F, uintptr_t &ActualSize)
+	{
+		UNIMPLEMENTED();
+		return nullptr;
+	}
+
+	void LLVMRoutineManager::endExceptionTable(const llvm::Function *F, uint8_t *TableStart, uint8_t *TableEnd, uint8_t* FrameRegister)
+	{
+		UNIMPLEMENTED();
+	}
+
+	uint8_t *LLVMRoutineManager::getGOTBase() const
+	{
+		ASSERT(!HasGOT);
+		return nullptr;
+	}
+
+	uint8_t *LLVMRoutineManager::allocateSpace(intptr_t Size, unsigned Alignment)
+	{
+		UNIMPLEMENTED();
+		return nullptr;
+	}
+
+	uint8_t *LLVMRoutineManager::allocateGlobal(uintptr_t Size, unsigned Alignment)
+	{
+		UNIMPLEMENTED();
+		return nullptr;
+	}
+
+	void LLVMRoutineManager::deallocateFunctionBody(void *Body)
+	{
+		delete routine;
+		routine = nullptr;
+	}
+
+	void LLVMRoutineManager::deallocateExceptionTable(void *ET)
+	{
+		if(ET)
+		{
+			UNIMPLEMENTED();
+		}
+	}
+
+	void LLVMRoutineManager::setMemoryWritable()
+	{
+	}
+
+	void LLVMRoutineManager::setMemoryExecutable()
+	{
+		markExecutable(routine->buffer, routine->bufferSize);
+	}
+
+	void LLVMRoutineManager::setPoisonMemory(bool poison)
+	{
+		UNIMPLEMENTED();
+	}
+
+	LLVMRoutine *LLVMRoutineManager::acquireRoutine(void *entry)
+	{
+		routine->entry = entry;
+
+		LLVMRoutine *result = routine;
+		routine = nullptr;
+
+		return result;
+	}
+}
diff --git a/src/Reactor/RoutineManager.hpp b/src/Reactor/LLVMRoutineManager.hpp
similarity index 85%
rename from src/Reactor/RoutineManager.hpp
rename to src/Reactor/LLVMRoutineManager.hpp
index fb85fe4..b235923 100644
--- a/src/Reactor/RoutineManager.hpp
+++ b/src/Reactor/LLVMRoutineManager.hpp
@@ -12,22 +12,22 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef sw_RoutineManager_hpp
-#define sw_RoutineManager_hpp
+#ifndef sw_LLVMRoutineManager_hpp
+#define sw_LLVMRoutineManager_hpp
 
 #include "llvm/GlobalValue.h"
 #include "llvm/ExecutionEngine/JITMemoryManager.h"
 
 namespace sw
 {
-	class Routine;
+	class LLVMRoutine;
 
-	class RoutineManager : public llvm::JITMemoryManager
+	class LLVMRoutineManager : public llvm::JITMemoryManager
 	{
 	public:
-		RoutineManager();
+		LLVMRoutineManager();
 
-		virtual ~RoutineManager();
+		virtual ~LLVMRoutineManager();
 
 		virtual void AllocateGOT();
 
@@ -45,13 +45,13 @@
 		virtual void setMemoryExecutable();
 		virtual void setPoisonMemory(bool poison);
 
-		Routine *acquireRoutine(void *entry);
+		LLVMRoutine *acquireRoutine(void *entry);
 
 	private:
-		Routine *routine;
+		LLVMRoutine *routine;
 
 		static volatile int averageInstructionSize;
 	};
 }
 
-#endif   // sw_RoutineManager_hpp
+#endif   // sw_LLVMRoutineManager_hpp
diff --git a/src/Reactor/Nucleus.cpp b/src/Reactor/Nucleus.cpp
index 2b5baaf..67dd392 100644
--- a/src/Reactor/Nucleus.cpp
+++ b/src/Reactor/Nucleus.cpp
@@ -29,8 +29,8 @@
 #include "llvm/Support/TargetSelect.h"
 #include "../lib/ExecutionEngine/JIT/JIT.h"
 
-#include "Routine.hpp"
-#include "RoutineManager.hpp"
+#include "LLVMRoutine.hpp"
+#include "LLVMRoutineManager.hpp"
 #include "x86.hpp"
 #include "CPUID.hpp"
 #include "Thread.hpp"
@@ -60,7 +60,7 @@
 
 namespace
 {
-	sw::RoutineManager *routineManager = nullptr;
+	sw::LLVMRoutineManager *routineManager = nullptr;
 	llvm::ExecutionEngine *executionEngine = nullptr;
 	llvm::IRBuilder<> *builder = nullptr;
 	llvm::LLVMContext *context = nullptr;
@@ -118,7 +118,7 @@
 		}
 
 		::module = new Module("", *::context);
-		::routineManager = new RoutineManager();
+		::routineManager = new LLVMRoutineManager();
 
 		#if defined(__x86_64__)
 			const char *architecture = "x86-64";
@@ -205,7 +205,7 @@
 		}
 
 		void *entry = ::executionEngine->getPointerToFunction(::function);
-		Routine *routine = ::routineManager->acquireRoutine(entry);
+		LLVMRoutine *routine = ::routineManager->acquireRoutine(entry);
 
 		if(CodeAnalystLogJITCode)
 		{
diff --git a/src/Reactor/Nucleus.hpp b/src/Reactor/Nucleus.hpp
index 0c53ca0..27f833f 100644
--- a/src/Reactor/Nucleus.hpp
+++ b/src/Reactor/Nucleus.hpp
@@ -34,6 +34,7 @@
 	class Value;
 	class Constant;
 	class BasicBlock;
+	class Routine;
 
 	enum Optimization
 	{
@@ -53,10 +54,6 @@
 
 	extern Optimization optimization[10];
 
-	class Routine;
-	class RoutineManager;
-	class Builder;
-
 	class Nucleus
 	{
 	public:
diff --git a/src/Reactor/Reactor.vcxproj b/src/Reactor/Reactor.vcxproj
index f9e24b6..0e15e93 100644
--- a/src/Reactor/Reactor.vcxproj
+++ b/src/Reactor/Reactor.vcxproj
@@ -266,15 +266,17 @@
     </ProjectReference>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClCompile Include="LLVMRoutine.cpp" />
+    <ClCompile Include="LLVMRoutineManager.cpp" />
     <ClCompile Include="Nucleus.cpp" />
     <ClCompile Include="Routine.cpp" />
-    <ClCompile Include="RoutineManager.cpp" />
   </ItemGroup>
   <ItemGroup>
+    <ClInclude Include="LLVMRoutine.hpp" />
+    <ClInclude Include="LLVMRoutineManager.hpp" />
     <ClInclude Include="Nucleus.hpp" />
     <ClInclude Include="Reactor.hpp" />
     <ClInclude Include="Routine.hpp" />
-    <ClInclude Include="RoutineManager.hpp" />
     <ClInclude Include="x86.hpp" />
   </ItemGroup>
   <ItemGroup>
diff --git a/src/Reactor/Reactor.vcxproj.filters b/src/Reactor/Reactor.vcxproj.filters
index 2a86f26..27a7fde 100644
--- a/src/Reactor/Reactor.vcxproj.filters
+++ b/src/Reactor/Reactor.vcxproj.filters
@@ -18,10 +18,13 @@
     <ClCompile Include="Nucleus.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="RoutineManager.cpp">
+    <ClCompile Include="Routine.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="Routine.cpp">
+    <ClCompile Include="LLVMRoutineManager.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="LLVMRoutine.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
   </ItemGroup>
@@ -35,10 +38,13 @@
     <ClInclude Include="x86.hpp">
       <Filter>Header Files</Filter>
     </ClInclude>
-    <ClInclude Include="RoutineManager.hpp">
+    <ClInclude Include="Routine.hpp">
       <Filter>Header Files</Filter>
     </ClInclude>
-    <ClInclude Include="Routine.hpp">
+    <ClInclude Include="LLVMRoutineManager.hpp">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="LLVMRoutine.hpp">
       <Filter>Header Files</Filter>
     </ClInclude>
   </ItemGroup>
diff --git a/src/Reactor/Routine.cpp b/src/Reactor/Routine.cpp
index 340b21d..df82ab8 100644
--- a/src/Reactor/Routine.cpp
+++ b/src/Reactor/Routine.cpp
@@ -14,74 +14,17 @@
 
 #include "Routine.hpp"
 
-#include "../Common/Memory.hpp"
 #include "../Common/Thread.hpp"
-#include "../Common/Types.hpp"
+
+#include <cassert>
 
 namespace sw
 {
-	Routine::Routine(int bufferSize) : bufferSize(bufferSize), dynamic(true)
+	Routine::Routine()
 	{
-		void *memory = allocateExecutable(bufferSize);
-
-		buffer = memory;
-		entry = memory;
-		functionSize = bufferSize;   // Updated by RoutineManager::endFunctionBody
-
 		bindCount = 0;
 	}
 
-	Routine::Routine(void *memory, int bufferSize, int offset) : bufferSize(bufferSize), functionSize(bufferSize), dynamic(false)
-	{
-		buffer = (unsigned char*)memory - offset;
-		entry = memory;
-
-		bindCount = 0;
-	}
-
-	Routine::~Routine()
-	{
-		if(dynamic)
-		{
-			deallocateExecutable(buffer, bufferSize);
-		}
-	}
-
-	void Routine::setFunctionSize(int functionSize)
-	{
-		this->functionSize = functionSize;
-	}
-
-	const void *Routine::getBuffer()
-	{
-		return buffer;
-	}
-
-	const void *Routine::getEntry()
-	{
-		return entry;
-	}
-
-	int Routine::getBufferSize()
-	{
-		return bufferSize;
-	}
-
-	int Routine::getFunctionSize()
-	{
-		return functionSize;
-	}
-
-	int Routine::getCodeSize()
-	{
-		return functionSize - static_cast<int>((uintptr_t)entry - (uintptr_t)buffer);
-	}
-
-	bool Routine::isDynamic()
-	{
-		return dynamic;
-	}
-
 	void Routine::bind()
 	{
 		atomicIncrement(&bindCount);
@@ -96,4 +39,9 @@
 			delete this;
 		}
 	}
+
+	Routine::~Routine()
+	{
+		assert(bindCount == 0);
+	}
 }
diff --git a/src/Reactor/Routine.hpp b/src/Reactor/Routine.hpp
index 6252a7a..b3ad7f5 100644
--- a/src/Reactor/Routine.hpp
+++ b/src/Reactor/Routine.hpp
@@ -17,38 +17,21 @@
 
 namespace sw
 {
-	class RoutineManager;
-
 	class Routine
 	{
-		friend class RoutineManager;
-
 	public:
-		Routine(int bufferSize);
-		Routine(void *memory, int bufferSize, int offset);
+		Routine();
 
-		~Routine();
+		virtual ~Routine();
 
-		void setFunctionSize(int functionSize);
+		virtual const void *getEntry() = 0;
 
-		const void *getBuffer();
-		const void *getEntry();
-		int getBufferSize();
-		int getFunctionSize();   // Includes constants before the entry point
-		int getCodeSize();       // Executable code only
-		bool isDynamic();
-
+		// Reference counting
 		void bind();
 		void unbind();
 
 	private:
-		void *buffer;
-		const void *entry;
-		int bufferSize;
-		int functionSize;
-
 		volatile int bindCount;
-		const bool dynamic;   // Generated or precompiled
 	};
 }
 
diff --git a/src/Reactor/RoutineManager.cpp b/src/Reactor/RoutineManager.cpp
deleted file mode 100644
index 928bec4..0000000
--- a/src/Reactor/RoutineManager.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "RoutineManager.hpp"
-
-#include "Routine.hpp"
-#include "llvm/Function.h"
-#include "../Common/Memory.hpp"
-#include "../Common/Thread.hpp"
-#include "../Common/Debug.hpp"
-
-namespace sw
-{
-	using namespace llvm;
-
-	volatile int RoutineManager::averageInstructionSize = 4;
-
-	RoutineManager::RoutineManager()
-	{
-		routine = 0;
-	}
-
-	RoutineManager::~RoutineManager()
-	{
-		delete routine;
-	}
-
-	void RoutineManager::AllocateGOT()
-	{
-		UNIMPLEMENTED();
-	}
-
-	uint8_t *RoutineManager::allocateStub(const GlobalValue *function, unsigned stubSize, unsigned alignment)
-	{
-		UNIMPLEMENTED();
-		return 0;
-	}
-
-	uint8_t *RoutineManager::startFunctionBody(const llvm::Function *function, uintptr_t &actualSize)
-	{
-		if(actualSize == 0)   // Estimate size
-		{
-			size_t instructionCount = 0;
-			for(llvm::Function::const_iterator basicBlock = function->begin(); basicBlock != function->end(); basicBlock++)
-			{
-				instructionCount += basicBlock->size();
-			}
-
-			actualSize = instructionCount * averageInstructionSize;
-		}
-		else   // Estimate was too low
-		{
-			sw::atomicIncrement(&averageInstructionSize);
-		}
-
-		// Round up to the next page size
-		size_t pageSize = memoryPageSize();
-		actualSize = (actualSize + pageSize - 1) & ~(pageSize - 1);
-
-		delete routine;
-		routine = new Routine(static_cast<int>(actualSize));
-
-		return (uint8_t*)routine->getBuffer();
-	}
-
-	void RoutineManager::endFunctionBody(const llvm::Function *function, uint8_t *functionStart, uint8_t *functionEnd)
-	{
-		routine->setFunctionSize(static_cast<int>(static_cast<ptrdiff_t>(functionEnd - functionStart)));
-	}
-
-	uint8_t *RoutineManager::startExceptionTable(const llvm::Function* F, uintptr_t &ActualSize)
-	{
-		UNIMPLEMENTED();
-		return 0;
-	}
-
-	void RoutineManager::endExceptionTable(const llvm::Function *F, uint8_t *TableStart, uint8_t *TableEnd, uint8_t* FrameRegister)
-	{
-		UNIMPLEMENTED();
-	}
-
-	uint8_t *RoutineManager::getGOTBase() const
-	{
-		ASSERT(!HasGOT);
-		return 0;
-	}
-
-	uint8_t *RoutineManager::allocateSpace(intptr_t Size, unsigned Alignment)
-	{
-		UNIMPLEMENTED();
-		return 0;
-	}
-
-	uint8_t *RoutineManager::allocateGlobal(uintptr_t Size, unsigned Alignment)
-	{
-		UNIMPLEMENTED();
-		return 0;
-	}
-
-	void RoutineManager::deallocateFunctionBody(void *Body)
-	{
-		delete routine;
-		routine = 0;
-	}
-
-	void RoutineManager::deallocateExceptionTable(void *ET)
-	{
-		if(ET)
-		{
-			UNIMPLEMENTED();
-		}
-	}
-
-	void RoutineManager::setMemoryWritable()
-	{
-	}
-
-	void RoutineManager::setMemoryExecutable()
-	{
-		markExecutable(routine->buffer, routine->bufferSize);
-	}
-
-	void RoutineManager::setPoisonMemory(bool poison)
-	{
-		UNIMPLEMENTED();
-	}
-
-	Routine *RoutineManager::acquireRoutine(void *entry)
-	{
-		routine->entry = entry;
-
-		Routine *result = routine;
-		routine = 0;
-
-		return result;
-	}
-}
