// SwiftShader Software Renderer
//
// Copyright(c) 2005-2012 TransGaming Inc.
//
// All rights reserved. No part of this software may be copied, distributed, transmitted,
// transcribed, stored in a retrieval system, translated into any human or computer
// language by any means, or disclosed to third parties without the explicit written
// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
// or implied, including but not limited to any patent rights, are granted to you.
//

#ifndef sw_Nucleus_hpp
#define sw_Nucleus_hpp

#include "Common/Types.hpp"

#include <stdarg.h>
#include <vector>
#include <stdio.h>
#include <wchar.h>

#undef abs
#undef max
#undef min
#undef Bool

namespace llvm
{
	class Function;
	class Module;
	class BasicBlock;
	class Value;
	class Constant;
	class ConstantInt;
	class ConstantFP;
	class Type;
	class Argument;
	class GlobalVariable;
	class GlobalValue;
	class ExecutionEngine;
	class LLVMContext;
}

namespace sw
{
	enum Optimization
	{
		Disabled             = 0,
		InstructionCombining = 1,
		CFGSimplification    = 2,
		LICM                 = 3,
		AggressiveDCE        = 4,
		GVN                  = 5,
		Reassociate          = 6,
		DeadStoreElimination = 7,
		SCCP                 = 8,
		ScalarReplAggregates = 9,

		OptimizationCount
	};

	extern Optimization optimization[10];

	class Routine;
	class RoutineManager;
	class Builder;

	class Nucleus
	{
	public:
		Nucleus();

		virtual ~Nucleus();

		Routine *acquireRoutine(const wchar_t *name, bool runOptimizations = true);

		static void setFunction(llvm::Function *function);

		static llvm::Module *getModule();
		static llvm::Function *getFunction();
		static llvm::LLVMContext *getContext();

		static llvm::Value *allocateStackVariable(llvm::Type *type, int arraySize = 0);
		static llvm::BasicBlock *createBasicBlock();
		static llvm::BasicBlock *getInsertBlock();
		static void setInsertBlock(llvm::BasicBlock *basicBlock);
		static llvm::BasicBlock *getPredecessor(llvm::BasicBlock *basicBlock);

		static llvm::Function *createFunction(llvm::Type *ReturnType, std::vector<llvm::Type*> &Params);
		static llvm::Argument *getArgument(llvm::Function *function, unsigned int index);

		// Terminators
		static llvm::Value *createRetVoid();
		static llvm::Value *createRet(llvm::Value *V);
		static llvm::Value *createBr(llvm::BasicBlock *dest);
		static llvm::Value *createCondBr(llvm::Value *cond, llvm::BasicBlock *ifTrue, llvm::BasicBlock *ifFalse);

		// Binary operators
		static llvm::Value *createAdd(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createSub(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createMul(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createUDiv(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createSDiv(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFAdd(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFSub(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFMul(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFDiv(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createURem(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createSRem(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFRem(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createShl(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createLShr(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createAShr(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createAnd(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createOr(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createXor(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createNeg(llvm::Value *V);
		static llvm::Value *createFNeg(llvm::Value *V);
		static llvm::Value *createNot(llvm::Value *V);

		// Memory instructions
		static llvm::Value *createLoad(llvm::Value *ptr, bool isVolatile = false, unsigned int align = 0);
		static llvm::Value *createStore(llvm::Value *value, llvm::Value *ptr, bool isVolatile = false, unsigned int align = 0);
		static llvm::Value *createGEP(llvm::Value *ptr, llvm::Value *index);

		// Atomic instructions
		static llvm::Value *createAtomicAdd(llvm::Value *ptr, llvm::Value *value);

		// Cast/Conversion Operators
		static llvm::Value *createTrunc(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createZExt(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createSExt(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createFPToUI(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createFPToSI(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createUIToFP(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createSIToFP(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createFPTrunc(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createFPExt(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createPtrToInt(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createIntToPtr(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createBitCast(llvm::Value *V, llvm::Type *destType);
		static llvm::Value *createIntCast(llvm::Value *V, llvm::Type *destType, bool isSigned);

		// Compare instructions
		static llvm::Value *createICmpEQ(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createICmpNE(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createICmpUGT(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createICmpUGE(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createICmpULT(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createICmpULE(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createICmpSGT(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createICmpSGE(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createICmpSLT(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createICmpSLE(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpOEQ(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpOGT(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpOGE(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpOLT(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpOLE(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpONE(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpORD(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpUNO(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpUEQ(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpUGT(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpUGE(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpULT(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpULE(llvm::Value *lhs, llvm::Value *rhs);
		static llvm::Value *createFCmpUNE(llvm::Value *lhs, llvm::Value *rhs);

		// Call instructions
		static llvm::Value *createCall(llvm::Value *callee);
		static llvm::Value *createCall(llvm::Value *callee, llvm::Value *Arg);
		static llvm::Value *createCall(llvm::Value *callee, llvm::Value *Arg1, llvm::Value *Arg2);
		static llvm::Value *createCall(llvm::Value *callee, llvm::Value *Arg1, llvm::Value *Arg2, llvm::Value *Arg3);
		static llvm::Value *createCall(llvm::Value *callee, llvm::Value *Arg1, llvm::Value *Arg2, llvm::Value *Arg3,llvm::Value *Arg4);

		// Vector instructions
		static llvm::Value *createExtractElement(llvm::Value *vector, int index);
		static llvm::Value *createInsertElement(llvm::Value *vector, llvm::Value *element, int index);
		static llvm::Value *createShuffleVector(llvm::Value *V1, llvm::Value *V2, llvm::Value *mask);

		// Other instructions
		static llvm::Value *createSelect(llvm::Value *C, llvm::Value *ifTrue, llvm::Value *ifFalse);
		static llvm::Value *createSwitch(llvm::Value *V, llvm::BasicBlock *Dest, unsigned NumCases);
		static void addSwitchCase(llvm::Value *Switch, int Case, llvm::BasicBlock *Branch);
		static llvm::Value *createUnreachable();

		// Derived instructions
		static llvm::Value *createSwizzle(llvm::Value *val, unsigned char select);
		static llvm::Value *createMask(llvm::Value *lhs, llvm::Value *rhs, unsigned char select);

		// Global values
		static const llvm::GlobalValue *getGlobalValueAtAddress(void *Addr);
		static void addGlobalMapping(const llvm::GlobalValue *GV, void *Addr);
		static llvm::GlobalValue *createGlobalValue(llvm::Type *Ty, bool isConstant, unsigned int Align);
		static llvm::Type *getPointerType(llvm::Type *ElementType);

		// Constant values
		static llvm::Constant *createNullValue(llvm::Type *Ty);
		static llvm::ConstantInt *createConstantInt(int64_t i);
		static llvm::ConstantInt *createConstantInt(int i);
		static llvm::ConstantInt *createConstantInt(unsigned int i);
		static llvm::ConstantInt *createConstantBool(bool b);
		static llvm::ConstantInt *createConstantByte(signed char i);
		static llvm::ConstantInt *createConstantByte(unsigned char i);
		static llvm::ConstantInt *createConstantShort(short i);
		static llvm::ConstantInt *createConstantShort(unsigned short i);
		static llvm::Constant *createConstantFloat(float x);
		static llvm::Value *createNullPointer(llvm::Type *Ty);
		static llvm::Value *createConstantVector(llvm::Constant *const *Vals, unsigned NumVals);

	private:
		void optimize();

		static llvm::ExecutionEngine *executionEngine;
		static Builder *builder;
		static llvm::Function *function;
		static llvm::LLVMContext *context;
		static llvm::Module *module;
		static RoutineManager *routineManager;
	};

	class Byte;
	class SByte;
	class Byte4;
	class SByte4;
	class Byte8;
	class SByte8;
	class Byte16;
	class SByte16;
	class Short;
	class UShort;
	class Short4;
	class UShort4;
	class Short8;
	class UShort8;
	class Int;
	class UInt;
	class Int2;
	class UInt2;
	class Int4;
	class UInt4;
	class Long;
	class Long1;
	class Long2;
	class Float;
	class Float2;
	class Float4;

	class Void
	{
	public:
		static llvm::Type *getType();

		static bool isVoid()
		{
			return true;
		}

		typedef void ctype;
	};

	template<class T>
	class RValue;

	template<class T>
	class Pointer;

	class LValue
	{
	public:
		LValue(llvm::Type *type, int arraySize = 0);

		static bool isVoid()
		{
			return false;
		}

		llvm::Value *loadValue(unsigned int alignment = 0) const;
		llvm::Value *storeValue(llvm::Value *value, unsigned int alignment = 0) const;
		llvm::Value *getAddress(llvm::Value *index) const;

	private:
		llvm::Value *address;
	};

	template<class T>
	class Variable : public LValue
	{
	public:
		Variable(int arraySize = 0);

		RValue<Pointer<T> > operator&();
	};

	template<class T>
	class Reference
	{
	public:
		explicit Reference(llvm::Value *pointer, int alignment = 1);

		RValue<T> operator=(RValue<T> rhs) const;
		RValue<T> operator=(const Reference<T> &ref) const;

		RValue<T> operator+=(RValue<T> rhs) const;

		llvm::Value *loadValue() const;
		int getAlignment() const;

	private:
		llvm::Value *address;

		const int alignment;
	};

	template<class T>
	struct IntLiteral
	{
		struct type;
	};

	template<> struct
	IntLiteral<Int>
	{
		typedef int type;
	};

	template<> struct
	IntLiteral<UInt>
	{
		typedef unsigned int type;
	};

	template<> struct
	IntLiteral<Long>
	{
		typedef int64_t type;
	};

	template<class T>
	struct FloatLiteral
	{
		struct type;
	};

	template<> struct
	FloatLiteral<Float>
	{
		typedef float type;
	};

	template<class T>
	class RValue
	{
	public:
		explicit RValue(llvm::Value *rvalue);

		RValue(const T &lvalue);
		RValue(typename IntLiteral<T>::type i);
		RValue(typename FloatLiteral<T>::type f);
		RValue(const Reference<T> &rhs);

		llvm::Value *value;   // FIXME: Make private
	};

	class MMX : public Variable<MMX>
	{
	public:
		static llvm::Type *getType();
	};

	class Bool : public Variable<Bool>
	{
	public:
		explicit Bool(llvm::Argument *argument);

		Bool();
		Bool(bool x);
		Bool(RValue<Bool> rhs);
		Bool(const Bool &rhs);
		Bool(const Reference<Bool> &rhs);

	//	RValue<Bool> operator=(bool rhs) const;   // FIXME: Implement
		RValue<Bool> operator=(RValue<Bool> rhs) const;
		RValue<Bool> operator=(const Bool &rhs) const;
		RValue<Bool> operator=(const Reference<Bool> &rhs) const;

		friend RValue<Bool> operator!(RValue<Bool> val);
		friend RValue<Bool> operator&&(RValue<Bool> lhs, RValue<Bool> rhs);
		friend RValue<Bool> operator||(RValue<Bool> lhs, RValue<Bool> rhs);

		static llvm::Type *getType();
	};

	class Byte : public Variable<Byte>
	{
	public:
		explicit Byte(llvm::Argument *argument);

		explicit Byte(RValue<Int> cast);

		Byte();
		Byte(int x);
		Byte(unsigned char x);
		Byte(RValue<Byte> rhs);
		Byte(const Byte &rhs);
		Byte(const Reference<Byte> &rhs);

	//	RValue<Byte> operator=(unsigned char rhs) const;   // FIXME: Implement
		RValue<Byte> operator=(RValue<Byte> rhs) const;
		RValue<Byte> operator=(const Byte &rhs) const;
		RValue<Byte> operator=(const Reference<Byte> &rhs) const;

		friend RValue<Byte> operator+(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator-(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator*(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator/(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator%(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator&(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator|(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator^(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator<<(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator>>(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator+=(const Byte &lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator-=(const Byte &lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator*=(const Byte &lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator/=(const Byte &lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator%=(const Byte &lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator&=(const Byte &lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator|=(const Byte &lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator^=(const Byte &lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator<<=(const Byte &lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator>>=(const Byte &lhs, RValue<Byte> rhs);
		friend RValue<Byte> operator+(RValue<Byte> val);
		friend RValue<Byte> operator-(RValue<Byte> val);
		friend RValue<Byte> operator~(RValue<Byte> val);
		friend RValue<Byte> operator++(const Byte &val, int);   // Post-increment
		friend const Byte &operator++(const Byte &val);   // Pre-increment
		friend RValue<Byte> operator--(const Byte &val, int);   // Post-decrement
		friend const Byte &operator--(const Byte &val);   // Pre-decrement
		friend RValue<Bool> operator<(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Bool> operator<=(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Bool> operator>(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Bool> operator>=(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Bool> operator!=(RValue<Byte> lhs, RValue<Byte> rhs);
		friend RValue<Bool> operator==(RValue<Byte> lhs, RValue<Byte> rhs);

		static llvm::Type *getType();
	};

	class SByte : public Variable<SByte>
	{
	public:
		explicit SByte(llvm::Argument *argument);

		SByte();
		SByte(signed char x);
		SByte(RValue<SByte> rhs);
		SByte(const SByte &rhs);
		SByte(const Reference<SByte> &rhs);

	//	RValue<SByte> operator=(signed char rhs) const;   // FIXME: Implement
		RValue<SByte> operator=(RValue<SByte> rhs) const;
		RValue<SByte> operator=(const SByte &rhs) const;
		RValue<SByte> operator=(const Reference<SByte> &rhs) const;

		friend RValue<SByte> operator+(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator-(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator*(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator/(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator%(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator&(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator|(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator^(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator<<(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator>>(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator+=(const SByte &lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator-=(const SByte &lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator*=(const SByte &lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator/=(const SByte &lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator%=(const SByte &lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator&=(const SByte &lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator|=(const SByte &lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator^=(const SByte &lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator<<=(const SByte &lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator>>=(const SByte &lhs, RValue<SByte> rhs);
		friend RValue<SByte> operator+(RValue<SByte> val);
		friend RValue<SByte> operator-(RValue<SByte> val);
		friend RValue<SByte> operator~(RValue<SByte> val);
		friend RValue<SByte> operator++(const SByte &val, int);   // Post-increment
		friend const SByte &operator++(const SByte &val);   // Pre-increment
		friend RValue<SByte> operator--(const SByte &val, int);   // Post-decrement
		friend const SByte &operator--(const SByte &val);   // Pre-decrement
		friend RValue<Bool> operator<(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<Bool> operator<=(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<Bool> operator>(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<Bool> operator>=(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<Bool> operator!=(RValue<SByte> lhs, RValue<SByte> rhs);
		friend RValue<Bool> operator==(RValue<SByte> lhs, RValue<SByte> rhs);

		static llvm::Type *getType();
	};

	class Short : public Variable<Short>
	{
	public:
		explicit Short(llvm::Argument *argument);

		explicit Short(RValue<Int> cast);

		Short();
		Short(short x);
		Short(RValue<Short> rhs);
		Short(const Short &rhs);
		Short(const Reference<Short> &rhs);

	//	RValue<Short> operator=(short rhs) const;   // FIXME: Implement
		RValue<Short> operator=(RValue<Short> rhs) const;
		RValue<Short> operator=(const Short &rhs) const;
		RValue<Short> operator=(const Reference<Short> &rhs) const;

		friend RValue<Short> operator+(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Short> operator-(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Short> operator*(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Short> operator/(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Short> operator%(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Short> operator&(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Short> operator|(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Short> operator^(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Short> operator<<(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Short> operator>>(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Short> operator+=(const Short &lhs, RValue<Short> rhs);
		friend RValue<Short> operator-=(const Short &lhs, RValue<Short> rhs);
		friend RValue<Short> operator*=(const Short &lhs, RValue<Short> rhs);
		friend RValue<Short> operator/=(const Short &lhs, RValue<Short> rhs);
		friend RValue<Short> operator%=(const Short &lhs, RValue<Short> rhs);
		friend RValue<Short> operator&=(const Short &lhs, RValue<Short> rhs);
		friend RValue<Short> operator|=(const Short &lhs, RValue<Short> rhs);
		friend RValue<Short> operator^=(const Short &lhs, RValue<Short> rhs);
		friend RValue<Short> operator<<=(const Short &lhs, RValue<Short> rhs);
		friend RValue<Short> operator>>=(const Short &lhs, RValue<Short> rhs);
		friend RValue<Short> operator+(RValue<Short> val);
		friend RValue<Short> operator-(RValue<Short> val);
		friend RValue<Short> operator~(RValue<Short> val);
		friend RValue<Short> operator++(const Short &val, int);   // Post-increment
		friend const Short &operator++(const Short &val);   // Pre-increment
		friend RValue<Short> operator--(const Short &val, int);   // Post-decrement
		friend const Short &operator--(const Short &val);   // Pre-decrement
		friend RValue<Bool> operator<(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Bool> operator<=(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Bool> operator>(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Bool> operator>=(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Bool> operator!=(RValue<Short> lhs, RValue<Short> rhs);
		friend RValue<Bool> operator==(RValue<Short> lhs, RValue<Short> rhs);

		static llvm::Type *getType();
	};

	class UShort : public Variable<UShort>
	{
	public:
		explicit UShort(llvm::Argument *argument);

		UShort();
		UShort(unsigned short x);
		UShort(RValue<UShort> rhs);
		UShort(const UShort &rhs);
		UShort(const Reference<UShort> &rhs);

	//	RValue<UShort> operator=(unsigned short rhs) const;   // FIXME: Implement
		RValue<UShort> operator=(RValue<UShort> rhs) const;
		RValue<UShort> operator=(const UShort &rhs) const;
		RValue<UShort> operator=(const Reference<UShort> &rhs) const;

		friend RValue<UShort> operator+(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator-(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator*(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator/(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator%(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator&(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator|(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator^(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator<<(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator>>(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator+=(const UShort &lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator-=(const UShort &lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator*=(const UShort &lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator/=(const UShort &lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator%=(const UShort &lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator&=(const UShort &lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator|=(const UShort &lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator^=(const UShort &lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator<<=(const UShort &lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator>>=(const UShort &lhs, RValue<UShort> rhs);
		friend RValue<UShort> operator+(RValue<UShort> val);
		friend RValue<UShort> operator-(RValue<UShort> val);
		friend RValue<UShort> operator~(RValue<UShort> val);
		friend RValue<UShort> operator++(const UShort &val, int);   // Post-increment
		friend const UShort &operator++(const UShort &val);   // Pre-increment
		friend RValue<UShort> operator--(const UShort &val, int);   // Post-decrement
		friend const UShort &operator--(const UShort &val);   // Pre-decrement
		friend RValue<Bool> operator<(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<Bool> operator<=(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<Bool> operator>(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<Bool> operator>=(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<Bool> operator!=(RValue<UShort> lhs, RValue<UShort> rhs);
		friend RValue<Bool> operator==(RValue<UShort> lhs, RValue<UShort> rhs);

		static llvm::Type *getType();
	};

	class Byte4 : public Variable<Byte4>
	{
	public:
	//	Byte4();
	//	Byte4(int x, int y, int z, int w);
	//	Byte4(RValue<Byte4> rhs);
	//	Byte4(const Byte4 &rhs);
	//	Byte4(const Reference<Byte4> &rhs);

	//	RValue<Byte4> operator=(RValue<Byte4> rhs) const;
	//	RValue<Byte4> operator=(const Byte4 &rhs) const;
	//	RValue<Byte4> operator=(const Reference<Byte4> &rhs) const;

	//	friend RValue<Byte4> operator+(RValue<Byte4> lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator-(RValue<Byte4> lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator*(RValue<Byte4> lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator/(RValue<Byte4> lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator%(RValue<Byte4> lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator&(RValue<Byte4> lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator|(RValue<Byte4> lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator^(RValue<Byte4> lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator<<(RValue<Byte4> lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator>>(RValue<Byte4> lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator+=(const Byte4 &lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator-=(const Byte4 &lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator*=(const Byte4 &lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator/=(const Byte4 &lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator%=(const Byte4 &lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator&=(const Byte4 &lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator|=(const Byte4 &lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator^=(const Byte4 &lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator<<=(const Byte4 &lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator>>=(const Byte4 &lhs, RValue<Byte4> rhs);
	//	friend RValue<Byte4> operator+(RValue<Byte4> val);
	//	friend RValue<Byte4> operator-(RValue<Byte4> val);
	//	friend RValue<Byte4> operator~(RValue<Byte4> val);
	//	friend RValue<Byte4> operator++(const Byte4 &val, int);   // Post-increment
	//	friend const Byte4 &operator++(const Byte4 &val);   // Pre-increment
	//	friend RValue<Byte4> operator--(const Byte4 &val, int);   // Post-decrement
	//	friend const Byte4 &operator--(const Byte4 &val);   // Pre-decrement

		static llvm::Type *getType();
	};

	class SByte4 : public Variable<SByte4>
	{
	public:
	//	SByte4();
	//	SByte4(int x, int y, int z, int w);
	//	SByte4(RValue<SByte4> rhs);
	//	SByte4(const SByte4 &rhs);
	//	SByte4(const Reference<SByte4> &rhs);

	//	RValue<SByte4> operator=(RValue<SByte4> rhs) const;
	//	RValue<SByte4> operator=(const SByte4 &rhs) const;
	//	RValue<SByte4> operator=(const Reference<SByte4> &rhs) const;

	//	friend RValue<SByte4> operator+(RValue<SByte4> lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator-(RValue<SByte4> lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator*(RValue<SByte4> lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator/(RValue<SByte4> lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator%(RValue<SByte4> lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator&(RValue<SByte4> lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator|(RValue<SByte4> lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator^(RValue<SByte4> lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator<<(RValue<SByte4> lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator>>(RValue<SByte4> lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator+=(const SByte4 &lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator-=(const SByte4 &lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator*=(const SByte4 &lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator/=(const SByte4 &lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator%=(const SByte4 &lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator&=(const SByte4 &lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator|=(const SByte4 &lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator^=(const SByte4 &lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator<<=(const SByte4 &lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator>>=(const SByte4 &lhs, RValue<SByte4> rhs);
	//	friend RValue<SByte4> operator+(RValue<SByte4> val);
	//	friend RValue<SByte4> operator-(RValue<SByte4> val);
	//	friend RValue<SByte4> operator~(RValue<SByte4> val);
	//	friend RValue<SByte4> operator++(const SByte4 &val, int);   // Post-increment
	//	friend const SByte4 &operator++(const SByte4 &val);   // Pre-increment
	//	friend RValue<SByte4> operator--(const SByte4 &val, int);   // Post-decrement
	//	friend const SByte4 &operator--(const SByte4 &val);   // Pre-decrement

		static llvm::Type *getType();
	};

	class Byte8 : public Variable<Byte8>
	{
	public:
		Byte8();
		Byte8(byte x0, byte x1, byte x2, byte x3, byte x4, byte x5, byte x6, byte x7);
		Byte8(int64_t x);
		Byte8(RValue<Byte8> rhs);
		Byte8(const Byte8 &rhs);
		Byte8(const Reference<Byte8> &rhs);

		RValue<Byte8> operator=(RValue<Byte8> rhs) const;
		RValue<Byte8> operator=(const Byte8 &rhs) const;
		RValue<Byte8> operator=(const Reference<Byte8> &rhs) const;

		friend RValue<Byte8> operator+(RValue<Byte8> lhs, RValue<Byte8> rhs);
		friend RValue<Byte8> operator-(RValue<Byte8> lhs, RValue<Byte8> rhs);
	//	friend RValue<Byte8> operator*(RValue<Byte8> lhs, RValue<Byte8> rhs);
	//	friend RValue<Byte8> operator/(RValue<Byte8> lhs, RValue<Byte8> rhs);
	//	friend RValue<Byte8> operator%(RValue<Byte8> lhs, RValue<Byte8> rhs);
		friend RValue<Byte8> operator&(RValue<Byte8> lhs, RValue<Byte8> rhs);
		friend RValue<Byte8> operator|(RValue<Byte8> lhs, RValue<Byte8> rhs);
		friend RValue<Byte8> operator^(RValue<Byte8> lhs, RValue<Byte8> rhs);
	//	friend RValue<Byte8> operator<<(RValue<Byte8> lhs, RValue<Byte8> rhs);
	//	friend RValue<Byte8> operator>>(RValue<Byte8> lhs, RValue<Byte8> rhs);
		friend RValue<Byte8> operator+=(const Byte8 &lhs, RValue<Byte8> rhs);
		friend RValue<Byte8> operator-=(const Byte8 &lhs, RValue<Byte8> rhs);
	//	friend RValue<Byte8> operator*=(const Byte8 &lhs, RValue<Byte8> rhs);
	//	friend RValue<Byte8> operator/=(const Byte8 &lhs, RValue<Byte8> rhs);
	//	friend RValue<Byte8> operator%=(const Byte8 &lhs, RValue<Byte8> rhs);
		friend RValue<Byte8> operator&=(const Byte8 &lhs, RValue<Byte8> rhs);
		friend RValue<Byte8> operator|=(const Byte8 &lhs, RValue<Byte8> rhs);
		friend RValue<Byte8> operator^=(const Byte8 &lhs, RValue<Byte8> rhs);
	//	friend RValue<Byte8> operator<<=(const Byte8 &lhs, RValue<Byte8> rhs);
	//	friend RValue<Byte8> operator>>=(const Byte8 &lhs, RValue<Byte8> rhs);
	//	friend RValue<Byte8> operator+(RValue<Byte8> val);
	//	friend RValue<Byte8> operator-(RValue<Byte8> val);
		friend RValue<Byte8> operator~(RValue<Byte8> val);
	//	friend RValue<Byte8> operator++(const Byte8 &val, int);   // Post-increment
	//	friend const Byte8 &operator++(const Byte8 &val);   // Pre-increment
	//	friend RValue<Byte8> operator--(const Byte8 &val, int);   // Post-decrement
	//	friend const Byte8 &operator--(const Byte8 &val);   // Pre-decrement

		friend RValue<Byte8> AddSat(RValue<Byte8> x, RValue<Byte8> y);
		friend RValue<Byte8> SubSat(RValue<Byte8> x, RValue<Byte8> y);

		friend RValue<Short4> Unpack(RValue<Byte4> x);
		friend RValue<Short4> UnpackLow(RValue<Byte8> x, RValue<Byte8> y);
		friend RValue<Short4> UnpackHigh(RValue<Byte8> x, RValue<Byte8> y);
		friend RValue<Int> SignMask(RValue<Byte8> x);

	//	friend RValue<Byte8> CmpGT(RValue<Byte8> x, RValue<Byte8> y);
		friend RValue<Byte8> CmpEQ(RValue<Byte8> x, RValue<Byte8> y);

		static llvm::Type *getType();
	};

	class SByte8 : public Variable<SByte8>
	{
	public:
		SByte8();
		SByte8(byte x0, byte x1, byte x2, byte x3, byte x4, byte x5, byte x6, byte x7);
		SByte8(int64_t x);
		SByte8(RValue<SByte8> rhs);
		SByte8(const SByte8 &rhs);
		SByte8(const Reference<SByte8> &rhs);

		RValue<SByte8> operator=(RValue<SByte8> rhs) const;
		RValue<SByte8> operator=(const SByte8 &rhs) const;
		RValue<SByte8> operator=(const Reference<SByte8> &rhs) const;

		friend RValue<SByte8> operator+(RValue<SByte8> lhs, RValue<SByte8> rhs);
		friend RValue<SByte8> operator-(RValue<SByte8> lhs, RValue<SByte8> rhs);
	//	friend RValue<SByte8> operator*(RValue<SByte8> lhs, RValue<SByte8> rhs);
	//	friend RValue<SByte8> operator/(RValue<SByte8> lhs, RValue<SByte8> rhs);
	//	friend RValue<SByte8> operator%(RValue<SByte8> lhs, RValue<SByte8> rhs);
		friend RValue<SByte8> operator&(RValue<SByte8> lhs, RValue<SByte8> rhs);
		friend RValue<SByte8> operator|(RValue<SByte8> lhs, RValue<SByte8> rhs);
		friend RValue<SByte8> operator^(RValue<SByte8> lhs, RValue<SByte8> rhs);
	//	friend RValue<SByte8> operator<<(RValue<SByte8> lhs, RValue<SByte8> rhs);
	//	friend RValue<SByte8> operator>>(RValue<SByte8> lhs, RValue<SByte8> rhs);
		friend RValue<SByte8> operator+=(const SByte8 &lhs, RValue<SByte8> rhs);
		friend RValue<SByte8> operator-=(const SByte8 &lhs, RValue<SByte8> rhs);
	//	friend RValue<SByte8> operator*=(const SByte8 &lhs, RValue<SByte8> rhs);
	//	friend RValue<SByte8> operator/=(const SByte8 &lhs, RValue<SByte8> rhs);
	//	friend RValue<SByte8> operator%=(const SByte8 &lhs, RValue<SByte8> rhs);
		friend RValue<SByte8> operator&=(const SByte8 &lhs, RValue<SByte8> rhs);
		friend RValue<SByte8> operator|=(const SByte8 &lhs, RValue<SByte8> rhs);
		friend RValue<SByte8> operator^=(const SByte8 &lhs, RValue<SByte8> rhs);
	//	friend RValue<SByte8> operator<<=(const SByte8 &lhs, RValue<SByte8> rhs);
	//	friend RValue<SByte8> operator>>=(const SByte8 &lhs, RValue<SByte8> rhs);
	//	friend RValue<SByte8> operator+(RValue<SByte8> val);
	//	friend RValue<SByte8> operator-(RValue<SByte8> val);
		friend RValue<SByte8> operator~(RValue<SByte8> val);
	//	friend RValue<SByte8> operator++(const SByte8 &val, int);   // Post-increment
	//	friend const SByte8 &operator++(const SByte8 &val);   // Pre-increment
	//	friend RValue<SByte8> operator--(const SByte8 &val, int);   // Post-decrement
	//	friend const SByte8 &operator--(const SByte8 &val);   // Pre-decrement

		friend RValue<SByte8> AddSat(RValue<SByte8> x, RValue<SByte8> y);
		friend RValue<SByte8> SubSat(RValue<SByte8> x, RValue<SByte8> y);

		friend RValue<Short4> UnpackLow(RValue<SByte8> x, RValue<SByte8> y);
		friend RValue<Short4> UnpackHigh(RValue<SByte8> x, RValue<SByte8> y);
		friend RValue<Int> SignMask(RValue<SByte8> x);

		friend RValue<Byte8> CmpGT(RValue<SByte8> x, RValue<SByte8> y);
		friend RValue<Byte8> CmpEQ(RValue<SByte8> x, RValue<SByte8> y);

		static llvm::Type *getType();
	};

	class Byte16 : public Variable<Byte16>
	{
	public:
	//	Byte16();
	//	Byte16(int x, int y, int z, int w);
		Byte16(RValue<Byte16> rhs);
		Byte16(const Byte16 &rhs);
		Byte16(const Reference<Byte16> &rhs);

		RValue<Byte16> operator=(RValue<Byte16> rhs) const;
		RValue<Byte16> operator=(const Byte16 &rhs) const;
		RValue<Byte16> operator=(const Reference<Byte16> &rhs) const;

	//	friend RValue<Byte16> operator+(RValue<Byte16> lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator-(RValue<Byte16> lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator*(RValue<Byte16> lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator/(RValue<Byte16> lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator%(RValue<Byte16> lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator&(RValue<Byte16> lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator|(RValue<Byte16> lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator^(RValue<Byte16> lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator<<(RValue<Byte16> lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator>>(RValue<Byte16> lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator+=(const Byte16 &lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator-=(const Byte16 &lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator*=(const Byte16 &lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator/=(const Byte16 &lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator%=(const Byte16 &lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator&=(const Byte16 &lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator|=(const Byte16 &lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator^=(const Byte16 &lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator<<=(const Byte16 &lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator>>=(const Byte16 &lhs, RValue<Byte16> rhs);
	//	friend RValue<Byte16> operator+(RValue<Byte16> val);
	//	friend RValue<Byte16> operator-(RValue<Byte16> val);
	//	friend RValue<Byte16> operator~(RValue<Byte16> val);
	//	friend RValue<Byte16> operator++(const Byte16 &val, int);   // Post-increment
	//	friend const Byte16 &operator++(const Byte16 &val);   // Pre-increment
	//	friend RValue<Byte16> operator--(const Byte16 &val, int);   // Post-decrement
	//	friend const Byte16 &operator--(const Byte16 &val);   // Pre-decrement

		static llvm::Type *getType();
	};

	class SByte16 : public Variable<SByte16>
	{
	public:
	//	SByte16();
	//	SByte16(int x, int y, int z, int w);
	//	SByte16(RValue<SByte16> rhs);
	//	SByte16(const SByte16 &rhs);
	//	SByte16(const Reference<SByte16> &rhs);

	//	RValue<SByte16> operator=(RValue<SByte16> rhs) const;
	//	RValue<SByte16> operator=(const SByte16 &rhs) const;
	//	RValue<SByte16> operator=(const Reference<SByte16> &rhs) const;

	//	friend RValue<SByte16> operator+(RValue<SByte16> lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator-(RValue<SByte16> lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator*(RValue<SByte16> lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator/(RValue<SByte16> lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator%(RValue<SByte16> lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator&(RValue<SByte16> lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator|(RValue<SByte16> lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator^(RValue<SByte16> lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator<<(RValue<SByte16> lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator>>(RValue<SByte16> lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator+=(const SByte16 &lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator-=(const SByte16 &lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator*=(const SByte16 &lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator/=(const SByte16 &lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator%=(const SByte16 &lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator&=(const SByte16 &lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator|=(const SByte16 &lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator^=(const SByte16 &lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator<<=(const SByte16 &lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator>>=(const SByte16 &lhs, RValue<SByte16> rhs);
	//	friend RValue<SByte16> operator+(RValue<SByte16> val);
	//	friend RValue<SByte16> operator-(RValue<SByte16> val);
	//	friend RValue<SByte16> operator~(RValue<SByte16> val);
	//	friend RValue<SByte16> operator++(const SByte16 &val, int);   // Post-increment
	//	friend const SByte16 &operator++(const SByte16 &val);   // Pre-increment
	//	friend RValue<SByte16> operator--(const SByte16 &val, int);   // Post-decrement
	//	friend const SByte16 &operator--(const SByte16 &val);   // Pre-decrement

		static llvm::Type *getType();
	};

	class Short4 : public Variable<Short4>
	{
	public:
		explicit Short4(RValue<Int> cast);
		explicit Short4(RValue<Int4> cast);
	//	explicit Short4(RValue<Float> cast);
		explicit Short4(RValue<Float4> cast);

		Short4();
		Short4(short xyzw);
		Short4(short x, short y, short z, short w);
		Short4(RValue<Short4> rhs);
		Short4(const Short4 &rhs);
		Short4(const Reference<Short4> &rhs);
		Short4(RValue<UShort4> rhs);
		Short4(const UShort4 &rhs);
		Short4(const Reference<UShort4> &rhs);

		RValue<Short4> operator=(RValue<Short4> rhs) const;
		RValue<Short4> operator=(const Short4 &rhs) const;
		RValue<Short4> operator=(const Reference<Short4> &rhs) const;
		RValue<Short4> operator=(RValue<UShort4> rhs) const;
		RValue<Short4> operator=(const UShort4 &rhs) const;
		RValue<Short4> operator=(const Reference<UShort4> &rhs) const;

		friend RValue<Short4> operator+(RValue<Short4> lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator-(RValue<Short4> lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator*(RValue<Short4> lhs, RValue<Short4> rhs);
	//	friend RValue<Short4> operator/(RValue<Short4> lhs, RValue<Short4> rhs);
	//	friend RValue<Short4> operator%(RValue<Short4> lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator&(RValue<Short4> lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator|(RValue<Short4> lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator^(RValue<Short4> lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator<<(RValue<Short4> lhs, unsigned char rhs);
		friend RValue<Short4> operator>>(RValue<Short4> lhs, unsigned char rhs);
		friend RValue<Short4> operator<<(RValue<Short4> lhs, RValue<Long1> rhs);
		friend RValue<Short4> operator>>(RValue<Short4> lhs, RValue<Long1> rhs);
		friend RValue<Short4> operator+=(const Short4 &lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator-=(const Short4 &lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator*=(const Short4 &lhs, RValue<Short4> rhs);
	//	friend RValue<Short4> operator/=(const Short4 &lhs, RValue<Short4> rhs);
	//	friend RValue<Short4> operator%=(const Short4 &lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator&=(const Short4 &lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator|=(const Short4 &lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator^=(const Short4 &lhs, RValue<Short4> rhs);
		friend RValue<Short4> operator<<=(const Short4 &lhs, unsigned char rhs);
		friend RValue<Short4> operator>>=(const Short4 &lhs, unsigned char rhs);
		friend RValue<Short4> operator<<=(const Short4 &lhs, RValue<Long1> rhs);
		friend RValue<Short4> operator>>=(const Short4 &lhs, RValue<Long1> rhs);
	//	friend RValue<Short4> operator+(RValue<Short4> val);
		friend RValue<Short4> operator-(RValue<Short4> val);
		friend RValue<Short4> operator~(RValue<Short4> val);
	//	friend RValue<Short4> operator++(const Short4 &val, int);   // Post-increment
	//	friend const Short4 &operator++(const Short4 &val);   // Pre-increment
	//	friend RValue<Short4> operator--(const Short4 &val, int);   // Post-decrement
	//	friend const Short4 &operator--(const Short4 &val);   // Pre-decrement
	//	friend RValue<Bool> operator<(RValue<Short4> lhs, RValue<Short4> rhs);
	//	friend RValue<Bool> operator<=(RValue<Short4> lhs, RValue<Short4> rhs);
	//	friend RValue<Bool> operator>(RValue<Short4> lhs, RValue<Short4> rhs);
	//	friend RValue<Bool> operator>=(RValue<Short4> lhs, RValue<Short4> rhs);
	//	friend RValue<Bool> operator!=(RValue<Short4> lhs, RValue<Short4> rhs);
	//	friend RValue<Bool> operator==(RValue<Short4> lhs, RValue<Short4> rhs);

		friend RValue<Short4> RoundShort4(RValue<Float4> cast);

		friend RValue<Short4> Max(RValue<Short4> x, RValue<Short4> y);
		friend RValue<Short4> Min(RValue<Short4> x, RValue<Short4> y);
		friend RValue<Short4> AddSat(RValue<Short4> x, RValue<Short4> y);
		friend RValue<Short4> SubSat(RValue<Short4> x, RValue<Short4> y);
		friend RValue<Short4> MulHigh(RValue<Short4> x, RValue<Short4> y);
		friend RValue<Int2> MulAdd(RValue<Short4> x, RValue<Short4> y);

		friend RValue<SByte8> Pack(RValue<Short4> x, RValue<Short4> y);
		friend RValue<Int2> UnpackLow(RValue<Short4> x, RValue<Short4> y);
		friend RValue<Int2> UnpackHigh(RValue<Short4> x, RValue<Short4> y);
		friend RValue<Short4> Swizzle(RValue<Short4> x, unsigned char select);
		friend RValue<Short4> Insert(RValue<Short4> val, RValue<Short> element, int i);
		friend RValue<Short> Extract(RValue<Short4> val, int i);

		friend RValue<Short4> CmpGT(RValue<Short4> x, RValue<Short4> y);
		friend RValue<Short4> CmpEQ(RValue<Short4> x, RValue<Short4> y);

		static llvm::Type *getType();
	};

	class UShort4 : public Variable<UShort4>
	{
	public:
		explicit UShort4(RValue<Int4> cast);
		explicit UShort4(RValue<Float4> cast, bool saturate = false);

		UShort4();
		UShort4(unsigned short x, unsigned short y, unsigned short z, unsigned short w);
		UShort4(RValue<UShort4> rhs);
		UShort4(const UShort4 &rhs);
		UShort4(const Reference<UShort4> &rhs);
		UShort4(RValue<Short4> rhs);
		UShort4(const Short4 &rhs);
		UShort4(const Reference<Short4> &rhs);

		RValue<UShort4> operator=(RValue<UShort4> rhs) const;
		RValue<UShort4> operator=(const UShort4 &rhs) const;
		RValue<UShort4> operator=(const Reference<UShort4> &rhs) const;
		RValue<UShort4> operator=(RValue<Short4> rhs) const;
		RValue<UShort4> operator=(const Short4 &rhs) const;
		RValue<UShort4> operator=(const Reference<Short4> &rhs) const;

		friend RValue<UShort4> operator+(RValue<UShort4> lhs, RValue<UShort4> rhs);
		friend RValue<UShort4> operator-(RValue<UShort4> lhs, RValue<UShort4> rhs);
		friend RValue<UShort4> operator*(RValue<UShort4> lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator/(RValue<UShort4> lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator%(RValue<UShort4> lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator&(RValue<UShort4> lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator|(RValue<UShort4> lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator^(RValue<UShort4> lhs, RValue<UShort4> rhs);
		friend RValue<UShort4> operator<<(RValue<UShort4> lhs, unsigned char rhs);
		friend RValue<UShort4> operator>>(RValue<UShort4> lhs, unsigned char rhs);
		friend RValue<UShort4> operator<<(RValue<UShort4> lhs, RValue<Long1> rhs);
		friend RValue<UShort4> operator>>(RValue<UShort4> lhs, RValue<Long1> rhs);
	//	friend RValue<UShort4> operator+=(const UShort4 &lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator-=(const UShort4 &lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator*=(const UShort4 &lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator/=(const UShort4 &lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator%=(const UShort4 &lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator&=(const UShort4 &lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator|=(const UShort4 &lhs, RValue<UShort4> rhs);
	//	friend RValue<UShort4> operator^=(const UShort4 &lhs, RValue<UShort4> rhs);
		friend RValue<UShort4> operator<<=(const UShort4 &lhs, unsigned char rhs);
		friend RValue<UShort4> operator>>=(const UShort4 &lhs, unsigned char rhs);
		friend RValue<UShort4> operator<<=(const UShort4 &lhs, RValue<Long1> rhs);
		friend RValue<UShort4> operator>>=(const UShort4 &lhs, RValue<Long1> rhs);
	//	friend RValue<UShort4> operator+(RValue<UShort4> val);
	//	friend RValue<UShort4> operator-(RValue<UShort4> val);
		friend RValue<UShort4> operator~(RValue<UShort4> val);
	//	friend RValue<UShort4> operator++(const UShort4 &val, int);   // Post-increment
	//	friend const UShort4 &operator++(const UShort4 &val);   // Pre-increment
	//	friend RValue<UShort4> operator--(const UShort4 &val, int);   // Post-decrement
	//	friend const UShort4 &operator--(const UShort4 &val);   // Pre-decrement

		friend RValue<UShort4> Max(RValue<UShort4> x, RValue<UShort4> y);
		friend RValue<UShort4> Min(RValue<UShort4> x, RValue<UShort4> y);
		friend RValue<UShort4> AddSat(RValue<UShort4> x, RValue<UShort4> y);
		friend RValue<UShort4> SubSat(RValue<UShort4> x, RValue<UShort4> y);
		friend RValue<UShort4> MulHigh(RValue<UShort4> x, RValue<UShort4> y);

		friend RValue<UShort4> Average(RValue<UShort4> x, RValue<UShort4> y);

		friend RValue<Byte8> Pack(RValue<UShort4> x, RValue<UShort4> y);

		static llvm::Type *getType();
	};

	class Short8 : public Variable<Short8>
	{
	public:
	//	Short8();
		Short8(short c0, short c1, short c2, short c3, short c4, short c5, short c6, short c7);
		Short8(RValue<Short8> rhs);
	//	Short8(const Short8 &rhs);
	//	Short8(const Reference<Short8> &rhs);

	//	RValue<Short8> operator=(RValue<Short8> rhs) const;
	//	RValue<Short8> operator=(const Short8 &rhs) const;
	//	RValue<Short8> operator=(const Reference<Short8> &rhs) const;

		friend RValue<Short8> operator+(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator-(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator*(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator/(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator%(RValue<Short8> lhs, RValue<Short8> rhs);
		friend RValue<Short8> operator&(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator|(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator^(RValue<Short8> lhs, RValue<Short8> rhs);
		friend RValue<Short8> operator<<(RValue<Short8> lhs, unsigned char rhs);
		friend RValue<Short8> operator>>(RValue<Short8> lhs, unsigned char rhs);
	//	friend RValue<Short8> operator<<(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator>>(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator+=(const Short8 &lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator-=(const Short8 &lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator*=(const Short8 &lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator/=(const Short8 &lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator%=(const Short8 &lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator&=(const Short8 &lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator|=(const Short8 &lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator^=(const Short8 &lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator<<=(const Short8 &lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator>>=(const Short8 &lhs, RValue<Short8> rhs);
	//	friend RValue<Short8> operator+(RValue<Short8> val);
	//	friend RValue<Short8> operator-(RValue<Short8> val);
	//	friend RValue<Short8> operator~(RValue<Short8> val);
	//	friend RValue<Short8> operator++(const Short8 &val, int);   // Post-increment
	//	friend const Short8 &operator++(const Short8 &val);   // Pre-increment
	//	friend RValue<Short8> operator--(const Short8 &val, int);   // Post-decrement
	//	friend const Short8 &operator--(const Short8 &val);   // Pre-decrement
	//	friend RValue<Bool> operator<(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Bool> operator<=(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Bool> operator>(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Bool> operator>=(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Bool> operator!=(RValue<Short8> lhs, RValue<Short8> rhs);
	//	friend RValue<Bool> operator==(RValue<Short8> lhs, RValue<Short8> rhs);

		friend RValue<Short8> Concatenate(RValue<Short4> lo, RValue<Short4> hi);

		friend RValue<Short8> MulHigh(RValue<Short8> x, RValue<Short8> y);
		friend RValue<Int4> MulAdd(RValue<Short8> x, RValue<Short8> y);

		static llvm::Type *getType();
	};

	class UShort8 : public Variable<UShort8>
	{
	public:
	//	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);
		UShort8(RValue<UShort8> rhs);
	//	UShort8(const UShort8 &rhs);
	//	UShort8(const Reference<UShort8> &rhs);

		RValue<UShort8> operator=(RValue<UShort8> rhs) const;
		RValue<UShort8> operator=(const UShort8 &rhs) const;
		RValue<UShort8> operator=(const Reference<UShort8> &rhs) const;

		friend RValue<UShort8> operator+(RValue<UShort8> lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator-(RValue<UShort8> lhs, RValue<UShort8> rhs);
		friend RValue<UShort8> operator*(RValue<UShort8> lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator/(RValue<UShort8> lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator%(RValue<UShort8> lhs, RValue<UShort8> rhs);
		friend RValue<UShort8> operator&(RValue<UShort8> lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator|(RValue<UShort8> lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator^(RValue<UShort8> lhs, RValue<UShort8> rhs);
		friend RValue<UShort8> operator<<(RValue<UShort8> lhs, unsigned char rhs);
		friend RValue<UShort8> operator>>(RValue<UShort8> lhs, unsigned char rhs);
	//	friend RValue<UShort8> operator<<(RValue<UShort8> lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator>>(RValue<UShort8> lhs, RValue<UShort8> rhs);
		friend RValue<UShort8> operator+=(const UShort8 &lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator-=(const UShort8 &lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator*=(const UShort8 &lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator/=(const UShort8 &lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator%=(const UShort8 &lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator&=(const UShort8 &lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator|=(const UShort8 &lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator^=(const UShort8 &lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator<<=(const UShort8 &lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator>>=(const UShort8 &lhs, RValue<UShort8> rhs);
	//	friend RValue<UShort8> operator+(RValue<UShort8> val);
	//	friend RValue<UShort8> operator-(RValue<UShort8> val);
		friend RValue<UShort8> operator~(RValue<UShort8> val);
	//	friend RValue<UShort8> operator++(const UShort8 &val, int);   // Post-increment
	//	friend const UShort8 &operator++(const UShort8 &val);   // Pre-increment
	//	friend RValue<UShort8> operator--(const UShort8 &val, int);   // Post-decrement
	//	friend const UShort8 &operator--(const UShort8 &val);   // Pre-decrement
	//	friend RValue<Bool> operator<(RValue<UShort8> lhs, RValue<UShort8> rhs);
	//	friend RValue<Bool> operator<=(RValue<UShort8> lhs, RValue<UShort8> rhs);
	//	friend RValue<Bool> operator>(RValue<UShort8> lhs, RValue<UShort8> rhs);
	//	friend RValue<Bool> operator>=(RValue<UShort8> lhs, RValue<UShort8> rhs);
	//	friend RValue<Bool> operator!=(RValue<UShort8> lhs, RValue<UShort8> rhs);
	//	friend RValue<Bool> operator==(RValue<UShort8> lhs, RValue<UShort8> rhs);

		friend RValue<UShort8> Swizzle(RValue<UShort8> x, char select0, char select1, char select2, char select3, char select4, char select5, char select6, char select7);
		friend RValue<UShort8> Concatenate(RValue<UShort4> lo, RValue<UShort4> hi);

		friend RValue<UShort8> MulHigh(RValue<UShort8> x, RValue<UShort8> y);

		static llvm::Type *getType();
	};

	class Int : public Variable<Int>
	{
	public:
		explicit Int(llvm::Argument *argument);

		explicit Int(RValue<Byte> cast);
		explicit Int(RValue<SByte> cast);
		explicit Int(RValue<Short> cast);
		explicit Int(RValue<UShort> cast);
		explicit Int(RValue<Int2> cast);
		explicit Int(RValue<Long> cast);
		explicit Int(RValue<Float> cast);

		Int();
		Int(int x);
		Int(RValue<Int> rhs);
		Int(RValue<UInt> rhs);
		Int(const Int &rhs);
		Int(const UInt &rhs);
		Int(const Reference<Int> &rhs);
		Int(const Reference<UInt> &rhs);

		RValue<Int> operator=(int rhs) const;
		RValue<Int> operator=(RValue<Int> rhs) const;
		RValue<Int> operator=(RValue<UInt> rhs) const;
		RValue<Int> operator=(const Int &rhs) const;
		RValue<Int> operator=(const UInt &rhs) const;
		RValue<Int> operator=(const Reference<Int> &rhs) const;
		RValue<Int> operator=(const Reference<UInt> &rhs) const;

		friend RValue<Int> operator+(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Int> operator-(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Int> operator*(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Int> operator/(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Int> operator%(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Int> operator&(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Int> operator|(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Int> operator^(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Int> operator<<(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Int> operator>>(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Int> operator+=(const Int &lhs, RValue<Int> rhs);
		friend RValue<Int> operator-=(const Int &lhs, RValue<Int> rhs);
		friend RValue<Int> operator*=(const Int &lhs, RValue<Int> rhs);
		friend RValue<Int> operator/=(const Int &lhs, RValue<Int> rhs);
		friend RValue<Int> operator%=(const Int &lhs, RValue<Int> rhs);
		friend RValue<Int> operator&=(const Int &lhs, RValue<Int> rhs);
		friend RValue<Int> operator|=(const Int &lhs, RValue<Int> rhs);
		friend RValue<Int> operator^=(const Int &lhs, RValue<Int> rhs);
		friend RValue<Int> operator<<=(const Int &lhs, RValue<Int> rhs);
		friend RValue<Int> operator>>=(const Int &lhs, RValue<Int> rhs);
		friend RValue<Int> operator+(RValue<Int> val);
		friend RValue<Int> operator-(RValue<Int> val);
		friend RValue<Int> operator~(RValue<Int> val);
		friend RValue<Int> operator++(const Int &val, int);   // Post-increment
		friend const Int &operator++(const Int &val);   // Pre-increment
		friend RValue<Int> operator--(const Int &val, int);   // Post-decrement
		friend const Int &operator--(const Int &val);   // Pre-decrement
		friend RValue<Bool> operator<(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Bool> operator<=(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Bool> operator>(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Bool> operator>=(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Bool> operator!=(RValue<Int> lhs, RValue<Int> rhs);
		friend RValue<Bool> operator==(RValue<Int> lhs, RValue<Int> rhs);

		friend RValue<Int> Max(RValue<Int> x, RValue<Int> y);
		friend RValue<Int> Min(RValue<Int> x, RValue<Int> y);
		friend RValue<Int> Clamp(RValue<Int> x, RValue<Int> min, RValue<Int> max);

		friend RValue<Int> RoundInt(RValue<Float> cast);

		static llvm::Type *getType();
	};

	class Long : public Variable<Long>
	{
	public:
	//	explicit Long(llvm::Argument *argument);

	//	explicit Long(RValue<Short> cast);
	//	explicit Long(RValue<UShort> cast);
		explicit Long(RValue<Int> cast);
		explicit Long(RValue<UInt> cast);
	//	explicit Long(RValue<Float> cast);

		Long();
	//	Long(qword x);
		Long(RValue<Long> rhs);
	//	Long(RValue<ULong> rhs);
	//	Long(const Long &rhs);
	//	Long(const Reference<Long> &rhs);
	//	Long(const ULong &rhs);
	//	Long(const Reference<ULong> &rhs);

		RValue<Long> operator=(int64_t rhs) const;
		RValue<Long> operator=(RValue<Long> rhs) const;
	//	RValue<Long> operator=(RValue<ULong> rhs) const;
		RValue<Long> operator=(const Long &rhs) const;
		RValue<Long> operator=(const Reference<Long> &rhs) const;
	//	RValue<Long> operator=(const ULong &rhs) const;
	//	RValue<Long> operator=(const Reference<ULong> &rhs) const;

		friend RValue<Long> operator+(RValue<Long> lhs, RValue<Long> rhs);
		friend RValue<Long> operator-(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator*(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator/(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator%(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator&(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator|(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator^(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator<<(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator>>(RValue<Long> lhs, RValue<Long> rhs);
		friend RValue<Long> operator+=(const Long &lhs, RValue<Long> rhs);
		friend RValue<Long> operator-=(const Long &lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator*=(const Long &lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator/=(const Long &lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator%=(const Long &lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator&=(const Long &lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator|=(const Long &lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator^=(const Long &lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator<<=(const Long &lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator>>=(const Long &lhs, RValue<Long> rhs);
	//	friend RValue<Long> operator+(RValue<Long> val);
	//	friend RValue<Long> operator-(RValue<Long> val);
	//	friend RValue<Long> operator~(RValue<Long> val);
	//	friend RValue<Long> operator++(const Long &val, int);   // Post-increment
	//	friend const Long &operator++(const Long &val);   // Pre-increment
	//	friend RValue<Long> operator--(const Long &val, int);   // Post-decrement
	//	friend const Long &operator--(const Long &val);   // Pre-decrement
	//	friend RValue<Bool> operator<(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Bool> operator<=(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Bool> operator>(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Bool> operator>=(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Bool> operator!=(RValue<Long> lhs, RValue<Long> rhs);
	//	friend RValue<Bool> operator==(RValue<Long> lhs, RValue<Long> rhs);

	//	friend RValue<Long> RoundLong(RValue<Float> cast);

		friend RValue<Long> AddAtomic( RValue<Pointer<Long> > x, RValue<Long> y);

		static llvm::Type *getType();
	};

	class Long1 : public Variable<Long1>
	{
	public:
	//	explicit Long1(llvm::Argument *argument);

	//	explicit Long1(RValue<Short> cast);
	//	explicit Long1(RValue<UShort> cast);
	//	explicit Long1(RValue<Int> cast);
	//	explicit Long1(RValue<UInt> cast);
	//	explicit Long1(RValue<Float> cast);

		explicit Long1(const Reference<UInt> &cast);

	//	Long1();
	//	Long1(qword x);
		Long1(RValue<Long1> rhs);
	//	Long1(RValue<ULong1> rhs);
	//	Long1(const Long1 &rhs);
	//	Long1(const Reference<Long1> &rhs);
	//	Long1(const ULong1 &rhs);
	//	Long1(const Reference<ULong1> &rhs);

	//	RValue<Long1> operator=(qword rhs) const;
	//	RValue<Long1> operator=(RValue<Long1> rhs) const;
	//	RValue<Long1> operator=(RValue<ULong1> rhs) const;
	//	RValue<Long1> operator=(const Long1 &rhs) const;
	//	RValue<Long1> operator=(const Reference<Long1> &rhs) const;
	//	RValue<Long1> operator=(const ULong1 &rhs) const;
	//	RValue<Long1> operator=(const Reference<ULong1> &rhs) const;

	//	friend RValue<Long1> operator+(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator-(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator*(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator/(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator%(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator&(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator|(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator^(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator<<(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator>>(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator+=(const Long1 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator-=(const Long1 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator*=(const Long1 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator/=(const Long1 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator%=(const Long1 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator&=(const Long1 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator|=(const Long1 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator^=(const Long1 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator<<=(const Long1 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator>>=(const Long1 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long1> operator+(RValue<Long1> val);
	//	friend RValue<Long1> operator-(RValue<Long1> val);
	//	friend RValue<Long1> operator~(RValue<Long1> val);
	//	friend RValue<Long1> operator++(const Long1 &val, int);   // Post-increment
	//	friend const Long1 &operator++(const Long1 &val);   // Pre-increment
	//	friend RValue<Long1> operator--(const Long1 &val, int);   // Post-decrement
	//	friend const Long1 &operator--(const Long1 &val);   // Pre-decrement
	//	friend RValue<Bool> operator<(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Bool> operator<=(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Bool> operator>(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Bool> operator>=(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Bool> operator!=(RValue<Long1> lhs, RValue<Long1> rhs);
	//	friend RValue<Bool> operator==(RValue<Long1> lhs, RValue<Long1> rhs);

	//	friend RValue<Long1> RoundLong1(RValue<Float> cast);

		static llvm::Type *getType();
	};

	class Long2 : public Variable<Long2>
	{
	public:
	//	explicit Long2(RValue<Long> cast);
	//	explicit Long2(RValue<Long1> cast);

	//	Long2();
	//	Long2(int x, int y);
	//	Long2(RValue<Long2> rhs);
	//	Long2(const Long2 &rhs);
	//	Long2(const Reference<Long2> &rhs);

	//	RValue<Long2> operator=(RValue<Long2> rhs) const;
	//	RValue<Long2> operator=(const Long2 &rhs) const;
	//	RValue<Long2> operator=(const Reference<Long2 &rhs) const;

	//	friend RValue<Long2> operator+(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator-(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator*(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator/(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator%(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator&(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator|(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator^(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator<<(RValue<Long2> lhs, unsigned char rhs);
	//	friend RValue<Long2> operator>>(RValue<Long2> lhs, unsigned char rhs);
	//	friend RValue<Long2> operator<<(RValue<Long2> lhs, RValue<Long1> rhs);
	//	friend RValue<Long2> operator>>(RValue<Long2> lhs, RValue<Long1> rhs);
	//	friend RValue<Long2> operator+=(const Long2 &lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator-=(const Long2 &lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator*=(const Long2 &lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator/=(const Long2 &lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator%=(const Long2 &lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator&=(const Long2 &lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator|=(const Long2 &lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator^=(const Long2 &lhs, RValue<Long2> rhs);
	//	friend RValue<Long2> operator<<=(const Long2 &lhs, unsigned char rhs);
	//	friend RValue<Long2> operator>>=(const Long2 &lhs, unsigned char rhs);
	//	friend RValue<Long2> operator<<=(const Long2 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long2> operator>>=(const Long2 &lhs, RValue<Long1> rhs);
	//	friend RValue<Long2> operator+(RValue<Long2> val);
	//	friend RValue<Long2> operator-(RValue<Long2> val);
	//	friend RValue<Long2> operator~(RValue<Long2> val);
	//	friend RValue<Long2> operator++(const Long2 &val, int);   // Post-increment
	//	friend const Long2 &operator++(const Long2 &val);   // Pre-increment
	//	friend RValue<Long2> operator--(const Long2 &val, int);   // Post-decrement
	//	friend const Long2 &operator--(const Long2 &val);   // Pre-decrement
	//	friend RValue<Bool> operator<(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Bool> operator<=(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Bool> operator>(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Bool> operator>=(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Bool> operator!=(RValue<Long2> lhs, RValue<Long2> rhs);
	//	friend RValue<Bool> operator==(RValue<Long2> lhs, RValue<Long2> rhs);

	//	friend RValue<Long2> RoundInt(RValue<Float4> cast);

	//	friend RValue<Long2> UnpackLow(RValue<Long2> x, RValue<Long2> y);
		friend RValue<Long2> UnpackHigh(RValue<Long2> x, RValue<Long2> y);
	//	friend RValue<Int> Extract(RValue<Long2> val, int i);
	//	friend RValue<Long2> Insert(RValue<Long2> val, RValue<Int> element, int i);

		static llvm::Type *getType();
	};

	class UInt : public Variable<UInt>
	{
	public:
		explicit UInt(llvm::Argument *argument);

		explicit UInt(RValue<UShort> cast);
		explicit UInt(RValue<Long> cast);
		explicit UInt(RValue<Float> cast);

		UInt();
		UInt(int x);
		UInt(unsigned int x);
		UInt(RValue<UInt> rhs);
		UInt(RValue<Int> rhs);
		UInt(const UInt &rhs);
		UInt(const Int &rhs);
		UInt(const Reference<UInt> &rhs);
		UInt(const Reference<Int> &rhs);

		RValue<UInt> operator=(unsigned int rhs) const;
		RValue<UInt> operator=(RValue<UInt> rhs) const;
		RValue<UInt> operator=(RValue<Int> rhs) const;
		RValue<UInt> operator=(const UInt &rhs) const;
		RValue<UInt> operator=(const Int &rhs) const;
		RValue<UInt> operator=(const Reference<UInt> &rhs) const;
		RValue<UInt> operator=(const Reference<Int> &rhs) const;

		friend RValue<UInt> operator+(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator-(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator*(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator/(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator%(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator&(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator|(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator^(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator<<(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator>>(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator+=(const UInt &lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator-=(const UInt &lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator*=(const UInt &lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator/=(const UInt &lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator%=(const UInt &lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator&=(const UInt &lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator|=(const UInt &lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator^=(const UInt &lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator<<=(const UInt &lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator>>=(const UInt &lhs, RValue<UInt> rhs);
		friend RValue<UInt> operator+(RValue<UInt> val);
		friend RValue<UInt> operator-(RValue<UInt> val);
		friend RValue<UInt> operator~(RValue<UInt> val);
		friend RValue<UInt> operator++(const UInt &val, int);   // Post-increment
		friend const UInt &operator++(const UInt &val);   // Pre-increment
		friend RValue<UInt> operator--(const UInt &val, int);   // Post-decrement
		friend const UInt &operator--(const UInt &val);   // Pre-decrement
		friend RValue<Bool> operator<(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<Bool> operator<=(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<Bool> operator>(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<Bool> operator>=(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<Bool> operator!=(RValue<UInt> lhs, RValue<UInt> rhs);
		friend RValue<Bool> operator==(RValue<UInt> lhs, RValue<UInt> rhs);

		friend RValue<UInt> Max(RValue<UInt> x, RValue<UInt> y);
		friend RValue<UInt> Min(RValue<UInt> x, RValue<UInt> y);
		friend RValue<UInt> Clamp(RValue<UInt> x, RValue<UInt> min, RValue<UInt> max);

	//	friend RValue<UInt> RoundUInt(RValue<Float> cast);

		static llvm::Type *getType();
	};

	class Int2 : public Variable<Int2>
	{
	public:
	//	explicit Int2(RValue<Int> cast);
		explicit Int2(RValue<Int4> cast);

		Int2();
		Int2(int x, int y);
		Int2(RValue<Int2> rhs);
		Int2(const Int2 &rhs);
		Int2(const Reference<Int2> &rhs);

		RValue<Int2> operator=(RValue<Int2> rhs) const;
		RValue<Int2> operator=(const Int2 &rhs) const;
		RValue<Int2> operator=(const Reference<Int2> &rhs) const;

		friend RValue<Int2> operator+(RValue<Int2> lhs, RValue<Int2> rhs);
		friend RValue<Int2> operator-(RValue<Int2> lhs, RValue<Int2> rhs);
	//	friend RValue<Int2> operator*(RValue<Int2> lhs, RValue<Int2> rhs);
	//	friend RValue<Int2> operator/(RValue<Int2> lhs, RValue<Int2> rhs);
	//	friend RValue<Int2> operator%(RValue<Int2> lhs, RValue<Int2> rhs);
		friend RValue<Int2> operator&(RValue<Int2> lhs, RValue<Int2> rhs);
		friend RValue<Int2> operator|(RValue<Int2> lhs, RValue<Int2> rhs);
		friend RValue<Int2> operator^(RValue<Int2> lhs, RValue<Int2> rhs);
		friend RValue<Int2> operator<<(RValue<Int2> lhs, unsigned char rhs);
		friend RValue<Int2> operator>>(RValue<Int2> lhs, unsigned char rhs);
		friend RValue<Int2> operator<<(RValue<Int2> lhs, RValue<Long1> rhs);
		friend RValue<Int2> operator>>(RValue<Int2> lhs, RValue<Long1> rhs);
		friend RValue<Int2> operator+=(const Int2 &lhs, RValue<Int2> rhs);
		friend RValue<Int2> operator-=(const Int2 &lhs, RValue<Int2> rhs);
	//	friend RValue<Int2> operator*=(const Int2 &lhs, RValue<Int2> rhs);
	//	friend RValue<Int2> operator/=(const Int2 &lhs, RValue<Int2> rhs);
	//	friend RValue<Int2> operator%=(const Int2 &lhs, RValue<Int2> rhs);
		friend RValue<Int2> operator&=(const Int2 &lhs, RValue<Int2> rhs);
		friend RValue<Int2> operator|=(const Int2 &lhs, RValue<Int2> rhs);
		friend RValue<Int2> operator^=(const Int2 &lhs, RValue<Int2> rhs);
		friend RValue<Int2> operator<<=(const Int2 &lhs, unsigned char rhs);
		friend RValue<Int2> operator>>=(const Int2 &lhs, unsigned char rhs);
		friend RValue<Int2> operator<<=(const Int2 &lhs, RValue<Long1> rhs);
		friend RValue<Int2> operator>>=(const Int2 &lhs, RValue<Long1> rhs);
	//	friend RValue<Int2> operator+(RValue<Int2> val);
	//	friend RValue<Int2> operator-(RValue<Int2> val);
		friend RValue<Int2> operator~(RValue<Int2> val);
	//	friend RValue<Int2> operator++(const Int2 &val, int);   // Post-increment
	//	friend const Int2 &operator++(const Int2 &val);   // Pre-increment
	//	friend RValue<Int2> operator--(const Int2 &val, int);   // Post-decrement
	//	friend const Int2 &operator--(const Int2 &val);   // Pre-decrement
	//	friend RValue<Bool> operator<(RValue<Int2> lhs, RValue<Int2> rhs);
	//	friend RValue<Bool> operator<=(RValue<Int2> lhs, RValue<Int2> rhs);
	//	friend RValue<Bool> operator>(RValue<Int2> lhs, RValue<Int2> rhs);
	//	friend RValue<Bool> operator>=(RValue<Int2> lhs, RValue<Int2> rhs);
	//	friend RValue<Bool> operator!=(RValue<Int2> lhs, RValue<Int2> rhs);
	//	friend RValue<Bool> operator==(RValue<Int2> lhs, RValue<Int2> rhs);

	//	friend RValue<Int2> RoundInt(RValue<Float4> cast);

		friend RValue<Long1> UnpackLow(RValue<Int2> x, RValue<Int2> y);
		friend RValue<Long1> UnpackHigh(RValue<Int2> x, RValue<Int2> y);
		friend RValue<Int> Extract(RValue<Int2> val, int i);
	//	friend RValue<Int2> Insert(RValue<Int2> val, RValue<Int> element, int i);

		static llvm::Type *getType();
	};

	class UInt2 : public Variable<UInt2>
	{
	public:
		UInt2();
		UInt2(unsigned int x, unsigned int y);
		UInt2(RValue<UInt2> rhs);
		UInt2(const UInt2 &rhs);
		UInt2(const Reference<UInt2> &rhs);

		RValue<UInt2> operator=(RValue<UInt2> rhs) const;
		RValue<UInt2> operator=(const UInt2 &rhs) const;
		RValue<UInt2> operator=(const Reference<UInt2> &rhs) const;

		friend RValue<UInt2> operator+(RValue<UInt2> lhs, RValue<UInt2> rhs);
		friend RValue<UInt2> operator-(RValue<UInt2> lhs, RValue<UInt2> rhs);
	//	friend RValue<UInt2> operator*(RValue<UInt2> lhs, RValue<UInt2> rhs);
	//	friend RValue<UInt2> operator/(RValue<UInt2> lhs, RValue<UInt2> rhs);
	//	friend RValue<UInt2> operator%(RValue<UInt2> lhs, RValue<UInt2> rhs);
		friend RValue<UInt2> operator&(RValue<UInt2> lhs, RValue<UInt2> rhs);
		friend RValue<UInt2> operator|(RValue<UInt2> lhs, RValue<UInt2> rhs);
		friend RValue<UInt2> operator^(RValue<UInt2> lhs, RValue<UInt2> rhs);
		friend RValue<UInt2> operator<<(RValue<UInt2> lhs, unsigned char rhs);
		friend RValue<UInt2> operator>>(RValue<UInt2> lhs, unsigned char rhs);
		friend RValue<UInt2> operator<<(RValue<UInt2> lhs, RValue<Long1> rhs);
		friend RValue<UInt2> operator>>(RValue<UInt2> lhs, RValue<Long1> rhs);
		friend RValue<UInt2> operator+=(const UInt2 &lhs, RValue<UInt2> rhs);
		friend RValue<UInt2> operator-=(const UInt2 &lhs, RValue<UInt2> rhs);
	//	friend RValue<UInt2> operator*=(const UInt2 &lhs, RValue<UInt2> rhs);
	//	friend RValue<UInt2> operator/=(const UInt2 &lhs, RValue<UInt2> rhs);
	//	friend RValue<UInt2> operator%=(const UInt2 &lhs, RValue<UInt2> rhs);
		friend RValue<UInt2> operator&=(const UInt2 &lhs, RValue<UInt2> rhs);
		friend RValue<UInt2> operator|=(const UInt2 &lhs, RValue<UInt2> rhs);
		friend RValue<UInt2> operator^=(const UInt2 &lhs, RValue<UInt2> rhs);
		friend RValue<UInt2> operator<<=(const UInt2 &lhs, unsigned char rhs);
		friend RValue<UInt2> operator>>=(const UInt2 &lhs, unsigned char rhs);
		friend RValue<UInt2> operator<<=(const UInt2 &lhs, RValue<Long1> rhs);
		friend RValue<UInt2> operator>>=(const UInt2 &lhs, RValue<Long1> rhs);
	//	friend RValue<UInt2> operator+(RValue<UInt2> val);
	//	friend RValue<UInt2> operator-(RValue<UInt2> val);
		friend RValue<UInt2> operator~(RValue<UInt2> val);
	//	friend RValue<UInt2> operator++(const UInt2 &val, int);   // Post-increment
	//	friend const UInt2 &operator++(const UInt2 &val);   // Pre-increment
	//	friend RValue<UInt2> operator--(const UInt2 &val, int);   // Post-decrement
	//	friend const UInt2 &operator--(const UInt2 &val);   // Pre-decrement
	//	friend RValue<Bool> operator<(RValue<UInt2> lhs, RValue<UInt2> rhs);
	//	friend RValue<Bool> operator<=(RValue<UInt2> lhs, RValue<UInt2> rhs);
	//	friend RValue<Bool> operator>(RValue<UInt2> lhs, RValue<UInt2> rhs);
	//	friend RValue<Bool> operator>=(RValue<UInt2> lhs, RValue<UInt2> rhs);
	//	friend RValue<Bool> operator!=(RValue<UInt2> lhs, RValue<UInt2> rhs);
	//	friend RValue<Bool> operator==(RValue<UInt2> lhs, RValue<UInt2> rhs);

	//	friend RValue<UInt2> RoundInt(RValue<Float4> cast);

		static llvm::Type *getType();
	};

	class Int4 : public Variable<Int4>
	{
	public:
		explicit Int4(RValue<Float4> cast);

		Int4();
		Int4(int xyzw);
		Int4(int x, int yzw);
		Int4(int x, int y, int zw);
		Int4(int x, int y, int z, int w);
		Int4(RValue<Int4> rhs);
		Int4(const Int4 &rhs);
		Int4(const Reference<Int4> &rhs);
		Int4(RValue<UInt4> rhs);
		Int4(const UInt4 &rhs);
		Int4(const Reference<UInt4> &rhs);

		RValue<Int4> operator=(RValue<Int4> rhs) const;
		RValue<Int4> operator=(const Int4 &rhs) const;
		RValue<Int4> operator=(const Reference<Int4> &rhs) const;

		friend RValue<Int4> operator+(RValue<Int4> lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator-(RValue<Int4> lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator*(RValue<Int4> lhs, RValue<Int4> rhs);
	//	friend RValue<Int4> operator/(RValue<Int4> lhs, RValue<Int4> rhs);
	//	friend RValue<Int4> operator%(RValue<Int4> lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator&(RValue<Int4> lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator|(RValue<Int4> lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator^(RValue<Int4> lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator<<(RValue<Int4> lhs, unsigned char rhs);
		friend RValue<Int4> operator>>(RValue<Int4> lhs, unsigned char rhs);
		friend RValue<Int4> operator+=(const Int4 &lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator-=(const Int4 &lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator*=(const Int4 &lhs, RValue<Int4> rhs);
	//	friend RValue<Int4> operator/=(const Int4 &lhs, RValue<Int4> rhs);
	//	friend RValue<Int4> operator%=(const Int4 &lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator&=(const Int4 &lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator|=(const Int4 &lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator^=(const Int4 &lhs, RValue<Int4> rhs);
		friend RValue<Int4> operator<<=(const Int4 &lhs, unsigned char rhs);
		friend RValue<Int4> operator>>=(const Int4 &lhs, unsigned char rhs);
		friend RValue<Int4> operator+(RValue<Int4> val);
		friend RValue<Int4> operator-(RValue<Int4> val);
		friend RValue<Int4> operator~(RValue<Int4> val);
	//	friend RValue<Int4> operator++(const Int4 &val, int);   // Post-increment
	//	friend const Int4 &operator++(const Int4 &val);   // Pre-increment
	//	friend RValue<Int4> operator--(const Int4 &val, int);   // Post-decrement
	//	friend const Int4 &operator--(const Int4 &val);   // Pre-decrement
	//	friend RValue<Bool> operator<(RValue<Int4> lhs, RValue<Int4> rhs);
	//	friend RValue<Bool> operator<=(RValue<Int4> lhs, RValue<Int4> rhs);
	//	friend RValue<Bool> operator>(RValue<Int4> lhs, RValue<Int4> rhs);
	//	friend RValue<Bool> operator>=(RValue<Int4> lhs, RValue<Int4> rhs);
	//	friend RValue<Bool> operator!=(RValue<Int4> lhs, RValue<Int4> rhs);
	//	friend RValue<Bool> operator==(RValue<Int4> lhs, RValue<Int4> rhs);

		friend RValue<Int4> CmpEQ(RValue<Int4> x, RValue<Int4> y);
		friend RValue<Int4> CmpLT(RValue<Int4> x, RValue<Int4> y);
		friend RValue<Int4> CmpLE(RValue<Int4> x, RValue<Int4> y);
		friend RValue<Int4> CmpNEQ(RValue<Int4> x, RValue<Int4> y);
		friend RValue<Int4> CmpNLT(RValue<Int4> x, RValue<Int4> y);
		friend RValue<Int4> CmpNLE(RValue<Int4> x, RValue<Int4> y);

		friend RValue<Int4> Max(RValue<Int4> x, RValue<Int4> y);
		friend RValue<Int4> Min(RValue<Int4> x, RValue<Int4> y);

		friend RValue<Int4> RoundInt(RValue<Float4> cast);
		friend RValue<Short8> Pack(RValue<Int4> x, RValue<Int4> y);
		friend RValue<Int4> Concatenate(RValue<Int2> lo, RValue<Int2> hi);
		friend RValue<Int> Extract(RValue<Int4> x, int i);
		friend RValue<Int4> Insert(RValue<Int4> val, RValue<Int> element, int i);
		friend RValue<Int> SignMask(RValue<Int4> x);
		friend RValue<Int4> Swizzle(RValue<Int4> x, unsigned char select);

		static llvm::Type *getType();

	private:
		void constant(int x, int y, int z, int w);
	};

	class UInt4 : public Variable<UInt4>
	{
	public:
		explicit UInt4(RValue<Float4> cast);

		UInt4();
		UInt4(int xyzw);
		UInt4(int x, int yzw);
		UInt4(int x, int y, int zw);
		UInt4(int x, int y, int z, int w);
		UInt4(unsigned int x, unsigned int y, unsigned int z, unsigned int w);
		UInt4(RValue<UInt4> rhs);
		UInt4(const UInt4 &rhs);
		UInt4(const Reference<UInt4> &rhs);
		UInt4(RValue<Int4> rhs);
		UInt4(const Int4 &rhs);
		UInt4(const Reference<Int4> &rhs);

		RValue<UInt4> operator=(RValue<UInt4> rhs) const;
		RValue<UInt4> operator=(const UInt4 &rhs) const;
		RValue<UInt4> operator=(const Reference<UInt4> &rhs) const;

		friend RValue<UInt4> operator+(RValue<UInt4> lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator-(RValue<UInt4> lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator*(RValue<UInt4> lhs, RValue<UInt4> rhs);
	//	friend RValue<UInt4> operator/(RValue<UInt4> lhs, RValue<UInt4> rhs);
	//	friend RValue<UInt4> operator%(RValue<UInt4> lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator&(RValue<UInt4> lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator|(RValue<UInt4> lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator^(RValue<UInt4> lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator<<(RValue<UInt4> lhs, unsigned char rhs);
		friend RValue<UInt4> operator>>(RValue<UInt4> lhs, unsigned char rhs);
		friend RValue<UInt4> operator+=(const UInt4 &lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator-=(const UInt4 &lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator*=(const UInt4 &lhs, RValue<UInt4> rhs);
	//	friend RValue<UInt4> operator/=(const UInt4 &lhs, RValue<UInt4> rhs);
	//	friend RValue<UInt4> operator%=(const UInt4 &lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator&=(const UInt4 &lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator|=(const UInt4 &lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator^=(const UInt4 &lhs, RValue<UInt4> rhs);
		friend RValue<UInt4> operator<<=(const UInt4 &lhs, unsigned char rhs);
		friend RValue<UInt4> operator>>=(const UInt4 &lhs, unsigned char rhs);
		friend RValue<UInt4> operator+(RValue<UInt4> val);
		friend RValue<UInt4> operator-(RValue<UInt4> val);
		friend RValue<UInt4> operator~(RValue<UInt4> val);
	//	friend RValue<UInt4> operator++(const UInt4 &val, int);   // Post-increment
	//	friend const UInt4 &operator++(const UInt4 &val);   // Pre-increment
	//	friend RValue<UInt4> operator--(const UInt4 &val, int);   // Post-decrement
	//	friend const UInt4 &operator--(const UInt4 &val);   // Pre-decrement
	//	friend RValue<Bool> operator<(RValue<UInt4> lhs, RValue<UInt4> rhs);
	//	friend RValue<Bool> operator<=(RValue<UInt4> lhs, RValue<UInt4> rhs);
	//	friend RValue<Bool> operator>(RValue<UInt4> lhs, RValue<UInt4> rhs);
	//	friend RValue<Bool> operator>=(RValue<UInt4> lhs, RValue<UInt4> rhs);
	//	friend RValue<Bool> operator!=(RValue<UInt4> lhs, RValue<UInt4> rhs);
	//	friend RValue<Bool> operator==(RValue<UInt4> lhs, RValue<UInt4> rhs);

		friend RValue<UInt4> CmpEQ(RValue<UInt4> x, RValue<UInt4> y);
		friend RValue<UInt4> CmpLT(RValue<UInt4> x, RValue<UInt4> y);
		friend RValue<UInt4> CmpLE(RValue<UInt4> x, RValue<UInt4> y);
		friend RValue<UInt4> CmpNEQ(RValue<UInt4> x, RValue<UInt4> y);
		friend RValue<UInt4> CmpNLT(RValue<UInt4> x, RValue<UInt4> y);
		friend RValue<UInt4> CmpNLE(RValue<UInt4> x, RValue<UInt4> y);

		friend RValue<UInt4> Max(RValue<UInt4> x, RValue<UInt4> y);
		friend RValue<UInt4> Min(RValue<UInt4> x, RValue<UInt4> y);

	//	friend RValue<UInt4> RoundInt(RValue<Float4> cast);
		friend RValue<UShort8> Pack(RValue<UInt4> x, RValue<UInt4> y);
		friend RValue<UInt4> Concatenate(RValue<UInt2> lo, RValue<UInt2> hi);

		static llvm::Type *getType();

	private:
		void constant(int x, int y, int z, int w);
	};

	template<int T>
	class Swizzle2Float4
	{
		friend class Float4;

	public:
		operator RValue<Float4>() const;

	private:
		Float4 *parent;
	};

	template<int T>
	class SwizzleFloat4
	{
	public:
		operator RValue<Float4>() const;

	private:
		Float4 *parent;
	};

	template<int T>
	class SwizzleMaskFloat4
	{
		friend class Float4;

	public:
		operator RValue<Float4>() const;

		RValue<Float4> operator=(RValue<Float4> rhs) const;
		RValue<Float4> operator=(RValue<Float> rhs) const;

	private:
		Float4 *parent;
	};

	template<int T>
	class SwizzleMask1Float4
	{
	public:
		operator RValue<Float>() const;
		operator RValue<Float4>() const;

		RValue<Float4> operator=(float x) const;
		RValue<Float4> operator=(RValue<Float4> rhs) const;
		RValue<Float4> operator=(RValue<Float> rhs) const;

	private:
		Float4 *parent;
	};

	template<int T>
	class SwizzleMask2Float4
	{
		friend class Float4;

	public:
		operator RValue<Float4>() const;

		RValue<Float4> operator=(RValue<Float4> rhs) const;

	private:
		Float4 *parent;
	};

	class Float : public Variable<Float>
	{
	public:
		explicit Float(RValue<Int> cast);

		Float();
		Float(float x);
		Float(RValue<Float> rhs);
		Float(const Float &rhs);
		Float(const Reference<Float> &rhs);

		template<int T>
		Float(const SwizzleMask1Float4<T> &rhs);

	//	RValue<Float> operator=(float rhs) const;   // FIXME: Implement
		RValue<Float> operator=(RValue<Float> rhs) const;
		RValue<Float> operator=(const Float &rhs) const;
		RValue<Float> operator=(const Reference<Float> &rhs) const;

		template<int T>
		RValue<Float> operator=(const SwizzleMask1Float4<T> &rhs) const;

		friend RValue<Float> operator+(RValue<Float> lhs, RValue<Float> rhs);
		friend RValue<Float> operator-(RValue<Float> lhs, RValue<Float> rhs);
		friend RValue<Float> operator*(RValue<Float> lhs, RValue<Float> rhs);
		friend RValue<Float> operator/(RValue<Float> lhs, RValue<Float> rhs);
		friend RValue<Float> operator+=(const Float &lhs, RValue<Float> rhs);
		friend RValue<Float> operator-=(const Float &lhs, RValue<Float> rhs);
		friend RValue<Float> operator*=(const Float &lhs, RValue<Float> rhs);
		friend RValue<Float> operator/=(const Float &lhs, RValue<Float> rhs);
		friend RValue<Float> operator+(RValue<Float> val);
		friend RValue<Float> operator-(RValue<Float> val);
		friend RValue<Bool> operator<(RValue<Float> lhs, RValue<Float> rhs);
		friend RValue<Bool> operator<=(RValue<Float> lhs, RValue<Float> rhs);
		friend RValue<Bool> operator>(RValue<Float> lhs, RValue<Float> rhs);
		friend RValue<Bool> operator>=(RValue<Float> lhs, RValue<Float> rhs);
		friend RValue<Bool> operator!=(RValue<Float> lhs, RValue<Float> rhs);
		friend RValue<Bool> operator==(RValue<Float> lhs, RValue<Float> rhs);

		friend RValue<Float> Abs(RValue<Float> x);
		friend RValue<Float> Max(RValue<Float> x, RValue<Float> y);
		friend RValue<Float> Min(RValue<Float> x, RValue<Float> y);

		friend RValue<Float> Rcp_pp(RValue<Float> val);
		friend RValue<Float> RcpSqrt_pp(RValue<Float> val);
		friend RValue<Float> Sqrt(RValue<Float> x);

		friend RValue<Float> Round(RValue<Float> val);
		friend RValue<Float> Trunc(RValue<Float> val);
		friend RValue<Float> Frac(RValue<Float> val);
		friend RValue<Float> Floor(RValue<Float> val);
		friend RValue<Float> Ceil(RValue<Float> val);

		static llvm::Type *getType();
	};

	class Float2 : public Variable<Float2>
	{
	public:
	//	explicit Float2(RValue<Byte2> cast);
	//	explicit Float2(RValue<Short2> cast);
	//	explicit Float2(RValue<UShort2> cast);
	//	explicit Float2(RValue<Int2> cast);
	//	explicit Float2(RValue<UInt2> cast);
		explicit Float2(RValue<Float4> cast);

	//	Float2();
	//	Float2(float x, float y);
	//	Float2(RValue<Float2> rhs);
	//	Float2(const Float2 &rhs);
	//	Float2(const Reference<Float2> &rhs);
	//	Float2(RValue<Float> rhs);
	//	Float2(const Float &rhs);
	//	Float2(const Reference<Float> &rhs);

	//	template<int T>
	//	Float2(const SwizzleMask1Float4<T> &rhs);

	//	RValue<Float2> operator=(float replicate) const;
	//	RValue<Float2> operator=(RValue<Float2> rhs) const;
	//	RValue<Float2> operator=(const Float2 &rhs) const;
	//	RValue<Float2> operator=(const Reference<Float2> &rhs) const;
	//	RValue<Float2> operator=(RValue<Float> rhs) const;
	//	RValue<Float2> operator=(const Float &rhs) const;
	//	RValue<Float2> operator=(const Reference<Float> &rhs) const;

	//	template<int T>
	//	RValue<Float2> operator=(const SwizzleMask1Float4<T> &rhs);

	//	friend RValue<Float2> operator+(RValue<Float2> lhs, RValue<Float2> rhs);
	//	friend RValue<Float2> operator-(RValue<Float2> lhs, RValue<Float2> rhs);
	//	friend RValue<Float2> operator*(RValue<Float2> lhs, RValue<Float2> rhs);
	//	friend RValue<Float2> operator/(RValue<Float2> lhs, RValue<Float2> rhs);
	//	friend RValue<Float2> operator%(RValue<Float2> lhs, RValue<Float2> rhs);
	//	friend RValue<Float2> operator+=(const Float2 &lhs, RValue<Float2> rhs);
	//	friend RValue<Float2> operator-=(const Float2 &lhs, RValue<Float2> rhs);
	//	friend RValue<Float2> operator*=(const Float2 &lhs, RValue<Float2> rhs);
	//	friend RValue<Float2> operator/=(const Float2 &lhs, RValue<Float2> rhs);
	//	friend RValue<Float2> operator%=(const Float2 &lhs, RValue<Float2> rhs);
	//	friend RValue<Float2> operator+(RValue<Float2> val);
	//	friend RValue<Float2> operator-(RValue<Float2> val);

	//	friend RValue<Float2> Abs(RValue<Float2> x);
	//	friend RValue<Float2> Max(RValue<Float2> x, RValue<Float2> y);
	//	friend RValue<Float2> Min(RValue<Float2> x, RValue<Float2> y);

	//	friend RValue<Float2> Swizzle(RValue<Float2> x, unsigned char select);
	//	friend RValue<Float2> Mask(Float2 &lhs, RValue<Float2> rhs, unsigned char select);

		static llvm::Type *getType();
	};

	class Float4 : public Variable<Float4>
	{
	public:
		explicit Float4(RValue<Byte4> cast);
		explicit Float4(RValue<SByte4> cast);
		explicit Float4(RValue<Short4> cast);
		explicit Float4(RValue<UShort4> cast);
		explicit Float4(RValue<Int4> cast);
		explicit Float4(RValue<UInt4> cast);

		Float4();
		Float4(float xyzw);
		Float4(float x, float yzw);
		Float4(float x, float y, float zw);
		Float4(float x, float y, float z, float w);
		Float4(RValue<Float4> rhs);
		Float4(const Float4 &rhs);
		Float4(const Reference<Float4> &rhs);
		Float4(RValue<Float> rhs);
		Float4(const Float &rhs);
		Float4(const Reference<Float> &rhs);

		template<int T>
		Float4(const SwizzleMask1Float4<T> &rhs);
		template<int T>
		Float4(const SwizzleFloat4<T> &rhs);
		template<int X, int Y>
		Float4(const Swizzle2Float4<X> &x, const Swizzle2Float4<Y> &y);
		template<int X, int Y>
		Float4(const SwizzleMask2Float4<X> &x, const Swizzle2Float4<Y> &y);
		template<int X, int Y>
		Float4(const Swizzle2Float4<X> &x, const SwizzleMask2Float4<Y> &y);
		template<int X, int Y>
		Float4(const SwizzleMask2Float4<X> &x, const SwizzleMask2Float4<Y> &y);

		RValue<Float4> operator=(float replicate) const;
		RValue<Float4> operator=(RValue<Float4> rhs) const;
		RValue<Float4> operator=(const Float4 &rhs) const;
		RValue<Float4> operator=(const Reference<Float4> &rhs) const;
		RValue<Float4> operator=(RValue<Float> rhs) const;
		RValue<Float4> operator=(const Float &rhs) const;
		RValue<Float4> operator=(const Reference<Float> &rhs) const;

		template<int T>
		RValue<Float4> operator=(const SwizzleMask1Float4<T> &rhs);
		template<int T>
		RValue<Float4> operator=(const SwizzleFloat4<T> &rhs);

		friend RValue<Float4> operator+(RValue<Float4> lhs, RValue<Float4> rhs);
		friend RValue<Float4> operator-(RValue<Float4> lhs, RValue<Float4> rhs);
		friend RValue<Float4> operator*(RValue<Float4> lhs, RValue<Float4> rhs);
		friend RValue<Float4> operator/(RValue<Float4> lhs, RValue<Float4> rhs);
		friend RValue<Float4> operator%(RValue<Float4> lhs, RValue<Float4> rhs);
		friend RValue<Float4> operator+=(const Float4 &lhs, RValue<Float4> rhs);
		friend RValue<Float4> operator-=(const Float4 &lhs, RValue<Float4> rhs);
		friend RValue<Float4> operator*=(const Float4 &lhs, RValue<Float4> rhs);
		friend RValue<Float4> operator/=(const Float4 &lhs, RValue<Float4> rhs);
		friend RValue<Float4> operator%=(const Float4 &lhs, RValue<Float4> rhs);
		friend RValue<Float4> operator+(RValue<Float4> val);
		friend RValue<Float4> operator-(RValue<Float4> val);

		friend RValue<Float4> Abs(RValue<Float4> x);
		friend RValue<Float4> Max(RValue<Float4> x, RValue<Float4> y);
		friend RValue<Float4> Min(RValue<Float4> x, RValue<Float4> y);

		friend RValue<Float4> Rcp_pp(RValue<Float4> val);
		friend RValue<Float4> RcpSqrt_pp(RValue<Float4> val);
		friend RValue<Float4> Sqrt(RValue<Float4> x);

		friend RValue<Float4> Insert(const Float4 &val, RValue<Float> element, int i);
		friend RValue<Float> Extract(RValue<Float4> x, int i);
		friend RValue<Float4> Swizzle(RValue<Float4> x, unsigned char select);
		friend RValue<Float4> ShuffleLowHigh(RValue<Float4> x, RValue<Float4> y, unsigned char imm);
		friend RValue<Float4> UnpackLow(RValue<Float4> x, RValue<Float4> y);
		friend RValue<Float4> UnpackHigh(RValue<Float4> x, RValue<Float4> y);
		friend RValue<Float4> Mask(Float4 &lhs, RValue<Float4> rhs, unsigned char select);
		friend RValue<Int> SignMask(RValue<Float4> x);

		friend RValue<Int4> CmpEQ(RValue<Float4> x, RValue<Float4> y);
		friend RValue<Int4> CmpLT(RValue<Float4> x, RValue<Float4> y);
		friend RValue<Int4> CmpLE(RValue<Float4> x, RValue<Float4> y);
		friend RValue<Int4> CmpNEQ(RValue<Float4> x, RValue<Float4> y);
		friend RValue<Int4> CmpNLT(RValue<Float4> x, RValue<Float4> y);
		friend RValue<Int4> CmpNLE(RValue<Float4> x, RValue<Float4> y);

		friend RValue<Float4> Round(RValue<Float4> x);
		friend RValue<Float4> Trunc(RValue<Float4> x);
		friend RValue<Float4> Frac(RValue<Float4> x);
		friend RValue<Float4> Floor(RValue<Float4> x);
		friend RValue<Float4> Ceil(RValue<Float4> x);

		static llvm::Type *getType();

		union
		{
			SwizzleMask1Float4<0x00> x;
			SwizzleMask1Float4<0x55> y;
			SwizzleMask1Float4<0xAA> z;
			SwizzleMask1Float4<0xFF> w;
			Swizzle2Float4<0x00>     xx;
			Swizzle2Float4<0x01>     yx;
			Swizzle2Float4<0x02>     zx;
			Swizzle2Float4<0x03>     wx;
			SwizzleMask2Float4<0x54> xy;
			Swizzle2Float4<0x55>     yy;
			Swizzle2Float4<0x56>     zy;
			Swizzle2Float4<0x57>     wy;
			SwizzleMask2Float4<0xA8> xz;
			SwizzleMask2Float4<0xA9> yz;
			Swizzle2Float4<0xAA>     zz;
			Swizzle2Float4<0xAB>     wz;
			SwizzleMask2Float4<0xFC> xw;
			SwizzleMask2Float4<0xFD> yw;
			SwizzleMask2Float4<0xFE> zw;
			Swizzle2Float4<0xFF>     ww;
			SwizzleFloat4<0x00>      xxx;
			SwizzleFloat4<0x01>      yxx;
			SwizzleFloat4<0x02>      zxx;
			SwizzleFloat4<0x03>      wxx;
			SwizzleFloat4<0x04>      xyx;
			SwizzleFloat4<0x05>      yyx;
			SwizzleFloat4<0x06>      zyx;
			SwizzleFloat4<0x07>      wyx;
			SwizzleFloat4<0x08>      xzx;
			SwizzleFloat4<0x09>      yzx;
			SwizzleFloat4<0x0A>      zzx;
			SwizzleFloat4<0x0B>      wzx;
			SwizzleFloat4<0x0C>      xwx;
			SwizzleFloat4<0x0D>      ywx;
			SwizzleFloat4<0x0E>      zwx;
			SwizzleFloat4<0x0F>      wwx;
			SwizzleFloat4<0x50>      xxy;
			SwizzleFloat4<0x51>      yxy;
			SwizzleFloat4<0x52>      zxy;
			SwizzleFloat4<0x53>      wxy;
			SwizzleFloat4<0x54>      xyy;
			SwizzleFloat4<0x55>      yyy;
			SwizzleFloat4<0x56>      zyy;
			SwizzleFloat4<0x57>      wyy;
			SwizzleFloat4<0x58>      xzy;
			SwizzleFloat4<0x59>      yzy;
			SwizzleFloat4<0x5A>      zzy;
			SwizzleFloat4<0x5B>      wzy;
			SwizzleFloat4<0x5C>      xwy;
			SwizzleFloat4<0x5D>      ywy;
			SwizzleFloat4<0x5E>      zwy;
			SwizzleFloat4<0x5F>      wwy;
			SwizzleFloat4<0xA0>      xxz;
			SwizzleFloat4<0xA1>      yxz;
			SwizzleFloat4<0xA2>      zxz;
			SwizzleFloat4<0xA3>      wxz;
			SwizzleMaskFloat4<0xA4>  xyz;
			SwizzleFloat4<0xA5>      yyz;
			SwizzleFloat4<0xA6>      zyz;
			SwizzleFloat4<0xA7>      wyz;
			SwizzleFloat4<0xA8>      xzz;
			SwizzleFloat4<0xA9>      yzz;
			SwizzleFloat4<0xAA>      zzz;
			SwizzleFloat4<0xAB>      wzz;
			SwizzleFloat4<0xAC>      xwz;
			SwizzleFloat4<0xAD>      ywz;
			SwizzleFloat4<0xAE>      zwz;
			SwizzleFloat4<0xAF>      wwz;
			SwizzleFloat4<0xF0>      xxw;
			SwizzleFloat4<0xF1>      yxw;
			SwizzleFloat4<0xF2>      zxw;
			SwizzleFloat4<0xF3>      wxw;
			SwizzleMaskFloat4<0xF4>  xyw;
			SwizzleFloat4<0xF5>      yyw;
			SwizzleFloat4<0xF6>      zyw;
			SwizzleFloat4<0xF7>      wyw;
			SwizzleMaskFloat4<0xF8>  xzw;
			SwizzleMaskFloat4<0xF9>  yzw;
			SwizzleFloat4<0xFA>      zzw;
			SwizzleFloat4<0xFB>      wzw;
			SwizzleFloat4<0xFC>      xww;
			SwizzleFloat4<0xFD>      yww;
			SwizzleFloat4<0xFE>      zww;
			SwizzleFloat4<0xFF>      www;
			SwizzleFloat4<0x00>      xxxx;
			SwizzleFloat4<0x01>      yxxx;
			SwizzleFloat4<0x02>      zxxx;
			SwizzleFloat4<0x03>      wxxx;
			SwizzleFloat4<0x04>      xyxx;
			SwizzleFloat4<0x05>      yyxx;
			SwizzleFloat4<0x06>      zyxx;
			SwizzleFloat4<0x07>      wyxx;
			SwizzleFloat4<0x08>      xzxx;
			SwizzleFloat4<0x09>      yzxx;
			SwizzleFloat4<0x0A>      zzxx;
			SwizzleFloat4<0x0B>      wzxx;
			SwizzleFloat4<0x0C>      xwxx;
			SwizzleFloat4<0x0D>      ywxx;
			SwizzleFloat4<0x0E>      zwxx;
			SwizzleFloat4<0x0F>      wwxx;
			SwizzleFloat4<0x10>      xxyx;
			SwizzleFloat4<0x11>      yxyx;
			SwizzleFloat4<0x12>      zxyx;
			SwizzleFloat4<0x13>      wxyx;
			SwizzleFloat4<0x14>      xyyx;
			SwizzleFloat4<0x15>      yyyx;
			SwizzleFloat4<0x16>      zyyx;
			SwizzleFloat4<0x17>      wyyx;
			SwizzleFloat4<0x18>      xzyx;
			SwizzleFloat4<0x19>      yzyx;
			SwizzleFloat4<0x1A>      zzyx;
			SwizzleFloat4<0x1B>      wzyx;
			SwizzleFloat4<0x1C>      xwyx;
			SwizzleFloat4<0x1D>      ywyx;
			SwizzleFloat4<0x1E>      zwyx;
			SwizzleFloat4<0x1F>      wwyx;
			SwizzleFloat4<0x20>      xxzx;
			SwizzleFloat4<0x21>      yxzx;
			SwizzleFloat4<0x22>      zxzx;
			SwizzleFloat4<0x23>      wxzx;
			SwizzleFloat4<0x24>      xyzx;
			SwizzleFloat4<0x25>      yyzx;
			SwizzleFloat4<0x26>      zyzx;
			SwizzleFloat4<0x27>      wyzx;
			SwizzleFloat4<0x28>      xzzx;
			SwizzleFloat4<0x29>      yzzx;
			SwizzleFloat4<0x2A>      zzzx;
			SwizzleFloat4<0x2B>      wzzx;
			SwizzleFloat4<0x2C>      xwzx;
			SwizzleFloat4<0x2D>      ywzx;
			SwizzleFloat4<0x2E>      zwzx;
			SwizzleFloat4<0x2F>      wwzx;
			SwizzleFloat4<0x30>      xxwx;
			SwizzleFloat4<0x31>      yxwx;
			SwizzleFloat4<0x32>      zxwx;
			SwizzleFloat4<0x33>      wxwx;
			SwizzleFloat4<0x34>      xywx;
			SwizzleFloat4<0x35>      yywx;
			SwizzleFloat4<0x36>      zywx;
			SwizzleFloat4<0x37>      wywx;
			SwizzleFloat4<0x38>      xzwx;
			SwizzleFloat4<0x39>      yzwx;
			SwizzleFloat4<0x3A>      zzwx;
			SwizzleFloat4<0x3B>      wzwx;
			SwizzleFloat4<0x3C>      xwwx;
			SwizzleFloat4<0x3D>      ywwx;
			SwizzleFloat4<0x3E>      zwwx;
			SwizzleFloat4<0x3F>      wwwx;
			SwizzleFloat4<0x40>      xxxy;
			SwizzleFloat4<0x41>      yxxy;
			SwizzleFloat4<0x42>      zxxy;
			SwizzleFloat4<0x43>      wxxy;
			SwizzleFloat4<0x44>      xyxy;
			SwizzleFloat4<0x45>      yyxy;
			SwizzleFloat4<0x46>      zyxy;
			SwizzleFloat4<0x47>      wyxy;
			SwizzleFloat4<0x48>      xzxy;
			SwizzleFloat4<0x49>      yzxy;
			SwizzleFloat4<0x4A>      zzxy;
			SwizzleFloat4<0x4B>      wzxy;
			SwizzleFloat4<0x4C>      xwxy;
			SwizzleFloat4<0x4D>      ywxy;
			SwizzleFloat4<0x4E>      zwxy;
			SwizzleFloat4<0x4F>      wwxy;
			SwizzleFloat4<0x50>      xxyy;
			SwizzleFloat4<0x51>      yxyy;
			SwizzleFloat4<0x52>      zxyy;
			SwizzleFloat4<0x53>      wxyy;
			SwizzleFloat4<0x54>      xyyy;
			SwizzleFloat4<0x55>      yyyy;
			SwizzleFloat4<0x56>      zyyy;
			SwizzleFloat4<0x57>      wyyy;
			SwizzleFloat4<0x58>      xzyy;
			SwizzleFloat4<0x59>      yzyy;
			SwizzleFloat4<0x5A>      zzyy;
			SwizzleFloat4<0x5B>      wzyy;
			SwizzleFloat4<0x5C>      xwyy;
			SwizzleFloat4<0x5D>      ywyy;
			SwizzleFloat4<0x5E>      zwyy;
			SwizzleFloat4<0x5F>      wwyy;
			SwizzleFloat4<0x60>      xxzy;
			SwizzleFloat4<0x61>      yxzy;
			SwizzleFloat4<0x62>      zxzy;
			SwizzleFloat4<0x63>      wxzy;
			SwizzleFloat4<0x64>      xyzy;
			SwizzleFloat4<0x65>      yyzy;
			SwizzleFloat4<0x66>      zyzy;
			SwizzleFloat4<0x67>      wyzy;
			SwizzleFloat4<0x68>      xzzy;
			SwizzleFloat4<0x69>      yzzy;
			SwizzleFloat4<0x6A>      zzzy;
			SwizzleFloat4<0x6B>      wzzy;
			SwizzleFloat4<0x6C>      xwzy;
			SwizzleFloat4<0x6D>      ywzy;
			SwizzleFloat4<0x6E>      zwzy;
			SwizzleFloat4<0x6F>      wwzy;
			SwizzleFloat4<0x70>      xxwy;
			SwizzleFloat4<0x71>      yxwy;
			SwizzleFloat4<0x72>      zxwy;
			SwizzleFloat4<0x73>      wxwy;
			SwizzleFloat4<0x74>      xywy;
			SwizzleFloat4<0x75>      yywy;
			SwizzleFloat4<0x76>      zywy;
			SwizzleFloat4<0x77>      wywy;
			SwizzleFloat4<0x78>      xzwy;
			SwizzleFloat4<0x79>      yzwy;
			SwizzleFloat4<0x7A>      zzwy;
			SwizzleFloat4<0x7B>      wzwy;
			SwizzleFloat4<0x7C>      xwwy;
			SwizzleFloat4<0x7D>      ywwy;
			SwizzleFloat4<0x7E>      zwwy;
			SwizzleFloat4<0x7F>      wwwy;
			SwizzleFloat4<0x80>      xxxz;
			SwizzleFloat4<0x81>      yxxz;
			SwizzleFloat4<0x82>      zxxz;
			SwizzleFloat4<0x83>      wxxz;
			SwizzleFloat4<0x84>      xyxz;
			SwizzleFloat4<0x85>      yyxz;
			SwizzleFloat4<0x86>      zyxz;
			SwizzleFloat4<0x87>      wyxz;
			SwizzleFloat4<0x88>      xzxz;
			SwizzleFloat4<0x89>      yzxz;
			SwizzleFloat4<0x8A>      zzxz;
			SwizzleFloat4<0x8B>      wzxz;
			SwizzleFloat4<0x8C>      xwxz;
			SwizzleFloat4<0x8D>      ywxz;
			SwizzleFloat4<0x8E>      zwxz;
			SwizzleFloat4<0x8F>      wwxz;
			SwizzleFloat4<0x90>      xxyz;
			SwizzleFloat4<0x91>      yxyz;
			SwizzleFloat4<0x92>      zxyz;
			SwizzleFloat4<0x93>      wxyz;
			SwizzleFloat4<0x94>      xyyz;
			SwizzleFloat4<0x95>      yyyz;
			SwizzleFloat4<0x96>      zyyz;
			SwizzleFloat4<0x97>      wyyz;
			SwizzleFloat4<0x98>      xzyz;
			SwizzleFloat4<0x99>      yzyz;
			SwizzleFloat4<0x9A>      zzyz;
			SwizzleFloat4<0x9B>      wzyz;
			SwizzleFloat4<0x9C>      xwyz;
			SwizzleFloat4<0x9D>      ywyz;
			SwizzleFloat4<0x9E>      zwyz;
			SwizzleFloat4<0x9F>      wwyz;
			SwizzleFloat4<0xA0>      xxzz;
			SwizzleFloat4<0xA1>      yxzz;
			SwizzleFloat4<0xA2>      zxzz;
			SwizzleFloat4<0xA3>      wxzz;
			SwizzleFloat4<0xA4>      xyzz;
			SwizzleFloat4<0xA5>      yyzz;
			SwizzleFloat4<0xA6>      zyzz;
			SwizzleFloat4<0xA7>      wyzz;
			SwizzleFloat4<0xA8>      xzzz;
			SwizzleFloat4<0xA9>      yzzz;
			SwizzleFloat4<0xAA>      zzzz;
			SwizzleFloat4<0xAB>      wzzz;
			SwizzleFloat4<0xAC>      xwzz;
			SwizzleFloat4<0xAD>      ywzz;
			SwizzleFloat4<0xAE>      zwzz;
			SwizzleFloat4<0xAF>      wwzz;
			SwizzleFloat4<0xB0>      xxwz;
			SwizzleFloat4<0xB1>      yxwz;
			SwizzleFloat4<0xB2>      zxwz;
			SwizzleFloat4<0xB3>      wxwz;
			SwizzleFloat4<0xB4>      xywz;
			SwizzleFloat4<0xB5>      yywz;
			SwizzleFloat4<0xB6>      zywz;
			SwizzleFloat4<0xB7>      wywz;
			SwizzleFloat4<0xB8>      xzwz;
			SwizzleFloat4<0xB9>      yzwz;
			SwizzleFloat4<0xBA>      zzwz;
			SwizzleFloat4<0xBB>      wzwz;
			SwizzleFloat4<0xBC>      xwwz;
			SwizzleFloat4<0xBD>      ywwz;
			SwizzleFloat4<0xBE>      zwwz;
			SwizzleFloat4<0xBF>      wwwz;
			SwizzleFloat4<0xC0>      xxxw;
			SwizzleFloat4<0xC1>      yxxw;
			SwizzleFloat4<0xC2>      zxxw;
			SwizzleFloat4<0xC3>      wxxw;
			SwizzleFloat4<0xC4>      xyxw;
			SwizzleFloat4<0xC5>      yyxw;
			SwizzleFloat4<0xC6>      zyxw;
			SwizzleFloat4<0xC7>      wyxw;
			SwizzleFloat4<0xC8>      xzxw;
			SwizzleFloat4<0xC9>      yzxw;
			SwizzleFloat4<0xCA>      zzxw;
			SwizzleFloat4<0xCB>      wzxw;
			SwizzleFloat4<0xCC>      xwxw;
			SwizzleFloat4<0xCD>      ywxw;
			SwizzleFloat4<0xCE>      zwxw;
			SwizzleFloat4<0xCF>      wwxw;
			SwizzleFloat4<0xD0>      xxyw;
			SwizzleFloat4<0xD1>      yxyw;
			SwizzleFloat4<0xD2>      zxyw;
			SwizzleFloat4<0xD3>      wxyw;
			SwizzleFloat4<0xD4>      xyyw;
			SwizzleFloat4<0xD5>      yyyw;
			SwizzleFloat4<0xD6>      zyyw;
			SwizzleFloat4<0xD7>      wyyw;
			SwizzleFloat4<0xD8>      xzyw;
			SwizzleFloat4<0xD9>      yzyw;
			SwizzleFloat4<0xDA>      zzyw;
			SwizzleFloat4<0xDB>      wzyw;
			SwizzleFloat4<0xDC>      xwyw;
			SwizzleFloat4<0xDD>      ywyw;
			SwizzleFloat4<0xDE>      zwyw;
			SwizzleFloat4<0xDF>      wwyw;
			SwizzleFloat4<0xE0>      xxzw;
			SwizzleFloat4<0xE1>      yxzw;
			SwizzleFloat4<0xE2>      zxzw;
			SwizzleFloat4<0xE3>      wxzw;
			SwizzleMaskFloat4<0xE4>  xyzw;
			SwizzleFloat4<0xE5>      yyzw;
			SwizzleFloat4<0xE6>      zyzw;
			SwizzleFloat4<0xE7>      wyzw;
			SwizzleFloat4<0xE8>      xzzw;
			SwizzleFloat4<0xE9>      yzzw;
			SwizzleFloat4<0xEA>      zzzw;
			SwizzleFloat4<0xEB>      wzzw;
			SwizzleFloat4<0xEC>      xwzw;
			SwizzleFloat4<0xED>      ywzw;
			SwizzleFloat4<0xEE>      zwzw;
			SwizzleFloat4<0xEF>      wwzw;
			SwizzleFloat4<0xF0>      xxww;
			SwizzleFloat4<0xF1>      yxww;
			SwizzleFloat4<0xF2>      zxww;
			SwizzleFloat4<0xF3>      wxww;
			SwizzleFloat4<0xF4>      xyww;
			SwizzleFloat4<0xF5>      yyww;
			SwizzleFloat4<0xF6>      zyww;
			SwizzleFloat4<0xF7>      wyww;
			SwizzleFloat4<0xF8>      xzww;
			SwizzleFloat4<0xF9>      yzww;
			SwizzleFloat4<0xFA>      zzww;
			SwizzleFloat4<0xFB>      wzww;
			SwizzleFloat4<0xFC>      xwww;
			SwizzleFloat4<0xFD>      ywww;
			SwizzleFloat4<0xFE>      zwww;
			SwizzleFloat4<0xFF>      wwww;
		};

	private:
		void constant(float x, float y, float z, float w);
	};

	template<class T>
	class Pointer : public Variable<Pointer<T> >
	{
	public:
		template<class S>
		Pointer(RValue<Pointer<S> > pointerS, int alignment = 1) : alignment(alignment)
		{
			llvm::Value *pointerT = Nucleus::createBitCast(pointerS.value, Nucleus::getPointerType(T::getType()));
			LValue::storeValue(pointerT);
		}

		template<class S>
		Pointer(const Pointer<S> &pointer, int alignment = 1) : alignment(alignment)
		{
			llvm::Value *pointerS = pointer.loadValue(alignment);
			llvm::Value *pointerT = Nucleus::createBitCast(pointerS, Nucleus::getPointerType(T::getType()));
			LValue::storeValue(pointerT);
		}

		explicit Pointer(llvm::Argument *argument);
		explicit Pointer(const void *external);

		Pointer();
		Pointer(RValue<Pointer<T> > rhs);
		Pointer(const Pointer<T> &rhs);
		Pointer(const Reference<Pointer<T> > &rhs);

		RValue<Pointer<T> > operator=(RValue<Pointer<T> > rhs) const;
		RValue<Pointer<T> > operator=(const Pointer<T> &rhs) const;
		RValue<Pointer<T> > operator=(const Reference<Pointer<T> > &rhs) const;

		Reference<T> operator*();

		friend RValue<Pointer<Byte> > operator+(RValue<Pointer<Byte> > lhs, int offset);
		friend RValue<Pointer<Byte> > operator+(RValue<Pointer<Byte> > lhs, RValue<Int> offset);
		friend RValue<Pointer<Byte> > operator+(RValue<Pointer<Byte> > lhs, RValue<UInt> offset);
		friend RValue<Pointer<Byte> > operator+=(const Pointer<Byte> &lhs, int offset);
		friend RValue<Pointer<Byte> > operator+=(const Pointer<Byte> &lhs, RValue<Int> offset);
		friend RValue<Pointer<Byte> > operator+=(const Pointer<Byte> &lhs, RValue<UInt> offset);

		friend RValue<Pointer<Byte> > operator-(RValue<Pointer<Byte> > lhs, int offset);
		friend RValue<Pointer<Byte> > operator-(RValue<Pointer<Byte> > lhs, RValue<Int> offset);
		friend RValue<Pointer<Byte> > operator-(RValue<Pointer<Byte> > lhs, RValue<UInt> offset);
		friend RValue<Pointer<Byte> > operator-=(const Pointer<Byte> &lhs, int offset);
		friend RValue<Pointer<Byte> > operator-=(const Pointer<Byte> &lhs, RValue<Int> offset);
		friend RValue<Pointer<Byte> > operator-=(const Pointer<Byte> &lhs, RValue<UInt> offset);

		static llvm::Type *getType();

	private:
		const int alignment;
	};

	template<class T, int S = 1>
	class Array : public Variable<T>
	{
	public:
		Array(int size = S);

		Reference<T> operator[](int index);
		Reference<T> operator[](RValue<Int> index);
		Reference<T> operator[](RValue<UInt> index);

	//	friend RValue<Array<T> > operator++(const Array<T> &val, int);   // Post-increment
	//	friend const Array<T> &operator++(const Array<T> &val);   // Pre-increment
	//	friend RValue<Array<T> > operator--(const Array<T> &val, int);   // Post-decrement
	//	friend const Array<T> &operator--(const Array<T> &val);   // Pre-decrement
	};

	llvm::BasicBlock *beginLoop();
	bool branch(RValue<Bool> cmp, llvm::BasicBlock *bodyBB, llvm::BasicBlock *endBB);
	bool elseBlock(llvm::BasicBlock *falseBB);

	void Return();
	void Return(bool ret);
	void Return(const Int &ret);

	template<class T>
	void Return(const Pointer<T> &ret);

	template<class T>
	void Return(RValue<Pointer<T> > ret);

	template<class R = Void, class A1 = Void, class A2 = Void, class A3 = Void, class A4 = Void>
	class Function
	{
	public:
		Function();

		virtual ~Function();

		llvm::Argument *arg(int index);

		Routine *operator()(const wchar_t *name, ...);

	private:
		Nucleus *core;
		llvm::Function *function;
		std::vector<llvm::Type*> arguments;
	};

	RValue<Long> Ticks();
}

namespace sw
{
	template<class T>
	Variable<T>::Variable(int arraySize) : LValue(T::getType(), arraySize)
	{
	}

	template<class T>
	RValue<Pointer<T> > Variable<T>::operator&()
	{
		return RValue<Pointer<T> >(LValue::address);
	}

	template<class T>
	Reference<T>::Reference(llvm::Value *pointer, int alignment) : alignment(alignment)
	{
		address = pointer;
	}

	template<class T>
	RValue<T> Reference<T>::operator=(RValue<T> rhs) const
	{
		Nucleus::createStore(rhs.value, address, false, alignment);

		return rhs;
	}

	template<class T>
	RValue<T> Reference<T>::operator=(const Reference<T> &ref) const
	{
		llvm::Value *tmp = Nucleus::createLoad(ref.address, false, ref.alignment);
		Nucleus::createStore(tmp, address, false, alignment);

		return RValue<T>(tmp);
	}

	template<class T>
	RValue<T> Reference<T>::operator+=(RValue<T> rhs) const
	{
		return *this = *this + rhs;
	}

	template<class T>
	llvm::Value *Reference<T>::loadValue() const
	{
		return Nucleus::createLoad(address, false, alignment);
	}

	template<class T>
	int Reference<T>::getAlignment() const
	{
		return alignment;
	}

	template<class T>
	RValue<T>::RValue(llvm::Value *rvalue)
	{
		value = rvalue;
	}

	template<class T>
	RValue<T>::RValue(const T &lvalue)
	{
		value = lvalue.loadValue();
	}

	template<class T>
	RValue<T>::RValue(typename IntLiteral<T>::type i)
	{
		value = (llvm::Value*)Nucleus::createConstantInt(i);
	}

	template<class T>
	RValue<T>::RValue(typename FloatLiteral<T>::type f)
	{
		value = (llvm::Value*)Nucleus::createConstantFloat(f);
	}

	template<class T>
	RValue<T>::RValue(const Reference<T> &ref)
	{
		value = ref.loadValue();
	}

	template<int T>
	Swizzle2Float4<T>::operator RValue<Float4>() const
	{
		llvm::Value *vector = parent->loadValue();

		return RValue<Float4>(Nucleus::createSwizzle(vector, T));
	}

	template<int T>
	SwizzleFloat4<T>::operator RValue<Float4>() const
	{
		llvm::Value *vector = parent->loadValue();

		return RValue<Float4>(Nucleus::createSwizzle(vector, T));
	}

	template<int T>
	SwizzleMaskFloat4<T>::operator RValue<Float4>() const
	{
		llvm::Value *vector = parent->loadValue();

		return RValue<Float4>(Nucleus::createSwizzle(vector, T));
	}

	template<int T>
	RValue<Float4> SwizzleMaskFloat4<T>::operator=(RValue<Float4> rhs) const
	{
		return Mask(*parent, rhs, T);
	}

	template<int T>
	RValue<Float4> SwizzleMaskFloat4<T>::operator=(RValue<Float> rhs) const
	{
		return Mask(*parent, Float4(rhs), T);
	}

	template<int T>
	SwizzleMask1Float4<T>::operator RValue<Float>() const   // FIXME: Call a non-template function
	{
		return Extract(*parent, T & 0x3);
	}

	template<int T>
	SwizzleMask1Float4<T>::operator RValue<Float4>() const
	{
		llvm::Value *vector = parent->loadValue();

		return RValue<Float4>(Nucleus::createSwizzle(vector, T));
	}

	template<int T>
	RValue<Float4> SwizzleMask1Float4<T>::operator=(float x) const
	{
		return Insert(*parent, Float(x), T & 0x3);
	}

	template<int T>
	RValue<Float4> SwizzleMask1Float4<T>::operator=(RValue<Float4> rhs) const
	{
		return Mask(*parent, Float4(rhs), T);
	}

	template<int T>
	RValue<Float4> SwizzleMask1Float4<T>::operator=(RValue<Float> rhs) const   // FIXME: Call a non-template function
	{
		return Insert(*parent, rhs, T & 0x3);
	}

	template<int T>
	SwizzleMask2Float4<T>::operator RValue<Float4>() const
	{
		llvm::Value *vector = parent->loadValue();

		return RValue<Float4>(Nucleus::createSwizzle(vector, T));
	}

	template<int T>
	RValue<Float4> SwizzleMask2Float4<T>::operator=(RValue<Float4> rhs) const
	{
		return Mask(*parent, Float4(rhs), T);
	}

	template<int T>
	Float::Float(const SwizzleMask1Float4<T> &rhs)
	{
		*this = rhs.operator RValue<Float>();
	}

	template<int T>
	RValue<Float> Float::operator=(const SwizzleMask1Float4<T> &rhs) const
	{
		return *this = rhs.operator RValue<Float>();
	}

	template<int T>
	Float4::Float4(const SwizzleMask1Float4<T> &rhs)
	{
		xyzw.parent = this;

		*this = rhs.operator RValue<Float4>();
	}

	template<int T>
	Float4::Float4(const SwizzleFloat4<T> &rhs)
	{
		xyzw.parent = this;

		*this = rhs.operator RValue<Float4>();
	}

	template<int X, int Y>
	Float4::Float4(const Swizzle2Float4<X> &x, const Swizzle2Float4<Y> &y)
	{
		xyzw.parent = this;

		*this = ShuffleLowHigh(*x.parent, *y.parent, (X & 0xF) | (Y & 0xF) << 4);
	}

	template<int X, int Y>
	Float4::Float4(const SwizzleMask2Float4<X> &x, const Swizzle2Float4<Y> &y)
	{
		xyzw.parent = this;

		*this = ShuffleLowHigh(*x.parent, *y.parent, (X & 0xF) | (Y & 0xF) << 4);
	}

	template<int X, int Y>
	Float4::Float4(const Swizzle2Float4<X> &x, const SwizzleMask2Float4<Y> &y)
	{
		xyzw.parent = this;

		*this = ShuffleLowHigh(*x.parent, *y.parent, (X & 0xF) | (Y & 0xF) << 4);
	}

	template<int X, int Y>
	Float4::Float4(const SwizzleMask2Float4<X> &x, const SwizzleMask2Float4<Y> &y)
	{
		xyzw.parent = this;

		*this = ShuffleLowHigh(*x.parent, *y.parent, (X & 0xF) | (Y & 0xF) << 4);
	}

	template<int T>
	RValue<Float4> Float4::operator=(const SwizzleMask1Float4<T> &rhs)
	{
		return *this = rhs.operator RValue<Float4>();
	}

	template<int T>
	RValue<Float4> Float4::operator=(const SwizzleFloat4<T> &rhs)
	{
		return *this = rhs.operator RValue<Float4>();
	}

	template<class T>
	Pointer<T>::Pointer(llvm::Argument *argument) : alignment(1)
	{
		LValue::storeValue((llvm::Value*)argument);
	}

	template<class T>
	Pointer<T>::Pointer(const void *external) : alignment((intptr_t)external & 0x0000000F ? 1 : 16)
	{
		llvm::Module *module = Nucleus::getModule();
		const llvm::GlobalValue *globalPointer = Nucleus::getGlobalValueAtAddress(const_cast<void*>(external));   // FIXME: Const

		if(!globalPointer)
		{
			globalPointer = Nucleus::createGlobalValue(T::getType(), false, alignment);

			Nucleus::addGlobalMapping(globalPointer, const_cast<void*>(external));   // FIXME: Const
		}

		LValue::storeValue((llvm::Value*)globalPointer);   // FIXME: Const
	}

	template<class T>
	Pointer<T>::Pointer() : alignment(1)
	{
		LValue::storeValue(Nucleus::createNullPointer(T::getType()));
	}

	template<class T>
	Pointer<T>::Pointer(RValue<Pointer<T> > rhs) : alignment(1)
	{
		LValue::storeValue(rhs.value);
	}

	template<class T>
	Pointer<T>::Pointer(const Pointer<T> &rhs) : alignment(rhs.alignment)
	{
		llvm::Value *value = rhs.loadValue();
		LValue::storeValue(value);
	}

	template<class T>
	Pointer<T>::Pointer(const Reference<Pointer<T> > &rhs) : alignment(rhs.getAlignment())
	{
		llvm::Value *value = rhs.loadValue();
		LValue::storeValue(value);
	}

	template<class T>
	RValue<Pointer<T> > Pointer<T>::operator=(RValue<Pointer<T> > rhs) const
	{
		LValue::storeValue(rhs.value);

		return rhs;
	}

	template<class T>
	RValue<Pointer<T> > Pointer<T>::operator=(const Pointer<T> &rhs) const
	{
		llvm::Value *value = rhs.loadValue();
		LValue::storeValue(value);

		return RValue<Pointer<T> >(value);
	}

	template<class T>
	RValue<Pointer<T> > Pointer<T>::operator=(const Reference<Pointer<T> > &rhs) const
	{
		llvm::Value *value = rhs.loadValue();
		LValue::storeValue(value);

		return RValue<Pointer<T> >(value);
	}

	template<class T>
	Reference<T> Pointer<T>::operator*()
	{
		return Reference<T>(LValue::loadValue(), alignment);
	}

	template<class T>
	llvm::Type *Pointer<T>::getType()
	{
		return Nucleus::getPointerType(T::getType());
	}

	template<class T, int S>
	Array<T, S>::Array(int size) : Variable<T>(size)
	{
	}

	template<class T, int S>
	Reference<T> Array<T, S>::operator[](int index)
	{
		llvm::Value *element = LValue::getAddress((llvm::Value*)Nucleus::createConstantInt(index));

		return Reference<T>(element);
	}

	template<class T, int S>
	Reference<T> Array<T, S>::operator[](RValue<Int> index)
	{
		llvm::Value *element = LValue::getAddress(index.value);

		return Reference<T>(element);
	}

	template<class T, int S>
	Reference<T> Array<T, S>::operator[](RValue<UInt> index)
	{
		llvm::Value *element = LValue::getAddress(index.value);

		return Reference<T>(element);
	}

//	template<class T>
//	RValue<Array<T> > operator++(const Array<T> &val, int)
//	{
//		// FIXME: Requires storing the address of the array
//	}

//	template<class T>
//	const Array<T> &operator++(const Array<T> &val)
//	{
//		// FIXME: Requires storing the address of the array
//	}

//	template<class T>
//	RValue<Array<T> > operator--(const Array<T> &val, int)
//	{
//		// FIXME: Requires storing the address of the array
//	}

//	template<class T>
//	const Array<T> &operator--(const Array<T> &val)
//	{
//		// FIXME: Requires storing the address of the array
//	}

	template<class T>
	RValue<T> IfThenElse(RValue<Bool> condition, RValue<T> ifTrue, RValue<T> ifFalse)
	{
		return RValue<T>(Nucleus::createSelect(condition.value, ifTrue.value, ifFalse.value));
	}

	template<class T>
	RValue<T> IfThenElse(RValue<Bool> condition, const T &ifTrue, RValue<T> ifFalse)
	{
		llvm::Value *trueValue = ifTrue.loadValue();

		return RValue<T>(Nucleus::createSelect(condition.value, trueValue, ifFalse.value));
	}

	template<class T>
	RValue<T> IfThenElse(RValue<Bool> condition, RValue<T> ifTrue, const T &ifFalse)
	{
		llvm::Value *falseValue = ifFalse.loadValue();

		return RValue<T>(Nucleus::createSelect(condition.value, ifTrue.value, falseValue));
	}

	template<class T>
	RValue<T> IfThenElse(RValue<Bool> condition, const T &ifTrue, const T &ifFalse)
	{
		llvm::Value *trueValue = ifTrue.loadValue();
		llvm::Value *falseValue = ifFalse.loadValue();

		return RValue<T>(Nucleus::createSelect(condition.value, trueValue, falseValue));
	}

	template<class T>
	void Return(const Pointer<T> &ret)
	{
		Nucleus::createRet(Nucleus::createLoad(ret.address));
		Nucleus::setInsertBlock(Nucleus::createBasicBlock());
	}

	template<class T>
	void Return(RValue<Pointer<T> > ret)
	{
		Nucleus::createRet(ret.value);
		Nucleus::setInsertBlock(Nucleus::createBasicBlock());
	}

	template<class R, class A1, class A2, class A3, class A4>
	Function<R, A1, A2, A3, A4>::Function()
	{
		core = new Nucleus();

		if(!A1::isVoid()) arguments.push_back(A1::getType());
		if(!A2::isVoid()) arguments.push_back(A2::getType());
		if(!A3::isVoid()) arguments.push_back(A3::getType());
		if(!A4::isVoid()) arguments.push_back(A4::getType());

		function = Nucleus::createFunction(R::getType(), arguments);
		Nucleus::setFunction(function);
	}

	template<class R, class A1, class A2, class A3, class A4>
	Function<R, A1, A2, A3, A4>::~Function()
	{
		delete core;
	}

	template<class R, class A1, class A2, class A3, class A4>
	llvm::Argument *Function<R, A1, A2, A3, A4>::arg(int index)
	{
		return Nucleus::getArgument(function, index);
	}

	template<class R, class A1, class A2, class A3, class A4>
	Routine *Function<R, A1, A2, A3, A4>::operator()(const wchar_t *name, ...)
	{
		wchar_t fullName[1024 + 1];

		va_list vararg;
		va_start(vararg, name);
		vswprintf(fullName, 1024, name, vararg);
		va_end(vararg);

		return core->acquireRoutine(fullName, true);
	}

	template<class T, class S>
	RValue<T> ReinterpretCast(RValue<S> val)
	{
		return RValue<T>(Nucleus::createBitCast(val.value, T::getType()));
	}

	template<class T>
	RValue<T> ReinterpretCast(const LValue &var)
	{
		llvm::Value *val = var.loadValue();

		return RValue<T>(Nucleus::createBitCast(val, T::getType()));
	}

	template<class T, class S>
	RValue<T> ReinterpretCast(const Reference<S> &var)
	{
		return ReinterpretCast<T>(RValue<S>(var));
	}

	template<class T, class S>
	RValue<T> As(RValue<S> val)
	{
		return ReinterpretCast<T>(val);
	}

	template<class T>
	RValue<T> As(const LValue &var)
	{
		return ReinterpretCast<T>(var);
	}

	template<class T, class S>
	RValue<T> As(const Reference<S> &val)
	{
		return ReinterpretCast<T>(val);
	}
}

#endif   // sw_Nucleus_hpp
