diff --git a/SwiftShader.sln b/SwiftShader.sln
index d09eb80..f5285a5 100644
--- a/SwiftShader.sln
+++ b/SwiftShader.sln
@@ -257,6 +257,10 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "D3D8", "src\D3D8\D3D8.vcxproj", "{F18D5ABF-CA3A-4B74-BDB2-4A1956C86F18}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Subzero", "src\Reactor\Subzero.vcxproj", "{0EB31AEC-B020-46AB-BA05-730F6D01C29B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SubzeroTest", "src\Reactor\SubzeroTest.vcxproj", "{4EC107AB-89E8-4A0B-8366-B3E81085AE07}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
@@ -732,6 +736,30 @@
 		{F18D5ABF-CA3A-4B74-BDB2-4A1956C86F18}.Release|Win32.ActiveCfg = Release|Win32
 		{F18D5ABF-CA3A-4B74-BDB2-4A1956C86F18}.Release|Win32.Build.0 = Release|Win32
 		{F18D5ABF-CA3A-4B74-BDB2-4A1956C86F18}.Release|x64.ActiveCfg = Release|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Debug|Win32.Build.0 = Debug|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Debug|x64.ActiveCfg = Debug|x64
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Debug|x64.Build.0 = Debug|x64
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Profile|Win32.ActiveCfg = Release|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Profile|Win32.Build.0 = Release|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Profile|x64.ActiveCfg = Release|x64
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Profile|x64.Build.0 = Release|x64
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Release|Win32.ActiveCfg = Release|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Release|Win32.Build.0 = Release|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Release|x64.ActiveCfg = Release|x64
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Release|x64.Build.0 = Release|x64
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Debug|Win32.ActiveCfg = Debug|Win32
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Debug|Win32.Build.0 = Debug|Win32
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Debug|x64.ActiveCfg = Debug|x64
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Debug|x64.Build.0 = Debug|x64
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Profile|Win32.ActiveCfg = Release|Win32
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Profile|Win32.Build.0 = Release|Win32
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Profile|x64.ActiveCfg = Release|x64
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Profile|x64.Build.0 = Release|x64
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Release|Win32.ActiveCfg = Release|Win32
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Release|Win32.Build.0 = Release|Win32
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Release|x64.ActiveCfg = Release|x64
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -773,5 +801,6 @@
 		{04FC5430-3F1B-42A2-A18A-D8BB7E5B2733} = {ED25C308-5BDB-43A7-BED6-C2C059FC2D7D}
 		{09ABE661-9BC0-4152-A820-1FB0522CAC01} = {B7E24D8E-6BE9-4DEF-A8B9-6A6E60CA60E9}
 		{9088FC9E-9843-4E0D-85D0-1B657AFC480A} = {B7E24D8E-6BE9-4DEF-A8B9-6A6E60CA60E9}
+		{4EC107AB-89E8-4A0B-8366-B3E81085AE07} = {ED25C308-5BDB-43A7-BED6-C2C059FC2D7D}
 	EndGlobalSection
 EndGlobal
diff --git a/src/Reactor/Main.cpp b/src/Reactor/Main.cpp
new file mode 100644
index 0000000..afdc73f
--- /dev/null
+++ b/src/Reactor/Main.cpp
@@ -0,0 +1,49 @@
+// 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 "Reactor.hpp"
+
+#include <cassert>
+
+using namespace sw;
+
+int main()
+{
+	Routine *routine = nullptr;
+
+	{
+		Function<Int(Int, Int)> function;
+		{
+			Int x = function.Arg<0>();
+			Int y = function.Arg<1>();
+   
+			Int sum = x + y;
+   
+			Return(sum);
+		}
+
+		routine = function(L"one");
+
+		if(routine)
+		{
+			int (*add)(int, int) = (int(*)(int,int))routine->getEntry();
+			int result = add(1, 2);
+			assert(result == 3);
+		}
+	}
+
+	delete routine;
+
+	return 0;
+}
diff --git a/src/Reactor/Subzero.sln b/src/Reactor/Subzero.sln
new file mode 100644
index 0000000..921cdb5
--- /dev/null
+++ b/src/Reactor/Subzero.sln
@@ -0,0 +1,34 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Subzero", "Subzero.vcxproj", "{0EB31AEC-B020-46AB-BA05-730F6D01C29B}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Profile|x64 = Profile|x64
+		Profile|x86 = Profile|x86
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Debug|x64.ActiveCfg = Debug|x64
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Debug|x64.Build.0 = Debug|x64
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Debug|x86.ActiveCfg = Debug|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Debug|x86.Build.0 = Debug|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Profile|x64.ActiveCfg = Release|x64
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Profile|x64.Build.0 = Release|x64
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Profile|x86.ActiveCfg = Release|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Profile|x86.Build.0 = Release|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Release|x64.ActiveCfg = Release|x64
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Release|x64.Build.0 = Release|x64
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Release|x86.ActiveCfg = Release|Win32
+		{0EB31AEC-B020-46AB-BA05-730F6D01C29B}.Release|x86.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/src/Reactor/Subzero.vcxproj b/src/Reactor/Subzero.vcxproj
new file mode 100644
index 0000000..7bf864c
--- /dev/null
+++ b/src/Reactor/Subzero.vcxproj
@@ -0,0 +1,299 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{0EB31AEC-B020-46AB-BA05-730F6D01C29B}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>Subzero</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>SZTARGET=X8632;ALLOW_DUMP=0;ALLOW_TIMERS=0;ALLOW_LLVM_CL=0;ALLOW_LLVM_IR=0;ALLOW_LLVM_IR_AS_INPUT=0;ALLOW_MINIMAL_BUILD=0;ALLOW_WASM=0;ICE_THREAD_LOCAL_HACK=0;WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalUsingDirectories>%(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+      <AdditionalIncludeDirectories>..\;$(SolutionDir)third_party\pnacl-subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\pnacl-subzero\pnacl-llvm\include</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>SZTARGET=X8664;ALLOW_DUMP=0;ALLOW_TIMERS=0;ALLOW_LLVM_CL=0;ALLOW_LLVM_IR=0;ALLOW_LLVM_IR_AS_INPUT=0;ALLOW_MINIMAL_BUILD=0;ALLOW_WASM=0;ICE_THREAD_LOCAL_HACK=0;WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalUsingDirectories>%(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+      <AdditionalIncludeDirectories>..\;$(SolutionDir)third_party\pnacl-subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\pnacl-subzero\pnacl-llvm\include</AdditionalIncludeDirectories>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>SZTARGET=X8632;ALLOW_DUMP=0;ALLOW_TIMERS=0;ALLOW_LLVM_CL=0;ALLOW_LLVM_IR=0;ALLOW_LLVM_IR_AS_INPUT=0;ALLOW_MINIMAL_BUILD=0;ALLOW_WASM=0;ICE_THREAD_LOCAL_HACK=0;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalUsingDirectories>%(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+      <AdditionalIncludeDirectories>..\;$(SolutionDir)third_party\pnacl-subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\pnacl-subzero\pnacl-llvm\include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>Full</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>SZTARGET=X8664;ALLOW_DUMP=0;ALLOW_TIMERS=0;ALLOW_LLVM_CL=0;ALLOW_LLVM_IR=0;ALLOW_LLVM_IR_AS_INPUT=0;ALLOW_MINIMAL_BUILD=0;ALLOW_WASM=0;ICE_THREAD_LOCAL_HACK=0;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalUsingDirectories>%(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+      <AdditionalIncludeDirectories>..\;$(SolutionDir)third_party\pnacl-subzero;$(SolutionDir)third_party\llvm-subzero\include;$(SolutionDir)third_party\pnacl-subzero\pnacl-llvm\include</AdditionalIncludeDirectories>
+      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\APInt.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Atomic.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\circular_raw_ostream.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\CommandLine.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\ConvertUTF.c" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\ConvertUTFWrapper.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Debug.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\ErrorHandling.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\FoldingSet.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Hashing.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Host.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\ManagedStatic.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\MemoryBuffer.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Mutex.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Path.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Process.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Program.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\raw_ostream.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\raw_os_ostream.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Signals.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\SmallPtrSet.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\SmallVector.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\StringExtras.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\StringMap.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\StringRef.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\StringSaver.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\TargetParser.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Threading.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Timer.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\TimeValue.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Triple.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Twine.cpp" />
+    <ClCompile Include="..\..\third_party\pnacl-subzero\src\IceInstX8632.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\third_party\pnacl-subzero\src\IceInstX8664.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\third_party\pnacl-subzero\src\IceTargetLoweringX8632.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\third_party\pnacl-subzero\src\IceTargetLoweringX8664.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceAssembler.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceCfg.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceCfgNode.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceClFlags.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceELFObjectWriter.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceELFSection.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceFixups.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceGlobalContext.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceGlobalInits.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInst.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInstrumentation.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceIntrinsics.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceLiveness.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceLoopAnalyzer.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceMangling.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceMemory.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceOperand.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRangeSpec.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRegAlloc.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRevision.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRNG.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceSwitchLowering.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLowering.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLoweringX86.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceThreading.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTimerTree.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTypes.cpp" />
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceVariableSplitting.cpp" />
+    <ClCompile Include="Routine.cpp" />
+    <ClCompile Include="SubzeroReactor.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceAssembler.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceAssemblerX8632.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceAssemblerX86Base.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceAssemblerX86BaseImpl.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceBitVector.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceBuildDefs.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceCfg.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceCfgNode.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceClFlags.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceConditionCodesX8632.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceDefs.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceELFObjectWriter.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceELFSection.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceELFStreamer.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceFixups.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceGlobalContext.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceGlobalInits.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInst.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInstrumentation.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInstVarIter.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInstX8632.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInstX86Base.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\iceinstx86baseimpl.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceIntrinsics.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceLiveness.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceLoopAnalyzer.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceMangling.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceMemory.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceOperand.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IcePhiLoweringImpl.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRangeSpec.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRegAlloc.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRegistersX8632.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRegList.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRevision.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRNG.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceStringPool.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceSwitchLowering.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLowering.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLoweringX8632.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLoweringX8632Traits.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLoweringX86Base.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\icetargetloweringx86baseimpl.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLoweringX86RegClass.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceThreading.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTimerTree.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTLS.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTypes.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceUtils.h" />
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceVariableSplitting.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\IceClFlags.def" />
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInst.def" />
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLowering.def" />
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTimerTree.def" />
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTypes.def" />
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\SZTargets.def" />
+    <None Include="..\..\third_party\pnacl-subzero\src\IceInstX8632.def" />
+    <None Include="..\..\third_party\pnacl-subzero\src\IceInstX8664.def" />
+    <None Include="..\..\third_party\pnacl-subzero\src\IceTargetLoweringX8632.def" />
+    <None Include="..\..\third_party\pnacl-subzero\src\IceTargetLoweringX8664.def" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/src/Reactor/Subzero.vcxproj.filters b/src/Reactor/Subzero.vcxproj.filters
new file mode 100644
index 0000000..89b2c4d
--- /dev/null
+++ b/src/Reactor/Subzero.vcxproj.filters
@@ -0,0 +1,404 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+    <Filter Include="Source Files\LLVM">
+      <UniqueIdentifier>{af578803-bb6c-4fb6-a852-956e276b0b41}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceAssembler.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceCfg.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceCfgNode.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceClFlags.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceELFObjectWriter.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceELFSection.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceFixups.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceGlobalContext.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceGlobalInits.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInst.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInstrumentation.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceIntrinsics.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceLiveness.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceLoopAnalyzer.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceMangling.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceMemory.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceOperand.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRangeSpec.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRegAlloc.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRevision.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRNG.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceSwitchLowering.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLowering.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLoweringX86.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceThreading.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTimerTree.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTypes.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\pnacl-subzero\src\IceVariableSplitting.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\APInt.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Atomic.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\circular_raw_ostream.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\CommandLine.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\ConvertUTF.c">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\ConvertUTFWrapper.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Debug.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\ErrorHandling.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\FoldingSet.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Hashing.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Host.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\ManagedStatic.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\MemoryBuffer.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Mutex.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Path.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Process.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Program.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\raw_os_ostream.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\raw_ostream.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Signals.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\SmallPtrSet.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\SmallVector.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\StringExtras.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\StringMap.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\StringRef.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\StringSaver.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\TargetParser.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Threading.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Timer.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\TimeValue.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Triple.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="$(SolutionDir)third_party\llvm-subzero\lib\Support\Twine.cpp">
+      <Filter>Source Files\LLVM</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\third_party\pnacl-subzero\src\IceInstX8664.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\third_party\pnacl-subzero\src\IceTargetLoweringX8664.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\third_party\pnacl-subzero\src\IceInstX8632.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\third_party\pnacl-subzero\src\IceTargetLoweringX8632.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="SubzeroReactor.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Routine.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceAssembler.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceAssemblerX8632.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceAssemblerX86Base.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceAssemblerX86BaseImpl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceBitVector.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceBuildDefs.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceCfg.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceCfgNode.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceClFlags.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceConditionCodesX8632.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceDefs.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceELFObjectWriter.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceELFSection.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceELFStreamer.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceFixups.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceGlobalContext.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceGlobalInits.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInst.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInstrumentation.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInstVarIter.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInstX8632.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInstX86Base.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\iceinstx86baseimpl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceIntrinsics.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceLiveness.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceLoopAnalyzer.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceMangling.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceMemory.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceOperand.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IcePhiLoweringImpl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRangeSpec.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRegAlloc.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRegistersX8632.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRegList.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRevision.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceRNG.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceStringPool.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceSwitchLowering.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLowering.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLoweringX8632.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLoweringX8632Traits.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLoweringX86Base.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\icetargetloweringx86baseimpl.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLoweringX86RegClass.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceThreading.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTimerTree.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTLS.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTypes.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceUtils.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="$(SolutionDir)third_party\pnacl-subzero\src\IceVariableSplitting.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\IceClFlags.def">
+      <Filter>Source Files</Filter>
+    </None>
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\IceInst.def">
+      <Filter>Source Files</Filter>
+    </None>
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTargetLowering.def">
+      <Filter>Source Files</Filter>
+    </None>
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTimerTree.def">
+      <Filter>Source Files</Filter>
+    </None>
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\IceTypes.def">
+      <Filter>Source Files</Filter>
+    </None>
+    <None Include="$(SolutionDir)third_party\pnacl-subzero\src\SZTargets.def">
+      <Filter>Source Files</Filter>
+    </None>
+    <None Include="..\..\third_party\pnacl-subzero\src\IceInstX8664.def">
+      <Filter>Header Files</Filter>
+    </None>
+    <None Include="..\..\third_party\pnacl-subzero\src\IceTargetLoweringX8664.def">
+      <Filter>Header Files</Filter>
+    </None>
+    <None Include="..\..\third_party\pnacl-subzero\src\IceInstX8632.def">
+      <Filter>Header Files</Filter>
+    </None>
+    <None Include="..\..\third_party\pnacl-subzero\src\IceTargetLoweringX8632.def">
+      <Filter>Header Files</Filter>
+    </None>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
new file mode 100644
index 0000000..9adc3fb
--- /dev/null
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -0,0 +1,5685 @@
+// 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 "Nucleus.hpp"
+
+#include "Reactor.hpp"
+#include "Routine.hpp"
+
+#include "src/IceTypes.h"
+#include "src/IceCfg.h"
+#include "src/IceELFStreamer.h"
+#include "src/IceGlobalContext.h"
+#include "src/IceCfgNode.h"
+#include "src/IceELFObjectWriter.h"
+
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/raw_os_ostream.h"
+
+#define WIN32_LEAN_AND_MEAN
+#define NOMINMAX
+#include <Windows.h>
+
+#include <mutex>
+#include <limits>
+#include <iostream>
+#include <cassert>
+
+namespace
+{
+	Ice::GlobalContext *context = nullptr;
+	Ice::Cfg *function = nullptr;
+	Ice::CfgNode *basicBlock = nullptr;
+	Ice::CfgLocalAllocatorScope *allocator = nullptr;
+	sw::Routine *routine = nullptr;
+
+	std::mutex codegenMutex;
+
+	Ice::ELFFileStreamer *elfFile = nullptr;
+	Ice::Fdstream *out = nullptr;
+}
+
+namespace sw
+{
+	class Value : public Ice::Variable {};
+	class BasicBlock : public Ice::CfgNode {};
+
+	Ice::Type T(Type *t)
+	{
+		return (Ice::Type)reinterpret_cast<std::intptr_t>(t);
+	}
+
+	Type *T(Ice::Type t)
+	{
+		return reinterpret_cast<Type*>(t);
+	}
+
+	Value *V(Ice::Variable *v)
+	{
+		return reinterpret_cast<Value*>(v);
+	}
+
+	Optimization optimization[10] = {InstructionCombining, Disabled};
+
+	void *loadImage(uint8_t *const elfImage)
+	{
+		using ElfHeader = std::conditional<sizeof(void*) == 8, Elf64_Ehdr, Elf32_Ehdr>::type;
+		ElfHeader *elfHeader = (ElfHeader*)elfImage;
+
+		if(!elfHeader->checkMagic())
+		{
+			return nullptr;
+		}
+
+		using SectionHeader = std::conditional<sizeof(void*) == 8, Elf64_Shdr, Elf32_Shdr>::type;
+		SectionHeader *sectionHeader = (SectionHeader*)(elfImage + elfHeader->e_shoff);
+		void *entry = nullptr;
+
+		for(int i = 0; i < elfHeader->e_shnum; i++)
+		{
+			if(sectionHeader[i].sh_type == SHT_PROGBITS && sectionHeader[i].sh_flags & SHF_EXECINSTR)
+			{
+				entry = elfImage + sectionHeader[i].sh_offset;
+			}
+		}
+
+		return entry;
+	}
+
+	template<typename T>
+	struct ExecutableAllocator
+	{
+		ExecutableAllocator() {};
+		template<class U> ExecutableAllocator(const ExecutableAllocator<U> &other) {};
+
+		using value_type = T;
+		using size_type = std::size_t;
+
+		T *allocate(size_type n)
+		{
+			return (T*)VirtualAlloc(NULL, sizeof(T) * n, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
+		}
+
+		void deallocate(T *p, size_type n)
+		{
+			VirtualFree(p, 0, MEM_RELEASE);
+		}
+	};
+
+	class ELFMemoryStreamer : public Ice::ELFStreamer, public Routine
+	{
+		ELFMemoryStreamer(const ELFMemoryStreamer &) = delete;
+		ELFMemoryStreamer &operator=(const ELFMemoryStreamer &) = delete;
+
+	public:
+		ELFMemoryStreamer() : Routine()
+		{
+			position = 0;
+			buffer.reserve(0x1000);
+		}
+
+		virtual ~ELFMemoryStreamer()
+		{
+			if(buffer.size() != 0)
+			{
+				DWORD exeProtection;
+				VirtualProtect(&buffer[0], buffer.size(), oldProtection, &exeProtection);
+			}
+		}
+
+		void write8(uint8_t Value) override
+		{
+			if(position == (uint64_t)buffer.size())
+			{
+				buffer.push_back(Value);
+				position++;
+			}
+			else if(position < (uint64_t)buffer.size())
+			{
+				buffer[position] = Value;
+				position++;
+			}
+			else assert(false && "UNIMPLEMENTED");
+		}
+
+		void writeBytes(llvm::StringRef Bytes) override
+		{
+			std::size_t oldSize = buffer.size();
+			buffer.resize(oldSize + Bytes.size());
+			memcpy(&buffer[oldSize], Bytes.begin(), Bytes.size());
+			position += Bytes.size();
+		}
+
+		uint64_t tell() const override { return position; }
+
+		void seek(uint64_t Off) override { position = Off; }
+
+		const void *getEntry() override
+		{
+			VirtualProtect(&buffer[0], buffer.size(), PAGE_EXECUTE_READ, &oldProtection);
+			position = std::numeric_limits<std::size_t>::max();  // Can't write more data after this
+
+			return loadImage(&buffer[0]);
+		}
+
+	private:
+		std::vector<uint8_t, ExecutableAllocator<uint8_t>> buffer;
+		std::size_t position;
+		DWORD oldProtection;
+	};
+
+	Nucleus::Nucleus()
+	{
+		::codegenMutex.lock();   // Reactor is currently not thread safe
+
+		Ice::ClFlags::Flags.setTargetArch(sizeof(void*) == 8 ? Ice::Target_X8664 : Ice::Target_X8632);
+		Ice::ClFlags::Flags.setOutFileType(Ice::FT_Elf);
+		Ice::ClFlags::Flags.setOptLevel(Ice::Opt_2);
+		Ice::ClFlags::Flags.setApplicationBinaryInterface(Ice::ABI_Platform);
+
+		std::unique_ptr<Ice::Ostream> cout(new llvm::raw_os_ostream(std::cout));
+
+		if(false)   // Write out to a file
+		{
+			std::error_code errorCode;
+			::out = new Ice::Fdstream("out.o", errorCode, llvm::sys::fs::F_None);
+			::elfFile = new Ice::ELFFileStreamer(*out);
+			::context = new Ice::GlobalContext(cout.get(), cout.get(), cout.get(), elfFile);
+		}
+		else
+		{
+			ELFMemoryStreamer *elfMemory = new ELFMemoryStreamer();
+			::context = new Ice::GlobalContext(cout.get(), cout.get(), cout.get(), elfMemory);
+			::routine = elfMemory;
+		}
+	}
+
+	Nucleus::~Nucleus()
+	{
+		delete ::allocator;
+		delete ::function;
+		delete ::context;
+
+		delete ::elfFile;
+		delete ::out;
+
+		::codegenMutex.unlock();
+	}
+
+	Routine *Nucleus::acquireRoutine(const wchar_t *name, bool runOptimizations)
+	{
+		if(basicBlock->getInsts().empty() || basicBlock->getInsts().back().getKind() != Ice::Inst::Ret)
+		{
+			createRetVoid();
+		}
+
+		std::wstring wideName(name);
+		std::string asciiName(wideName.begin(), wideName.end());
+		::function->setFunctionName(Ice::GlobalString::createWithString(::context, asciiName));
+
+		::function->translate();
+
+		::context->emitFileHeader();
+		::function->emitIAS();
+		auto assembler = ::function->releaseAssembler();
+		::context->getObjectWriter()->writeFunctionCode(::function->getFunctionName(), false, assembler.get());
+		::context->getObjectWriter()->writeNonUserSections();
+
+		return ::routine;
+	}
+
+	void Nucleus::optimize()
+	{
+	}
+
+	Value *Nucleus::allocateStackVariable(Type *t, int arraySize)
+	{
+		Ice::Type type = T(t);
+		Ice::Variable *value = ::function->makeVariable(type);
+		assert(type == Ice::IceType_i32 && arraySize == 0 && "UNIMPLEMENTED");
+		auto bytes = Ice::ConstantInteger32::create(::context, type, 4);
+		auto alloca = Ice::InstAlloca::create(::function, value, bytes, 4);
+		::function->getEntryNode()->appendInst(alloca);
+		return V(value);
+	}
+
+	BasicBlock *Nucleus::createBasicBlock()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	BasicBlock *Nucleus::getInsertBlock()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	void Nucleus::setInsertBlock(BasicBlock *basicBlock)
+	{
+		assert(!basicBlock->getInsts().back().getTerminatorEdges().empty() && "Previous basic block must have a terminator");
+		assert(false && "UNIMPLEMENTED"); return;
+	}
+
+	BasicBlock *Nucleus::getPredecessor(BasicBlock *basicBlock)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	void Nucleus::createFunction(Type *ReturnType, std::vector<Type*> &Params)
+	{
+		uint32_t sequenceNumber = 0;
+		::function = Ice::Cfg::create(::context, sequenceNumber).release();
+		::allocator = new Ice::CfgLocalAllocatorScope(::function);
+
+		for(Type *type : Params)
+		{
+			Ice::Variable *arg = ::function->makeVariable(T(type));
+			::function->addArg(arg);
+		}
+
+		Ice::CfgNode *node = ::function->makeNode();
+		::function->setEntryNode(node);
+		::basicBlock = node;
+	}
+
+	Value *Nucleus::getArgument(unsigned int index)
+	{
+		return V(::function->getArgs()[index]);
+	}
+
+	void Nucleus::createRetVoid()
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	void Nucleus::createRet(Value *v)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	void Nucleus::createBr(BasicBlock *dest)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	void Nucleus::createCondBr(Value *cond, BasicBlock *ifTrue, BasicBlock *ifFalse)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Value *Nucleus::createAdd(Value *lhs, Value *rhs)
+	{
+		Ice::Variable *sum = ::function->makeVariable(Ice::IceType_i32);
+		Ice::InstArithmetic *add = Ice::InstArithmetic::create(::function, Ice::InstArithmetic::Add, sum, lhs, rhs);
+		::basicBlock->appendInst(add);
+		return V(sum);
+	}
+
+	Value *Nucleus::createSub(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createMul(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createUDiv(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createSDiv(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFAdd(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFSub(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFMul(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFDiv(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createURem(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createSRem(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFRem(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createShl(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createLShr(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createAShr(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createAnd(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createOr(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createXor(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createNeg(Value *v)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFNeg(Value *v)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createNot(Value *v)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createLoad(Value *ptr, bool isVolatile, unsigned int align)
+	{
+		Ice::Variable *value = ::function->makeVariable(ptr->getType());
+		auto load = Ice::InstLoad::create(::function, value, ptr, align);
+		::basicBlock->appendInst(load);
+		return V(value);
+	}
+
+	Value *Nucleus::createStore(Value *value, Value *ptr, bool isVolatile, unsigned int align)
+	{
+		auto store = Ice::InstStore::create(::function, value, ptr, align);
+		::basicBlock->appendInst(store);
+		return value;
+	}
+
+	Value *Nucleus::createStore(Constant *constant, Value *ptr, bool isVolatile, unsigned int align)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createGEP(Value *ptr, Value *index)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createAtomicAdd(Value *ptr, Value *value)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createTrunc(Value *v, Type *destType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createZExt(Value *v, Type *destType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createSExt(Value *v, Type *destType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFPToSI(Value *v, Type *destType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createUIToFP(Value *v, Type *destType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createSIToFP(Value *v, Type *destType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFPTrunc(Value *v, Type *destType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFPExt(Value *v, Type *destType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createPtrToInt(Value *v, Type *destType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createIntToPtr(Value *v, Type *destType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createBitCast(Value *v, Type *destType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createIntCast(Value *v, Type *destType, bool isSigned)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createICmpEQ(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createICmpNE(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createICmpUGT(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createICmpUGE(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createICmpULT(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createICmpULE(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createICmpSGT(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createICmpSGE(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createICmpSLT(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createICmpSLE(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpOEQ(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpOGT(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpOGE(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpOLT(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpOLE(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpONE(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpORD(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpUNO(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpUEQ(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpUGT(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpUGE(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpULT(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpULE(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createFCmpUNE(Value *lhs, Value *rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createExtractElement(Value *vector, int index)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createInsertElement(Value *vector, Value *element, int index)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createShuffleVector(Value *V1, Value *V2, Value *mask)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createSelect(Value *C, Value *ifTrue, Value *ifFalse)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createSwitch(Value *v, BasicBlock *Dest, unsigned NumCases)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	void Nucleus::addSwitchCase(Value *Switch, int Case, BasicBlock *Branch)
+	{
+		assert(false && "UNIMPLEMENTED"); return;
+	}
+
+	void Nucleus::createUnreachable()
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Value *Nucleus::createSwizzle(Value *val, unsigned char select)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Value *Nucleus::createMask(Value *lhs, Value *rhs, unsigned char select)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createConstantPointer(const void *address, Type *Ty, bool isConstant, unsigned int Align)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Type *Nucleus::getPointerType(Type *ElementType)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createNullValue(Type *Ty)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createConstantInt(int64_t i)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createConstantInt(int i)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createConstantInt(unsigned int i)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createConstantBool(bool b)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createConstantByte(signed char i)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createConstantByte(unsigned char i)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createConstantShort(short i)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createConstantShort(unsigned short i)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createConstantFloat(float x)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createNullPointer(Type *Ty)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Constant *Nucleus::createConstantVector(Constant *const *Vals, unsigned NumVals)
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Type *Void::getType()
+	{
+		return T(Ice::IceType_void);
+	}
+
+	LValue::LValue(Type *type, int arraySize)
+	{
+		address = Nucleus::allocateStackVariable(type, arraySize);
+	}
+
+	Value *LValue::loadValue(unsigned int alignment) const
+	{
+		return Nucleus::createLoad(address, false, alignment);
+	}
+
+	Value *LValue::storeValue(Value *value, unsigned int alignment) const
+	{
+		return Nucleus::createStore(value, address, false, alignment);
+	}
+
+	Value *LValue::storeValue(Constant *constant, unsigned int alignment) const
+	{
+		return Nucleus::createStore(constant, address, false, alignment);
+	}
+
+	Value *LValue::getAddress(Value *index) const
+	{
+		return Nucleus::createGEP(address, index);
+	}
+
+	Bool::Bool(Argument<Bool> argument)
+	{
+		storeValue(argument.value);
+	}
+
+	Bool::Bool()
+	{
+	}
+
+	Bool::Bool(bool x)
+	{
+		storeValue(Nucleus::createConstantBool(x));
+	}
+
+	Bool::Bool(RValue<Bool> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	Bool::Bool(const Bool &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Bool::Bool(const Reference<Bool> &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<Bool> Bool::operator=(RValue<Bool> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Bool> Bool::operator=(const Bool &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Bool>(value);
+	}
+
+	RValue<Bool> Bool::operator=(const Reference<Bool> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Bool>(value);
+	}
+
+	RValue<Bool> operator!(RValue<Bool> val)
+	{
+		return RValue<Bool>(Nucleus::createNot(val.value));
+	}
+
+	RValue<Bool> operator&&(RValue<Bool> lhs, RValue<Bool> rhs)
+	{
+		return RValue<Bool>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator||(RValue<Bool> lhs, RValue<Bool> rhs)
+	{
+		return RValue<Bool>(Nucleus::createOr(lhs.value, rhs.value));
+	}
+
+	Type *Bool::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Byte::Byte(Argument<Byte> argument)
+	{
+		storeValue(argument.value);
+	}
+
+	Byte::Byte(RValue<Int> cast)
+	{
+		Value *integer = Nucleus::createTrunc(cast.value, Byte::getType());
+
+		storeValue(integer);
+	}
+
+	Byte::Byte(RValue<UInt> cast)
+	{
+		Value *integer = Nucleus::createTrunc(cast.value, Byte::getType());
+
+		storeValue(integer);
+	}
+
+	Byte::Byte(RValue<UShort> cast)
+	{
+		Value *integer = Nucleus::createTrunc(cast.value, Byte::getType());
+
+		storeValue(integer);
+	}
+
+	Byte::Byte()
+	{
+	}
+
+	Byte::Byte(int x)
+	{
+		storeValue(Nucleus::createConstantByte((unsigned char)x));
+	}
+
+	Byte::Byte(unsigned char x)
+	{
+		storeValue(Nucleus::createConstantByte(x));
+	}
+
+	Byte::Byte(RValue<Byte> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	Byte::Byte(const Byte &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Byte::Byte(const Reference<Byte> &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<Byte> Byte::operator=(RValue<Byte> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Byte> Byte::operator=(const Byte &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Byte>(value);
+	}
+
+	RValue<Byte> Byte::operator=(const Reference<Byte> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Byte>(value);
+	}
+
+	RValue<Byte> operator+(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Byte>(Nucleus::createAdd(lhs.value, rhs.value));
+	}
+
+	RValue<Byte> operator-(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Byte>(Nucleus::createSub(lhs.value, rhs.value));
+	}
+
+	RValue<Byte> operator*(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Byte>(Nucleus::createMul(lhs.value, rhs.value));
+	}
+
+	RValue<Byte> operator/(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Byte>(Nucleus::createUDiv(lhs.value, rhs.value));
+	}
+
+	RValue<Byte> operator%(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Byte>(Nucleus::createURem(lhs.value, rhs.value));
+	}
+
+	RValue<Byte> operator&(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Byte>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<Byte> operator|(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Byte>(Nucleus::createOr(lhs.value, rhs.value));
+	}
+
+	RValue<Byte> operator^(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Byte>(Nucleus::createXor(lhs.value, rhs.value));
+	}
+
+	RValue<Byte> operator<<(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Byte>(Nucleus::createShl(lhs.value, rhs.value));
+	}
+
+	RValue<Byte> operator>>(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Byte>(Nucleus::createLShr(lhs.value, rhs.value));
+	}
+
+	RValue<Byte> operator+=(const Byte &lhs, RValue<Byte> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<Byte> operator-=(const Byte &lhs, RValue<Byte> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<Byte> operator*=(const Byte &lhs, RValue<Byte> rhs)
+	{
+		return lhs = lhs * rhs;
+	}
+
+	RValue<Byte> operator/=(const Byte &lhs, RValue<Byte> rhs)
+	{
+		return lhs = lhs / rhs;
+	}
+
+	RValue<Byte> operator%=(const Byte &lhs, RValue<Byte> rhs)
+	{
+		return lhs = lhs % rhs;
+	}
+
+	RValue<Byte> operator&=(const Byte &lhs, RValue<Byte> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<Byte> operator|=(const Byte &lhs, RValue<Byte> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<Byte> operator^=(const Byte &lhs, RValue<Byte> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+	RValue<Byte> operator<<=(const Byte &lhs, RValue<Byte> rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<Byte> operator>>=(const Byte &lhs, RValue<Byte> rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<Byte> operator+(RValue<Byte> val)
+	{
+		return val;
+	}
+
+	RValue<Byte> operator-(RValue<Byte> val)
+	{
+		return RValue<Byte>(Nucleus::createNeg(val.value));
+	}
+
+	RValue<Byte> operator~(RValue<Byte> val)
+	{
+		return RValue<Byte>(Nucleus::createNot(val.value));
+	}
+
+	RValue<Byte> operator++(const Byte &val, int)   // Post-increment
+	{
+		RValue<Byte> res = val;
+
+		assert(false && "UNIMPLEMENTED");
+
+		return res;
+	}
+
+	const Byte &operator++(const Byte &val)   // Pre-increment
+	{
+		assert(false && "UNIMPLEMENTED");
+
+		return val;
+	}
+
+	RValue<Byte> operator--(const Byte &val, int)   // Post-decrement
+	{
+		RValue<Byte> res = val;
+
+		assert(false && "UNIMPLEMENTED");
+
+		return res;
+	}
+
+	const Byte &operator--(const Byte &val)   // Pre-decrement
+	{
+		assert(false && "UNIMPLEMENTED");
+
+		return val;
+	}
+
+	RValue<Bool> operator<(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpULT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator<=(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpULE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpUGT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>=(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpUGE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator!=(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpNE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator==(RValue<Byte> lhs, RValue<Byte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpEQ(lhs.value, rhs.value));
+	}
+
+	Type *Byte::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	SByte::SByte(Argument<SByte> argument)
+	{
+		storeValue(argument.value);
+	}
+
+	SByte::SByte(RValue<Int> cast)
+	{
+		Value *integer = Nucleus::createTrunc(cast.value, SByte::getType());
+
+		storeValue(integer);
+	}
+
+	SByte::SByte(RValue<Short> cast)
+	{
+		Value *integer = Nucleus::createTrunc(cast.value, SByte::getType());
+
+		storeValue(integer);
+	}
+
+	SByte::SByte()
+	{
+	}
+
+	SByte::SByte(signed char x)
+	{
+		storeValue(Nucleus::createConstantByte(x));
+	}
+
+	SByte::SByte(RValue<SByte> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	SByte::SByte(const SByte &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	SByte::SByte(const Reference<SByte> &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<SByte> SByte::operator=(RValue<SByte> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<SByte> SByte::operator=(const SByte &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<SByte>(value);
+	}
+
+	RValue<SByte> SByte::operator=(const Reference<SByte> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<SByte>(value);
+	}
+
+	RValue<SByte> operator+(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<SByte>(Nucleus::createAdd(lhs.value, rhs.value));
+	}
+
+	RValue<SByte> operator-(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<SByte>(Nucleus::createSub(lhs.value, rhs.value));
+	}
+
+	RValue<SByte> operator*(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<SByte>(Nucleus::createMul(lhs.value, rhs.value));
+	}
+
+	RValue<SByte> operator/(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<SByte>(Nucleus::createSDiv(lhs.value, rhs.value));
+	}
+
+	RValue<SByte> operator%(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<SByte>(Nucleus::createSRem(lhs.value, rhs.value));
+	}
+
+	RValue<SByte> operator&(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<SByte>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<SByte> operator|(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<SByte>(Nucleus::createOr(lhs.value, rhs.value));
+	}
+
+	RValue<SByte> operator^(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<SByte>(Nucleus::createXor(lhs.value, rhs.value));
+	}
+
+	RValue<SByte> operator<<(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<SByte>(Nucleus::createShl(lhs.value, rhs.value));
+	}
+
+	RValue<SByte> operator>>(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<SByte>(Nucleus::createAShr(lhs.value, rhs.value));
+	}
+
+	RValue<SByte> operator+=(const SByte &lhs, RValue<SByte> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<SByte> operator-=(const SByte &lhs, RValue<SByte> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<SByte> operator*=(const SByte &lhs, RValue<SByte> rhs)
+	{
+		return lhs = lhs * rhs;
+	}
+
+	RValue<SByte> operator/=(const SByte &lhs, RValue<SByte> rhs)
+	{
+		return lhs = lhs / rhs;
+	}
+
+	RValue<SByte> operator%=(const SByte &lhs, RValue<SByte> rhs)
+	{
+		return lhs = lhs % rhs;
+	}
+
+	RValue<SByte> operator&=(const SByte &lhs, RValue<SByte> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<SByte> operator|=(const SByte &lhs, RValue<SByte> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<SByte> operator^=(const SByte &lhs, RValue<SByte> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+	RValue<SByte> operator<<=(const SByte &lhs, RValue<SByte> rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<SByte> operator>>=(const SByte &lhs, RValue<SByte> rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<SByte> operator+(RValue<SByte> val)
+	{
+		return val;
+	}
+
+	RValue<SByte> operator-(RValue<SByte> val)
+	{
+		return RValue<SByte>(Nucleus::createNeg(val.value));
+	}
+
+	RValue<SByte> operator~(RValue<SByte> val)
+	{
+		return RValue<SByte>(Nucleus::createNot(val.value));
+	}
+
+	RValue<SByte> operator++(const SByte &val, int)   // Post-increment
+	{
+		RValue<SByte> res = val;
+
+		assert(false && "UNIMPLEMENTED");
+
+		return res;
+	}
+
+	const SByte &operator++(const SByte &val)   // Pre-increment
+	{
+		assert(false && "UNIMPLEMENTED");
+		assert(false && "UNIMPLEMENTED");
+
+		return val;
+	}
+
+	RValue<SByte> operator--(const SByte &val, int)   // Post-decrement
+	{
+		RValue<SByte> res = val;
+
+		assert(false && "UNIMPLEMENTED");
+		assert(false && "UNIMPLEMENTED");
+
+		return res;
+	}
+
+	const SByte &operator--(const SByte &val)   // Pre-decrement
+	{
+		assert(false && "UNIMPLEMENTED");
+		assert(false && "UNIMPLEMENTED");
+
+		return val;
+	}
+
+	RValue<Bool> operator<(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSLT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator<=(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSLE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSGT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>=(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSGE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator!=(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpNE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator==(RValue<SByte> lhs, RValue<SByte> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpEQ(lhs.value, rhs.value));
+	}
+
+	Type *SByte::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Short::Short(Argument<Short> argument)
+	{
+		storeValue(argument.value);
+	}
+
+	Short::Short(RValue<Int> cast)
+	{
+		Value *integer = Nucleus::createTrunc(cast.value, Short::getType());
+
+		storeValue(integer);
+	}
+
+	Short::Short()
+	{
+	}
+
+	Short::Short(short x)
+	{
+		storeValue(Nucleus::createConstantShort(x));
+	}
+
+	Short::Short(RValue<Short> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	Short::Short(const Short &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Short::Short(const Reference<Short> &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<Short> Short::operator=(RValue<Short> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Short> Short::operator=(const Short &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Short>(value);
+	}
+
+	RValue<Short> Short::operator=(const Reference<Short> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Short>(value);
+	}
+
+	RValue<Short> operator+(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Short>(Nucleus::createAdd(lhs.value, rhs.value));
+	}
+
+	RValue<Short> operator-(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Short>(Nucleus::createSub(lhs.value, rhs.value));
+	}
+
+	RValue<Short> operator*(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Short>(Nucleus::createMul(lhs.value, rhs.value));
+	}
+
+	RValue<Short> operator/(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Short>(Nucleus::createSDiv(lhs.value, rhs.value));
+	}
+
+	RValue<Short> operator%(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Short>(Nucleus::createSRem(lhs.value, rhs.value));
+	}
+
+	RValue<Short> operator&(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Short>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<Short> operator|(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Short>(Nucleus::createOr(lhs.value, rhs.value));
+	}
+
+	RValue<Short> operator^(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Short>(Nucleus::createXor(lhs.value, rhs.value));
+	}
+
+	RValue<Short> operator<<(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Short>(Nucleus::createShl(lhs.value, rhs.value));
+	}
+
+	RValue<Short> operator>>(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Short>(Nucleus::createAShr(lhs.value, rhs.value));
+	}
+
+	RValue<Short> operator+=(const Short &lhs, RValue<Short> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<Short> operator-=(const Short &lhs, RValue<Short> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<Short> operator*=(const Short &lhs, RValue<Short> rhs)
+	{
+		return lhs = lhs * rhs;
+	}
+
+	RValue<Short> operator/=(const Short &lhs, RValue<Short> rhs)
+	{
+		return lhs = lhs / rhs;
+	}
+
+	RValue<Short> operator%=(const Short &lhs, RValue<Short> rhs)
+	{
+		return lhs = lhs % rhs;
+	}
+
+	RValue<Short> operator&=(const Short &lhs, RValue<Short> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<Short> operator|=(const Short &lhs, RValue<Short> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<Short> operator^=(const Short &lhs, RValue<Short> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+	RValue<Short> operator<<=(const Short &lhs, RValue<Short> rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<Short> operator>>=(const Short &lhs, RValue<Short> rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<Short> operator+(RValue<Short> val)
+	{
+		return val;
+	}
+
+	RValue<Short> operator-(RValue<Short> val)
+	{
+		return RValue<Short>(Nucleus::createNeg(val.value));
+	}
+
+	RValue<Short> operator~(RValue<Short> val)
+	{
+		return RValue<Short>(Nucleus::createNot(val.value));
+	}
+
+	RValue<Short> operator++(const Short &val, int)   // Post-increment
+	{
+		RValue<Short> res = val;
+
+		assert(false && "UNIMPLEMENTED");
+		assert(false && "UNIMPLEMENTED");
+
+		return res;
+	}
+
+	const Short &operator++(const Short &val)   // Pre-increment
+	{
+		assert(false && "UNIMPLEMENTED");
+		assert(false && "UNIMPLEMENTED");
+
+		return val;
+	}
+
+	RValue<Short> operator--(const Short &val, int)   // Post-decrement
+	{
+		RValue<Short> res = val;
+
+		assert(false && "UNIMPLEMENTED");
+		assert(false && "UNIMPLEMENTED");
+
+		return res;
+	}
+
+	const Short &operator--(const Short &val)   // Pre-decrement
+	{
+		assert(false && "UNIMPLEMENTED");
+		assert(false && "UNIMPLEMENTED");
+
+		return val;
+	}
+
+	RValue<Bool> operator<(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSLT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator<=(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSLE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSGT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>=(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSGE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator!=(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpNE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator==(RValue<Short> lhs, RValue<Short> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpEQ(lhs.value, rhs.value));
+	}
+
+	Type *Short::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	UShort::UShort(Argument<UShort> argument)
+	{
+		storeValue(argument.value);
+	}
+
+	UShort::UShort(RValue<UInt> cast)
+	{
+		Value *integer = Nucleus::createTrunc(cast.value, UShort::getType());
+
+		storeValue(integer);
+	}
+
+	UShort::UShort(RValue<Int> cast)
+	{
+		Value *integer = Nucleus::createTrunc(cast.value, UShort::getType());
+
+		storeValue(integer);
+	}
+
+	UShort::UShort()
+	{
+	}
+
+	UShort::UShort(unsigned short x)
+	{
+		storeValue(Nucleus::createConstantShort(x));
+	}
+
+	UShort::UShort(RValue<UShort> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	UShort::UShort(const UShort &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UShort::UShort(const Reference<UShort> &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<UShort> UShort::operator=(RValue<UShort> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<UShort> UShort::operator=(const UShort &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UShort>(value);
+	}
+
+	RValue<UShort> UShort::operator=(const Reference<UShort> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UShort>(value);
+	}
+
+	RValue<UShort> operator+(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<UShort>(Nucleus::createAdd(lhs.value, rhs.value));
+	}
+
+	RValue<UShort> operator-(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<UShort>(Nucleus::createSub(lhs.value, rhs.value));
+	}
+
+	RValue<UShort> operator*(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<UShort>(Nucleus::createMul(lhs.value, rhs.value));
+	}
+
+	RValue<UShort> operator/(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<UShort>(Nucleus::createUDiv(lhs.value, rhs.value));
+	}
+
+	RValue<UShort> operator%(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<UShort>(Nucleus::createURem(lhs.value, rhs.value));
+	}
+
+	RValue<UShort> operator&(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<UShort>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<UShort> operator|(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<UShort>(Nucleus::createOr(lhs.value, rhs.value));
+	}
+
+	RValue<UShort> operator^(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<UShort>(Nucleus::createXor(lhs.value, rhs.value));
+	}
+
+	RValue<UShort> operator<<(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<UShort>(Nucleus::createShl(lhs.value, rhs.value));
+	}
+
+	RValue<UShort> operator>>(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<UShort>(Nucleus::createLShr(lhs.value, rhs.value));
+	}
+
+	RValue<UShort> operator+=(const UShort &lhs, RValue<UShort> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<UShort> operator-=(const UShort &lhs, RValue<UShort> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<UShort> operator*=(const UShort &lhs, RValue<UShort> rhs)
+	{
+		return lhs = lhs * rhs;
+	}
+
+	RValue<UShort> operator/=(const UShort &lhs, RValue<UShort> rhs)
+	{
+		return lhs = lhs / rhs;
+	}
+
+	RValue<UShort> operator%=(const UShort &lhs, RValue<UShort> rhs)
+	{
+		return lhs = lhs % rhs;
+	}
+
+	RValue<UShort> operator&=(const UShort &lhs, RValue<UShort> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<UShort> operator|=(const UShort &lhs, RValue<UShort> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<UShort> operator^=(const UShort &lhs, RValue<UShort> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+	RValue<UShort> operator<<=(const UShort &lhs, RValue<UShort> rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<UShort> operator>>=(const UShort &lhs, RValue<UShort> rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<UShort> operator+(RValue<UShort> val)
+	{
+		return val;
+	}
+
+	RValue<UShort> operator-(RValue<UShort> val)
+	{
+		return RValue<UShort>(Nucleus::createNeg(val.value));
+	}
+
+	RValue<UShort> operator~(RValue<UShort> val)
+	{
+		return RValue<UShort>(Nucleus::createNot(val.value));
+	}
+
+	RValue<UShort> operator++(const UShort &val, int)   // Post-increment
+	{
+		RValue<UShort> res = val;
+
+		assert(false && "UNIMPLEMENTED");
+		assert(false && "UNIMPLEMENTED");
+
+		return res;
+	}
+
+	const UShort &operator++(const UShort &val)   // Pre-increment
+	{
+		assert(false && "UNIMPLEMENTED");
+		assert(false && "UNIMPLEMENTED");
+
+		return val;
+	}
+
+	RValue<UShort> operator--(const UShort &val, int)   // Post-decrement
+	{
+		RValue<UShort> res = val;
+
+		assert(false && "UNIMPLEMENTED");
+		assert(false && "UNIMPLEMENTED");
+
+		return res;
+	}
+
+	const UShort &operator--(const UShort &val)   // Pre-decrement
+	{
+		assert(false && "UNIMPLEMENTED");
+		assert(false && "UNIMPLEMENTED");
+
+		return val;
+	}
+
+	RValue<Bool> operator<(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpULT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator<=(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpULE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpUGT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>=(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpUGE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator!=(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpNE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator==(RValue<UShort> lhs, RValue<UShort> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpEQ(lhs.value, rhs.value));
+	}
+
+	Type *UShort::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Type *Byte4::getType()
+	{
+		#if 0
+			return VectorType::get(Byte::getType(), 4);
+		#else
+			return UInt::getType();   // FIXME
+		#endif
+	}
+
+	Type *SByte4::getType()
+	{
+		#if 0
+			return VectorType::get(SByte::getType(), 4);
+		#else
+			return Int::getType();   // FIXME
+		#endif
+	}
+
+	Byte8::Byte8()
+	{
+	//	xyzw.parent = this;
+	}
+
+	Byte8::Byte8(uint8_t x0, uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4, uint8_t x5, uint8_t x6, uint8_t x7)
+	{
+	//	xyzw.parent = this;
+	}
+
+	Byte8::Byte8(int64_t x)
+	{
+	//	xyzw.parent = this;
+	}
+
+	Byte8::Byte8(RValue<Byte8> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	Byte8::Byte8(const Byte8 &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Byte8::Byte8(const Reference<Byte8> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<Byte8> Byte8::operator=(RValue<Byte8> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Byte8> Byte8::operator=(const Byte8 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Byte8>(value);
+	}
+
+	RValue<Byte8> Byte8::operator=(const Reference<Byte8> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Byte8>(value);
+	}
+
+	RValue<Byte8> operator+(RValue<Byte8> lhs, RValue<Byte8> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+	}
+
+	RValue<Byte8> operator-(RValue<Byte8> lhs, RValue<Byte8> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+	}
+
+//	RValue<Byte8> operator*(RValue<Byte8> lhs, RValue<Byte8> rhs)
+//	{
+//		return RValue<Byte8>(Nucleus::createMul(lhs.value, rhs.value));
+//	}
+
+//	RValue<Byte8> operator/(RValue<Byte8> lhs, RValue<Byte8> rhs)
+//	{
+//		return RValue<Byte8>(Nucleus::createUDiv(lhs.value, rhs.value));
+//	}
+
+//	RValue<Byte8> operator%(RValue<Byte8> lhs, RValue<Byte8> rhs)
+//	{
+//		return RValue<Byte8>(Nucleus::createURem(lhs.value, rhs.value));
+//	}
+
+	RValue<Byte8> operator&(RValue<Byte8> lhs, RValue<Byte8> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+	}
+
+	RValue<Byte8> operator|(RValue<Byte8> lhs, RValue<Byte8> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+	}
+
+	RValue<Byte8> operator^(RValue<Byte8> lhs, RValue<Byte8> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+	}
+
+//	RValue<Byte8> operator<<(RValue<Byte8> lhs, unsigned char rhs)
+//	{
+//		return RValue<Byte8>(Nucleus::createShl(lhs.value, rhs.value));
+//	}
+
+//	RValue<Byte8> operator>>(RValue<Byte8> lhs, unsigned char rhs)
+//	{
+//		return RValue<Byte8>(Nucleus::createLShr(lhs.value, rhs.value));
+//	}
+
+	RValue<Byte8> operator+=(const Byte8 &lhs, RValue<Byte8> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<Byte8> operator-=(const Byte8 &lhs, RValue<Byte8> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+//	RValue<Byte8> operator*=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	{
+//		return lhs = lhs * rhs;
+//	}
+
+//	RValue<Byte8> operator/=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	{
+//		return lhs = lhs / rhs;
+//	}
+
+//	RValue<Byte8> operator%=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	{
+//		return lhs = lhs % rhs;
+//	}
+
+	RValue<Byte8> operator&=(const Byte8 &lhs, RValue<Byte8> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<Byte8> operator|=(const Byte8 &lhs, RValue<Byte8> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<Byte8> operator^=(const Byte8 &lhs, RValue<Byte8> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+//	RValue<Byte8> operator<<=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	{
+//		return lhs = lhs << rhs;
+//	}
+
+//	RValue<Byte8> operator>>=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	{
+//		return lhs = lhs >> rhs;
+//	}
+
+//	RValue<Byte8> operator+(RValue<Byte8> val)
+//	{
+//		return val;
+//	}
+
+//	RValue<Byte8> operator-(RValue<Byte8> val)
+//	{
+//		return RValue<Byte8>(Nucleus::createNeg(val.value));
+//	}
+
+	RValue<Byte8> operator~(RValue<Byte8> val)
+	{
+		return RValue<Byte8>(Nucleus::createNot(val.value));
+	}
+
+	RValue<Byte8> AddSat(RValue<Byte8> x, RValue<Byte8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+	}
+
+	RValue<Byte8> SubSat(RValue<Byte8> x, RValue<Byte8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+	}
+
+	RValue<Short4> Unpack(RValue<Byte4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> UnpackLow(RValue<Byte8> x, RValue<Byte8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> UnpackHigh(RValue<Byte8> x, RValue<Byte8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Int> SignMask(RValue<Byte8> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int>(nullptr);
+	}
+
+//	RValue<Byte8> CmpGT(RValue<Byte8> x, RValue<Byte8> y)
+//	{
+//		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+//	}
+
+	RValue<Byte8> CmpEQ(RValue<Byte8> x, RValue<Byte8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+	}
+
+	Type *Byte8::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	SByte8::SByte8()
+	{
+	//	xyzw.parent = this;
+	}
+
+	SByte8::SByte8(uint8_t x0, uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4, uint8_t x5, uint8_t x6, uint8_t x7)
+	{
+	//	xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	SByte8::SByte8(int64_t x)
+	{
+	//	xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	SByte8::SByte8(RValue<SByte8> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	SByte8::SByte8(const SByte8 &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	SByte8::SByte8(const Reference<SByte8> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<SByte8> SByte8::operator=(RValue<SByte8> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<SByte8> SByte8::operator=(const SByte8 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<SByte8>(value);
+	}
+
+	RValue<SByte8> SByte8::operator=(const Reference<SByte8> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<SByte8>(value);
+	}
+
+	RValue<SByte8> operator+(RValue<SByte8> lhs, RValue<SByte8> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<SByte8>(nullptr);
+	}
+
+	RValue<SByte8> operator-(RValue<SByte8> lhs, RValue<SByte8> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<SByte8>(nullptr);
+	}
+
+//	RValue<SByte8> operator*(RValue<SByte8> lhs, RValue<SByte8> rhs)
+//	{
+//		return RValue<SByte8>(Nucleus::createMul(lhs.value, rhs.value));
+//	}
+
+//	RValue<SByte8> operator/(RValue<SByte8> lhs, RValue<SByte8> rhs)
+//	{
+//		return RValue<SByte8>(Nucleus::createSDiv(lhs.value, rhs.value));
+//	}
+
+//	RValue<SByte8> operator%(RValue<SByte8> lhs, RValue<SByte8> rhs)
+//	{
+//		return RValue<SByte8>(Nucleus::createSRem(lhs.value, rhs.value));
+//	}
+
+	RValue<SByte8> operator&(RValue<SByte8> lhs, RValue<SByte8> rhs)
+	{
+		return RValue<SByte8>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<SByte8> operator|(RValue<SByte8> lhs, RValue<SByte8> rhs)
+	{
+		return RValue<SByte8>(Nucleus::createOr(lhs.value, rhs.value));
+	}
+
+	RValue<SByte8> operator^(RValue<SByte8> lhs, RValue<SByte8> rhs)
+	{
+		return RValue<SByte8>(Nucleus::createXor(lhs.value, rhs.value));
+	}
+
+//	RValue<SByte8> operator<<(RValue<SByte8> lhs, unsigned char rhs)
+//	{
+//		return RValue<SByte8>(Nucleus::createShl(lhs.value, rhs.value));
+//	}
+
+//	RValue<SByte8> operator>>(RValue<SByte8> lhs, unsigned char rhs)
+//	{
+//		return RValue<SByte8>(Nucleus::createAShr(lhs.value, rhs.value));
+//	}
+
+	RValue<SByte8> operator+=(const SByte8 &lhs, RValue<SByte8> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<SByte8> operator-=(const SByte8 &lhs, RValue<SByte8> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+//	RValue<SByte8> operator*=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	{
+//		return lhs = lhs * rhs;
+//	}
+
+//	RValue<SByte8> operator/=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	{
+//		return lhs = lhs / rhs;
+//	}
+
+//	RValue<SByte8> operator%=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	{
+//		return lhs = lhs % rhs;
+//	}
+
+	RValue<SByte8> operator&=(const SByte8 &lhs, RValue<SByte8> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<SByte8> operator|=(const SByte8 &lhs, RValue<SByte8> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<SByte8> operator^=(const SByte8 &lhs, RValue<SByte8> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+//	RValue<SByte8> operator<<=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	{
+//		return lhs = lhs << rhs;
+//	}
+
+//	RValue<SByte8> operator>>=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	{
+//		return lhs = lhs >> rhs;
+//	}
+
+//	RValue<SByte8> operator+(RValue<SByte8> val)
+//	{
+//		return val;
+//	}
+
+//	RValue<SByte8> operator-(RValue<SByte8> val)
+//	{
+//		return RValue<SByte8>(Nucleus::createNeg(val.value));
+//	}
+
+	RValue<SByte8> operator~(RValue<SByte8> val)
+	{
+		return RValue<SByte8>(Nucleus::createNot(val.value));
+	}
+
+	RValue<SByte8> AddSat(RValue<SByte8> x, RValue<SByte8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<SByte8>(nullptr);
+	}
+
+	RValue<SByte8> SubSat(RValue<SByte8> x, RValue<SByte8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<SByte8>(nullptr);
+	}
+
+	RValue<Short4> UnpackLow(RValue<SByte8> x, RValue<SByte8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> UnpackHigh(RValue<SByte8> x, RValue<SByte8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Int> SignMask(RValue<SByte8> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int>(nullptr);
+	}
+
+	RValue<Byte8> CmpGT(RValue<SByte8> x, RValue<SByte8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+	}
+
+	RValue<Byte8> CmpEQ(RValue<SByte8> x, RValue<SByte8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+	}
+
+	Type *SByte8::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Byte16::Byte16(RValue<Byte16> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	Byte16::Byte16(const Byte16 &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Byte16::Byte16(const Reference<Byte16> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<Byte16> Byte16::operator=(RValue<Byte16> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Byte16> Byte16::operator=(const Byte16 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Byte16>(value);
+	}
+
+	RValue<Byte16> Byte16::operator=(const Reference<Byte16> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Byte16>(value);
+	}
+
+	Type *Byte16::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Type *SByte16::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Short4::Short4(RValue<Int> cast)
+	{
+		Value *extend = Nucleus::createZExt(cast.value, Long::getType());
+		Value *swizzle = Swizzle(RValue<Short4>(extend), 0x00).value;
+
+		storeValue(swizzle);
+	}
+
+	Short4::Short4(RValue<Int4> cast)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+//	Short4::Short4(RValue<Float> cast)
+//	{
+//	}
+
+	Short4::Short4(RValue<Float4> cast)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Short4::Short4()
+	{
+	//	xyzw.parent = this;
+	}
+
+	Short4::Short4(short xyzw)
+	{
+		//	xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Short4::Short4(short x, short y, short z, short w)
+	{
+	//	xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Short4::Short4(RValue<Short4> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	Short4::Short4(const Short4 &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Short4::Short4(const Reference<Short4> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Short4::Short4(RValue<UShort4> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	Short4::Short4(const UShort4 &rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.loadValue());
+	}
+
+	Short4::Short4(const Reference<UShort4> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.loadValue());
+	}
+
+	RValue<Short4> Short4::operator=(RValue<Short4> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Short4> Short4::operator=(const Short4 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Short4>(value);
+	}
+
+	RValue<Short4> Short4::operator=(const Reference<Short4> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Short4>(value);
+	}
+
+	RValue<Short4> Short4::operator=(RValue<UShort4> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return RValue<Short4>(rhs);
+	}
+
+	RValue<Short4> Short4::operator=(const UShort4 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Short4>(value);
+	}
+
+	RValue<Short4> Short4::operator=(const Reference<UShort4> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Short4>(value);
+	}
+
+	RValue<Short4> operator+(RValue<Short4> lhs, RValue<Short4> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> operator-(RValue<Short4> lhs, RValue<Short4> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> operator*(RValue<Short4> lhs, RValue<Short4> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+//	RValue<Short4> operator/(RValue<Short4> lhs, RValue<Short4> rhs)
+//	{
+//		return RValue<Short4>(Nucleus::createSDiv(lhs.value, rhs.value));
+//	}
+
+//	RValue<Short4> operator%(RValue<Short4> lhs, RValue<Short4> rhs)
+//	{
+//		return RValue<Short4>(Nucleus::createSRem(lhs.value, rhs.value));
+//	}
+
+	RValue<Short4> operator&(RValue<Short4> lhs, RValue<Short4> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> operator|(RValue<Short4> lhs, RValue<Short4> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> operator^(RValue<Short4> lhs, RValue<Short4> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> operator<<(RValue<Short4> lhs, unsigned char rhs)
+	{
+	//	return RValue<Short4>(Nucleus::createShl(lhs.value, rhs.value));
+
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> operator>>(RValue<Short4> lhs, unsigned char rhs)
+	{
+	//	return RValue<Short4>(Nucleus::createAShr(lhs.value, rhs.value));
+
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> operator<<(RValue<Short4> lhs, RValue<Long1> rhs)
+	{
+	//	return RValue<Short4>(Nucleus::createShl(lhs.value, rhs.value));
+
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> operator>>(RValue<Short4> lhs, RValue<Long1> rhs)
+	{
+	//	return RValue<Short4>(Nucleus::createAShr(lhs.value, rhs.value));
+
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> operator+=(const Short4 &lhs, RValue<Short4> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<Short4> operator-=(const Short4 &lhs, RValue<Short4> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<Short4> operator*=(const Short4 &lhs, RValue<Short4> rhs)
+	{
+		return lhs = lhs * rhs;
+	}
+
+//	RValue<Short4> operator/=(const Short4 &lhs, RValue<Short4> rhs)
+//	{
+//		return lhs = lhs / rhs;
+//	}
+
+//	RValue<Short4> operator%=(const Short4 &lhs, RValue<Short4> rhs)
+//	{
+//		return lhs = lhs % rhs;
+//	}
+
+	RValue<Short4> operator&=(const Short4 &lhs, RValue<Short4> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<Short4> operator|=(const Short4 &lhs, RValue<Short4> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<Short4> operator^=(const Short4 &lhs, RValue<Short4> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+	RValue<Short4> operator<<=(const Short4 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<Short4> operator>>=(const Short4 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<Short4> operator<<=(const Short4 &lhs, RValue<Long1> rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<Short4> operator>>=(const Short4 &lhs, RValue<Long1> rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+//	RValue<Short4> operator+(RValue<Short4> val)
+//	{
+//		return val;
+//	}
+
+	RValue<Short4> operator-(RValue<Short4> val)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> operator~(RValue<Short4> val)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> RoundShort4(RValue<Float4> cast)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> Max(RValue<Short4> x, RValue<Short4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> Min(RValue<Short4> x, RValue<Short4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> AddSat(RValue<Short4> x, RValue<Short4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> SubSat(RValue<Short4> x, RValue<Short4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> MulHigh(RValue<Short4> x, RValue<Short4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Int2> MulAdd(RValue<Short4> x, RValue<Short4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<SByte8> Pack(RValue<Short4> x, RValue<Short4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<SByte8>(nullptr);
+	}
+
+	RValue<Int2> UnpackLow(RValue<Short4> x, RValue<Short4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<Int2> UnpackHigh(RValue<Short4> x, RValue<Short4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<Short4> Swizzle(RValue<Short4> x, unsigned char select)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> Insert(RValue<Short4> val, RValue<Short> element, int i)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short> Extract(RValue<Short4> val, int i)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short>(nullptr);
+	}
+
+	RValue<Short4> CmpGT(RValue<Short4> x, RValue<Short4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	RValue<Short4> CmpEQ(RValue<Short4> x, RValue<Short4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(nullptr);
+	}
+
+	Type *Short4::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	UShort4::UShort4(RValue<Int4> cast)
+	{
+		*this = Short4(cast);
+	}
+
+	UShort4::UShort4(RValue<Float4> cast, bool saturate)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	UShort4::UShort4()
+	{
+	//	xyzw.parent = this;
+	}
+
+	UShort4::UShort4(unsigned short xyzw)
+	{
+		//	xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	UShort4::UShort4(unsigned short x, unsigned short y, unsigned short z, unsigned short w)
+	{
+	//	xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	UShort4::UShort4(RValue<UShort4> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	UShort4::UShort4(const UShort4 &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UShort4::UShort4(const Reference<UShort4> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UShort4::UShort4(RValue<Short4> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	UShort4::UShort4(const Short4 &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UShort4::UShort4(const Reference<Short4> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<UShort4> UShort4::operator=(RValue<UShort4> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<UShort4> UShort4::operator=(const UShort4 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UShort4>(value);
+	}
+
+	RValue<UShort4> UShort4::operator=(const Reference<UShort4> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UShort4>(value);
+	}
+
+	RValue<UShort4> UShort4::operator=(RValue<Short4> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return RValue<UShort4>(rhs);
+	}
+
+	RValue<UShort4> UShort4::operator=(const Short4 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UShort4>(value);
+	}
+
+	RValue<UShort4> UShort4::operator=(const Reference<Short4> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UShort4>(value);
+	}
+
+	RValue<UShort4> operator+(RValue<UShort4> lhs, RValue<UShort4> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> operator-(RValue<UShort4> lhs, RValue<UShort4> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> operator*(RValue<UShort4> lhs, RValue<UShort4> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> operator<<(RValue<UShort4> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> operator>>(RValue<UShort4> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> operator<<(RValue<UShort4> lhs, RValue<Long1> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> operator>>(RValue<UShort4> lhs, RValue<Long1> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> operator<<=(const UShort4 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<UShort4> operator>>=(const UShort4 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<UShort4> operator<<=(const UShort4 &lhs, RValue<Long1> rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<UShort4> operator>>=(const UShort4 &lhs, RValue<Long1> rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<UShort4> operator~(RValue<UShort4> val)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> Max(RValue<UShort4> x, RValue<UShort4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> Min(RValue<UShort4> x, RValue<UShort4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> AddSat(RValue<UShort4> x, RValue<UShort4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> SubSat(RValue<UShort4> x, RValue<UShort4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> MulHigh(RValue<UShort4> x, RValue<UShort4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<UShort4> Average(RValue<UShort4> x, RValue<UShort4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(nullptr);
+	}
+
+	RValue<Byte8> Pack(RValue<UShort4> x, RValue<UShort4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Byte8>(nullptr);
+	}
+
+	Type *UShort4::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Short8::Short8(short c0, short c1, short c2, short c3, short c4, short c5, short c6, short c7)
+	{
+	//	xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Short8::Short8(RValue<Short8> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	Short8::Short8(const Reference<Short8> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Short8::Short8(RValue<Short4> lo, RValue<Short4> hi)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	RValue<Short8> operator+(RValue<Short8> lhs, RValue<Short8> rhs)
+	{
+		return RValue<Short8>(Nucleus::createAdd(lhs.value, rhs.value));
+	}
+
+	RValue<Short8> operator&(RValue<Short8> lhs, RValue<Short8> rhs)
+	{
+		return RValue<Short8>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<Short8> operator<<(RValue<Short8> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short8>(nullptr);
+	}
+
+	RValue<Short8> operator>>(RValue<Short8> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short8>(nullptr);
+	}
+
+	RValue<Int4> MulAdd(RValue<Short8> x, RValue<Short8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int4>(nullptr);
+	}
+
+	RValue<Int4> Abs(RValue<Int4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int4>(nullptr);
+	}
+
+	RValue<Short8> MulHigh(RValue<Short8> x, RValue<Short8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short8>(nullptr);
+	}
+
+	Type *Short8::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	UShort8::UShort8(unsigned short c0, unsigned short c1, unsigned short c2, unsigned short c3, unsigned short c4, unsigned short c5, unsigned short c6, unsigned short c7)
+	{
+	//	xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	UShort8::UShort8(RValue<UShort8> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	UShort8::UShort8(const Reference<UShort8> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UShort8::UShort8(RValue<UShort4> lo, RValue<UShort4> hi)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	RValue<UShort8> UShort8::operator=(RValue<UShort8> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<UShort8> UShort8::operator=(const UShort8 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UShort8>(value);
+	}
+
+	RValue<UShort8> UShort8::operator=(const Reference<UShort8> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UShort8>(value);
+	}
+
+	RValue<UShort8> operator&(RValue<UShort8> lhs, RValue<UShort8> rhs)
+	{
+		return RValue<UShort8>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<UShort8> operator<<(RValue<UShort8> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort8>(nullptr);
+	}
+
+	RValue<UShort8> operator>>(RValue<UShort8> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort8>(nullptr);
+	}
+
+	RValue<UShort8> operator+(RValue<UShort8> lhs, RValue<UShort8> rhs)
+	{
+		return RValue<UShort8>(Nucleus::createAdd(lhs.value, rhs.value));
+	}
+
+	RValue<UShort8> operator*(RValue<UShort8> lhs, RValue<UShort8> rhs)
+	{
+		return RValue<UShort8>(Nucleus::createMul(lhs.value, rhs.value));
+	}
+
+	RValue<UShort8> operator+=(const UShort8 &lhs, RValue<UShort8> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<UShort8> operator~(RValue<UShort8> val)
+	{
+		return RValue<UShort8>(Nucleus::createNot(val.value));
+	}
+
+	RValue<UShort8> Swizzle(RValue<UShort8> x, char select0, char select1, char select2, char select3, char select4, char select5, char select6, char select7)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort8>(nullptr);
+	}
+
+	RValue<UShort8> MulHigh(RValue<UShort8> x, RValue<UShort8> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort8>(nullptr);
+	}
+
+	// FIXME: Implement as Shuffle(x, y, Select(i0, ..., i16)) and Shuffle(x, y, SELECT_PACK_REPEAT(element))
+//	RValue<UShort8> PackRepeat(RValue<Byte16> x, RValue<Byte16> y, int element)
+//	{
+//		assert(false && "UNIMPLEMENTED"); return RValue<UShort8>(nullptr);
+//	}
+
+	Type *UShort8::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Int::Int(Argument<Int> argument)
+	{
+		storeValue(argument.value);
+	}
+
+	Int::Int(RValue<Byte> cast)
+	{
+		Value *integer = Nucleus::createZExt(cast.value, Int::getType());
+
+		storeValue(integer);
+	}
+
+	Int::Int(RValue<SByte> cast)
+	{
+		Value *integer = Nucleus::createSExt(cast.value, Int::getType());
+
+		storeValue(integer);
+	}
+
+	Int::Int(RValue<Short> cast)
+	{
+		Value *integer = Nucleus::createSExt(cast.value, Int::getType());
+
+		storeValue(integer);
+	}
+
+	Int::Int(RValue<UShort> cast)
+	{
+		Value *integer = Nucleus::createZExt(cast.value, Int::getType());
+
+		storeValue(integer);
+	}
+
+	Int::Int(RValue<Int2> cast)
+	{
+		*this = Extract(cast, 0);
+	}
+
+	Int::Int(RValue<Long> cast)
+	{
+		Value *integer = Nucleus::createTrunc(cast.value, Int::getType());
+
+		storeValue(integer);
+	}
+
+	Int::Int(RValue<Float> cast)
+	{
+		Value *integer = Nucleus::createFPToSI(cast.value, Int::getType());
+
+		storeValue(integer);
+	}
+
+	Int::Int()
+	{
+	}
+
+	Int::Int(int x)
+	{
+		storeValue(Nucleus::createConstantInt(x));
+	}
+
+	Int::Int(RValue<Int> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	Int::Int(RValue<UInt> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	Int::Int(const Int &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Int::Int(const Reference<Int> &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Int::Int(const UInt &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Int::Int(const Reference<UInt> &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<Int> Int::operator=(int rhs) const
+	{
+		return RValue<Int>(storeValue(Nucleus::createConstantInt(rhs)));
+	}
+
+	RValue<Int> Int::operator=(RValue<Int> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Int> Int::operator=(RValue<UInt> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return RValue<Int>(rhs);
+	}
+
+	RValue<Int> Int::operator=(const Int &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Int>(value);
+	}
+
+	RValue<Int> Int::operator=(const Reference<Int> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Int>(value);
+	}
+
+	RValue<Int> Int::operator=(const UInt &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Int>(value);
+	}
+
+	RValue<Int> Int::operator=(const Reference<UInt> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Int>(value);
+	}
+
+	RValue<Int> operator+(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Int>(Nucleus::createAdd(lhs.value, rhs.value));
+	}
+
+	RValue<Int> operator-(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Int>(Nucleus::createSub(lhs.value, rhs.value));
+	}
+
+	RValue<Int> operator*(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Int>(Nucleus::createMul(lhs.value, rhs.value));
+	}
+
+	RValue<Int> operator/(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Int>(Nucleus::createSDiv(lhs.value, rhs.value));
+	}
+
+	RValue<Int> operator%(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Int>(Nucleus::createSRem(lhs.value, rhs.value));
+	}
+
+	RValue<Int> operator&(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Int>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<Int> operator|(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Int>(Nucleus::createOr(lhs.value, rhs.value));
+	}
+
+	RValue<Int> operator^(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Int>(Nucleus::createXor(lhs.value, rhs.value));
+	}
+
+	RValue<Int> operator<<(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Int>(Nucleus::createShl(lhs.value, rhs.value));
+	}
+
+	RValue<Int> operator>>(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Int>(Nucleus::createAShr(lhs.value, rhs.value));
+	}
+
+	RValue<Int> operator+=(const Int &lhs, RValue<Int> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<Int> operator-=(const Int &lhs, RValue<Int> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<Int> operator*=(const Int &lhs, RValue<Int> rhs)
+	{
+		return lhs = lhs * rhs;
+	}
+
+	RValue<Int> operator/=(const Int &lhs, RValue<Int> rhs)
+	{
+		return lhs = lhs / rhs;
+	}
+
+	RValue<Int> operator%=(const Int &lhs, RValue<Int> rhs)
+	{
+		return lhs = lhs % rhs;
+	}
+
+	RValue<Int> operator&=(const Int &lhs, RValue<Int> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<Int> operator|=(const Int &lhs, RValue<Int> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<Int> operator^=(const Int &lhs, RValue<Int> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+	RValue<Int> operator<<=(const Int &lhs, RValue<Int> rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<Int> operator>>=(const Int &lhs, RValue<Int> rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<Int> operator+(RValue<Int> val)
+	{
+		return val;
+	}
+
+	RValue<Int> operator-(RValue<Int> val)
+	{
+		return RValue<Int>(Nucleus::createNeg(val.value));
+	}
+
+	RValue<Int> operator~(RValue<Int> val)
+	{
+		return RValue<Int>(Nucleus::createNot(val.value));
+	}
+
+	RValue<Int> operator++(const Int &val, int)   // Post-increment
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int>(nullptr);
+	}
+
+	const Int &operator++(const Int &val)   // Pre-increment
+	{
+		assert(false && "UNIMPLEMENTED"); return val;
+	}
+
+	RValue<Int> operator--(const Int &val, int)   // Post-decrement
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int>(nullptr);
+	}
+
+	const Int &operator--(const Int &val)   // Pre-decrement
+	{
+		assert(false && "UNIMPLEMENTED"); return val;
+	}
+
+	RValue<Bool> operator<(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSLT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator<=(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSLE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSGT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>=(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpSGE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator!=(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpNE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator==(RValue<Int> lhs, RValue<Int> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpEQ(lhs.value, rhs.value));
+	}
+
+	RValue<Int> Max(RValue<Int> x, RValue<Int> y)
+	{
+		return IfThenElse(x > y, x, y);
+	}
+
+	RValue<Int> Min(RValue<Int> x, RValue<Int> y)
+	{
+		return IfThenElse(x < y, x, y);
+	}
+
+	RValue<Int> Clamp(RValue<Int> x, RValue<Int> min, RValue<Int> max)
+	{
+		return Min(Max(x, min), max);
+	}
+
+	RValue<Int> RoundInt(RValue<Float> cast)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int>(nullptr);
+	}
+
+	Type *Int::getType()
+	{
+		return T(Ice::IceType_i32);
+	}
+
+	Long::Long(RValue<Int> cast)
+	{
+		Value *integer = Nucleus::createSExt(cast.value, Long::getType());
+
+		storeValue(integer);
+	}
+
+	Long::Long(RValue<UInt> cast)
+	{
+		Value *integer = Nucleus::createZExt(cast.value, Long::getType());
+
+		storeValue(integer);
+	}
+
+	Long::Long()
+	{
+	}
+
+	Long::Long(RValue<Long> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	RValue<Long> Long::operator=(int64_t rhs) const
+	{
+		return RValue<Long>(storeValue(Nucleus::createConstantInt(rhs)));
+	}
+
+	RValue<Long> Long::operator=(RValue<Long> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Long> Long::operator=(const Long &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Long>(value);
+	}
+
+	RValue<Long> Long::operator=(const Reference<Long> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Long>(value);
+	}
+
+	RValue<Long> operator+(RValue<Long> lhs, RValue<Long> rhs)
+	{
+		return RValue<Long>(Nucleus::createAdd(lhs.value, rhs.value));
+	}
+
+	RValue<Long> operator-(RValue<Long> lhs, RValue<Long> rhs)
+	{
+		return RValue<Long>(Nucleus::createSub(lhs.value, rhs.value));
+	}
+
+	RValue<Long> operator+=(const Long &lhs, RValue<Long> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<Long> operator-=(const Long &lhs, RValue<Long> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<Long> AddAtomic(RValue<Pointer<Long> > x, RValue<Long> y)
+	{
+		return RValue<Long>(Nucleus::createAtomicAdd(x.value, y.value));
+	}
+
+	Type *Long::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Long1::Long1(const RValue<UInt> cast)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Long1::Long1(RValue<Long1> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	Type *Long1::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	RValue<Long2> UnpackHigh(RValue<Long2> x, RValue<Long2> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Long2>(nullptr);
+	}
+
+	Type *Long2::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	UInt::UInt(Argument<UInt> argument)
+	{
+		storeValue(argument.value);
+	}
+
+	UInt::UInt(RValue<UShort> cast)
+	{
+		Value *integer = Nucleus::createZExt(cast.value, UInt::getType());
+
+		storeValue(integer);
+	}
+
+	UInt::UInt(RValue<Long> cast)
+	{
+		Value *integer = Nucleus::createTrunc(cast.value, UInt::getType());
+
+		storeValue(integer);
+	}
+
+	UInt::UInt(RValue<Float> cast)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	UInt::UInt()
+	{
+	}
+
+	UInt::UInt(int x)
+	{
+		storeValue(Nucleus::createConstantInt(x));
+	}
+
+	UInt::UInt(unsigned int x)
+	{
+		storeValue(Nucleus::createConstantInt(x));
+	}
+
+	UInt::UInt(RValue<UInt> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	UInt::UInt(RValue<Int> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	UInt::UInt(const UInt &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UInt::UInt(const Reference<UInt> &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UInt::UInt(const Int &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UInt::UInt(const Reference<Int> &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<UInt> UInt::operator=(unsigned int rhs) const
+	{
+		return RValue<UInt>(storeValue(Nucleus::createConstantInt(rhs)));
+	}
+
+	RValue<UInt> UInt::operator=(RValue<UInt> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<UInt> UInt::operator=(RValue<Int> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return RValue<UInt>(rhs);
+	}
+
+	RValue<UInt> UInt::operator=(const UInt &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UInt>(value);
+	}
+
+	RValue<UInt> UInt::operator=(const Reference<UInt> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UInt>(value);
+	}
+
+	RValue<UInt> UInt::operator=(const Int &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UInt>(value);
+	}
+
+	RValue<UInt> UInt::operator=(const Reference<Int> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UInt>(value);
+	}
+
+	RValue<UInt> operator+(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<UInt>(Nucleus::createAdd(lhs.value, rhs.value));
+	}
+
+	RValue<UInt> operator-(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<UInt>(Nucleus::createSub(lhs.value, rhs.value));
+	}
+
+	RValue<UInt> operator*(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<UInt>(Nucleus::createMul(lhs.value, rhs.value));
+	}
+
+	RValue<UInt> operator/(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<UInt>(Nucleus::createUDiv(lhs.value, rhs.value));
+	}
+
+	RValue<UInt> operator%(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<UInt>(Nucleus::createURem(lhs.value, rhs.value));
+	}
+
+	RValue<UInt> operator&(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<UInt>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<UInt> operator|(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<UInt>(Nucleus::createOr(lhs.value, rhs.value));
+	}
+
+	RValue<UInt> operator^(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<UInt>(Nucleus::createXor(lhs.value, rhs.value));
+	}
+
+	RValue<UInt> operator<<(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<UInt>(Nucleus::createShl(lhs.value, rhs.value));
+	}
+
+	RValue<UInt> operator>>(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<UInt>(Nucleus::createLShr(lhs.value, rhs.value));
+	}
+
+	RValue<UInt> operator+=(const UInt &lhs, RValue<UInt> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<UInt> operator-=(const UInt &lhs, RValue<UInt> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<UInt> operator*=(const UInt &lhs, RValue<UInt> rhs)
+	{
+		return lhs = lhs * rhs;
+	}
+
+	RValue<UInt> operator/=(const UInt &lhs, RValue<UInt> rhs)
+	{
+		return lhs = lhs / rhs;
+	}
+
+	RValue<UInt> operator%=(const UInt &lhs, RValue<UInt> rhs)
+	{
+		return lhs = lhs % rhs;
+	}
+
+	RValue<UInt> operator&=(const UInt &lhs, RValue<UInt> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<UInt> operator|=(const UInt &lhs, RValue<UInt> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<UInt> operator^=(const UInt &lhs, RValue<UInt> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+	RValue<UInt> operator<<=(const UInt &lhs, RValue<UInt> rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<UInt> operator>>=(const UInt &lhs, RValue<UInt> rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<UInt> operator+(RValue<UInt> val)
+	{
+		return val;
+	}
+
+	RValue<UInt> operator-(RValue<UInt> val)
+	{
+		return RValue<UInt>(Nucleus::createNeg(val.value));
+	}
+
+	RValue<UInt> operator~(RValue<UInt> val)
+	{
+		return RValue<UInt>(Nucleus::createNot(val.value));
+	}
+
+	RValue<UInt> operator++(const UInt &val, int)   // Post-increment
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt>(nullptr);
+	}
+
+	const UInt &operator++(const UInt &val)   // Pre-increment
+	{
+		assert(false && "UNIMPLEMENTED"); return val;
+	}
+
+	RValue<UInt> operator--(const UInt &val, int)   // Post-decrement
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt>(nullptr);
+	}
+
+	const UInt &operator--(const UInt &val)   // Pre-decrement
+	{
+		assert(false && "UNIMPLEMENTED"); return val;
+	}
+
+	RValue<UInt> Max(RValue<UInt> x, RValue<UInt> y)
+	{
+		return IfThenElse(x > y, x, y);
+	}
+
+	RValue<UInt> Min(RValue<UInt> x, RValue<UInt> y)
+	{
+		return IfThenElse(x < y, x, y);
+	}
+
+	RValue<UInt> Clamp(RValue<UInt> x, RValue<UInt> min, RValue<UInt> max)
+	{
+		return Min(Max(x, min), max);
+	}
+
+	RValue<Bool> operator<(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpULT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator<=(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpULE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpUGT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>=(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpUGE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator!=(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpNE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator==(RValue<UInt> lhs, RValue<UInt> rhs)
+	{
+		return RValue<Bool>(Nucleus::createICmpEQ(lhs.value, rhs.value));
+	}
+
+//	RValue<UInt> RoundUInt(RValue<Float> cast)
+//	{
+//		assert(false && "UNIMPLEMENTED"); return RValue<UInt>(nullptr);
+//	}
+
+	Type *UInt::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+//	Int2::Int2(RValue<Int> cast)
+//	{
+//		Value *extend = Nucleus::createZExt(cast.value, Long::getType());
+//		Value *vector = Nucleus::createBitCast(extend, Int2::getType());
+//
+//		Constant *shuffle[2];
+//		shuffle[0] = Nucleus::createConstantInt(0);
+//		shuffle[1] = Nucleus::createConstantInt(0);
+//
+//		Value *replicate = Nucleus::createShuffleVector(vector, UndefValue::get(Int2::getType()), Nucleus::createConstantVector(shuffle, 2));
+//
+//		storeValue(replicate);
+//	}
+
+	Int2::Int2(RValue<Int4> cast)
+	{
+		Value *long2 = Nucleus::createBitCast(cast.value, Long2::getType());
+		Value *element = Nucleus::createExtractElement(long2, 0);
+		Value *int2 = Nucleus::createBitCast(element, Int2::getType());
+
+		storeValue(int2);
+	}
+
+	Int2::Int2()
+	{
+	//	xy.parent = this;
+	}
+
+	Int2::Int2(int x, int y)
+	{
+	//	xy.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Int2::Int2(RValue<Int2> rhs)
+	{
+	//	xy.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	Int2::Int2(const Int2 &rhs)
+	{
+	//	xy.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Int2::Int2(const Reference<Int2> &rhs)
+	{
+	//	xy.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Int2::Int2(RValue<Int> lo, RValue<Int> hi)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	RValue<Int2> Int2::operator=(RValue<Int2> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Int2> Int2::operator=(const Int2 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Int2>(value);
+	}
+
+	RValue<Int2> Int2::operator=(const Reference<Int2> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Int2>(value);
+	}
+
+	RValue<Int2> operator+(RValue<Int2> lhs, RValue<Int2> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<Int2> operator-(RValue<Int2> lhs, RValue<Int2> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+//	RValue<Int2> operator*(RValue<Int2> lhs, RValue<Int2> rhs)
+//	{
+//		return RValue<Int2>(Nucleus::createMul(lhs.value, rhs.value));
+//	}
+
+//	RValue<Int2> operator/(RValue<Int2> lhs, RValue<Int2> rhs)
+//	{
+//		return RValue<Int2>(Nucleus::createSDiv(lhs.value, rhs.value));
+//	}
+
+//	RValue<Int2> operator%(RValue<Int2> lhs, RValue<Int2> rhs)
+//	{
+//		return RValue<Int2>(Nucleus::createSRem(lhs.value, rhs.value));
+//	}
+
+	RValue<Int2> operator&(RValue<Int2> lhs, RValue<Int2> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<Int2> operator|(RValue<Int2> lhs, RValue<Int2> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<Int2> operator^(RValue<Int2> lhs, RValue<Int2> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<Int2> operator<<(RValue<Int2> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<Int2> operator>>(RValue<Int2> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<Int2> operator<<(RValue<Int2> lhs, RValue<Long1> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<Int2> operator>>(RValue<Int2> lhs, RValue<Long1> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<Int2> operator+=(const Int2 &lhs, RValue<Int2> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<Int2> operator-=(const Int2 &lhs, RValue<Int2> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+//	RValue<Int2> operator*=(const Int2 &lhs, RValue<Int2> rhs)
+//	{
+//		return lhs = lhs * rhs;
+//	}
+
+//	RValue<Int2> operator/=(const Int2 &lhs, RValue<Int2> rhs)
+//	{
+//		return lhs = lhs / rhs;
+//	}
+
+//	RValue<Int2> operator%=(const Int2 &lhs, RValue<Int2> rhs)
+//	{
+//		return lhs = lhs % rhs;
+//	}
+
+	RValue<Int2> operator&=(const Int2 &lhs, RValue<Int2> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<Int2> operator|=(const Int2 &lhs, RValue<Int2> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<Int2> operator^=(const Int2 &lhs, RValue<Int2> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+	RValue<Int2> operator<<=(const Int2 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<Int2> operator>>=(const Int2 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<Int2> operator<<=(const Int2 &lhs, RValue<Long1> rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<Int2> operator>>=(const Int2 &lhs, RValue<Long1> rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+//	RValue<Int2> operator+(RValue<Int2> val)
+//	{
+//		return val;
+//	}
+
+//	RValue<Int2> operator-(RValue<Int2> val)
+//	{
+//		return RValue<Int2>(Nucleus::createNeg(val.value));
+//	}
+
+	RValue<Int2> operator~(RValue<Int2> val)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	RValue<Long1> UnpackLow(RValue<Int2> x, RValue<Int2> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Long1>(nullptr);
+	}
+
+	RValue<Long1> UnpackHigh(RValue<Int2> x, RValue<Int2> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Long1>(nullptr);
+	}
+
+	RValue<Int> Extract(RValue<Int2> val, int i)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int>(nullptr);
+	}
+
+	RValue<Int2> Insert(RValue<Int2> val, RValue<Int> element, int i)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(nullptr);
+	}
+
+	Type *Int2::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	UInt2::UInt2()
+	{
+	//	xy.parent = this;
+	}
+
+	UInt2::UInt2(unsigned int x, unsigned int y)
+	{
+	//	xy.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	UInt2::UInt2(RValue<UInt2> rhs)
+	{
+	//	xy.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	UInt2::UInt2(const UInt2 &rhs)
+	{
+	//	xy.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UInt2::UInt2(const Reference<UInt2> &rhs)
+	{
+	//	xy.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<UInt2> UInt2::operator=(RValue<UInt2> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<UInt2> UInt2::operator=(const UInt2 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UInt2>(value);
+	}
+
+	RValue<UInt2> UInt2::operator=(const Reference<UInt2> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UInt2>(value);
+	}
+
+	RValue<UInt2> operator+(RValue<UInt2> lhs, RValue<UInt2> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt2>(nullptr);
+	}
+
+	RValue<UInt2> operator-(RValue<UInt2> lhs, RValue<UInt2> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt2>(nullptr);
+	}
+
+//	RValue<UInt2> operator*(RValue<UInt2> lhs, RValue<UInt2> rhs)
+//	{
+//		return RValue<UInt2>(Nucleus::createMul(lhs.value, rhs.value));
+//	}
+
+//	RValue<UInt2> operator/(RValue<UInt2> lhs, RValue<UInt2> rhs)
+//	{
+//		return RValue<UInt2>(Nucleus::createUDiv(lhs.value, rhs.value));
+//	}
+
+//	RValue<UInt2> operator%(RValue<UInt2> lhs, RValue<UInt2> rhs)
+//	{
+//		return RValue<UInt2>(Nucleus::createURem(lhs.value, rhs.value));
+//	}
+
+	RValue<UInt2> operator&(RValue<UInt2> lhs, RValue<UInt2> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt2>(nullptr);
+	}
+
+	RValue<UInt2> operator|(RValue<UInt2> lhs, RValue<UInt2> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt2>(nullptr);
+	}
+
+	RValue<UInt2> operator^(RValue<UInt2> lhs, RValue<UInt2> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt2>(nullptr);
+	}
+
+	RValue<UInt2> operator<<(RValue<UInt2> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt2>(nullptr);
+	}
+
+	RValue<UInt2> operator>>(RValue<UInt2> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt2>(nullptr);
+	}
+
+	RValue<UInt2> operator<<(RValue<UInt2> lhs, RValue<Long1> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt2>(nullptr);
+	}
+
+	RValue<UInt2> operator>>(RValue<UInt2> lhs, RValue<Long1> rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt2>(nullptr);
+	}
+
+	RValue<UInt2> operator+=(const UInt2 &lhs, RValue<UInt2> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<UInt2> operator-=(const UInt2 &lhs, RValue<UInt2> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+//	RValue<UInt2> operator*=(const UInt2 &lhs, RValue<UInt2> rhs)
+//	{
+//		return lhs = lhs * rhs;
+//	}
+
+//	RValue<UInt2> operator/=(const UInt2 &lhs, RValue<UInt2> rhs)
+//	{
+//		return lhs = lhs / rhs;
+//	}
+
+//	RValue<UInt2> operator%=(const UInt2 &lhs, RValue<UInt2> rhs)
+//	{
+//		return lhs = lhs % rhs;
+//	}
+
+	RValue<UInt2> operator&=(const UInt2 &lhs, RValue<UInt2> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<UInt2> operator|=(const UInt2 &lhs, RValue<UInt2> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<UInt2> operator^=(const UInt2 &lhs, RValue<UInt2> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+	RValue<UInt2> operator<<=(const UInt2 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<UInt2> operator>>=(const UInt2 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<UInt2> operator<<=(const UInt2 &lhs, RValue<Long1> rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<UInt2> operator>>=(const UInt2 &lhs, RValue<Long1> rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+//	RValue<UInt2> operator+(RValue<UInt2> val)
+//	{
+//		return val;
+//	}
+
+//	RValue<UInt2> operator-(RValue<UInt2> val)
+//	{
+//		return RValue<UInt2>(Nucleus::createNeg(val.value));
+//	}
+
+	RValue<UInt2> operator~(RValue<UInt2> val)
+	{
+		return RValue<UInt2>(Nucleus::createNot(val.value));
+	}
+
+	Type *UInt2::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Int4::Int4(RValue<Byte4> cast)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Int4::Int4(RValue<SByte4> cast)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Int4::Int4(RValue<Float4> cast)
+	{
+	//	xyzw.parent = this;
+
+		Value *xyzw = Nucleus::createFPToSI(cast.value, Int4::getType());
+
+		storeValue(xyzw);
+	}
+
+	Int4::Int4(RValue<Short4> cast)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Int4::Int4(RValue<UShort4> cast)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Int4::Int4()
+	{
+	//	xyzw.parent = this;
+	}
+
+	Int4::Int4(int xyzw)
+	{
+		constant(xyzw, xyzw, xyzw, xyzw);
+	}
+
+	Int4::Int4(int x, int yzw)
+	{
+		constant(x, yzw, yzw, yzw);
+	}
+
+	Int4::Int4(int x, int y, int zw)
+	{
+		constant(x, y, zw, zw);
+	}
+
+	Int4::Int4(int x, int y, int z, int w)
+	{
+		constant(x, y, z, w);
+	}
+
+	void Int4::constant(int x, int y, int z, int w)
+	{
+	//	xyzw.parent = this;
+
+		Constant *constantVector[4];
+		constantVector[0] = Nucleus::createConstantInt(x);
+		constantVector[1] = Nucleus::createConstantInt(y);
+		constantVector[2] = Nucleus::createConstantInt(z);
+		constantVector[3] = Nucleus::createConstantInt(w);
+
+		storeValue(Nucleus::createConstantVector(constantVector, 4));
+	}
+
+	Int4::Int4(RValue<Int4> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	Int4::Int4(const Int4 &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Int4::Int4(const Reference<Int4> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Int4::Int4(RValue<UInt4> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	Int4::Int4(const UInt4 &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Int4::Int4(const Reference<UInt4> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Int4::Int4(RValue<Int2> lo, RValue<Int2> hi)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Int4::Int4(RValue<Int> rhs)
+	{
+	//	xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Int4::Int4(const Int &rhs)
+	{
+	//	xyzw.parent = this;
+
+		*this = RValue<Int>(rhs.loadValue());
+	}
+
+	Int4::Int4(const Reference<Int> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		*this = RValue<Int>(rhs.loadValue());
+	}
+
+	RValue<Int4> Int4::operator=(RValue<Int4> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Int4> Int4::operator=(const Int4 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Int4>(value);
+	}
+
+	RValue<Int4> Int4::operator=(const Reference<Int4> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Int4>(value);
+	}
+
+	RValue<Int4> operator+(RValue<Int4> lhs, RValue<Int4> rhs)
+	{
+		return RValue<Int4>(Nucleus::createAdd(lhs.value, rhs.value));
+	}
+
+	RValue<Int4> operator-(RValue<Int4> lhs, RValue<Int4> rhs)
+	{
+		return RValue<Int4>(Nucleus::createSub(lhs.value, rhs.value));
+	}
+
+	RValue<Int4> operator*(RValue<Int4> lhs, RValue<Int4> rhs)
+	{
+		return RValue<Int4>(Nucleus::createMul(lhs.value, rhs.value));
+	}
+
+	RValue<Int4> operator/(RValue<Int4> lhs, RValue<Int4> rhs)
+	{
+		return RValue<Int4>(Nucleus::createSDiv(lhs.value, rhs.value));
+	}
+
+	RValue<Int4> operator%(RValue<Int4> lhs, RValue<Int4> rhs)
+	{
+		return RValue<Int4>(Nucleus::createSRem(lhs.value, rhs.value));
+	}
+
+	RValue<Int4> operator&(RValue<Int4> lhs, RValue<Int4> rhs)
+	{
+		return RValue<Int4>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<Int4> operator|(RValue<Int4> lhs, RValue<Int4> rhs)
+	{
+		return RValue<Int4>(Nucleus::createOr(lhs.value, rhs.value));
+	}
+
+	RValue<Int4> operator^(RValue<Int4> lhs, RValue<Int4> rhs)
+	{
+		return RValue<Int4>(Nucleus::createXor(lhs.value, rhs.value));
+	}
+
+	RValue<Int4> operator<<(RValue<Int4> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int4>(nullptr);
+	}
+
+	RValue<Int4> operator>>(RValue<Int4> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int4>(nullptr);
+	}
+
+	RValue<Int4> operator<<(RValue<Int4> lhs, RValue<Int4> rhs)
+	{
+		return RValue<Int4>(Nucleus::createShl(lhs.value, rhs.value));
+	}
+
+	RValue<Int4> operator>>(RValue<Int4> lhs, RValue<Int4> rhs)
+	{
+		return RValue<Int4>(Nucleus::createAShr(lhs.value, rhs.value));
+	}
+
+	RValue<Int4> operator+=(const Int4 &lhs, RValue<Int4> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<Int4> operator-=(const Int4 &lhs, RValue<Int4> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<Int4> operator*=(const Int4 &lhs, RValue<Int4> rhs)
+	{
+		return lhs = lhs * rhs;
+	}
+
+//	RValue<Int4> operator/=(const Int4 &lhs, RValue<Int4> rhs)
+//	{
+//		return lhs = lhs / rhs;
+//	}
+
+//	RValue<Int4> operator%=(const Int4 &lhs, RValue<Int4> rhs)
+//	{
+//		return lhs = lhs % rhs;
+//	}
+
+	RValue<Int4> operator&=(const Int4 &lhs, RValue<Int4> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<Int4> operator|=(const Int4 &lhs, RValue<Int4> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<Int4> operator^=(const Int4 &lhs, RValue<Int4> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+	RValue<Int4> operator<<=(const Int4 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<Int4> operator>>=(const Int4 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<Int4> operator+(RValue<Int4> val)
+	{
+		return val;
+	}
+
+	RValue<Int4> operator-(RValue<Int4> val)
+	{
+		return RValue<Int4>(Nucleus::createNeg(val.value));
+	}
+
+	RValue<Int4> operator~(RValue<Int4> val)
+	{
+		return RValue<Int4>(Nucleus::createNot(val.value));
+	}
+
+	RValue<Int4> CmpEQ(RValue<Int4> x, RValue<Int4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createICmpEQ(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Int4> CmpLT(RValue<Int4> x, RValue<Int4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createICmpSLT(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Int4> CmpLE(RValue<Int4> x, RValue<Int4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createICmpSLE(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Int4> CmpNEQ(RValue<Int4> x, RValue<Int4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createICmpNE(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Int4> CmpNLT(RValue<Int4> x, RValue<Int4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createICmpSGE(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Int4> CmpNLE(RValue<Int4> x, RValue<Int4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createICmpSGT(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Int4> Max(RValue<Int4> x, RValue<Int4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int4>(nullptr);
+	}
+
+	RValue<Int4> Min(RValue<Int4> x, RValue<Int4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int4>(nullptr);
+	}
+
+	RValue<Int4> RoundInt(RValue<Float4> cast)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int4>(nullptr);
+	}
+
+	RValue<Short8> Pack(RValue<Int4> x, RValue<Int4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Short8>(nullptr);
+	}
+
+	RValue<Int> Extract(RValue<Int4> x, int i)
+	{
+		return RValue<Int>(Nucleus::createExtractElement(x.value, i));
+	}
+
+	RValue<Int4> Insert(RValue<Int4> x, RValue<Int> element, int i)
+	{
+		return RValue<Int4>(Nucleus::createInsertElement(x.value, element.value, i));
+	}
+
+	RValue<Int> SignMask(RValue<Int4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int>(nullptr);
+	}
+
+	RValue<Int4> Swizzle(RValue<Int4> x, unsigned char select)
+	{
+		return RValue<Int4>(Nucleus::createSwizzle(x.value, select));
+	}
+
+	Type *Int4::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	UInt4::UInt4(RValue<Float4> cast)
+	{
+	//	xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	UInt4::UInt4()
+	{
+	//	xyzw.parent = this;
+	}
+
+	UInt4::UInt4(int xyzw)
+	{
+		constant(xyzw, xyzw, xyzw, xyzw);
+	}
+
+	UInt4::UInt4(int x, int yzw)
+	{
+		constant(x, yzw, yzw, yzw);
+	}
+
+	UInt4::UInt4(int x, int y, int zw)
+	{
+		constant(x, y, zw, zw);
+	}
+
+	UInt4::UInt4(int x, int y, int z, int w)
+	{
+		constant(x, y, z, w);
+	}
+
+	void UInt4::constant(int x, int y, int z, int w)
+	{
+	//	xyzw.parent = this;
+
+		Constant *constantVector[4];
+		constantVector[0] = Nucleus::createConstantInt(x);
+		constantVector[1] = Nucleus::createConstantInt(y);
+		constantVector[2] = Nucleus::createConstantInt(z);
+		constantVector[3] = Nucleus::createConstantInt(w);
+
+		storeValue(Nucleus::createConstantVector(constantVector, 4));
+	}
+
+	UInt4::UInt4(RValue<UInt4> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	UInt4::UInt4(const UInt4 &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UInt4::UInt4(const Reference<UInt4> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UInt4::UInt4(RValue<Int4> rhs)
+	{
+	//	xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	UInt4::UInt4(const Int4 &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UInt4::UInt4(const Reference<Int4> &rhs)
+	{
+	//	xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	UInt4::UInt4(RValue<UInt2> lo, RValue<UInt2> hi)
+	{
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	RValue<UInt4> UInt4::operator=(RValue<UInt4> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<UInt4> UInt4::operator=(const UInt4 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UInt4>(value);
+	}
+
+	RValue<UInt4> UInt4::operator=(const Reference<UInt4> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<UInt4>(value);
+	}
+
+	RValue<UInt4> operator+(RValue<UInt4> lhs, RValue<UInt4> rhs)
+	{
+		return RValue<UInt4>(Nucleus::createAdd(lhs.value, rhs.value));
+	}
+
+	RValue<UInt4> operator-(RValue<UInt4> lhs, RValue<UInt4> rhs)
+	{
+		return RValue<UInt4>(Nucleus::createSub(lhs.value, rhs.value));
+	}
+
+	RValue<UInt4> operator*(RValue<UInt4> lhs, RValue<UInt4> rhs)
+	{
+		return RValue<UInt4>(Nucleus::createMul(lhs.value, rhs.value));
+	}
+
+	RValue<UInt4> operator/(RValue<UInt4> lhs, RValue<UInt4> rhs)
+	{
+		return RValue<UInt4>(Nucleus::createUDiv(lhs.value, rhs.value));
+	}
+
+	RValue<UInt4> operator%(RValue<UInt4> lhs, RValue<UInt4> rhs)
+	{
+		return RValue<UInt4>(Nucleus::createURem(lhs.value, rhs.value));
+	}
+
+	RValue<UInt4> operator&(RValue<UInt4> lhs, RValue<UInt4> rhs)
+	{
+		return RValue<UInt4>(Nucleus::createAnd(lhs.value, rhs.value));
+	}
+
+	RValue<UInt4> operator|(RValue<UInt4> lhs, RValue<UInt4> rhs)
+	{
+		return RValue<UInt4>(Nucleus::createOr(lhs.value, rhs.value));
+	}
+
+	RValue<UInt4> operator^(RValue<UInt4> lhs, RValue<UInt4> rhs)
+	{
+		return RValue<UInt4>(Nucleus::createXor(lhs.value, rhs.value));
+	}
+
+	RValue<UInt4> operator<<(RValue<UInt4> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt4>(nullptr);
+	}
+
+	RValue<UInt4> operator>>(RValue<UInt4> lhs, unsigned char rhs)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt4>(nullptr);
+	}
+
+	RValue<UInt4> operator<<(RValue<UInt4> lhs, RValue<UInt4> rhs)
+	{
+		return RValue<UInt4>(Nucleus::createShl(lhs.value, rhs.value));
+	}
+
+	RValue<UInt4> operator>>(RValue<UInt4> lhs, RValue<UInt4> rhs)
+	{
+		return RValue<UInt4>(Nucleus::createLShr(lhs.value, rhs.value));
+	}
+
+	RValue<UInt4> operator+=(const UInt4 &lhs, RValue<UInt4> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<UInt4> operator-=(const UInt4 &lhs, RValue<UInt4> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<UInt4> operator*=(const UInt4 &lhs, RValue<UInt4> rhs)
+	{
+		return lhs = lhs * rhs;
+	}
+
+//	RValue<UInt4> operator/=(const UInt4 &lhs, RValue<UInt4> rhs)
+//	{
+//		return lhs = lhs / rhs;
+//	}
+
+//	RValue<UInt4> operator%=(const UInt4 &lhs, RValue<UInt4> rhs)
+//	{
+//		return lhs = lhs % rhs;
+//	}
+
+	RValue<UInt4> operator&=(const UInt4 &lhs, RValue<UInt4> rhs)
+	{
+		return lhs = lhs & rhs;
+	}
+
+	RValue<UInt4> operator|=(const UInt4 &lhs, RValue<UInt4> rhs)
+	{
+		return lhs = lhs | rhs;
+	}
+
+	RValue<UInt4> operator^=(const UInt4 &lhs, RValue<UInt4> rhs)
+	{
+		return lhs = lhs ^ rhs;
+	}
+
+	RValue<UInt4> operator<<=(const UInt4 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs << rhs;
+	}
+
+	RValue<UInt4> operator>>=(const UInt4 &lhs, unsigned char rhs)
+	{
+		return lhs = lhs >> rhs;
+	}
+
+	RValue<UInt4> operator+(RValue<UInt4> val)
+	{
+		return val;
+	}
+
+	RValue<UInt4> operator-(RValue<UInt4> val)
+	{
+		return RValue<UInt4>(Nucleus::createNeg(val.value));
+	}
+
+	RValue<UInt4> operator~(RValue<UInt4> val)
+	{
+		return RValue<UInt4>(Nucleus::createNot(val.value));
+	}
+
+	RValue<UInt4> CmpEQ(RValue<UInt4> x, RValue<UInt4> y)
+	{
+		return RValue<UInt4>(Nucleus::createSExt(Nucleus::createICmpEQ(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<UInt4> CmpLT(RValue<UInt4> x, RValue<UInt4> y)
+	{
+		return RValue<UInt4>(Nucleus::createSExt(Nucleus::createICmpULT(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<UInt4> CmpLE(RValue<UInt4> x, RValue<UInt4> y)
+	{
+		return RValue<UInt4>(Nucleus::createSExt(Nucleus::createICmpULE(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<UInt4> CmpNEQ(RValue<UInt4> x, RValue<UInt4> y)
+	{
+		return RValue<UInt4>(Nucleus::createSExt(Nucleus::createICmpNE(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<UInt4> CmpNLT(RValue<UInt4> x, RValue<UInt4> y)
+	{
+		return RValue<UInt4>(Nucleus::createSExt(Nucleus::createICmpUGE(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<UInt4> CmpNLE(RValue<UInt4> x, RValue<UInt4> y)
+	{
+		return RValue<UInt4>(Nucleus::createSExt(Nucleus::createICmpUGT(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<UInt4> Max(RValue<UInt4> x, RValue<UInt4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt4>(nullptr);
+	}
+
+	RValue<UInt4> Min(RValue<UInt4> x, RValue<UInt4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UInt4>(nullptr);
+	}
+
+	RValue<UShort8> Pack(RValue<UInt4> x, RValue<UInt4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<UShort8>(nullptr);
+	}
+
+	Type *UInt4::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Float::Float(RValue<Int> cast)
+	{
+		Value *integer = Nucleus::createSIToFP(cast.value, Float::getType());
+
+		storeValue(integer);
+	}
+
+	Float::Float()
+	{
+	}
+
+	Float::Float(float x)
+	{
+		storeValue(Nucleus::createConstantFloat(x));
+	}
+
+	Float::Float(RValue<Float> rhs)
+	{
+		storeValue(rhs.value);
+	}
+
+	Float::Float(const Float &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Float::Float(const Reference<Float> &rhs)
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	RValue<Float> Float::operator=(RValue<Float> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Float> Float::operator=(const Float &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Float>(value);
+	}
+
+	RValue<Float> Float::operator=(const Reference<Float> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Float>(value);
+	}
+
+	RValue<Float> operator+(RValue<Float> lhs, RValue<Float> rhs)
+	{
+		return RValue<Float>(Nucleus::createFAdd(lhs.value, rhs.value));
+	}
+
+	RValue<Float> operator-(RValue<Float> lhs, RValue<Float> rhs)
+	{
+		return RValue<Float>(Nucleus::createFSub(lhs.value, rhs.value));
+	}
+
+	RValue<Float> operator*(RValue<Float> lhs, RValue<Float> rhs)
+	{
+		return RValue<Float>(Nucleus::createFMul(lhs.value, rhs.value));
+	}
+
+	RValue<Float> operator/(RValue<Float> lhs, RValue<Float> rhs)
+	{
+		return RValue<Float>(Nucleus::createFDiv(lhs.value, rhs.value));
+	}
+
+	RValue<Float> operator+=(const Float &lhs, RValue<Float> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<Float> operator-=(const Float &lhs, RValue<Float> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<Float> operator*=(const Float &lhs, RValue<Float> rhs)
+	{
+		return lhs = lhs * rhs;
+	}
+
+	RValue<Float> operator/=(const Float &lhs, RValue<Float> rhs)
+	{
+		return lhs = lhs / rhs;
+	}
+
+	RValue<Float> operator+(RValue<Float> val)
+	{
+		return val;
+	}
+
+	RValue<Float> operator-(RValue<Float> val)
+	{
+		return RValue<Float>(Nucleus::createFNeg(val.value));
+	}
+
+	RValue<Bool> operator<(RValue<Float> lhs, RValue<Float> rhs)
+	{
+		return RValue<Bool>(Nucleus::createFCmpOLT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator<=(RValue<Float> lhs, RValue<Float> rhs)
+	{
+		return RValue<Bool>(Nucleus::createFCmpOLE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>(RValue<Float> lhs, RValue<Float> rhs)
+	{
+		return RValue<Bool>(Nucleus::createFCmpOGT(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator>=(RValue<Float> lhs, RValue<Float> rhs)
+	{
+		return RValue<Bool>(Nucleus::createFCmpOGE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator!=(RValue<Float> lhs, RValue<Float> rhs)
+	{
+		return RValue<Bool>(Nucleus::createFCmpONE(lhs.value, rhs.value));
+	}
+
+	RValue<Bool> operator==(RValue<Float> lhs, RValue<Float> rhs)
+	{
+		return RValue<Bool>(Nucleus::createFCmpOEQ(lhs.value, rhs.value));
+	}
+
+	RValue<Float> Abs(RValue<Float> x)
+	{
+		return IfThenElse(x > 0.0f, x, -x);
+	}
+
+	RValue<Float> Max(RValue<Float> x, RValue<Float> y)
+	{
+		return IfThenElse(x > y, x, y);
+	}
+
+	RValue<Float> Min(RValue<Float> x, RValue<Float> y)
+	{
+		return IfThenElse(x < y, x, y);
+	}
+
+	RValue<Float> Rcp_pp(RValue<Float> x, bool exactAtPow2)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float>(nullptr);
+	}
+
+	RValue<Float> RcpSqrt_pp(RValue<Float> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float>(nullptr);
+	}
+
+	RValue<Float> Sqrt(RValue<Float> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float>(nullptr);
+	}
+
+	RValue<Float> Round(RValue<Float> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float>(nullptr);
+	}
+
+	RValue<Float> Trunc(RValue<Float> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float>(nullptr);
+	}
+
+	RValue<Float> Frac(RValue<Float> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float>(nullptr);
+	}
+
+	RValue<Float> Floor(RValue<Float> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float>(nullptr);
+	}
+
+	RValue<Float> Ceil(RValue<Float> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float>(nullptr);
+	}
+
+	Type *Float::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Float2::Float2(RValue<Float4> cast)
+	{
+	//	xyzw.parent = this;
+
+		Value *int64x2 = Nucleus::createBitCast(cast.value, Long2::getType());
+		Value *int64 = Nucleus::createExtractElement(int64x2, 0);
+		Value *float2 = Nucleus::createBitCast(int64, Float2::getType());
+
+		storeValue(float2);
+	}
+
+	Type *Float2::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	Float4::Float4(RValue<Byte4> cast)
+	{
+		xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Float4::Float4(RValue<SByte4> cast)
+	{
+		xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Float4::Float4(RValue<Short4> cast)
+	{
+		xyzw.parent = this;
+
+		Int4 c(cast);
+		storeValue(Nucleus::createSIToFP(RValue<Int4>(c).value, Float4::getType()));
+	}
+
+	Float4::Float4(RValue<UShort4> cast)
+	{
+		xyzw.parent = this;
+
+		Int4 c(cast);
+		storeValue(Nucleus::createSIToFP(RValue<Int4>(c).value, Float4::getType()));
+	}
+
+	Float4::Float4(RValue<Int4> cast)
+	{
+		xyzw.parent = this;
+
+		Value *xyzw = Nucleus::createSIToFP(cast.value, Float4::getType());
+
+		storeValue(xyzw);
+	}
+
+	Float4::Float4(RValue<UInt4> cast)
+	{
+		xyzw.parent = this;
+
+		Value *xyzw = Nucleus::createUIToFP(cast.value, Float4::getType());
+
+		storeValue(xyzw);
+	}
+
+	Float4::Float4()
+	{
+		xyzw.parent = this;
+	}
+
+	Float4::Float4(float xyzw)
+	{
+		constant(xyzw, xyzw, xyzw, xyzw);
+	}
+
+	Float4::Float4(float x, float yzw)
+	{
+		constant(x, yzw, yzw, yzw);
+	}
+
+	Float4::Float4(float x, float y, float zw)
+	{
+		constant(x, y, zw, zw);
+	}
+
+	Float4::Float4(float x, float y, float z, float w)
+	{
+		constant(x, y, z, w);
+	}
+
+	void Float4::constant(float x, float y, float z, float w)
+	{
+		xyzw.parent = this;
+
+		Constant *constantVector[4];
+		constantVector[0] = Nucleus::createConstantFloat(x);
+		constantVector[1] = Nucleus::createConstantFloat(y);
+		constantVector[2] = Nucleus::createConstantFloat(z);
+		constantVector[3] = Nucleus::createConstantFloat(w);
+
+		storeValue(Nucleus::createConstantVector(constantVector, 4));
+	}
+
+	Float4::Float4(RValue<Float4> rhs)
+	{
+		xyzw.parent = this;
+
+		storeValue(rhs.value);
+	}
+
+	Float4::Float4(const Float4 &rhs)
+	{
+		xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Float4::Float4(const Reference<Float4> &rhs)
+	{
+		xyzw.parent = this;
+
+		Value *value = rhs.loadValue();
+		storeValue(value);
+	}
+
+	Float4::Float4(RValue<Float> rhs)
+	{
+		xyzw.parent = this;
+
+		assert(false && "UNIMPLEMENTED");
+	}
+
+	Float4::Float4(const Float &rhs)
+	{
+		xyzw.parent = this;
+
+		*this = RValue<Float>(rhs.loadValue());
+	}
+
+	Float4::Float4(const Reference<Float> &rhs)
+	{
+		xyzw.parent = this;
+
+		*this = RValue<Float>(rhs.loadValue());
+	}
+
+	RValue<Float4> Float4::operator=(float x) const
+	{
+		return *this = Float4(x, x, x, x);
+	}
+
+	RValue<Float4> Float4::operator=(RValue<Float4> rhs) const
+	{
+		storeValue(rhs.value);
+
+		return rhs;
+	}
+
+	RValue<Float4> Float4::operator=(const Float4 &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Float4>(value);
+	}
+
+	RValue<Float4> Float4::operator=(const Reference<Float4> &rhs) const
+	{
+		Value *value = rhs.loadValue();
+		storeValue(value);
+
+		return RValue<Float4>(value);
+	}
+
+	RValue<Float4> Float4::operator=(RValue<Float> rhs) const
+	{
+		return *this = Float4(rhs);
+	}
+
+	RValue<Float4> Float4::operator=(const Float &rhs) const
+	{
+		return *this = Float4(rhs);
+	}
+
+	RValue<Float4> Float4::operator=(const Reference<Float> &rhs) const
+	{
+		return *this = Float4(rhs);
+	}
+
+	RValue<Float4> operator+(RValue<Float4> lhs, RValue<Float4> rhs)
+	{
+		return RValue<Float4>(Nucleus::createFAdd(lhs.value, rhs.value));
+	}
+
+	RValue<Float4> operator-(RValue<Float4> lhs, RValue<Float4> rhs)
+	{
+		return RValue<Float4>(Nucleus::createFSub(lhs.value, rhs.value));
+	}
+
+	RValue<Float4> operator*(RValue<Float4> lhs, RValue<Float4> rhs)
+	{
+		return RValue<Float4>(Nucleus::createFMul(lhs.value, rhs.value));
+	}
+
+	RValue<Float4> operator/(RValue<Float4> lhs, RValue<Float4> rhs)
+	{
+		return RValue<Float4>(Nucleus::createFDiv(lhs.value, rhs.value));
+	}
+
+	RValue<Float4> operator%(RValue<Float4> lhs, RValue<Float4> rhs)
+	{
+		return RValue<Float4>(Nucleus::createFRem(lhs.value, rhs.value));
+	}
+
+	RValue<Float4> operator+=(const Float4 &lhs, RValue<Float4> rhs)
+	{
+		return lhs = lhs + rhs;
+	}
+
+	RValue<Float4> operator-=(const Float4 &lhs, RValue<Float4> rhs)
+	{
+		return lhs = lhs - rhs;
+	}
+
+	RValue<Float4> operator*=(const Float4 &lhs, RValue<Float4> rhs)
+	{
+		return lhs = lhs * rhs;
+	}
+
+	RValue<Float4> operator/=(const Float4 &lhs, RValue<Float4> rhs)
+	{
+		return lhs = lhs / rhs;
+	}
+
+	RValue<Float4> operator%=(const Float4 &lhs, RValue<Float4> rhs)
+	{
+		return lhs = lhs % rhs;
+	}
+
+	RValue<Float4> operator+(RValue<Float4> val)
+	{
+		return val;
+	}
+
+	RValue<Float4> operator-(RValue<Float4> val)
+	{
+		return RValue<Float4>(Nucleus::createFNeg(val.value));
+	}
+
+	RValue<Float4> Abs(RValue<Float4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> Max(RValue<Float4> x, RValue<Float4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> Min(RValue<Float4> x, RValue<Float4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> Rcp_pp(RValue<Float4> x, bool exactAtPow2)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> RcpSqrt_pp(RValue<Float4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> Sqrt(RValue<Float4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> Insert(const Float4 &val, RValue<Float> element, int i)
+	{
+		Value *value = val.loadValue();
+		Value *insert = Nucleus::createInsertElement(value, element.value, i);
+
+		val = RValue<Float4>(insert);
+
+		return val;
+	}
+
+	RValue<Float> Extract(RValue<Float4> x, int i)
+	{
+		return RValue<Float>(Nucleus::createExtractElement(x.value, i));
+	}
+
+	RValue<Float4> Swizzle(RValue<Float4> x, unsigned char select)
+	{
+		return RValue<Float4>(Nucleus::createSwizzle(x.value, select));
+	}
+
+	RValue<Float4> ShuffleLowHigh(RValue<Float4> x, RValue<Float4> y, unsigned char imm)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> UnpackLow(RValue<Float4> x, RValue<Float4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> UnpackHigh(RValue<Float4> x, RValue<Float4> y)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> Mask(Float4 &lhs, RValue<Float4> rhs, unsigned char select)
+	{
+		Value *vector = lhs.loadValue();
+		Value *shuffle = Nucleus::createMask(vector, rhs.value, select);
+		lhs.storeValue(shuffle);
+
+		return RValue<Float4>(shuffle);
+	}
+
+	RValue<Int> SignMask(RValue<Float4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Int>(nullptr);
+	}
+
+	RValue<Int4> CmpEQ(RValue<Float4> x, RValue<Float4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createFCmpOEQ(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Int4> CmpLT(RValue<Float4> x, RValue<Float4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createFCmpOLT(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Int4> CmpLE(RValue<Float4> x, RValue<Float4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createFCmpOLE(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Int4> CmpNEQ(RValue<Float4> x, RValue<Float4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createFCmpONE(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Int4> CmpNLT(RValue<Float4> x, RValue<Float4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createFCmpOGE(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Int4> CmpNLE(RValue<Float4> x, RValue<Float4> y)
+	{
+		return RValue<Int4>(Nucleus::createSExt(Nucleus::createFCmpOGT(x.value, y.value), Int4::getType()));
+	}
+
+	RValue<Float4> Round(RValue<Float4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> Trunc(RValue<Float4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> Frac(RValue<Float4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> Floor(RValue<Float4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	RValue<Float4> Ceil(RValue<Float4> x)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Float4>(nullptr);
+	}
+
+	Type *Float4::getType()
+	{
+		assert(false && "UNIMPLEMENTED"); return nullptr;
+	}
+
+	RValue<Pointer<Byte>> operator+(RValue<Pointer<Byte>> lhs, int offset)
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Pointer<Byte>>(nullptr);
+	}
+
+	RValue<Pointer<Byte>> operator+(RValue<Pointer<Byte>> lhs, RValue<Int> offset)
+	{
+		return RValue<Pointer<Byte>>(Nucleus::createGEP(lhs.value, offset.value));
+	}
+
+	RValue<Pointer<Byte>> operator+(RValue<Pointer<Byte>> lhs, RValue<UInt> offset)
+	{
+		return RValue<Pointer<Byte>>(Nucleus::createGEP(lhs.value, offset.value));
+	}
+
+	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, int offset)
+	{
+		return lhs = lhs + offset;
+	}
+
+	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, RValue<Int> offset)
+	{
+		return lhs = lhs + offset;
+	}
+
+	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, RValue<UInt> offset)
+	{
+		return lhs = lhs + offset;
+	}
+
+	RValue<Pointer<Byte>> operator-(RValue<Pointer<Byte>> lhs, int offset)
+	{
+		return lhs + -offset;
+	}
+
+	RValue<Pointer<Byte>> operator-(RValue<Pointer<Byte>> lhs, RValue<Int> offset)
+	{
+		return lhs + -offset;
+	}
+
+	RValue<Pointer<Byte>> operator-(RValue<Pointer<Byte>> lhs, RValue<UInt> offset)
+	{
+		return lhs + -offset;
+	}
+
+	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, int offset)
+	{
+		return lhs = lhs - offset;
+	}
+
+	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, RValue<Int> offset)
+	{
+		return lhs = lhs - offset;
+	}
+
+	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, RValue<UInt> offset)
+	{
+		return lhs = lhs - offset;
+	}
+
+	void Return()
+	{
+		Nucleus::createRetVoid();
+		Nucleus::setInsertBlock(Nucleus::createBasicBlock());
+		Nucleus::createUnreachable();
+	}
+
+	void Return(bool ret)
+	{
+		Ice::Operand *Ret = Ice::ConstantInteger32::create(::context, Ice::IceType_i32, ret ? 1 : 0);
+		Ice::InstRet *retu = Ice::InstRet::create(::function, Ret);
+		::basicBlock->appendInst(retu);
+	}
+
+	void Return(const Int &ret)
+	{
+		Ice::InstRet *retu = Ice::InstRet::create(::function, ret.loadValue());
+		::basicBlock->appendInst(retu);
+	}
+
+	BasicBlock *beginLoop()
+	{
+		BasicBlock *loopBB = Nucleus::createBasicBlock();
+
+		Nucleus::createBr(loopBB);
+		Nucleus::setInsertBlock(loopBB);
+
+		return loopBB;
+	}
+
+	bool branch(RValue<Bool> cmp, BasicBlock *bodyBB, BasicBlock *endBB)
+	{
+		Nucleus::createCondBr(cmp.value, bodyBB, endBB);
+		Nucleus::setInsertBlock(bodyBB);
+
+		return true;
+	}
+
+	bool elseBlock(BasicBlock *falseBB)
+	{
+		Nucleus::setInsertBlock(falseBB);
+
+		return true;
+	}
+
+	RValue<Long> Ticks()
+	{
+		assert(false && "UNIMPLEMENTED"); return RValue<Long>(nullptr);
+	}
+}
+
diff --git a/src/Reactor/SubzeroTest.vcxproj b/src/Reactor/SubzeroTest.vcxproj
new file mode 100644
index 0000000..6f27954
--- /dev/null
+++ b/src/Reactor/SubzeroTest.vcxproj
@@ -0,0 +1,163 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{4EC107AB-89E8-4A0B-8366-B3E81085AE07}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>SubzeroTest</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(IncludePath)</IncludePath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(IncludePath)</IncludePath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <IncludePath>$(IncludePath)</IncludePath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <IncludePath>$(IncludePath)</IncludePath>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ProjectReference Include="Subzero.vcxproj">
+      <Project>{0eb31aec-b020-46ab-ba05-730f6d01c29b}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Main.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/src/Reactor/SubzeroTest.vcxproj.filters b/src/Reactor/SubzeroTest.vcxproj.filters
new file mode 100644
index 0000000..661f3fb
--- /dev/null
+++ b/src/Reactor/SubzeroTest.vcxproj.filters
@@ -0,0 +1,22 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
