Deprecate DLL precaching support.

It has bitrotted and should be reimplemented with support from the
Reactor back-end if needed again.

Bug swiftshader:10

Change-Id: Ie926903ccd8117e91b9d13bf031a7b88287e7276
Reviewed-on: https://swiftshader-review.googlesource.com/7250
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d8cd924..c147ac9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -677,8 +677,6 @@
         ${SOURCE_DIR}/Main/FrameBufferGDI.hpp
         ${SOURCE_DIR}/Main/FrameBufferWin.cpp
         ${SOURCE_DIR}/Main/FrameBufferWin.hpp
-        ${SOURCE_DIR}/Reactor/DLL.cpp
-        ${SOURCE_DIR}/Reactor/DLL.hpp
     )
     list(APPEND OPENGL_COMPILER_LIST ${OPENGL_COMPILER_DIR}/ossource_win.cpp)
     list(APPEND EGL_LIST ${OPENGL_DIR}/libEGL/libEGL.rc)
diff --git a/src/Reactor/BUILD.gn b/src/Reactor/BUILD.gn
index baba9c0..0e3e8f4 100644
--- a/src/Reactor/BUILD.gn
+++ b/src/Reactor/BUILD.gn
@@ -47,7 +47,6 @@
   ]
 
   if (is_win) {
-    sources += [ "DLL.cpp" ]
     configs -= [ "//build/config/win:unicode" ]
   }
 
diff --git a/src/Reactor/DLL.cpp b/src/Reactor/DLL.cpp
deleted file mode 100644
index b6d6d1e..0000000
--- a/src/Reactor/DLL.cpp
+++ /dev/null
@@ -1,381 +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 "DLL.hpp"
-
-#include <time.h>
-
-#ifndef IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
-#define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040
-#endif
-
-#ifndef IMAGE_DLLCHARACTERISTICS_NX_COMPAT
-#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100
-#endif
-
-namespace sw
-{
-	#ifdef _M_AMD64
-		const bool AMD64 = true;
-	#else
-		const bool AMD64 = false;
-	#endif
-
-	DLL::DLL(const char *name, const void *constants, int constSize) : constants(constants), constSize(constSize)
-	{
-		dllName = new char[strlen(name) + 1];
-		strcpy(dllName, name);
-
-		codeSize = 0;
-	}
-
-	DLL::~DLL()
-	{
-		delete[] dllName;
-
-		for(FunctionList::iterator i = functionList.begin(); i != functionList.end(); i++)
-		{
-			delete i->second;
-		}
-	}
-
-	void DLL::addFunction(const void *function, const void *entry, int size)
-	{
-		functionOrder.push_back(function);
-		functionList[function] = new Function(codeSize, function, entry, size);
-
-		codeSize += size;
-	}
-
-	void DLL::addRelocation(const void *function, const void *address, bool ripRelative)
-	{
-		globalRelocations[function].push_back(Relocation((unsigned int)((unsigned char*)address - (unsigned char*)function), ripRelative));
-	}
-
-	void DLL::emit()
-	{
-		if(codeSize == 0)
-		{
-			return;
-		}
-
-		for(GlobalRelocations::iterator i = globalRelocations.begin(); i != globalRelocations.end(); i++)
-		{
-			const unsigned char *function = (const unsigned char*)i->first;
-			const std::vector<Relocation> &functionRelocations = i->second;
-			unsigned int location = functionList[function]->location;
-
-			for(unsigned int j = 0; j < functionRelocations.size(); j++)
-			{
-				unsigned int address = location + functionRelocations[j].offset;
-				unsigned int page = address / 0x1000;
-				unsigned short reloc = address - page * 0x1000;
-
-				unsigned int relocType = AMD64 ? IMAGE_REL_BASED_DIR64 : IMAGE_REL_BASED_HIGHLOW;
-				pageRelocations[page].push_back((relocType << 12) | reloc);
-			}
-		}
-
-		if(pageRelocations.empty())
-		{
-			pageRelocations[0];   // Initialize an emtpy list
-		}
-
-		int relocSize = 0;
-
-		for(PageRelocations::iterator i = pageRelocations.begin(); i != pageRelocations.end(); i++)
-		{
-			if(i->second.size() % 2)   // Pad to align to DWORD
-			{
-				i->second.push_back(0);
-			}
-
-			relocSize += (int)sizeof(IMAGE_BASE_RELOCATION) + (int)i->second.size() * (int)sizeof(unsigned short);
-		}
-
-		unsigned long timeDateStamp = (unsigned long)time(0);
-
-		memset(&DOSheader, 0, sizeof(DOSheader));
-		DOSheader.e_magic = IMAGE_DOS_SIGNATURE;   // "MZ"
-		DOSheader.e_lfanew = sizeof(DOSheader);
-
-		int base = 0x10000000;
-		int codePage = pageAlign(sizeof(DOSheader) + (AMD64 ? sizeof(COFFheader64) : sizeof(COFFheader32)));
-		int exportsPage = codePage + pageAlign(codeSize);
-		int exportsSize = (int)(sizeof(IMAGE_EXPORT_DIRECTORY) + functionList.size() * sizeof(void*) + (strlen(dllName) + 1));
-		int relocPage = exportsPage + pageAlign(exportsSize);
-		int constPage = relocPage + pageAlign(relocSize);
-
-		if(!AMD64)
-		{
-			memset(&COFFheader32, 0, sizeof(COFFheader32));
-			COFFheader32.Signature = IMAGE_NT_SIGNATURE;   // "PE"
-			COFFheader32.FileHeader.Machine = IMAGE_FILE_MACHINE_I386;
-			COFFheader32.FileHeader.NumberOfSections = 4;
-			COFFheader32.FileHeader.TimeDateStamp = timeDateStamp;
-			COFFheader32.FileHeader.PointerToSymbolTable = 0;   // Deprecated COFF symbol table
-			COFFheader32.FileHeader.NumberOfSymbols = 0;
-			COFFheader32.FileHeader.SizeOfOptionalHeader = sizeof(IMAGE_OPTIONAL_HEADER32);
-			COFFheader32.FileHeader.Characteristics =	IMAGE_FILE_EXECUTABLE_IMAGE |
-														IMAGE_FILE_32BIT_MACHINE |
-														IMAGE_FILE_DLL;
-
-			COFFheader32.OptionalHeader.Magic = IMAGE_NT_OPTIONAL_HDR32_MAGIC;
-			COFFheader32.OptionalHeader.MajorLinkerVersion = 8;
-			COFFheader32.OptionalHeader.MinorLinkerVersion = 0;
-			COFFheader32.OptionalHeader.SizeOfCode = fileAlign(codeSize);
-			COFFheader32.OptionalHeader.SizeOfInitializedData = fileAlign(exportsSize) + fileAlign(relocSize) + fileAlign(constSize);
-			COFFheader32.OptionalHeader.SizeOfUninitializedData = 0;
-			COFFheader32.OptionalHeader.AddressOfEntryPoint = 0;
-			COFFheader32.OptionalHeader.BaseOfCode = codePage;
-			COFFheader32.OptionalHeader.BaseOfData = exportsPage;
-
-			COFFheader32.OptionalHeader.ImageBase = base;
-			COFFheader32.OptionalHeader.SectionAlignment = 0x1000;
-			COFFheader32.OptionalHeader.FileAlignment = 0x200;
-			COFFheader32.OptionalHeader.MajorOperatingSystemVersion = 4;
-			COFFheader32.OptionalHeader.MinorOperatingSystemVersion = 0;
-			COFFheader32.OptionalHeader.MajorImageVersion = 0;
-			COFFheader32.OptionalHeader.MinorImageVersion = 0;
-			COFFheader32.OptionalHeader.MajorSubsystemVersion = 4;
-			COFFheader32.OptionalHeader.MinorSubsystemVersion = 0;
-			COFFheader32.OptionalHeader.Win32VersionValue = 0;
-			COFFheader32.OptionalHeader.SizeOfImage = constPage + pageAlign(constSize);
-			COFFheader32.OptionalHeader.SizeOfHeaders = fileAlign(sizeof(DOSheader) + sizeof(COFFheader32));
-			COFFheader32.OptionalHeader.CheckSum = 0;
-			COFFheader32.OptionalHeader.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI;
-			COFFheader32.OptionalHeader.DllCharacteristics =	IMAGE_DLLCHARACTERISTICS_NO_SEH |
-															IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE |   // Base address randomization
-															IMAGE_DLLCHARACTERISTICS_NX_COMPAT;       // Data Execution Prevention compatible
-			COFFheader32.OptionalHeader.SizeOfStackReserve = 1024 * 1024;
-			COFFheader32.OptionalHeader.SizeOfStackCommit = 4 * 1024;
-			COFFheader32.OptionalHeader.SizeOfHeapReserve = 1024 * 1024;
-			COFFheader32.OptionalHeader.SizeOfHeapCommit = 4 * 1024;
-			COFFheader32.OptionalHeader.LoaderFlags = 0;
-			COFFheader32.OptionalHeader.NumberOfRvaAndSizes = IMAGE_NUMBEROF_DIRECTORY_ENTRIES;
-
-			COFFheader32.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress = exportsPage;
-			COFFheader32.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size = exportsSize;
-
-			COFFheader32.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = relocPage;
-			COFFheader32.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = relocSize;
-		}
-		else
-		{
-			memset(&COFFheader64, 0, sizeof(COFFheader64));
-			COFFheader64.Signature = IMAGE_NT_SIGNATURE;   // "PE"
-			COFFheader64.FileHeader.Machine = IMAGE_FILE_MACHINE_AMD64;
-			COFFheader64.FileHeader.NumberOfSections = 4;
-			COFFheader64.FileHeader.TimeDateStamp = timeDateStamp;
-			COFFheader64.FileHeader.PointerToSymbolTable = 0;   // Deprecated COFF symbol table
-			COFFheader64.FileHeader.NumberOfSymbols = 0;
-			COFFheader64.FileHeader.SizeOfOptionalHeader = sizeof(IMAGE_OPTIONAL_HEADER64);
-			COFFheader64.FileHeader.Characteristics =	IMAGE_FILE_EXECUTABLE_IMAGE |
-														IMAGE_FILE_LARGE_ADDRESS_AWARE |
-														IMAGE_FILE_DLL;
-
-			COFFheader64.OptionalHeader.Magic = IMAGE_NT_OPTIONAL_HDR64_MAGIC;
-			COFFheader64.OptionalHeader.MajorLinkerVersion = 8;
-			COFFheader64.OptionalHeader.MinorLinkerVersion = 0;
-			COFFheader64.OptionalHeader.SizeOfCode = fileAlign(codeSize);
-			COFFheader64.OptionalHeader.SizeOfInitializedData = fileAlign(exportsSize) + fileAlign(relocSize) + fileAlign(constSize);
-			COFFheader64.OptionalHeader.SizeOfUninitializedData = 0;
-			COFFheader64.OptionalHeader.AddressOfEntryPoint = 0;
-			COFFheader64.OptionalHeader.BaseOfCode = codePage;
-
-			COFFheader64.OptionalHeader.ImageBase = base;
-			COFFheader64.OptionalHeader.SectionAlignment = 0x1000;
-			COFFheader64.OptionalHeader.FileAlignment = 0x200;
-			COFFheader64.OptionalHeader.MajorOperatingSystemVersion = 4;
-			COFFheader64.OptionalHeader.MinorOperatingSystemVersion = 0;
-			COFFheader64.OptionalHeader.MajorImageVersion = 0;
-			COFFheader64.OptionalHeader.MinorImageVersion = 0;
-			COFFheader64.OptionalHeader.MajorSubsystemVersion = 4;
-			COFFheader64.OptionalHeader.MinorSubsystemVersion = 0;
-			COFFheader64.OptionalHeader.Win32VersionValue = 0;
-			COFFheader64.OptionalHeader.SizeOfImage = constPage + pageAlign(constSize);
-			COFFheader64.OptionalHeader.SizeOfHeaders = fileAlign(sizeof(DOSheader) + sizeof(COFFheader64));
-			COFFheader64.OptionalHeader.CheckSum = 0;
-			COFFheader64.OptionalHeader.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI;
-			COFFheader64.OptionalHeader.DllCharacteristics =	IMAGE_DLLCHARACTERISTICS_NO_SEH |
-															IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE |   // Base address randomization
-															IMAGE_DLLCHARACTERISTICS_NX_COMPAT;       // Data Execution Prevention compatible
-			COFFheader64.OptionalHeader.SizeOfStackReserve = 1024 * 1024;
-			COFFheader64.OptionalHeader.SizeOfStackCommit = 4 * 1024;
-			COFFheader64.OptionalHeader.SizeOfHeapReserve = 1024 * 1024;
-			COFFheader64.OptionalHeader.SizeOfHeapCommit = 4 * 1024;
-			COFFheader64.OptionalHeader.LoaderFlags = 0;
-			COFFheader64.OptionalHeader.NumberOfRvaAndSizes = IMAGE_NUMBEROF_DIRECTORY_ENTRIES;
-
-			COFFheader64.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress = exportsPage;
-			COFFheader64.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size = exportsSize;
-
-			COFFheader64.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = relocPage;
-			COFFheader64.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = relocSize;
-		}
-
-		memset(&textSection, 0, sizeof(textSection));
-		strcpy((char*)&textSection.Name, ".text");
-		textSection.Misc.VirtualSize = pageAlign(codeSize);
-		textSection.VirtualAddress = codePage;
-		textSection.SizeOfRawData = fileAlign(codeSize);
-		textSection.PointerToRawData = fileAlign(sizeof(DOSheader) + (AMD64 ? sizeof(COFFheader64) : sizeof(COFFheader32)));
-		textSection.PointerToRelocations = 0;
-		textSection.PointerToLinenumbers = 0;
-		textSection.NumberOfRelocations = 0;
-		textSection.NumberOfLinenumbers = 0;
-		textSection.Characteristics = IMAGE_SCN_CNT_CODE |
-		                              IMAGE_SCN_MEM_EXECUTE |
-		                              IMAGE_SCN_MEM_READ;
-
-		memset(&exportsSection, 0, sizeof(exportsSection));
-		strcpy((char*)&exportsSection.Name, ".edata");
-		exportsSection.Misc.VirtualSize = pageAlign(exportsSize);
-		exportsSection.VirtualAddress = exportsPage;
-		exportsSection.SizeOfRawData = fileAlign(exportsSize);
-		exportsSection.PointerToRawData = textSection.PointerToRawData + fileAlign(codeSize);
-		exportsSection.PointerToRelocations = 0;
-		exportsSection.PointerToLinenumbers = 0;
-		exportsSection.NumberOfRelocations = 0;
-		exportsSection.NumberOfLinenumbers = 0;
-		exportsSection.Characteristics = IMAGE_SCN_CNT_INITIALIZED_DATA |
-		                                 IMAGE_SCN_MEM_READ;
-
-		memset(&relocSection, 0, sizeof(relocSection));
-		strcpy((char*)&relocSection.Name, ".reloc");
-		relocSection.Misc.VirtualSize = pageAlign(relocSize);
-		relocSection.VirtualAddress = relocPage;
-		relocSection.SizeOfRawData = fileAlign(relocSize);
-		relocSection.PointerToRawData = exportsSection.PointerToRawData + fileAlign(exportsSize);
-		relocSection.PointerToRelocations = 0;
-		relocSection.PointerToLinenumbers = 0;
-		relocSection.NumberOfRelocations = 0;
-		relocSection.NumberOfLinenumbers = 0;
-		relocSection.Characteristics = IMAGE_SCN_CNT_INITIALIZED_DATA |
-		                               IMAGE_SCN_MEM_DISCARDABLE |
-		                               IMAGE_SCN_MEM_READ;
-
-		memset(&constSection, 0, sizeof(constSection));
-		strcpy((char*)&constSection.Name, ".rdata");
-		constSection.Misc.VirtualSize = pageAlign(constSize);
-		constSection.VirtualAddress = constPage;
-		constSection.SizeOfRawData = fileAlign(constSize);
-		constSection.PointerToRawData = relocSection.PointerToRawData + fileAlign(relocSize);
-		constSection.PointerToRelocations = 0;
-		constSection.PointerToLinenumbers = 0;
-		constSection.NumberOfRelocations = 0;
-		constSection.NumberOfLinenumbers = 0;
-		constSection.Characteristics = IMAGE_SCN_CNT_INITIALIZED_DATA |
-		                               IMAGE_SCN_MEM_READ;
-
-		memset(&exportDirectory, 0, sizeof(exportDirectory));
-		exportDirectory.Characteristics = 0;
-		exportDirectory.TimeDateStamp = timeDateStamp;
-		exportDirectory.MajorVersion = 0;
-		exportDirectory.MinorVersion = 0;
-		exportDirectory.Name = (unsigned long)(exportsPage + sizeof(IMAGE_EXPORT_DIRECTORY) + functionList.size() * sizeof(void*));
-		exportDirectory.Base = 1;
-		exportDirectory.NumberOfFunctions = (unsigned long)functionList.size();
-		exportDirectory.NumberOfNames = 0;
-		exportDirectory.AddressOfFunctions = exportsPage + sizeof(IMAGE_EXPORT_DIRECTORY);
-		exportDirectory.AddressOfNames = 0;
-		exportDirectory.AddressOfNameOrdinals = 0;
-
-		FILE *file = fopen(dllName, "wb");
-
-		if(file)
-		{
-			fwrite(&DOSheader, 1, sizeof(DOSheader), file);
-
-			if(AMD64)
-			{
-				fwrite(&COFFheader64, 1, sizeof(COFFheader64), file);
-			}
-			else
-			{
-				fwrite(&COFFheader32, 1, sizeof(COFFheader32), file);
-			}
-
-			fwrite(&textSection, 1, sizeof(textSection), file);
-			fwrite(&exportsSection, 1, sizeof(textSection), file);
-			fwrite(&relocSection, 1, sizeof(relocSection), file);
-			fwrite(&constSection, 1, sizeof(constSection), file);
-
-			for(FunctionList::iterator i = functionList.begin(); i != functionList.end(); i++)
-			{
-				const void *function = i->first;
-				unsigned int location = i->second->location;
-				const std::vector<Relocation> &functionRelocations = globalRelocations[function];
-
-				for(unsigned int j = 0; j < functionRelocations.size(); j++)
-				{
-					unsigned int *address = (unsigned int*)((unsigned char*)i->second->buffer + functionRelocations[j].offset);
-
-					if(functionRelocations[j].ripRelative)
-					{
-						*address = base + codePage + location + (*address - (unsigned int)(size_t)function);
-					}
-					else
-					{
-						*address = base + constPage + (*address - (unsigned int)(size_t)constants);
-					}
-				}
-
-				fseek(file, textSection.PointerToRawData + location, SEEK_SET);
-				fwrite(i->second->buffer, 1, i->second->size, file);
-			}
-
-			fseek(file, exportsSection.PointerToRawData, SEEK_SET);
-			fwrite(&exportDirectory, 1, sizeof(exportDirectory), file);
-
-			for(unsigned int i = 0; i < functionOrder.size(); i++)
-			{
-				const void *buffer = functionOrder[i];
-				Function *function = functionList[buffer];
-
-				unsigned int functionAddress = codePage + function->location;
-				unsigned int functionEntry = functionAddress + (int)((size_t)function->entry - (size_t)buffer);
-				fwrite(&functionEntry, 1, sizeof(functionEntry), file);
-			}
-
-			fwrite(dllName, 1, strlen(dllName) + 1, file);
-
-			fseek(file, relocSection.PointerToRawData, SEEK_SET);
-
-			for(PageRelocations::iterator i = pageRelocations.begin(); i != pageRelocations.end(); i++)
-			{
-				IMAGE_BASE_RELOCATION relocationBlock;
-
-				relocationBlock.VirtualAddress = codePage + i->first * 0x1000;
-				relocationBlock.SizeOfBlock = (unsigned long)(sizeof(IMAGE_BASE_RELOCATION) + i->second.size() * sizeof(unsigned short));
-
-				fwrite(&relocationBlock, 1, sizeof(IMAGE_BASE_RELOCATION), file);
-
-				if(i->second.size() > 0)
-				{
-					fwrite(&i->second[0], 1, i->second.size() * sizeof(unsigned short), file);
-				}
-			}
-
-			fseek(file, constSection.PointerToRawData, SEEK_SET);
-			fwrite(constants, 1, constSize, file);
-
-			char *padding = new char[fileAlign(constSize) - constSize];
-			fwrite(padding, 1, fileAlign(constSize) - constSize, file);
-			delete[] padding;
-
-			fclose(file);
-		}
-	}
-}
diff --git a/src/Reactor/DLL.hpp b/src/Reactor/DLL.hpp
deleted file mode 100644
index f8cbf50..0000000
--- a/src/Reactor/DLL.hpp
+++ /dev/null
@@ -1,105 +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.
-
-#ifndef sw_DLL_hpp
-#define sw_DLL_hpp
-
-#include <windows.h>
-#include <vector>
-#include <map>
-
-namespace sw
-{
-	class DLL
-	{
-	public:
-		DLL(const char *name, const void *constants = 0, int constSize = 0);
-
-		~DLL();
-
-		void addFunction(const void *function, const void *entry, int size);
-		void addRelocation(const void *function, const void *address, bool ripRelative);
-		void emit();
-
-	private:
-		int pageAlign(int address)   // Align to 4 kB virtual page size
-		{
-			return (address + 0xFFF) & -0x1000;
-		}
-
-		int fileAlign(int address)   // Align to 512 byte file sections
-		{
-			return (address + 0x1FF) & -0x200;
-		}
-
-		char *dllName;
-
-		IMAGE_DOS_HEADER DOSheader;
-		IMAGE_NT_HEADERS32 COFFheader32;
-		IMAGE_NT_HEADERS64 COFFheader64;
-		IMAGE_SECTION_HEADER textSection;
-		IMAGE_SECTION_HEADER exportsSection;
-		IMAGE_SECTION_HEADER relocSection;
-		IMAGE_SECTION_HEADER constSection;
-
-		IMAGE_EXPORT_DIRECTORY exportDirectory;
-
-		struct Function
-		{
-			Function() {};
-			Function(unsigned int location, const void *function, const void *entry, int size) : location(location), entry(entry), size(size)
-			{
-				buffer = new unsigned char[size];
-
-				memcpy(buffer, function, size);
-			}
-
-			~Function()
-			{
-				delete[] buffer;
-			}
-
-			void *buffer;
-
-			unsigned int location;
-			const void *entry;
-			int size;
-		};
-
-		std::vector<const void*> functionOrder;
-		typedef std::map<const void*, Function*> FunctionList;
-		FunctionList functionList;
-		int codeSize;
-
-		const void *constants;
-		int constSize;
-
-		struct Relocation
-		{
-			Relocation(unsigned int offset, bool ripRelative) : offset(offset), ripRelative(ripRelative)
-			{
-			}
-
-			unsigned int offset;
-			bool ripRelative;
-		};
-
-		typedef std::map<const void*, std::vector<Relocation> > GlobalRelocations;
-		GlobalRelocations globalRelocations;
-		typedef std::map<unsigned int, std::vector<unsigned short> > PageRelocations;
-		PageRelocations pageRelocations;
-	};
-}
-
-#endif   // sw_DLL_hpp
diff --git a/src/Reactor/Reactor.vcxproj b/src/Reactor/Reactor.vcxproj
index f3e7326..f9e24b6 100644
--- a/src/Reactor/Reactor.vcxproj
+++ b/src/Reactor/Reactor.vcxproj
@@ -266,13 +266,11 @@
     </ProjectReference>

   </ItemDefinitionGroup>

   <ItemGroup>

-    <ClCompile Include="DLL.cpp" />

     <ClCompile Include="Nucleus.cpp" />

     <ClCompile Include="Routine.cpp" />

     <ClCompile Include="RoutineManager.cpp" />

   </ItemGroup>

   <ItemGroup>

-    <ClInclude Include="DLL.hpp" />

     <ClInclude Include="Nucleus.hpp" />

     <ClInclude Include="Reactor.hpp" />

     <ClInclude Include="Routine.hpp" />

diff --git a/src/Reactor/Reactor.vcxproj.filters b/src/Reactor/Reactor.vcxproj.filters
index e2d2f68..2a86f26 100644
--- a/src/Reactor/Reactor.vcxproj.filters
+++ b/src/Reactor/Reactor.vcxproj.filters
@@ -15,9 +15,6 @@
     </Filter>

   </ItemGroup>

   <ItemGroup>

-    <ClCompile Include="DLL.cpp">

-      <Filter>Source Files</Filter>

-    </ClCompile>

     <ClCompile Include="Nucleus.cpp">

       <Filter>Source Files</Filter>

     </ClCompile>

@@ -29,9 +26,6 @@
     </ClCompile>

   </ItemGroup>

   <ItemGroup>

-    <ClInclude Include="DLL.hpp">

-      <Filter>Header Files</Filter>

-    </ClInclude>

     <ClInclude Include="Nucleus.hpp">

       <Filter>Header Files</Filter>

     </ClInclude>

diff --git a/src/Renderer/RoutineCache.hpp b/src/Renderer/RoutineCache.hpp
index 1fdb66c..74dd842 100644
--- a/src/Renderer/RoutineCache.hpp
+++ b/src/Renderer/RoutineCache.hpp
@@ -34,141 +34,15 @@
 		HMODULE precacheDLL;
 		#endif
 	};
-}
 
-#if defined(_WIN32)
-	#include "Shader/Constants.hpp"
-	#include "Reactor/DLL.hpp"
-#endif
-
-namespace sw
-{
 	template<class State>
 	RoutineCache<State>::RoutineCache(int n, const char *precache) : LRUCache<State, Routine>(n), precache(precache)
 	{
-		#if defined(_WIN32)
-			precacheDLL = 0;
-
-			if(precache)
-			{
-				char dllName[1024]; sprintf(dllName, "%s.dll", precache);
-				char dirName[1024]; sprintf(dirName, "%s.dir", precache);
-
-				precacheDLL = LoadLibrary(dllName);
-				FILE *dir = fopen(dirName, "rb");
-				uintptr_t ordinal = 1;
-
-				while(precacheDLL && dir)
-				{
-					State state;
-					int offset;
-					int size;
-
-					size_t bytes = fread(&state, 1, sizeof(State), dir);
-					bytes += fread(&offset, 1, sizeof(offset), dir);
-					bytes += fread(&size, 1, sizeof(size), dir);
-
-					if(bytes != sizeof(State) + sizeof(offset) + sizeof(size))
-					{
-						break;
-					}
-
-					void (*routine)(void) = (void(*)(void))GetProcAddress(precacheDLL, (char*)ordinal);
-					ordinal++;
-
-					if(routine)
-					{
-						add(state, new Routine(routine, size, offset));
-					}
-				}
-
-				if(dir)
-				{
-					fclose(dir);
-				}
-			}
-		#endif
 	}
 
 	template<class State>
 	RoutineCache<State>::~RoutineCache()
 	{
-		#if defined(_WIN32)
-			char dllName[1024]; sprintf(dllName, "%s.dll", precache);
-			char dirName[1024]; sprintf(dirName, "%s.dir", precache);
-
-			if(precache)
-			{
-				DLL dll(dllName, &constants, sizeof(Constants));
-				FILE *dir = fopen(dirName, "wb");
-
-				for(int i = 0; i < getSize(); i++)
-				{
-					State &state = getKey(i);
-					Routine *routine = query(state);
-
-					if(routine)
-					{
-						unsigned char *buffer = (unsigned char*)routine->getBuffer();
-						unsigned char *entry = (unsigned char*)routine->getEntry();
-						int size = routine->getBufferSize();
-						int codeSize = routine->getCodeSize();
-
-						#ifndef _M_AMD64
-							for(int j = 1; j < codeSize - 4; j++)
-							{
-								unsigned char modRM_SIB = entry[j - 1];
-								unsigned int address = *(unsigned int*)&entry[j];
-
-								if((modRM_SIB & 0x05) == 0x05 && (address % 4) == 0)
-								{
-									if(address >= (unsigned int)buffer && address < (unsigned int)entry)   // Constant stored above the function entry
-									{
-										dll.addRelocation(buffer, &entry[j], true);
-
-										j += 4;
-									}
-								}
-							}
-						#else
-							for(int j = 1; j < codeSize - 4; j++)
-							{
-							//	unsigned char modRM_SIB = entry[j - 1];
-								uint64_t address = *(uint64_t*)&entry[j];
-
-							//	if((modRM_SIB & 0x05) == 0x05 && (address % 4) == 0)
-								{
-									if(address >= (uint64_t)buffer && address < (uint64_t)entry)   // Constant stored above the function entry
-									{
-										dll.addRelocation(buffer, &entry[j], true);
-
-										j += 4;
-									}
-								}
-							}
-						#endif
-
-						dll.addFunction(buffer, entry, size);
-						fwrite(&state, 1, sizeof(State), dir);
-						int offset = (int)(entry - buffer);
-						fwrite(&offset, 1, sizeof(offset), dir);
-						fwrite(&size, 1, sizeof(size), dir);
-					}
-				}
-
-				FreeLibrary(precacheDLL);
-
-				dll.emit();
-				fclose(dir);
-			}
-			else
-			{
-				FreeLibrary(precacheDLL);
-
-				remove(dllName);
-				remove(dirName);
-			}
-		#endif
 	}
 }