Make Reactor destination variables non-const.

Bug swiftshader:27

Change-Id: I53e2e4858b10d810f649907fda98dc7863752551
Reviewed-on: https://swiftshader-review.googlesource.com/8090
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index d2529a8..6858cc2 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -864,14 +864,14 @@
 		storeValue(value);
 	}
 
-	RValue<Bool> Bool::operator=(RValue<Bool> rhs) const
+	RValue<Bool> Bool::operator=(RValue<Bool> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Bool> Bool::operator=(const Bool &rhs) const
+	RValue<Bool> Bool::operator=(const Bool &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -879,7 +879,7 @@
 		return RValue<Bool>(value);
 	}
 
-	RValue<Bool> Bool::operator=(const Reference<Bool> &rhs) const
+	RValue<Bool> Bool::operator=(const Reference<Bool> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -964,14 +964,14 @@
 		storeValue(value);
 	}
 
-	RValue<Byte> Byte::operator=(RValue<Byte> rhs) const
+	RValue<Byte> Byte::operator=(RValue<Byte> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Byte> Byte::operator=(const Byte &rhs) const
+	RValue<Byte> Byte::operator=(const Byte &rhs) 
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -979,7 +979,7 @@
 		return RValue<Byte>(value);
 	}
 
-	RValue<Byte> Byte::operator=(const Reference<Byte> &rhs) const
+	RValue<Byte> Byte::operator=(const Reference<Byte> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1037,52 +1037,52 @@
 		return RValue<Byte>(Nucleus::createLShr(lhs.value, rhs.value));
 	}
 
-	RValue<Byte> operator+=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator+=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Byte> operator-=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator-=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Byte> operator*=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator*=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<Byte> operator/=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator/=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<Byte> operator%=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator%=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<Byte> operator&=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator&=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Byte> operator|=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator|=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Byte> operator^=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator^=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Byte> operator<<=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator<<=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Byte> operator>>=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator>>=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -1102,7 +1102,7 @@
 		return RValue<Byte>(Nucleus::createNot(val.value));
 	}
 
-	RValue<Byte> operator++(const Byte &val, int)   // Post-increment
+	RValue<Byte> operator++(Byte &val, int)   // Post-increment
 	{
 		RValue<Byte> res = val;
 
@@ -1112,7 +1112,7 @@
 		return res;
 	}
 
-	const Byte &operator++(const Byte &val)   // Pre-increment
+	const Byte &operator++(Byte &val)   // Pre-increment
 	{
 		Value *inc = Nucleus::createAdd(val.loadValue(), V(Nucleus::createConstantByte((unsigned char)1)));
 		val.storeValue(inc);
@@ -1120,7 +1120,7 @@
 		return val;
 	}
 
-	RValue<Byte> operator--(const Byte &val, int)   // Post-decrement
+	RValue<Byte> operator--(Byte &val, int)   // Post-decrement
 	{
 		RValue<Byte> res = val;
 
@@ -1130,7 +1130,7 @@
 		return res;
 	}
 
-	const Byte &operator--(const Byte &val)   // Pre-decrement
+	const Byte &operator--(Byte &val)   // Pre-decrement
 	{
 		Value *inc = Nucleus::createSub(val.loadValue(), V(Nucleus::createConstantByte((unsigned char)1)));
 		val.storeValue(inc);
@@ -1218,14 +1218,14 @@
 		storeValue(value);
 	}
 
-	RValue<SByte> SByte::operator=(RValue<SByte> rhs) const
+	RValue<SByte> SByte::operator=(RValue<SByte> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<SByte> SByte::operator=(const SByte &rhs) const
+	RValue<SByte> SByte::operator=(const SByte &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1233,7 +1233,7 @@
 		return RValue<SByte>(value);
 	}
 
-	RValue<SByte> SByte::operator=(const Reference<SByte> &rhs) const
+	RValue<SByte> SByte::operator=(const Reference<SByte> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1291,52 +1291,52 @@
 		return RValue<SByte>(Nucleus::createAShr(lhs.value, rhs.value));
 	}
 
-	RValue<SByte> operator+=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator+=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<SByte> operator-=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator-=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<SByte> operator*=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator*=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<SByte> operator/=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator/=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<SByte> operator%=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator%=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<SByte> operator&=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator&=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<SByte> operator|=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator|=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<SByte> operator^=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator^=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<SByte> operator<<=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator<<=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<SByte> operator>>=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator>>=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -1356,7 +1356,7 @@
 		return RValue<SByte>(Nucleus::createNot(val.value));
 	}
 
-	RValue<SByte> operator++(const SByte &val, int)   // Post-increment
+	RValue<SByte> operator++(SByte &val, int)   // Post-increment
 	{
 		RValue<SByte> res = val;
 
@@ -1366,7 +1366,7 @@
 		return res;
 	}
 
-	const SByte &operator++(const SByte &val)   // Pre-increment
+	const SByte &operator++(SByte &val)   // Pre-increment
 	{
 		Value *inc = Nucleus::createAdd(val.loadValue(), V(Nucleus::createConstantByte((signed char)1)));
 		val.storeValue(inc);
@@ -1374,7 +1374,7 @@
 		return val;
 	}
 
-	RValue<SByte> operator--(const SByte &val, int)   // Post-decrement
+	RValue<SByte> operator--(SByte &val, int)   // Post-decrement
 	{
 		RValue<SByte> res = val;
 
@@ -1384,7 +1384,7 @@
 		return res;
 	}
 
-	const SByte &operator--(const SByte &val)   // Pre-decrement
+	const SByte &operator--(SByte &val)   // Pre-decrement
 	{
 		Value *inc = Nucleus::createSub(val.loadValue(), V(Nucleus::createConstantByte((signed char)1)));
 		val.storeValue(inc);
@@ -1465,14 +1465,14 @@
 		storeValue(value);
 	}
 
-	RValue<Short> Short::operator=(RValue<Short> rhs) const
+	RValue<Short> Short::operator=(RValue<Short> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Short> Short::operator=(const Short &rhs) const
+	RValue<Short> Short::operator=(const Short &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1480,7 +1480,7 @@
 		return RValue<Short>(value);
 	}
 
-	RValue<Short> Short::operator=(const Reference<Short> &rhs) const
+	RValue<Short> Short::operator=(const Reference<Short> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1538,52 +1538,52 @@
 		return RValue<Short>(Nucleus::createAShr(lhs.value, rhs.value));
 	}
 
-	RValue<Short> operator+=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator+=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Short> operator-=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator-=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Short> operator*=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator*=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<Short> operator/=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator/=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<Short> operator%=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator%=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<Short> operator&=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator&=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Short> operator|=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator|=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Short> operator^=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator^=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Short> operator<<=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator<<=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Short> operator>>=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator>>=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -1603,7 +1603,7 @@
 		return RValue<Short>(Nucleus::createNot(val.value));
 	}
 
-	RValue<Short> operator++(const Short &val, int)   // Post-increment
+	RValue<Short> operator++(Short &val, int)   // Post-increment
 	{
 		RValue<Short> res = val;
 
@@ -1613,7 +1613,7 @@
 		return res;
 	}
 
-	const Short &operator++(const Short &val)   // Pre-increment
+	const Short &operator++(Short &val)   // Pre-increment
 	{
 		Value *inc = Nucleus::createAdd(val.loadValue(), V(Nucleus::createConstantShort((short)1)));
 		val.storeValue(inc);
@@ -1621,7 +1621,7 @@
 		return val;
 	}
 
-	RValue<Short> operator--(const Short &val, int)   // Post-decrement
+	RValue<Short> operator--(Short &val, int)   // Post-decrement
 	{
 		RValue<Short> res = val;
 
@@ -1631,7 +1631,7 @@
 		return res;
 	}
 
-	const Short &operator--(const Short &val)   // Pre-decrement
+	const Short &operator--(Short &val)   // Pre-decrement
 	{
 		Value *inc = Nucleus::createSub(val.loadValue(), V(Nucleus::createConstantShort((short)1)));
 		val.storeValue(inc);
@@ -1719,14 +1719,14 @@
 		storeValue(value);
 	}
 
-	RValue<UShort> UShort::operator=(RValue<UShort> rhs) const
+	RValue<UShort> UShort::operator=(RValue<UShort> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UShort> UShort::operator=(const UShort &rhs) const
+	RValue<UShort> UShort::operator=(const UShort &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1734,7 +1734,7 @@
 		return RValue<UShort>(value);
 	}
 
-	RValue<UShort> UShort::operator=(const Reference<UShort> &rhs) const
+	RValue<UShort> UShort::operator=(const Reference<UShort> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1792,52 +1792,52 @@
 		return RValue<UShort>(Nucleus::createLShr(lhs.value, rhs.value));
 	}
 
-	RValue<UShort> operator+=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator+=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<UShort> operator-=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator-=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<UShort> operator*=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator*=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<UShort> operator/=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator/=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<UShort> operator%=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator%=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<UShort> operator&=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator&=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<UShort> operator|=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator|=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<UShort> operator^=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator^=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<UShort> operator<<=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator<<=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UShort> operator>>=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator>>=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -1857,7 +1857,7 @@
 		return RValue<UShort>(Nucleus::createNot(val.value));
 	}
 
-	RValue<UShort> operator++(const UShort &val, int)   // Post-increment
+	RValue<UShort> operator++(UShort &val, int)   // Post-increment
 	{
 		RValue<UShort> res = val;
 
@@ -1867,7 +1867,7 @@
 		return res;
 	}
 
-	const UShort &operator++(const UShort &val)   // Pre-increment
+	const UShort &operator++(UShort &val)   // Pre-increment
 	{
 		Value *inc = Nucleus::createAdd(val.loadValue(), V(Nucleus::createConstantShort((unsigned short)1)));
 		val.storeValue(inc);
@@ -1875,7 +1875,7 @@
 		return val;
 	}
 
-	RValue<UShort> operator--(const UShort &val, int)   // Post-decrement
+	RValue<UShort> operator--(UShort &val, int)   // Post-decrement
 	{
 		RValue<UShort> res = val;
 
@@ -1885,7 +1885,7 @@
 		return res;
 	}
 
-	const UShort &operator--(const UShort &val)   // Pre-decrement
+	const UShort &operator--(UShort &val)   // Pre-decrement
 	{
 		Value *inc = Nucleus::createSub(val.loadValue(), V(Nucleus::createConstantShort((unsigned short)1)));
 		val.storeValue(inc);
@@ -1999,14 +1999,14 @@
 		storeValue(value);
 	}
 
-	RValue<Byte8> Byte8::operator=(RValue<Byte8> rhs) const
+	RValue<Byte8> Byte8::operator=(RValue<Byte8> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Byte8> Byte8::operator=(const Byte8 &rhs) const
+	RValue<Byte8> Byte8::operator=(const Byte8 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2014,7 +2014,7 @@
 		return RValue<Byte8>(value);
 	}
 
-	RValue<Byte8> Byte8::operator=(const Reference<Byte8> &rhs) const
+	RValue<Byte8> Byte8::operator=(const Reference<Byte8> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2107,52 +2107,52 @@
 //		return RValue<Byte8>(Nucleus::createLShr(lhs.value, rhs.value));
 //	}
 
-	RValue<Byte8> operator+=(const Byte8 &lhs, RValue<Byte8> rhs)
+	RValue<Byte8> operator+=(Byte8 &lhs, RValue<Byte8> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Byte8> operator-=(const Byte8 &lhs, RValue<Byte8> rhs)
+	RValue<Byte8> operator-=(Byte8 &lhs, RValue<Byte8> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-//	RValue<Byte8> operator*=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	RValue<Byte8> operator*=(Byte8 &lhs, RValue<Byte8> rhs)
 //	{
 //		return lhs = lhs * rhs;
 //	}
 
-//	RValue<Byte8> operator/=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	RValue<Byte8> operator/=(Byte8 &lhs, RValue<Byte8> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<Byte8> operator%=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	RValue<Byte8> operator%=(Byte8 &lhs, RValue<Byte8> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<Byte8> operator&=(const Byte8 &lhs, RValue<Byte8> rhs)
+	RValue<Byte8> operator&=(Byte8 &lhs, RValue<Byte8> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Byte8> operator|=(const Byte8 &lhs, RValue<Byte8> rhs)
+	RValue<Byte8> operator|=(Byte8 &lhs, RValue<Byte8> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Byte8> operator^=(const Byte8 &lhs, RValue<Byte8> rhs)
+	RValue<Byte8> operator^=(Byte8 &lhs, RValue<Byte8> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-//	RValue<Byte8> operator<<=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	RValue<Byte8> operator<<=(Byte8 &lhs, RValue<Byte8> rhs)
 //	{
 //		return lhs = lhs << rhs;
 //	}
 
-//	RValue<Byte8> operator>>=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	RValue<Byte8> operator>>=(Byte8 &lhs, RValue<Byte8> rhs)
 //	{
 //		return lhs = lhs >> rhs;
 //	}
@@ -2292,14 +2292,14 @@
 		storeValue(value);
 	}
 
-	RValue<SByte8> SByte8::operator=(RValue<SByte8> rhs) const
+	RValue<SByte8> SByte8::operator=(RValue<SByte8> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<SByte8> SByte8::operator=(const SByte8 &rhs) const
+	RValue<SByte8> SByte8::operator=(const SByte8 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2307,7 +2307,7 @@
 		return RValue<SByte8>(value);
 	}
 
-	RValue<SByte8> SByte8::operator=(const Reference<SByte8> &rhs) const
+	RValue<SByte8> SByte8::operator=(const Reference<SByte8> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2379,52 +2379,52 @@
 //		return RValue<SByte8>(Nucleus::createAShr(lhs.value, rhs.value));
 //	}
 
-	RValue<SByte8> operator+=(const SByte8 &lhs, RValue<SByte8> rhs)
+	RValue<SByte8> operator+=(SByte8 &lhs, RValue<SByte8> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<SByte8> operator-=(const SByte8 &lhs, RValue<SByte8> rhs)
+	RValue<SByte8> operator-=(SByte8 &lhs, RValue<SByte8> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-//	RValue<SByte8> operator*=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	RValue<SByte8> operator*=(SByte8 &lhs, RValue<SByte8> rhs)
 //	{
 //		return lhs = lhs * rhs;
 //	}
 
-//	RValue<SByte8> operator/=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	RValue<SByte8> operator/=(SByte8 &lhs, RValue<SByte8> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<SByte8> operator%=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	RValue<SByte8> operator%=(SByte8 &lhs, RValue<SByte8> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<SByte8> operator&=(const SByte8 &lhs, RValue<SByte8> rhs)
+	RValue<SByte8> operator&=(SByte8 &lhs, RValue<SByte8> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<SByte8> operator|=(const SByte8 &lhs, RValue<SByte8> rhs)
+	RValue<SByte8> operator|=(SByte8 &lhs, RValue<SByte8> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<SByte8> operator^=(const SByte8 &lhs, RValue<SByte8> rhs)
+	RValue<SByte8> operator^=(SByte8 &lhs, RValue<SByte8> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-//	RValue<SByte8> operator<<=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	RValue<SByte8> operator<<=(SByte8 &lhs, RValue<SByte8> rhs)
 //	{
 //		return lhs = lhs << rhs;
 //	}
 
-//	RValue<SByte8> operator>>=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	RValue<SByte8> operator>>=(SByte8 &lhs, RValue<SByte8> rhs)
 //	{
 //		return lhs = lhs >> rhs;
 //	}
@@ -2541,14 +2541,14 @@
 		storeValue(value);
 	}
 
-	RValue<Byte16> Byte16::operator=(RValue<Byte16> rhs) const
+	RValue<Byte16> Byte16::operator=(RValue<Byte16> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Byte16> Byte16::operator=(const Byte16 &rhs) const
+	RValue<Byte16> Byte16::operator=(const Byte16 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2556,7 +2556,7 @@
 		return RValue<Byte16>(value);
 	}
 
-	RValue<Byte16> Byte16::operator=(const Reference<Byte16> &rhs) const
+	RValue<Byte16> Byte16::operator=(const Reference<Byte16> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2737,14 +2737,14 @@
 		storeValue(rhs.loadValue());
 	}
 
-	RValue<Short4> Short4::operator=(RValue<Short4> rhs) const
+	RValue<Short4> Short4::operator=(RValue<Short4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Short4> Short4::operator=(const Short4 &rhs) const
+	RValue<Short4> Short4::operator=(const Short4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2752,7 +2752,7 @@
 		return RValue<Short4>(value);
 	}
 
-	RValue<Short4> Short4::operator=(const Reference<Short4> &rhs) const
+	RValue<Short4> Short4::operator=(const Reference<Short4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2760,14 +2760,14 @@
 		return RValue<Short4>(value);
 	}
 
-	RValue<Short4> Short4::operator=(RValue<UShort4> rhs) const
+	RValue<Short4> Short4::operator=(RValue<UShort4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return RValue<Short4>(rhs);
 	}
 
-	RValue<Short4> Short4::operator=(const UShort4 &rhs) const
+	RValue<Short4> Short4::operator=(const UShort4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2775,7 +2775,7 @@
 		return RValue<Short4>(value);
 	}
 
-	RValue<Short4> Short4::operator=(const Reference<UShort4> &rhs) const
+	RValue<Short4> Short4::operator=(const Reference<UShort4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2893,62 +2893,62 @@
 		return x86::psraw(lhs, rhs);
 	}
 
-	RValue<Short4> operator+=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator+=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Short4> operator-=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator-=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Short4> operator*=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator*=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-//	RValue<Short4> operator/=(const Short4 &lhs, RValue<Short4> rhs)
+//	RValue<Short4> operator/=(Short4 &lhs, RValue<Short4> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<Short4> operator%=(const Short4 &lhs, RValue<Short4> rhs)
+//	RValue<Short4> operator%=(Short4 &lhs, RValue<Short4> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<Short4> operator&=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator&=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Short4> operator|=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator|=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Short4> operator^=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator^=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Short4> operator<<=(const Short4 &lhs, unsigned char rhs)
+	RValue<Short4> operator<<=(Short4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Short4> operator>>=(const Short4 &lhs, unsigned char rhs)
+	RValue<Short4> operator>>=(Short4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<Short4> operator<<=(const Short4 &lhs, RValue<Long1> rhs)
+	RValue<Short4> operator<<=(Short4 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Short4> operator>>=(const Short4 &lhs, RValue<Long1> rhs)
+	RValue<Short4> operator>>=(Short4 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -3221,14 +3221,14 @@
 		storeValue(value);
 	}
 
-	RValue<UShort4> UShort4::operator=(RValue<UShort4> rhs) const
+	RValue<UShort4> UShort4::operator=(RValue<UShort4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UShort4> UShort4::operator=(const UShort4 &rhs) const
+	RValue<UShort4> UShort4::operator=(const UShort4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3236,7 +3236,7 @@
 		return RValue<UShort4>(value);
 	}
 
-	RValue<UShort4> UShort4::operator=(const Reference<UShort4> &rhs) const
+	RValue<UShort4> UShort4::operator=(const Reference<UShort4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3244,14 +3244,14 @@
 		return RValue<UShort4>(value);
 	}
 
-	RValue<UShort4> UShort4::operator=(RValue<Short4> rhs) const
+	RValue<UShort4> UShort4::operator=(RValue<Short4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return RValue<UShort4>(rhs);
 	}
 
-	RValue<UShort4> UShort4::operator=(const Short4 &rhs) const
+	RValue<UShort4> UShort4::operator=(const Short4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3259,7 +3259,7 @@
 		return RValue<UShort4>(value);
 	}
 
-	RValue<UShort4> UShort4::operator=(const Reference<Short4> &rhs) const
+	RValue<UShort4> UShort4::operator=(const Reference<Short4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3367,22 +3367,22 @@
 		return x86::psrlw(lhs, rhs);
 	}
 
-	RValue<UShort4> operator<<=(const UShort4 &lhs, unsigned char rhs)
+	RValue<UShort4> operator<<=(UShort4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UShort4> operator>>=(const UShort4 &lhs, unsigned char rhs)
+	RValue<UShort4> operator>>=(UShort4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<UShort4> operator<<=(const UShort4 &lhs, RValue<Long1> rhs)
+	RValue<UShort4> operator<<=(UShort4 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UShort4> operator>>=(const UShort4 &lhs, RValue<Long1> rhs)
+	RValue<UShort4> operator>>=(UShort4 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -3554,14 +3554,14 @@
 		storeValue(short8);
 	}
 
-	RValue<UShort8> UShort8::operator=(RValue<UShort8> rhs) const
+	RValue<UShort8> UShort8::operator=(RValue<UShort8> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UShort8> UShort8::operator=(const UShort8 &rhs) const
+	RValue<UShort8> UShort8::operator=(const UShort8 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3569,7 +3569,7 @@
 		return RValue<UShort8>(value);
 	}
 
-	RValue<UShort8> UShort8::operator=(const Reference<UShort8> &rhs) const
+	RValue<UShort8> UShort8::operator=(const Reference<UShort8> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3602,7 +3602,7 @@
 		return RValue<UShort8>(Nucleus::createMul(lhs.value, rhs.value));
 	}
 
-	RValue<UShort8> operator+=(const UShort8 &lhs, RValue<UShort8> rhs)
+	RValue<UShort8> operator+=(UShort8 &lhs, RValue<UShort8> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
@@ -3746,26 +3746,26 @@
 		storeValue(value);
 	}
 
-	RValue<Int> Int::operator=(int rhs) const
+	RValue<Int> Int::operator=(int rhs)
 	{
 		return RValue<Int>(storeValue(Nucleus::createConstantInt(rhs)));
 	}
 
-	RValue<Int> Int::operator=(RValue<Int> rhs) const
+	RValue<Int> Int::operator=(RValue<Int> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Int> Int::operator=(RValue<UInt> rhs) const
+	RValue<Int> Int::operator=(RValue<UInt> rhs)
 	{
 		storeValue(rhs.value);
 
 		return RValue<Int>(rhs);
 	}
 
-	RValue<Int> Int::operator=(const Int &rhs) const
+	RValue<Int> Int::operator=(const Int &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3773,7 +3773,7 @@
 		return RValue<Int>(value);
 	}
 
-	RValue<Int> Int::operator=(const Reference<Int> &rhs) const
+	RValue<Int> Int::operator=(const Reference<Int> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3781,7 +3781,7 @@
 		return RValue<Int>(value);
 	}
 
-	RValue<Int> Int::operator=(const UInt &rhs) const
+	RValue<Int> Int::operator=(const UInt &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3789,7 +3789,7 @@
 		return RValue<Int>(value);
 	}
 
-	RValue<Int> Int::operator=(const Reference<UInt> &rhs) const
+	RValue<Int> Int::operator=(const Reference<UInt> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3847,52 +3847,52 @@
 		return RValue<Int>(Nucleus::createAShr(lhs.value, rhs.value));
 	}
 
-	RValue<Int> operator+=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator+=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Int> operator-=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator-=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Int> operator*=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator*=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<Int> operator/=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator/=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<Int> operator%=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator%=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<Int> operator&=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator&=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Int> operator|=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator|=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Int> operator^=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator^=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Int> operator<<=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator<<=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Int> operator>>=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator>>=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -3912,7 +3912,7 @@
 		return RValue<Int>(Nucleus::createNot(val.value));
 	}
 
-	RValue<Int> operator++(const Int &val, int)   // Post-increment
+	RValue<Int> operator++(Int &val, int)   // Post-increment
 	{
 		RValue<Int> res = val;
 
@@ -3922,7 +3922,7 @@
 		return res;
 	}
 
-	const Int &operator++(const Int &val)   // Pre-increment
+	const Int &operator++(Int &val)   // Pre-increment
 	{
 		Value *inc = Nucleus::createAdd(val.loadValue(), V(Nucleus::createConstantInt(1)));
 		val.storeValue(inc);
@@ -3930,7 +3930,7 @@
 		return val;
 	}
 
-	RValue<Int> operator--(const Int &val, int)   // Post-decrement
+	RValue<Int> operator--(Int &val, int)   // Post-decrement
 	{
 		RValue<Int> res = val;
 
@@ -3940,7 +3940,7 @@
 		return res;
 	}
 
-	const Int &operator--(const Int &val)   // Pre-decrement
+	const Int &operator--(Int &val)   // Pre-decrement
 	{
 		Value *inc = Nucleus::createSub(val.loadValue(), V(Nucleus::createConstantInt(1)));
 		val.storeValue(inc);
@@ -4028,19 +4028,19 @@
 		storeValue(rhs.value);
 	}
 
-	RValue<Long> Long::operator=(int64_t rhs) const
+	RValue<Long> Long::operator=(int64_t rhs)
 	{
 		return RValue<Long>(storeValue(Nucleus::createConstantLong(rhs)));
 	}
 
-	RValue<Long> Long::operator=(RValue<Long> rhs) const
+	RValue<Long> Long::operator=(RValue<Long> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Long> Long::operator=(const Long &rhs) const
+	RValue<Long> Long::operator=(const Long &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4048,7 +4048,7 @@
 		return RValue<Long>(value);
 	}
 
-	RValue<Long> Long::operator=(const Reference<Long> &rhs) const
+	RValue<Long> Long::operator=(const Reference<Long> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4066,12 +4066,12 @@
 		return RValue<Long>(Nucleus::createSub(lhs.value, rhs.value));
 	}
 
-	RValue<Long> operator+=(const Long &lhs, RValue<Long> rhs)
+	RValue<Long> operator+=(Long &lhs, RValue<Long> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Long> operator-=(const Long &lhs, RValue<Long> rhs)
+	RValue<Long> operator-=(Long &lhs, RValue<Long> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
@@ -4197,26 +4197,26 @@
 		storeValue(value);
 	}
 
-	RValue<UInt> UInt::operator=(unsigned int rhs) const
+	RValue<UInt> UInt::operator=(unsigned int rhs)
 	{
 		return RValue<UInt>(storeValue(Nucleus::createConstantInt(rhs)));
 	}
 
-	RValue<UInt> UInt::operator=(RValue<UInt> rhs) const
+	RValue<UInt> UInt::operator=(RValue<UInt> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UInt> UInt::operator=(RValue<Int> rhs) const
+	RValue<UInt> UInt::operator=(RValue<Int> rhs)
 	{
 		storeValue(rhs.value);
 
 		return RValue<UInt>(rhs);
 	}
 
-	RValue<UInt> UInt::operator=(const UInt &rhs) const
+	RValue<UInt> UInt::operator=(const UInt &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4224,7 +4224,7 @@
 		return RValue<UInt>(value);
 	}
 
-	RValue<UInt> UInt::operator=(const Reference<UInt> &rhs) const
+	RValue<UInt> UInt::operator=(const Reference<UInt> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4232,7 +4232,7 @@
 		return RValue<UInt>(value);
 	}
 
-	RValue<UInt> UInt::operator=(const Int &rhs) const
+	RValue<UInt> UInt::operator=(const Int &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4240,7 +4240,7 @@
 		return RValue<UInt>(value);
 	}
 
-	RValue<UInt> UInt::operator=(const Reference<Int> &rhs) const
+	RValue<UInt> UInt::operator=(const Reference<Int> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4298,52 +4298,52 @@
 		return RValue<UInt>(Nucleus::createLShr(lhs.value, rhs.value));
 	}
 
-	RValue<UInt> operator+=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator+=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<UInt> operator-=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator-=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<UInt> operator*=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator*=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<UInt> operator/=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator/=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<UInt> operator%=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator%=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<UInt> operator&=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator&=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<UInt> operator|=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator|=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<UInt> operator^=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator^=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<UInt> operator<<=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator<<=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UInt> operator>>=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator>>=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -4363,7 +4363,7 @@
 		return RValue<UInt>(Nucleus::createNot(val.value));
 	}
 
-	RValue<UInt> operator++(const UInt &val, int)   // Post-increment
+	RValue<UInt> operator++(UInt &val, int)   // Post-increment
 	{
 		RValue<UInt> res = val;
 
@@ -4373,7 +4373,7 @@
 		return res;
 	}
 
-	const UInt &operator++(const UInt &val)   // Pre-increment
+	const UInt &operator++(UInt &val)   // Pre-increment
 	{
 		Value *inc = Nucleus::createAdd(val.loadValue(), V(Nucleus::createConstantInt(1)));
 		val.storeValue(inc);
@@ -4381,7 +4381,7 @@
 		return val;
 	}
 
-	RValue<UInt> operator--(const UInt &val, int)   // Post-decrement
+	RValue<UInt> operator--(UInt &val, int)   // Post-decrement
 	{
 		RValue<UInt> res = val;
 
@@ -4391,7 +4391,7 @@
 		return res;
 	}
 
-	const UInt &operator--(const UInt &val)   // Pre-decrement
+	const UInt &operator--(UInt &val)   // Pre-decrement
 	{
 		Value *inc = Nucleus::createSub(val.loadValue(), V(Nucleus::createConstantInt(1)));
 		val.storeValue(inc);
@@ -4532,14 +4532,14 @@
 		}
 	}
 
-	RValue<Int2> Int2::operator=(RValue<Int2> rhs) const
+	RValue<Int2> Int2::operator=(RValue<Int2> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Int2> Int2::operator=(const Int2 &rhs) const
+	RValue<Int2> Int2::operator=(const Int2 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4547,7 +4547,7 @@
 		return RValue<Int2>(value);
 	}
 
-	RValue<Int2> Int2::operator=(const Reference<Int2> &rhs) const
+	RValue<Int2> Int2::operator=(const Reference<Int2> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4658,62 +4658,62 @@
 		return x86::psrad(lhs, rhs);
 	}
 
-	RValue<Int2> operator+=(const Int2 &lhs, RValue<Int2> rhs)
+	RValue<Int2> operator+=(Int2 &lhs, RValue<Int2> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Int2> operator-=(const Int2 &lhs, RValue<Int2> rhs)
+	RValue<Int2> operator-=(Int2 &lhs, RValue<Int2> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-//	RValue<Int2> operator*=(const Int2 &lhs, RValue<Int2> rhs)
+//	RValue<Int2> operator*=(Int2 &lhs, RValue<Int2> rhs)
 //	{
 //		return lhs = lhs * rhs;
 //	}
 
-//	RValue<Int2> operator/=(const Int2 &lhs, RValue<Int2> rhs)
+//	RValue<Int2> operator/=(Int2 &lhs, RValue<Int2> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<Int2> operator%=(const Int2 &lhs, RValue<Int2> rhs)
+//	RValue<Int2> operator%=(Int2 &lhs, RValue<Int2> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<Int2> operator&=(const Int2 &lhs, RValue<Int2> rhs)
+	RValue<Int2> operator&=(Int2 &lhs, RValue<Int2> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Int2> operator|=(const Int2 &lhs, RValue<Int2> rhs)
+	RValue<Int2> operator|=(Int2 &lhs, RValue<Int2> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Int2> operator^=(const Int2 &lhs, RValue<Int2> rhs)
+	RValue<Int2> operator^=(Int2 &lhs, RValue<Int2> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Int2> operator<<=(const Int2 &lhs, unsigned char rhs)
+	RValue<Int2> operator<<=(Int2 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Int2> operator>>=(const Int2 &lhs, unsigned char rhs)
+	RValue<Int2> operator>>=(Int2 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<Int2> operator<<=(const Int2 &lhs, RValue<Long1> rhs)
+	RValue<Int2> operator<<=(Int2 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Int2> operator>>=(const Int2 &lhs, RValue<Long1> rhs)
+	RValue<Int2> operator>>=(Int2 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -4846,14 +4846,14 @@
 		storeValue(value);
 	}
 
-	RValue<UInt2> UInt2::operator=(RValue<UInt2> rhs) const
+	RValue<UInt2> UInt2::operator=(RValue<UInt2> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UInt2> UInt2::operator=(const UInt2 &rhs) const
+	RValue<UInt2> UInt2::operator=(const UInt2 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4861,7 +4861,7 @@
 		return RValue<UInt2>(value);
 	}
 
-	RValue<UInt2> UInt2::operator=(const Reference<UInt2> &rhs) const
+	RValue<UInt2> UInt2::operator=(const Reference<UInt2> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4972,62 +4972,62 @@
 		return x86::psrld(lhs, rhs);
 	}
 
-	RValue<UInt2> operator+=(const UInt2 &lhs, RValue<UInt2> rhs)
+	RValue<UInt2> operator+=(UInt2 &lhs, RValue<UInt2> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<UInt2> operator-=(const UInt2 &lhs, RValue<UInt2> rhs)
+	RValue<UInt2> operator-=(UInt2 &lhs, RValue<UInt2> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-//	RValue<UInt2> operator*=(const UInt2 &lhs, RValue<UInt2> rhs)
+//	RValue<UInt2> operator*=(UInt2 &lhs, RValue<UInt2> rhs)
 //	{
 //		return lhs = lhs * rhs;
 //	}
 
-//	RValue<UInt2> operator/=(const UInt2 &lhs, RValue<UInt2> rhs)
+//	RValue<UInt2> operator/=(UInt2 &lhs, RValue<UInt2> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<UInt2> operator%=(const UInt2 &lhs, RValue<UInt2> rhs)
+//	RValue<UInt2> operator%=(UInt2 &lhs, RValue<UInt2> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<UInt2> operator&=(const UInt2 &lhs, RValue<UInt2> rhs)
+	RValue<UInt2> operator&=(UInt2 &lhs, RValue<UInt2> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<UInt2> operator|=(const UInt2 &lhs, RValue<UInt2> rhs)
+	RValue<UInt2> operator|=(UInt2 &lhs, RValue<UInt2> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<UInt2> operator^=(const UInt2 &lhs, RValue<UInt2> rhs)
+	RValue<UInt2> operator^=(UInt2 &lhs, RValue<UInt2> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<UInt2> operator<<=(const UInt2 &lhs, unsigned char rhs)
+	RValue<UInt2> operator<<=(UInt2 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UInt2> operator>>=(const UInt2 &lhs, unsigned char rhs)
+	RValue<UInt2> operator>>=(UInt2 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<UInt2> operator<<=(const UInt2 &lhs, RValue<Long1> rhs)
+	RValue<UInt2> operator<<=(UInt2 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UInt2> operator>>=(const UInt2 &lhs, RValue<Long1> rhs)
+	RValue<UInt2> operator>>=(UInt2 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -5301,14 +5301,14 @@
 		*this = RValue<Int>(rhs.loadValue());
 	}
 
-	RValue<Int4> Int4::operator=(RValue<Int4> rhs) const
+	RValue<Int4> Int4::operator=(RValue<Int4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Int4> Int4::operator=(const Int4 &rhs) const
+	RValue<Int4> Int4::operator=(const Int4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5316,7 +5316,7 @@
 		return RValue<Int4>(value);
 	}
 
-	RValue<Int4> Int4::operator=(const Reference<Int4> &rhs) const
+	RValue<Int4> Int4::operator=(const Reference<Int4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5384,52 +5384,52 @@
 		return RValue<Int4>(Nucleus::createAShr(lhs.value, rhs.value));
 	}
 
-	RValue<Int4> operator+=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator+=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Int4> operator-=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator-=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Int4> operator*=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator*=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-//	RValue<Int4> operator/=(const Int4 &lhs, RValue<Int4> rhs)
+//	RValue<Int4> operator/=(Int4 &lhs, RValue<Int4> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<Int4> operator%=(const Int4 &lhs, RValue<Int4> rhs)
+//	RValue<Int4> operator%=(Int4 &lhs, RValue<Int4> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<Int4> operator&=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator&=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Int4> operator|=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator|=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Int4> operator^=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator^=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Int4> operator<<=(const Int4 &lhs, unsigned char rhs)
+	RValue<Int4> operator<<=(Int4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Int4> operator>>=(const Int4 &lhs, unsigned char rhs)
+	RValue<Int4> operator>>=(Int4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -5662,14 +5662,14 @@
 		storeValue(uint4);
 	}
 
-	RValue<UInt4> UInt4::operator=(RValue<UInt4> rhs) const
+	RValue<UInt4> UInt4::operator=(RValue<UInt4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UInt4> UInt4::operator=(const UInt4 &rhs) const
+	RValue<UInt4> UInt4::operator=(const UInt4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5677,7 +5677,7 @@
 		return RValue<UInt4>(value);
 	}
 
-	RValue<UInt4> UInt4::operator=(const Reference<UInt4> &rhs) const
+	RValue<UInt4> UInt4::operator=(const Reference<UInt4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5745,52 +5745,52 @@
 		return RValue<UInt4>(Nucleus::createLShr(lhs.value, rhs.value));
 	}
 
-	RValue<UInt4> operator+=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator+=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<UInt4> operator-=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator-=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<UInt4> operator*=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator*=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-//	RValue<UInt4> operator/=(const UInt4 &lhs, RValue<UInt4> rhs)
+//	RValue<UInt4> operator/=(UInt4 &lhs, RValue<UInt4> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<UInt4> operator%=(const UInt4 &lhs, RValue<UInt4> rhs)
+//	RValue<UInt4> operator%=(UInt4 &lhs, RValue<UInt4> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<UInt4> operator&=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator&=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<UInt4> operator|=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator|=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<UInt4> operator^=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator^=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<UInt4> operator<<=(const UInt4 &lhs, unsigned char rhs)
+	RValue<UInt4> operator<<=(UInt4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UInt4> operator>>=(const UInt4 &lhs, unsigned char rhs)
+	RValue<UInt4> operator>>=(UInt4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -5919,14 +5919,14 @@
 		storeValue(value);
 	}
 
-	RValue<Float> Float::operator=(RValue<Float> rhs) const
+	RValue<Float> Float::operator=(RValue<Float> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Float> Float::operator=(const Float &rhs) const
+	RValue<Float> Float::operator=(const Float &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5934,7 +5934,7 @@
 		return RValue<Float>(value);
 	}
 
-	RValue<Float> Float::operator=(const Reference<Float> &rhs) const
+	RValue<Float> Float::operator=(const Reference<Float> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5962,22 +5962,22 @@
 		return RValue<Float>(Nucleus::createFDiv(lhs.value, rhs.value));
 	}
 
-	RValue<Float> operator+=(const Float &lhs, RValue<Float> rhs)
+	RValue<Float> operator+=(Float &lhs, RValue<Float> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Float> operator-=(const Float &lhs, RValue<Float> rhs)
+	RValue<Float> operator-=(Float &lhs, RValue<Float> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Float> operator*=(const Float &lhs, RValue<Float> rhs)
+	RValue<Float> operator*=(Float &lhs, RValue<Float> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<Float> operator/=(const Float &lhs, RValue<Float> rhs)
+	RValue<Float> operator/=(Float &lhs, RValue<Float> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
@@ -6323,19 +6323,19 @@
 		*this = RValue<Float>(rhs.loadValue());
 	}
 
-	RValue<Float4> Float4::operator=(float x) const
+	RValue<Float4> Float4::operator=(float x)
 	{
 		return *this = Float4(x, x, x, x);
 	}
 
-	RValue<Float4> Float4::operator=(RValue<Float4> rhs) const
+	RValue<Float4> Float4::operator=(RValue<Float4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Float4> Float4::operator=(const Float4 &rhs) const
+	RValue<Float4> Float4::operator=(const Float4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -6343,7 +6343,7 @@
 		return RValue<Float4>(value);
 	}
 
-	RValue<Float4> Float4::operator=(const Reference<Float4> &rhs) const
+	RValue<Float4> Float4::operator=(const Reference<Float4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -6351,17 +6351,17 @@
 		return RValue<Float4>(value);
 	}
 
-	RValue<Float4> Float4::operator=(RValue<Float> rhs) const
+	RValue<Float4> Float4::operator=(RValue<Float> rhs)
 	{
 		return *this = Float4(rhs);
 	}
 
-	RValue<Float4> Float4::operator=(const Float &rhs) const
+	RValue<Float4> Float4::operator=(const Float &rhs)
 	{
 		return *this = Float4(rhs);
 	}
 
-	RValue<Float4> Float4::operator=(const Reference<Float> &rhs) const
+	RValue<Float4> Float4::operator=(const Reference<Float> &rhs)
 	{
 		return *this = Float4(rhs);
 	}
@@ -6391,27 +6391,27 @@
 		return RValue<Float4>(Nucleus::createFRem(lhs.value, rhs.value));
 	}
 
-	RValue<Float4> operator+=(const Float4 &lhs, RValue<Float4> rhs)
+	RValue<Float4> operator+=(Float4 &lhs, RValue<Float4> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Float4> operator-=(const Float4 &lhs, RValue<Float4> rhs)
+	RValue<Float4> operator-=(Float4 &lhs, RValue<Float4> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Float4> operator*=(const Float4 &lhs, RValue<Float4> rhs)
+	RValue<Float4> operator*=(Float4 &lhs, RValue<Float4> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<Float4> operator/=(const Float4 &lhs, RValue<Float4> rhs)
+	RValue<Float4> operator/=(Float4 &lhs, RValue<Float4> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<Float4> operator%=(const Float4 &lhs, RValue<Float4> rhs)
+	RValue<Float4> operator%=(Float4 &lhs, RValue<Float4> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
@@ -6641,17 +6641,17 @@
 		return RValue<Pointer<Byte>>(Nucleus::createGEP(lhs.value, Byte::getType(), offset.value));
 	}
 
-	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, int offset)
+	RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, int offset)
 	{
 		return lhs = lhs + offset;
 	}
 
-	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, RValue<Int> offset)
+	RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, RValue<Int> offset)
 	{
 		return lhs = lhs + offset;
 	}
 
-	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, RValue<UInt> offset)
+	RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, RValue<UInt> offset)
 	{
 		return lhs = lhs + offset;
 	}
@@ -6671,17 +6671,17 @@
 		return lhs + -offset;
 	}
 
-	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, int offset)
+	RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, int offset)
 	{
 		return lhs = lhs - offset;
 	}
 
-	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, RValue<Int> offset)
+	RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, RValue<Int> offset)
 	{
 		return lhs = lhs - offset;
 	}
 
-	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, RValue<UInt> offset)
+	RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, RValue<UInt> offset)
 	{
 		return lhs = lhs - offset;
 	}
diff --git a/src/Reactor/Reactor.hpp b/src/Reactor/Reactor.hpp
index a4679bd..6303c03 100644
--- a/src/Reactor/Reactor.hpp
+++ b/src/Reactor/Reactor.hpp
@@ -184,10 +184,10 @@
 		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;
+	//	RValue<Bool> operator=(bool rhs);   // FIXME: Implement
+		RValue<Bool> operator=(RValue<Bool> rhs);
+		RValue<Bool> operator=(const Bool &rhs);
+		RValue<Bool> operator=(const Reference<Bool> &rhs);
 
 		static Type *getType();
 	};
@@ -212,10 +212,10 @@
 		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;
+	//	RValue<Byte> operator=(unsigned char rhs);   // FIXME: Implement
+		RValue<Byte> operator=(RValue<Byte> rhs);
+		RValue<Byte> operator=(const Byte &rhs);
+		RValue<Byte> operator=(const Reference<Byte> &rhs);
 
 		static Type *getType();
 	};
@@ -230,23 +230,23 @@
 	RValue<Byte> operator^(RValue<Byte> lhs, RValue<Byte> rhs);
 	RValue<Byte> operator<<(RValue<Byte> lhs, RValue<Byte> rhs);
 	RValue<Byte> operator>>(RValue<Byte> lhs, RValue<Byte> rhs);
-	RValue<Byte> operator+=(const Byte &lhs, RValue<Byte> rhs);
-	RValue<Byte> operator-=(const Byte &lhs, RValue<Byte> rhs);
-	RValue<Byte> operator*=(const Byte &lhs, RValue<Byte> rhs);
-	RValue<Byte> operator/=(const Byte &lhs, RValue<Byte> rhs);
-	RValue<Byte> operator%=(const Byte &lhs, RValue<Byte> rhs);
-	RValue<Byte> operator&=(const Byte &lhs, RValue<Byte> rhs);
-	RValue<Byte> operator|=(const Byte &lhs, RValue<Byte> rhs);
-	RValue<Byte> operator^=(const Byte &lhs, RValue<Byte> rhs);
-	RValue<Byte> operator<<=(const Byte &lhs, RValue<Byte> rhs);
-	RValue<Byte> operator>>=(const Byte &lhs, RValue<Byte> rhs);
+	RValue<Byte> operator+=(Byte &lhs, RValue<Byte> rhs);
+	RValue<Byte> operator-=(Byte &lhs, RValue<Byte> rhs);
+	RValue<Byte> operator*=(Byte &lhs, RValue<Byte> rhs);
+	RValue<Byte> operator/=(Byte &lhs, RValue<Byte> rhs);
+	RValue<Byte> operator%=(Byte &lhs, RValue<Byte> rhs);
+	RValue<Byte> operator&=(Byte &lhs, RValue<Byte> rhs);
+	RValue<Byte> operator|=(Byte &lhs, RValue<Byte> rhs);
+	RValue<Byte> operator^=(Byte &lhs, RValue<Byte> rhs);
+	RValue<Byte> operator<<=(Byte &lhs, RValue<Byte> rhs);
+	RValue<Byte> operator>>=(Byte &lhs, RValue<Byte> rhs);
 	RValue<Byte> operator+(RValue<Byte> val);
 	RValue<Byte> operator-(RValue<Byte> val);
 	RValue<Byte> operator~(RValue<Byte> val);
-	RValue<Byte> operator++(const Byte &val, int);   // Post-increment
-	const Byte &operator++(const Byte &val);   // Pre-increment
-	RValue<Byte> operator--(const Byte &val, int);   // Post-decrement
-	const Byte &operator--(const Byte &val);   // Pre-decrement
+	RValue<Byte> operator++(Byte &val, int);   // Post-increment
+	const Byte &operator++(Byte &val);   // Pre-increment
+	RValue<Byte> operator--(Byte &val, int);   // Post-decrement
+	const Byte &operator--(Byte &val);   // Pre-decrement
 	RValue<Bool> operator<(RValue<Byte> lhs, RValue<Byte> rhs);
 	RValue<Bool> operator<=(RValue<Byte> lhs, RValue<Byte> rhs);
 	RValue<Bool> operator>(RValue<Byte> lhs, RValue<Byte> rhs);
@@ -268,10 +268,10 @@
 		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;
+	//	RValue<SByte> operator=(signed char rhs);   // FIXME: Implement
+		RValue<SByte> operator=(RValue<SByte> rhs);
+		RValue<SByte> operator=(const SByte &rhs);
+		RValue<SByte> operator=(const Reference<SByte> &rhs);
 
 		static Type *getType();
 	};
@@ -286,23 +286,23 @@
 	RValue<SByte> operator^(RValue<SByte> lhs, RValue<SByte> rhs);
 	RValue<SByte> operator<<(RValue<SByte> lhs, RValue<SByte> rhs);
 	RValue<SByte> operator>>(RValue<SByte> lhs, RValue<SByte> rhs);
-	RValue<SByte> operator+=(const SByte &lhs, RValue<SByte> rhs);
-	RValue<SByte> operator-=(const SByte &lhs, RValue<SByte> rhs);
-	RValue<SByte> operator*=(const SByte &lhs, RValue<SByte> rhs);
-	RValue<SByte> operator/=(const SByte &lhs, RValue<SByte> rhs);
-	RValue<SByte> operator%=(const SByte &lhs, RValue<SByte> rhs);
-	RValue<SByte> operator&=(const SByte &lhs, RValue<SByte> rhs);
-	RValue<SByte> operator|=(const SByte &lhs, RValue<SByte> rhs);
-	RValue<SByte> operator^=(const SByte &lhs, RValue<SByte> rhs);
-	RValue<SByte> operator<<=(const SByte &lhs, RValue<SByte> rhs);
-	RValue<SByte> operator>>=(const SByte &lhs, RValue<SByte> rhs);
+	RValue<SByte> operator+=(SByte &lhs, RValue<SByte> rhs);
+	RValue<SByte> operator-=(SByte &lhs, RValue<SByte> rhs);
+	RValue<SByte> operator*=(SByte &lhs, RValue<SByte> rhs);
+	RValue<SByte> operator/=(SByte &lhs, RValue<SByte> rhs);
+	RValue<SByte> operator%=(SByte &lhs, RValue<SByte> rhs);
+	RValue<SByte> operator&=(SByte &lhs, RValue<SByte> rhs);
+	RValue<SByte> operator|=(SByte &lhs, RValue<SByte> rhs);
+	RValue<SByte> operator^=(SByte &lhs, RValue<SByte> rhs);
+	RValue<SByte> operator<<=(SByte &lhs, RValue<SByte> rhs);
+	RValue<SByte> operator>>=(SByte &lhs, RValue<SByte> rhs);
 	RValue<SByte> operator+(RValue<SByte> val);
 	RValue<SByte> operator-(RValue<SByte> val);
 	RValue<SByte> operator~(RValue<SByte> val);
-	RValue<SByte> operator++(const SByte &val, int);   // Post-increment
-	const SByte &operator++(const SByte &val);   // Pre-increment
-	RValue<SByte> operator--(const SByte &val, int);   // Post-decrement
-	const SByte &operator--(const SByte &val);   // Pre-decrement
+	RValue<SByte> operator++(SByte &val, int);   // Post-increment
+	const SByte &operator++(SByte &val);   // Pre-increment
+	RValue<SByte> operator--(SByte &val, int);   // Post-decrement
+	const SByte &operator--(SByte &val);   // Pre-decrement
 	RValue<Bool> operator<(RValue<SByte> lhs, RValue<SByte> rhs);
 	RValue<Bool> operator<=(RValue<SByte> lhs, RValue<SByte> rhs);
 	RValue<Bool> operator>(RValue<SByte> lhs, RValue<SByte> rhs);
@@ -323,10 +323,10 @@
 		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;
+	//	RValue<Short> operator=(short rhs);   // FIXME: Implement
+		RValue<Short> operator=(RValue<Short> rhs);
+		RValue<Short> operator=(const Short &rhs);
+		RValue<Short> operator=(const Reference<Short> &rhs);
 
 		static Type *getType();
 	};
@@ -341,23 +341,23 @@
 	RValue<Short> operator^(RValue<Short> lhs, RValue<Short> rhs);
 	RValue<Short> operator<<(RValue<Short> lhs, RValue<Short> rhs);
 	RValue<Short> operator>>(RValue<Short> lhs, RValue<Short> rhs);
-	RValue<Short> operator+=(const Short &lhs, RValue<Short> rhs);
-	RValue<Short> operator-=(const Short &lhs, RValue<Short> rhs);
-	RValue<Short> operator*=(const Short &lhs, RValue<Short> rhs);
-	RValue<Short> operator/=(const Short &lhs, RValue<Short> rhs);
-	RValue<Short> operator%=(const Short &lhs, RValue<Short> rhs);
-	RValue<Short> operator&=(const Short &lhs, RValue<Short> rhs);
-	RValue<Short> operator|=(const Short &lhs, RValue<Short> rhs);
-	RValue<Short> operator^=(const Short &lhs, RValue<Short> rhs);
-	RValue<Short> operator<<=(const Short &lhs, RValue<Short> rhs);
-	RValue<Short> operator>>=(const Short &lhs, RValue<Short> rhs);
+	RValue<Short> operator+=(Short &lhs, RValue<Short> rhs);
+	RValue<Short> operator-=(Short &lhs, RValue<Short> rhs);
+	RValue<Short> operator*=(Short &lhs, RValue<Short> rhs);
+	RValue<Short> operator/=(Short &lhs, RValue<Short> rhs);
+	RValue<Short> operator%=(Short &lhs, RValue<Short> rhs);
+	RValue<Short> operator&=(Short &lhs, RValue<Short> rhs);
+	RValue<Short> operator|=(Short &lhs, RValue<Short> rhs);
+	RValue<Short> operator^=(Short &lhs, RValue<Short> rhs);
+	RValue<Short> operator<<=(Short &lhs, RValue<Short> rhs);
+	RValue<Short> operator>>=(Short &lhs, RValue<Short> rhs);
 	RValue<Short> operator+(RValue<Short> val);
 	RValue<Short> operator-(RValue<Short> val);
 	RValue<Short> operator~(RValue<Short> val);
-	RValue<Short> operator++(const Short &val, int);   // Post-increment
-	const Short &operator++(const Short &val);   // Pre-increment
-	RValue<Short> operator--(const Short &val, int);   // Post-decrement
-	const Short &operator--(const Short &val);   // Pre-decrement
+	RValue<Short> operator++(Short &val, int);   // Post-increment
+	const Short &operator++(Short &val);   // Pre-increment
+	RValue<Short> operator--(Short &val, int);   // Post-decrement
+	const Short &operator--(Short &val);   // Pre-decrement
 	RValue<Bool> operator<(RValue<Short> lhs, RValue<Short> rhs);
 	RValue<Bool> operator<=(RValue<Short> lhs, RValue<Short> rhs);
 	RValue<Bool> operator>(RValue<Short> lhs, RValue<Short> rhs);
@@ -379,10 +379,10 @@
 		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;
+	//	RValue<UShort> operator=(unsigned short rhs);   // FIXME: Implement
+		RValue<UShort> operator=(RValue<UShort> rhs);
+		RValue<UShort> operator=(const UShort &rhs);
+		RValue<UShort> operator=(const Reference<UShort> &rhs);
 
 		static Type *getType();
 	};
@@ -397,23 +397,23 @@
 	RValue<UShort> operator^(RValue<UShort> lhs, RValue<UShort> rhs);
 	RValue<UShort> operator<<(RValue<UShort> lhs, RValue<UShort> rhs);
 	RValue<UShort> operator>>(RValue<UShort> lhs, RValue<UShort> rhs);
-	RValue<UShort> operator+=(const UShort &lhs, RValue<UShort> rhs);
-	RValue<UShort> operator-=(const UShort &lhs, RValue<UShort> rhs);
-	RValue<UShort> operator*=(const UShort &lhs, RValue<UShort> rhs);
-	RValue<UShort> operator/=(const UShort &lhs, RValue<UShort> rhs);
-	RValue<UShort> operator%=(const UShort &lhs, RValue<UShort> rhs);
-	RValue<UShort> operator&=(const UShort &lhs, RValue<UShort> rhs);
-	RValue<UShort> operator|=(const UShort &lhs, RValue<UShort> rhs);
-	RValue<UShort> operator^=(const UShort &lhs, RValue<UShort> rhs);
-	RValue<UShort> operator<<=(const UShort &lhs, RValue<UShort> rhs);
-	RValue<UShort> operator>>=(const UShort &lhs, RValue<UShort> rhs);
+	RValue<UShort> operator+=(UShort &lhs, RValue<UShort> rhs);
+	RValue<UShort> operator-=(UShort &lhs, RValue<UShort> rhs);
+	RValue<UShort> operator*=(UShort &lhs, RValue<UShort> rhs);
+	RValue<UShort> operator/=(UShort &lhs, RValue<UShort> rhs);
+	RValue<UShort> operator%=(UShort &lhs, RValue<UShort> rhs);
+	RValue<UShort> operator&=(UShort &lhs, RValue<UShort> rhs);
+	RValue<UShort> operator|=(UShort &lhs, RValue<UShort> rhs);
+	RValue<UShort> operator^=(UShort &lhs, RValue<UShort> rhs);
+	RValue<UShort> operator<<=(UShort &lhs, RValue<UShort> rhs);
+	RValue<UShort> operator>>=(UShort &lhs, RValue<UShort> rhs);
 	RValue<UShort> operator+(RValue<UShort> val);
 	RValue<UShort> operator-(RValue<UShort> val);
 	RValue<UShort> operator~(RValue<UShort> val);
-	RValue<UShort> operator++(const UShort &val, int);   // Post-increment
-	const UShort &operator++(const UShort &val);   // Pre-increment
-	RValue<UShort> operator--(const UShort &val, int);   // Post-decrement
-	const UShort &operator--(const UShort &val);   // Pre-decrement
+	RValue<UShort> operator++(UShort &val, int);   // Post-increment
+	const UShort &operator++(UShort &val);   // Pre-increment
+	RValue<UShort> operator--(UShort &val, int);   // Post-decrement
+	const UShort &operator--(UShort &val);   // Pre-decrement
 	RValue<Bool> operator<(RValue<UShort> lhs, RValue<UShort> rhs);
 	RValue<Bool> operator<=(RValue<UShort> lhs, RValue<UShort> rhs);
 	RValue<Bool> operator>(RValue<UShort> lhs, RValue<UShort> rhs);
@@ -432,9 +432,9 @@
 	//	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;
+	//	RValue<Byte4> operator=(RValue<Byte4> rhs);
+	//	RValue<Byte4> operator=(const Byte4 &rhs);
+	//	RValue<Byte4> operator=(const Reference<Byte4> &rhs);
 
 		static Type *getType();
 	};
@@ -449,23 +449,23 @@
 //	RValue<Byte4> operator^(RValue<Byte4> lhs, RValue<Byte4> rhs);
 //	RValue<Byte4> operator<<(RValue<Byte4> lhs, RValue<Byte4> rhs);
 //	RValue<Byte4> operator>>(RValue<Byte4> lhs, RValue<Byte4> rhs);
-//	RValue<Byte4> operator+=(const Byte4 &lhs, RValue<Byte4> rhs);
-//	RValue<Byte4> operator-=(const Byte4 &lhs, RValue<Byte4> rhs);
-//	RValue<Byte4> operator*=(const Byte4 &lhs, RValue<Byte4> rhs);
-//	RValue<Byte4> operator/=(const Byte4 &lhs, RValue<Byte4> rhs);
-//	RValue<Byte4> operator%=(const Byte4 &lhs, RValue<Byte4> rhs);
-//	RValue<Byte4> operator&=(const Byte4 &lhs, RValue<Byte4> rhs);
-//	RValue<Byte4> operator|=(const Byte4 &lhs, RValue<Byte4> rhs);
-//	RValue<Byte4> operator^=(const Byte4 &lhs, RValue<Byte4> rhs);
-//	RValue<Byte4> operator<<=(const Byte4 &lhs, RValue<Byte4> rhs);
-//	RValue<Byte4> operator>>=(const Byte4 &lhs, RValue<Byte4> rhs);
+//	RValue<Byte4> operator+=(Byte4 &lhs, RValue<Byte4> rhs);
+//	RValue<Byte4> operator-=(Byte4 &lhs, RValue<Byte4> rhs);
+//	RValue<Byte4> operator*=(Byte4 &lhs, RValue<Byte4> rhs);
+//	RValue<Byte4> operator/=(Byte4 &lhs, RValue<Byte4> rhs);
+//	RValue<Byte4> operator%=(Byte4 &lhs, RValue<Byte4> rhs);
+//	RValue<Byte4> operator&=(Byte4 &lhs, RValue<Byte4> rhs);
+//	RValue<Byte4> operator|=(Byte4 &lhs, RValue<Byte4> rhs);
+//	RValue<Byte4> operator^=(Byte4 &lhs, RValue<Byte4> rhs);
+//	RValue<Byte4> operator<<=(Byte4 &lhs, RValue<Byte4> rhs);
+//	RValue<Byte4> operator>>=(Byte4 &lhs, RValue<Byte4> rhs);
 //	RValue<Byte4> operator+(RValue<Byte4> val);
 //	RValue<Byte4> operator-(RValue<Byte4> val);
 //	RValue<Byte4> operator~(RValue<Byte4> val);
-//	RValue<Byte4> operator++(const Byte4 &val, int);   // Post-increment
-//	const Byte4 &operator++(const Byte4 &val);   // Pre-increment
-//	RValue<Byte4> operator--(const Byte4 &val, int);   // Post-decrement
-//	const Byte4 &operator--(const Byte4 &val);   // Pre-decrement
+//	RValue<Byte4> operator++(Byte4 &val, int);   // Post-increment
+//	const Byte4 &operator++(Byte4 &val);   // Pre-increment
+//	RValue<Byte4> operator--(Byte4 &val, int);   // Post-decrement
+//	const Byte4 &operator--(Byte4 &val);   // Pre-decrement
 
 	class SByte4 : public LValue<SByte4>
 	{
@@ -476,9 +476,9 @@
 	//	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;
+	//	RValue<SByte4> operator=(RValue<SByte4> rhs);
+	//	RValue<SByte4> operator=(const SByte4 &rhs);
+	//	RValue<SByte4> operator=(const Reference<SByte4> &rhs);
 
 		static Type *getType();
 	};
@@ -493,23 +493,23 @@
 //	RValue<SByte4> operator^(RValue<SByte4> lhs, RValue<SByte4> rhs);
 //	RValue<SByte4> operator<<(RValue<SByte4> lhs, RValue<SByte4> rhs);
 //	RValue<SByte4> operator>>(RValue<SByte4> lhs, RValue<SByte4> rhs);
-//	RValue<SByte4> operator+=(const SByte4 &lhs, RValue<SByte4> rhs);
-//	RValue<SByte4> operator-=(const SByte4 &lhs, RValue<SByte4> rhs);
-//	RValue<SByte4> operator*=(const SByte4 &lhs, RValue<SByte4> rhs);
-//	RValue<SByte4> operator/=(const SByte4 &lhs, RValue<SByte4> rhs);
-//	RValue<SByte4> operator%=(const SByte4 &lhs, RValue<SByte4> rhs);
-//	RValue<SByte4> operator&=(const SByte4 &lhs, RValue<SByte4> rhs);
-//	RValue<SByte4> operator|=(const SByte4 &lhs, RValue<SByte4> rhs);
-//	RValue<SByte4> operator^=(const SByte4 &lhs, RValue<SByte4> rhs);
-//	RValue<SByte4> operator<<=(const SByte4 &lhs, RValue<SByte4> rhs);
-//	RValue<SByte4> operator>>=(const SByte4 &lhs, RValue<SByte4> rhs);
+//	RValue<SByte4> operator+=(SByte4 &lhs, RValue<SByte4> rhs);
+//	RValue<SByte4> operator-=(SByte4 &lhs, RValue<SByte4> rhs);
+//	RValue<SByte4> operator*=(SByte4 &lhs, RValue<SByte4> rhs);
+//	RValue<SByte4> operator/=(SByte4 &lhs, RValue<SByte4> rhs);
+//	RValue<SByte4> operator%=(SByte4 &lhs, RValue<SByte4> rhs);
+//	RValue<SByte4> operator&=(SByte4 &lhs, RValue<SByte4> rhs);
+//	RValue<SByte4> operator|=(SByte4 &lhs, RValue<SByte4> rhs);
+//	RValue<SByte4> operator^=(SByte4 &lhs, RValue<SByte4> rhs);
+//	RValue<SByte4> operator<<=(SByte4 &lhs, RValue<SByte4> rhs);
+//	RValue<SByte4> operator>>=(SByte4 &lhs, RValue<SByte4> rhs);
 //	RValue<SByte4> operator+(RValue<SByte4> val);
 //	RValue<SByte4> operator-(RValue<SByte4> val);
 //	RValue<SByte4> operator~(RValue<SByte4> val);
-//	RValue<SByte4> operator++(const SByte4 &val, int);   // Post-increment
-//	const SByte4 &operator++(const SByte4 &val);   // Pre-increment
-//	RValue<SByte4> operator--(const SByte4 &val, int);   // Post-decrement
-//	const SByte4 &operator--(const SByte4 &val);   // Pre-decrement
+//	RValue<SByte4> operator++(SByte4 &val, int);   // Post-increment
+//	const SByte4 &operator++(SByte4 &val);   // Pre-increment
+//	RValue<SByte4> operator--(SByte4 &val, int);   // Post-decrement
+//	const SByte4 &operator--(SByte4 &val);   // Pre-decrement
 
 	class Byte8 : public LValue<Byte8>
 	{
@@ -520,9 +520,9 @@
 		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;
+		RValue<Byte8> operator=(RValue<Byte8> rhs);
+		RValue<Byte8> operator=(const Byte8 &rhs);
+		RValue<Byte8> operator=(const Reference<Byte8> &rhs);
 
 		static Type *getType();
 	};
@@ -537,23 +537,23 @@
 	RValue<Byte8> operator^(RValue<Byte8> lhs, RValue<Byte8> rhs);
 //	RValue<Byte8> operator<<(RValue<Byte8> lhs, RValue<Byte8> rhs);
 //	RValue<Byte8> operator>>(RValue<Byte8> lhs, RValue<Byte8> rhs);
-	RValue<Byte8> operator+=(const Byte8 &lhs, RValue<Byte8> rhs);
-	RValue<Byte8> operator-=(const Byte8 &lhs, RValue<Byte8> rhs);
-//	RValue<Byte8> operator*=(const Byte8 &lhs, RValue<Byte8> rhs);
-//	RValue<Byte8> operator/=(const Byte8 &lhs, RValue<Byte8> rhs);
-//	RValue<Byte8> operator%=(const Byte8 &lhs, RValue<Byte8> rhs);
-	RValue<Byte8> operator&=(const Byte8 &lhs, RValue<Byte8> rhs);
-	RValue<Byte8> operator|=(const Byte8 &lhs, RValue<Byte8> rhs);
-	RValue<Byte8> operator^=(const Byte8 &lhs, RValue<Byte8> rhs);
-//	RValue<Byte8> operator<<=(const Byte8 &lhs, RValue<Byte8> rhs);
-//	RValue<Byte8> operator>>=(const Byte8 &lhs, RValue<Byte8> rhs);
+	RValue<Byte8> operator+=(Byte8 &lhs, RValue<Byte8> rhs);
+	RValue<Byte8> operator-=(Byte8 &lhs, RValue<Byte8> rhs);
+//	RValue<Byte8> operator*=(Byte8 &lhs, RValue<Byte8> rhs);
+//	RValue<Byte8> operator/=(Byte8 &lhs, RValue<Byte8> rhs);
+//	RValue<Byte8> operator%=(Byte8 &lhs, RValue<Byte8> rhs);
+	RValue<Byte8> operator&=(Byte8 &lhs, RValue<Byte8> rhs);
+	RValue<Byte8> operator|=(Byte8 &lhs, RValue<Byte8> rhs);
+	RValue<Byte8> operator^=(Byte8 &lhs, RValue<Byte8> rhs);
+//	RValue<Byte8> operator<<=(Byte8 &lhs, RValue<Byte8> rhs);
+//	RValue<Byte8> operator>>=(Byte8 &lhs, RValue<Byte8> rhs);
 //	RValue<Byte8> operator+(RValue<Byte8> val);
 //	RValue<Byte8> operator-(RValue<Byte8> val);
 	RValue<Byte8> operator~(RValue<Byte8> val);
-//	RValue<Byte8> operator++(const Byte8 &val, int);   // Post-increment
-//	const Byte8 &operator++(const Byte8 &val);   // Pre-increment
-//	RValue<Byte8> operator--(const Byte8 &val, int);   // Post-decrement
-//	const Byte8 &operator--(const Byte8 &val);   // Pre-decrement
+//	RValue<Byte8> operator++(Byte8 &val, int);   // Post-increment
+//	const Byte8 &operator++(Byte8 &val);   // Pre-increment
+//	RValue<Byte8> operator--(Byte8 &val, int);   // Post-decrement
+//	const Byte8 &operator--(Byte8 &val);   // Pre-decrement
 
 	RValue<Byte8> AddSat(RValue<Byte8> x, RValue<Byte8> y);
 	RValue<Byte8> SubSat(RValue<Byte8> x, RValue<Byte8> y);
@@ -573,9 +573,9 @@
 		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;
+		RValue<SByte8> operator=(RValue<SByte8> rhs);
+		RValue<SByte8> operator=(const SByte8 &rhs);
+		RValue<SByte8> operator=(const Reference<SByte8> &rhs);
 
 		static Type *getType();
 	};
@@ -590,23 +590,23 @@
 	RValue<SByte8> operator^(RValue<SByte8> lhs, RValue<SByte8> rhs);
 //	RValue<SByte8> operator<<(RValue<SByte8> lhs, RValue<SByte8> rhs);
 //	RValue<SByte8> operator>>(RValue<SByte8> lhs, RValue<SByte8> rhs);
-	RValue<SByte8> operator+=(const SByte8 &lhs, RValue<SByte8> rhs);
-	RValue<SByte8> operator-=(const SByte8 &lhs, RValue<SByte8> rhs);
-//	RValue<SByte8> operator*=(const SByte8 &lhs, RValue<SByte8> rhs);
-//	RValue<SByte8> operator/=(const SByte8 &lhs, RValue<SByte8> rhs);
-//	RValue<SByte8> operator%=(const SByte8 &lhs, RValue<SByte8> rhs);
-	RValue<SByte8> operator&=(const SByte8 &lhs, RValue<SByte8> rhs);
-	RValue<SByte8> operator|=(const SByte8 &lhs, RValue<SByte8> rhs);
-	RValue<SByte8> operator^=(const SByte8 &lhs, RValue<SByte8> rhs);
-//	RValue<SByte8> operator<<=(const SByte8 &lhs, RValue<SByte8> rhs);
-//	RValue<SByte8> operator>>=(const SByte8 &lhs, RValue<SByte8> rhs);
+	RValue<SByte8> operator+=(SByte8 &lhs, RValue<SByte8> rhs);
+	RValue<SByte8> operator-=(SByte8 &lhs, RValue<SByte8> rhs);
+//	RValue<SByte8> operator*=(SByte8 &lhs, RValue<SByte8> rhs);
+//	RValue<SByte8> operator/=(SByte8 &lhs, RValue<SByte8> rhs);
+//	RValue<SByte8> operator%=(SByte8 &lhs, RValue<SByte8> rhs);
+	RValue<SByte8> operator&=(SByte8 &lhs, RValue<SByte8> rhs);
+	RValue<SByte8> operator|=(SByte8 &lhs, RValue<SByte8> rhs);
+	RValue<SByte8> operator^=(SByte8 &lhs, RValue<SByte8> rhs);
+//	RValue<SByte8> operator<<=(SByte8 &lhs, RValue<SByte8> rhs);
+//	RValue<SByte8> operator>>=(SByte8 &lhs, RValue<SByte8> rhs);
 //	RValue<SByte8> operator+(RValue<SByte8> val);
 //	RValue<SByte8> operator-(RValue<SByte8> val);
 	RValue<SByte8> operator~(RValue<SByte8> val);
-//	RValue<SByte8> operator++(const SByte8 &val, int);   // Post-increment
-//	const SByte8 &operator++(const SByte8 &val);   // Pre-increment
-//	RValue<SByte8> operator--(const SByte8 &val, int);   // Post-decrement
-//	const SByte8 &operator--(const SByte8 &val);   // Pre-decrement
+//	RValue<SByte8> operator++(SByte8 &val, int);   // Post-increment
+//	const SByte8 &operator++(SByte8 &val);   // Pre-increment
+//	RValue<SByte8> operator--(SByte8 &val, int);   // Post-decrement
+//	const SByte8 &operator--(SByte8 &val);   // Pre-decrement
 
 	RValue<SByte8> AddSat(RValue<SByte8> x, RValue<SByte8> y);
 	RValue<SByte8> SubSat(RValue<SByte8> x, RValue<SByte8> y);
@@ -625,9 +625,9 @@
 		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;
+		RValue<Byte16> operator=(RValue<Byte16> rhs);
+		RValue<Byte16> operator=(const Byte16 &rhs);
+		RValue<Byte16> operator=(const Reference<Byte16> &rhs);
 
 		static Type *getType();
 	};
@@ -642,23 +642,23 @@
 //	RValue<Byte16> operator^(RValue<Byte16> lhs, RValue<Byte16> rhs);
 //	RValue<Byte16> operator<<(RValue<Byte16> lhs, RValue<Byte16> rhs);
 //	RValue<Byte16> operator>>(RValue<Byte16> lhs, RValue<Byte16> rhs);
-//	RValue<Byte16> operator+=(const Byte16 &lhs, RValue<Byte16> rhs);
-//	RValue<Byte16> operator-=(const Byte16 &lhs, RValue<Byte16> rhs);
-//	RValue<Byte16> operator*=(const Byte16 &lhs, RValue<Byte16> rhs);
-//	RValue<Byte16> operator/=(const Byte16 &lhs, RValue<Byte16> rhs);
-//	RValue<Byte16> operator%=(const Byte16 &lhs, RValue<Byte16> rhs);
-//	RValue<Byte16> operator&=(const Byte16 &lhs, RValue<Byte16> rhs);
-//	RValue<Byte16> operator|=(const Byte16 &lhs, RValue<Byte16> rhs);
-//	RValue<Byte16> operator^=(const Byte16 &lhs, RValue<Byte16> rhs);
-//	RValue<Byte16> operator<<=(const Byte16 &lhs, RValue<Byte16> rhs);
-//	RValue<Byte16> operator>>=(const Byte16 &lhs, RValue<Byte16> rhs);
+//	RValue<Byte16> operator+=(Byte16 &lhs, RValue<Byte16> rhs);
+//	RValue<Byte16> operator-=(Byte16 &lhs, RValue<Byte16> rhs);
+//	RValue<Byte16> operator*=(Byte16 &lhs, RValue<Byte16> rhs);
+//	RValue<Byte16> operator/=(Byte16 &lhs, RValue<Byte16> rhs);
+//	RValue<Byte16> operator%=(Byte16 &lhs, RValue<Byte16> rhs);
+//	RValue<Byte16> operator&=(Byte16 &lhs, RValue<Byte16> rhs);
+//	RValue<Byte16> operator|=(Byte16 &lhs, RValue<Byte16> rhs);
+//	RValue<Byte16> operator^=(Byte16 &lhs, RValue<Byte16> rhs);
+//	RValue<Byte16> operator<<=(Byte16 &lhs, RValue<Byte16> rhs);
+//	RValue<Byte16> operator>>=(Byte16 &lhs, RValue<Byte16> rhs);
 //	RValue<Byte16> operator+(RValue<Byte16> val);
 //	RValue<Byte16> operator-(RValue<Byte16> val);
 //	RValue<Byte16> operator~(RValue<Byte16> val);
-//	RValue<Byte16> operator++(const Byte16 &val, int);   // Post-increment
-//	const Byte16 &operator++(const Byte16 &val);   // Pre-increment
-//	RValue<Byte16> operator--(const Byte16 &val, int);   // Post-decrement
-//	const Byte16 &operator--(const Byte16 &val);   // Pre-decrement
+//	RValue<Byte16> operator++(Byte16 &val, int);   // Post-increment
+//	const Byte16 &operator++(Byte16 &val);   // Pre-increment
+//	RValue<Byte16> operator--(Byte16 &val, int);   // Post-decrement
+//	const Byte16 &operator--(Byte16 &val);   // Pre-decrement
 
 	class SByte16 : public LValue<SByte16>
 	{
@@ -669,9 +669,9 @@
 	//	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;
+	//	RValue<SByte16> operator=(RValue<SByte16> rhs);
+	//	RValue<SByte16> operator=(const SByte16 &rhs);
+	//	RValue<SByte16> operator=(const Reference<SByte16> &rhs);
 
 		static Type *getType();
 	};
@@ -686,23 +686,23 @@
 //	RValue<SByte16> operator^(RValue<SByte16> lhs, RValue<SByte16> rhs);
 //	RValue<SByte16> operator<<(RValue<SByte16> lhs, RValue<SByte16> rhs);
 //	RValue<SByte16> operator>>(RValue<SByte16> lhs, RValue<SByte16> rhs);
-//	RValue<SByte16> operator+=(const SByte16 &lhs, RValue<SByte16> rhs);
-//	RValue<SByte16> operator-=(const SByte16 &lhs, RValue<SByte16> rhs);
-//	RValue<SByte16> operator*=(const SByte16 &lhs, RValue<SByte16> rhs);
-//	RValue<SByte16> operator/=(const SByte16 &lhs, RValue<SByte16> rhs);
-//	RValue<SByte16> operator%=(const SByte16 &lhs, RValue<SByte16> rhs);
-//	RValue<SByte16> operator&=(const SByte16 &lhs, RValue<SByte16> rhs);
-//	RValue<SByte16> operator|=(const SByte16 &lhs, RValue<SByte16> rhs);
-//	RValue<SByte16> operator^=(const SByte16 &lhs, RValue<SByte16> rhs);
-//	RValue<SByte16> operator<<=(const SByte16 &lhs, RValue<SByte16> rhs);
-//	RValue<SByte16> operator>>=(const SByte16 &lhs, RValue<SByte16> rhs);
+//	RValue<SByte16> operator+=(SByte16 &lhs, RValue<SByte16> rhs);
+//	RValue<SByte16> operator-=(SByte16 &lhs, RValue<SByte16> rhs);
+//	RValue<SByte16> operator*=(SByte16 &lhs, RValue<SByte16> rhs);
+//	RValue<SByte16> operator/=(SByte16 &lhs, RValue<SByte16> rhs);
+//	RValue<SByte16> operator%=(SByte16 &lhs, RValue<SByte16> rhs);
+//	RValue<SByte16> operator&=(SByte16 &lhs, RValue<SByte16> rhs);
+//	RValue<SByte16> operator|=(SByte16 &lhs, RValue<SByte16> rhs);
+//	RValue<SByte16> operator^=(SByte16 &lhs, RValue<SByte16> rhs);
+//	RValue<SByte16> operator<<=(SByte16 &lhs, RValue<SByte16> rhs);
+//	RValue<SByte16> operator>>=(SByte16 &lhs, RValue<SByte16> rhs);
 //	RValue<SByte16> operator+(RValue<SByte16> val);
 //	RValue<SByte16> operator-(RValue<SByte16> val);
 //	RValue<SByte16> operator~(RValue<SByte16> val);
-//	RValue<SByte16> operator++(const SByte16 &val, int);   // Post-increment
-//	const SByte16 &operator++(const SByte16 &val);   // Pre-increment
-//	RValue<SByte16> operator--(const SByte16 &val, int);   // Post-decrement
-//	const SByte16 &operator--(const SByte16 &val);   // Pre-decrement
+//	RValue<SByte16> operator++(SByte16 &val, int);   // Post-increment
+//	const SByte16 &operator++(SByte16 &val);   // Pre-increment
+//	RValue<SByte16> operator--(SByte16 &val, int);   // Post-decrement
+//	const SByte16 &operator--(SByte16 &val);   // Pre-decrement
 
 	class Short2 : public LValue<Short2>
 	{
@@ -738,12 +738,12 @@
 		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;
+		RValue<Short4> operator=(RValue<Short4> rhs);
+		RValue<Short4> operator=(const Short4 &rhs);
+		RValue<Short4> operator=(const Reference<Short4> &rhs);
+		RValue<Short4> operator=(RValue<UShort4> rhs);
+		RValue<Short4> operator=(const UShort4 &rhs);
+		RValue<Short4> operator=(const Reference<UShort4> &rhs);
 
 		static Type *getType();
 	};
@@ -760,25 +760,25 @@
 	RValue<Short4> operator>>(RValue<Short4> lhs, unsigned char rhs);
 	RValue<Short4> operator<<(RValue<Short4> lhs, RValue<Long1> rhs);
 	RValue<Short4> operator>>(RValue<Short4> lhs, RValue<Long1> rhs);
-	RValue<Short4> operator+=(const Short4 &lhs, RValue<Short4> rhs);
-	RValue<Short4> operator-=(const Short4 &lhs, RValue<Short4> rhs);
-	RValue<Short4> operator*=(const Short4 &lhs, RValue<Short4> rhs);
-//	RValue<Short4> operator/=(const Short4 &lhs, RValue<Short4> rhs);
-//	RValue<Short4> operator%=(const Short4 &lhs, RValue<Short4> rhs);
-	RValue<Short4> operator&=(const Short4 &lhs, RValue<Short4> rhs);
-	RValue<Short4> operator|=(const Short4 &lhs, RValue<Short4> rhs);
-	RValue<Short4> operator^=(const Short4 &lhs, RValue<Short4> rhs);
-	RValue<Short4> operator<<=(const Short4 &lhs, unsigned char rhs);
-	RValue<Short4> operator>>=(const Short4 &lhs, unsigned char rhs);
-	RValue<Short4> operator<<=(const Short4 &lhs, RValue<Long1> rhs);
-	RValue<Short4> operator>>=(const Short4 &lhs, RValue<Long1> rhs);
+	RValue<Short4> operator+=(Short4 &lhs, RValue<Short4> rhs);
+	RValue<Short4> operator-=(Short4 &lhs, RValue<Short4> rhs);
+	RValue<Short4> operator*=(Short4 &lhs, RValue<Short4> rhs);
+//	RValue<Short4> operator/=(Short4 &lhs, RValue<Short4> rhs);
+//	RValue<Short4> operator%=(Short4 &lhs, RValue<Short4> rhs);
+	RValue<Short4> operator&=(Short4 &lhs, RValue<Short4> rhs);
+	RValue<Short4> operator|=(Short4 &lhs, RValue<Short4> rhs);
+	RValue<Short4> operator^=(Short4 &lhs, RValue<Short4> rhs);
+	RValue<Short4> operator<<=(Short4 &lhs, unsigned char rhs);
+	RValue<Short4> operator>>=(Short4 &lhs, unsigned char rhs);
+	RValue<Short4> operator<<=(Short4 &lhs, RValue<Long1> rhs);
+	RValue<Short4> operator>>=(Short4 &lhs, RValue<Long1> rhs);
 //	RValue<Short4> operator+(RValue<Short4> val);
 	RValue<Short4> operator-(RValue<Short4> val);
 	RValue<Short4> operator~(RValue<Short4> val);
-//	RValue<Short4> operator++(const Short4 &val, int);   // Post-increment
-//	const Short4 &operator++(const Short4 &val);   // Pre-increment
-//	RValue<Short4> operator--(const Short4 &val, int);   // Post-decrement
-//	const Short4 &operator--(const Short4 &val);   // Pre-decrement
+//	RValue<Short4> operator++(Short4 &val, int);   // Post-increment
+//	const Short4 &operator++(Short4 &val);   // Pre-increment
+//	RValue<Short4> operator--(Short4 &val, int);   // Post-decrement
+//	const Short4 &operator--(Short4 &val);   // Pre-decrement
 //	RValue<Bool> operator<(RValue<Short4> lhs, RValue<Short4> rhs);
 //	RValue<Bool> operator<=(RValue<Short4> lhs, RValue<Short4> rhs);
 //	RValue<Bool> operator>(RValue<Short4> lhs, RValue<Short4> rhs);
@@ -818,12 +818,12 @@
 		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;
+		RValue<UShort4> operator=(RValue<UShort4> rhs);
+		RValue<UShort4> operator=(const UShort4 &rhs);
+		RValue<UShort4> operator=(const Reference<UShort4> &rhs);
+		RValue<UShort4> operator=(RValue<Short4> rhs);
+		RValue<UShort4> operator=(const Short4 &rhs);
+		RValue<UShort4> operator=(const Reference<Short4> &rhs);
 
 		static Type *getType();
 	};
@@ -840,25 +840,25 @@
 	RValue<UShort4> operator>>(RValue<UShort4> lhs, unsigned char rhs);
 	RValue<UShort4> operator<<(RValue<UShort4> lhs, RValue<Long1> rhs);
 	RValue<UShort4> operator>>(RValue<UShort4> lhs, RValue<Long1> rhs);
-//	RValue<UShort4> operator+=(const UShort4 &lhs, RValue<UShort4> rhs);
-//	RValue<UShort4> operator-=(const UShort4 &lhs, RValue<UShort4> rhs);
-//	RValue<UShort4> operator*=(const UShort4 &lhs, RValue<UShort4> rhs);
-//	RValue<UShort4> operator/=(const UShort4 &lhs, RValue<UShort4> rhs);
-//	RValue<UShort4> operator%=(const UShort4 &lhs, RValue<UShort4> rhs);
-//	RValue<UShort4> operator&=(const UShort4 &lhs, RValue<UShort4> rhs);
-//	RValue<UShort4> operator|=(const UShort4 &lhs, RValue<UShort4> rhs);
-//	RValue<UShort4> operator^=(const UShort4 &lhs, RValue<UShort4> rhs);
-	RValue<UShort4> operator<<=(const UShort4 &lhs, unsigned char rhs);
-	RValue<UShort4> operator>>=(const UShort4 &lhs, unsigned char rhs);
-	RValue<UShort4> operator<<=(const UShort4 &lhs, RValue<Long1> rhs);
-	RValue<UShort4> operator>>=(const UShort4 &lhs, RValue<Long1> rhs);
+//	RValue<UShort4> operator+=(UShort4 &lhs, RValue<UShort4> rhs);
+//	RValue<UShort4> operator-=(UShort4 &lhs, RValue<UShort4> rhs);
+//	RValue<UShort4> operator*=(UShort4 &lhs, RValue<UShort4> rhs);
+//	RValue<UShort4> operator/=(UShort4 &lhs, RValue<UShort4> rhs);
+//	RValue<UShort4> operator%=(UShort4 &lhs, RValue<UShort4> rhs);
+//	RValue<UShort4> operator&=(UShort4 &lhs, RValue<UShort4> rhs);
+//	RValue<UShort4> operator|=(UShort4 &lhs, RValue<UShort4> rhs);
+//	RValue<UShort4> operator^=(UShort4 &lhs, RValue<UShort4> rhs);
+	RValue<UShort4> operator<<=(UShort4 &lhs, unsigned char rhs);
+	RValue<UShort4> operator>>=(UShort4 &lhs, unsigned char rhs);
+	RValue<UShort4> operator<<=(UShort4 &lhs, RValue<Long1> rhs);
+	RValue<UShort4> operator>>=(UShort4 &lhs, RValue<Long1> rhs);
 //	RValue<UShort4> operator+(RValue<UShort4> val);
 //	RValue<UShort4> operator-(RValue<UShort4> val);
 	RValue<UShort4> operator~(RValue<UShort4> val);
-//	RValue<UShort4> operator++(const UShort4 &val, int);   // Post-increment
-//	const UShort4 &operator++(const UShort4 &val);   // Pre-increment
-//	RValue<UShort4> operator--(const UShort4 &val, int);   // Post-decrement
-//	const UShort4 &operator--(const UShort4 &val);   // Pre-decrement
+//	RValue<UShort4> operator++(UShort4 &val, int);   // Post-increment
+//	const UShort4 &operator++(UShort4 &val);   // Pre-increment
+//	RValue<UShort4> operator--(UShort4 &val, int);   // Post-decrement
+//	const UShort4 &operator--(UShort4 &val);   // Pre-decrement
 
 	RValue<UShort4> Max(RValue<UShort4> x, RValue<UShort4> y);
 	RValue<UShort4> Min(RValue<UShort4> x, RValue<UShort4> y);
@@ -878,9 +878,9 @@
 		Short8(const Reference<Short8> &rhs);
 		Short8(RValue<Short4> lo, RValue<Short4> hi);
 
-	//	RValue<Short8> operator=(RValue<Short8> rhs) const;
-	//	RValue<Short8> operator=(const Short8 &rhs) const;
-	//	RValue<Short8> operator=(const Reference<Short8> &rhs) const;
+	//	RValue<Short8> operator=(RValue<Short8> rhs);
+	//	RValue<Short8> operator=(const Short8 &rhs);
+	//	RValue<Short8> operator=(const Reference<Short8> &rhs);
 
 		static Type *getType();
 	};
@@ -897,23 +897,23 @@
 	RValue<Short8> operator>>(RValue<Short8> lhs, unsigned char rhs);
 //	RValue<Short8> operator<<(RValue<Short8> lhs, RValue<Short8> rhs);
 //	RValue<Short8> operator>>(RValue<Short8> lhs, RValue<Short8> rhs);
-//	RValue<Short8> operator+=(const Short8 &lhs, RValue<Short8> rhs);
-//	RValue<Short8> operator-=(const Short8 &lhs, RValue<Short8> rhs);
-//	RValue<Short8> operator*=(const Short8 &lhs, RValue<Short8> rhs);
-//	RValue<Short8> operator/=(const Short8 &lhs, RValue<Short8> rhs);
-//	RValue<Short8> operator%=(const Short8 &lhs, RValue<Short8> rhs);
-//	RValue<Short8> operator&=(const Short8 &lhs, RValue<Short8> rhs);
-//	RValue<Short8> operator|=(const Short8 &lhs, RValue<Short8> rhs);
-//	RValue<Short8> operator^=(const Short8 &lhs, RValue<Short8> rhs);
-//	RValue<Short8> operator<<=(const Short8 &lhs, RValue<Short8> rhs);
-//	RValue<Short8> operator>>=(const Short8 &lhs, RValue<Short8> rhs);
+//	RValue<Short8> operator+=(Short8 &lhs, RValue<Short8> rhs);
+//	RValue<Short8> operator-=(Short8 &lhs, RValue<Short8> rhs);
+//	RValue<Short8> operator*=(Short8 &lhs, RValue<Short8> rhs);
+//	RValue<Short8> operator/=(Short8 &lhs, RValue<Short8> rhs);
+//	RValue<Short8> operator%=(Short8 &lhs, RValue<Short8> rhs);
+//	RValue<Short8> operator&=(Short8 &lhs, RValue<Short8> rhs);
+//	RValue<Short8> operator|=(Short8 &lhs, RValue<Short8> rhs);
+//	RValue<Short8> operator^=(Short8 &lhs, RValue<Short8> rhs);
+//	RValue<Short8> operator<<=(Short8 &lhs, RValue<Short8> rhs);
+//	RValue<Short8> operator>>=(Short8 &lhs, RValue<Short8> rhs);
 //	RValue<Short8> operator+(RValue<Short8> val);
 //	RValue<Short8> operator-(RValue<Short8> val);
 //	RValue<Short8> operator~(RValue<Short8> val);
-//	RValue<Short8> operator++(const Short8 &val, int);   // Post-increment
-//	const Short8 &operator++(const Short8 &val);   // Pre-increment
-//	RValue<Short8> operator--(const Short8 &val, int);   // Post-decrement
-//	const Short8 &operator--(const Short8 &val);   // Pre-decrement
+//	RValue<Short8> operator++(Short8 &val, int);   // Post-increment
+//	const Short8 &operator++(Short8 &val);   // Pre-increment
+//	RValue<Short8> operator--(Short8 &val, int);   // Post-decrement
+//	const Short8 &operator--(Short8 &val);   // Pre-decrement
 //	RValue<Bool> operator<(RValue<Short8> lhs, RValue<Short8> rhs);
 //	RValue<Bool> operator<=(RValue<Short8> lhs, RValue<Short8> rhs);
 //	RValue<Bool> operator>(RValue<Short8> lhs, RValue<Short8> rhs);
@@ -935,9 +935,9 @@
 		UShort8(const Reference<UShort8> &rhs);
 		UShort8(RValue<UShort4> lo, RValue<UShort4> hi);
 
-		RValue<UShort8> operator=(RValue<UShort8> rhs) const;
-		RValue<UShort8> operator=(const UShort8 &rhs) const;
-		RValue<UShort8> operator=(const Reference<UShort8> &rhs) const;
+		RValue<UShort8> operator=(RValue<UShort8> rhs);
+		RValue<UShort8> operator=(const UShort8 &rhs);
+		RValue<UShort8> operator=(const Reference<UShort8> &rhs);
 
 		static Type *getType();
 	};
@@ -954,23 +954,23 @@
 	RValue<UShort8> operator>>(RValue<UShort8> lhs, unsigned char rhs);
 //	RValue<UShort8> operator<<(RValue<UShort8> lhs, RValue<UShort8> rhs);
 //	RValue<UShort8> operator>>(RValue<UShort8> lhs, RValue<UShort8> rhs);
-	RValue<UShort8> operator+=(const UShort8 &lhs, RValue<UShort8> rhs);
-//	RValue<UShort8> operator-=(const UShort8 &lhs, RValue<UShort8> rhs);
-//	RValue<UShort8> operator*=(const UShort8 &lhs, RValue<UShort8> rhs);
-//	RValue<UShort8> operator/=(const UShort8 &lhs, RValue<UShort8> rhs);
-//	RValue<UShort8> operator%=(const UShort8 &lhs, RValue<UShort8> rhs);
-//	RValue<UShort8> operator&=(const UShort8 &lhs, RValue<UShort8> rhs);
-//	RValue<UShort8> operator|=(const UShort8 &lhs, RValue<UShort8> rhs);
-//	RValue<UShort8> operator^=(const UShort8 &lhs, RValue<UShort8> rhs);
-//	RValue<UShort8> operator<<=(const UShort8 &lhs, RValue<UShort8> rhs);
-//	RValue<UShort8> operator>>=(const UShort8 &lhs, RValue<UShort8> rhs);
+	RValue<UShort8> operator+=(UShort8 &lhs, RValue<UShort8> rhs);
+//	RValue<UShort8> operator-=(UShort8 &lhs, RValue<UShort8> rhs);
+//	RValue<UShort8> operator*=(UShort8 &lhs, RValue<UShort8> rhs);
+//	RValue<UShort8> operator/=(UShort8 &lhs, RValue<UShort8> rhs);
+//	RValue<UShort8> operator%=(UShort8 &lhs, RValue<UShort8> rhs);
+//	RValue<UShort8> operator&=(UShort8 &lhs, RValue<UShort8> rhs);
+//	RValue<UShort8> operator|=(UShort8 &lhs, RValue<UShort8> rhs);
+//	RValue<UShort8> operator^=(UShort8 &lhs, RValue<UShort8> rhs);
+//	RValue<UShort8> operator<<=(UShort8 &lhs, RValue<UShort8> rhs);
+//	RValue<UShort8> operator>>=(UShort8 &lhs, RValue<UShort8> rhs);
 //	RValue<UShort8> operator+(RValue<UShort8> val);
 //	RValue<UShort8> operator-(RValue<UShort8> val);
 	RValue<UShort8> operator~(RValue<UShort8> val);
-//	RValue<UShort8> operator++(const UShort8 &val, int);   // Post-increment
-//	const UShort8 &operator++(const UShort8 &val);   // Pre-increment
-//	RValue<UShort8> operator--(const UShort8 &val, int);   // Post-decrement
-//	const UShort8 &operator--(const UShort8 &val);   // Pre-decrement
+//	RValue<UShort8> operator++(UShort8 &val, int);   // Post-increment
+//	const UShort8 &operator++(UShort8 &val);   // Pre-increment
+//	RValue<UShort8> operator--(UShort8 &val, int);   // Post-decrement
+//	const UShort8 &operator--(UShort8 &val);   // Pre-decrement
 //	RValue<Bool> operator<(RValue<UShort8> lhs, RValue<UShort8> rhs);
 //	RValue<Bool> operator<=(RValue<UShort8> lhs, RValue<UShort8> rhs);
 //	RValue<Bool> operator>(RValue<UShort8> lhs, RValue<UShort8> rhs);
@@ -1003,13 +1003,13 @@
 		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;
+		RValue<Int> operator=(int rhs);
+		RValue<Int> operator=(RValue<Int> rhs);
+		RValue<Int> operator=(RValue<UInt> rhs);
+		RValue<Int> operator=(const Int &rhs);
+		RValue<Int> operator=(const UInt &rhs);
+		RValue<Int> operator=(const Reference<Int> &rhs);
+		RValue<Int> operator=(const Reference<UInt> &rhs);
 
 		static Type *getType();
 	};
@@ -1024,23 +1024,23 @@
 	RValue<Int> operator^(RValue<Int> lhs, RValue<Int> rhs);
 	RValue<Int> operator<<(RValue<Int> lhs, RValue<Int> rhs);
 	RValue<Int> operator>>(RValue<Int> lhs, RValue<Int> rhs);
-	RValue<Int> operator+=(const Int &lhs, RValue<Int> rhs);
-	RValue<Int> operator-=(const Int &lhs, RValue<Int> rhs);
-	RValue<Int> operator*=(const Int &lhs, RValue<Int> rhs);
-	RValue<Int> operator/=(const Int &lhs, RValue<Int> rhs);
-	RValue<Int> operator%=(const Int &lhs, RValue<Int> rhs);
-	RValue<Int> operator&=(const Int &lhs, RValue<Int> rhs);
-	RValue<Int> operator|=(const Int &lhs, RValue<Int> rhs);
-	RValue<Int> operator^=(const Int &lhs, RValue<Int> rhs);
-	RValue<Int> operator<<=(const Int &lhs, RValue<Int> rhs);
-	RValue<Int> operator>>=(const Int &lhs, RValue<Int> rhs);
+	RValue<Int> operator+=(Int &lhs, RValue<Int> rhs);
+	RValue<Int> operator-=(Int &lhs, RValue<Int> rhs);
+	RValue<Int> operator*=(Int &lhs, RValue<Int> rhs);
+	RValue<Int> operator/=(Int &lhs, RValue<Int> rhs);
+	RValue<Int> operator%=(Int &lhs, RValue<Int> rhs);
+	RValue<Int> operator&=(Int &lhs, RValue<Int> rhs);
+	RValue<Int> operator|=(Int &lhs, RValue<Int> rhs);
+	RValue<Int> operator^=(Int &lhs, RValue<Int> rhs);
+	RValue<Int> operator<<=(Int &lhs, RValue<Int> rhs);
+	RValue<Int> operator>>=(Int &lhs, RValue<Int> rhs);
 	RValue<Int> operator+(RValue<Int> val);
 	RValue<Int> operator-(RValue<Int> val);
 	RValue<Int> operator~(RValue<Int> val);
-	RValue<Int> operator++(const Int &val, int);   // Post-increment
-	const Int &operator++(const Int &val);   // Pre-increment
-	RValue<Int> operator--(const Int &val, int);   // Post-decrement
-	const Int &operator--(const Int &val);   // Pre-decrement
+	RValue<Int> operator++(Int &val, int);   // Post-increment
+	const Int &operator++(Int &val);   // Pre-increment
+	RValue<Int> operator--(Int &val, int);   // Post-decrement
+	const Int &operator--(Int &val);   // Pre-decrement
 	RValue<Bool> operator<(RValue<Int> lhs, RValue<Int> rhs);
 	RValue<Bool> operator<=(RValue<Int> lhs, RValue<Int> rhs);
 	RValue<Bool> operator>(RValue<Int> lhs, RValue<Int> rhs);
@@ -1073,13 +1073,13 @@
 	//	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;
+		RValue<Long> operator=(int64_t rhs);
+		RValue<Long> operator=(RValue<Long> rhs);
+	//	RValue<Long> operator=(RValue<ULong> rhs);
+		RValue<Long> operator=(const Long &rhs);
+		RValue<Long> operator=(const Reference<Long> &rhs);
+	//	RValue<Long> operator=(const ULong &rhs);
+	//	RValue<Long> operator=(const Reference<ULong> &rhs);
 
 		static Type *getType();
 	};
@@ -1094,23 +1094,23 @@
 //	RValue<Long> operator^(RValue<Long> lhs, RValue<Long> rhs);
 //	RValue<Long> operator<<(RValue<Long> lhs, RValue<Long> rhs);
 //	RValue<Long> operator>>(RValue<Long> lhs, RValue<Long> rhs);
-	RValue<Long> operator+=(const Long &lhs, RValue<Long> rhs);
-	RValue<Long> operator-=(const Long &lhs, RValue<Long> rhs);
-//	RValue<Long> operator*=(const Long &lhs, RValue<Long> rhs);
-//	RValue<Long> operator/=(const Long &lhs, RValue<Long> rhs);
-//	RValue<Long> operator%=(const Long &lhs, RValue<Long> rhs);
-//	RValue<Long> operator&=(const Long &lhs, RValue<Long> rhs);
-//	RValue<Long> operator|=(const Long &lhs, RValue<Long> rhs);
-//	RValue<Long> operator^=(const Long &lhs, RValue<Long> rhs);
-//	RValue<Long> operator<<=(const Long &lhs, RValue<Long> rhs);
-//	RValue<Long> operator>>=(const Long &lhs, RValue<Long> rhs);
+	RValue<Long> operator+=(Long &lhs, RValue<Long> rhs);
+	RValue<Long> operator-=(Long &lhs, RValue<Long> rhs);
+//	RValue<Long> operator*=(Long &lhs, RValue<Long> rhs);
+//	RValue<Long> operator/=(Long &lhs, RValue<Long> rhs);
+//	RValue<Long> operator%=(Long &lhs, RValue<Long> rhs);
+//	RValue<Long> operator&=(Long &lhs, RValue<Long> rhs);
+//	RValue<Long> operator|=(Long &lhs, RValue<Long> rhs);
+//	RValue<Long> operator^=(Long &lhs, RValue<Long> rhs);
+//	RValue<Long> operator<<=(Long &lhs, RValue<Long> rhs);
+//	RValue<Long> operator>>=(Long &lhs, RValue<Long> rhs);
 //	RValue<Long> operator+(RValue<Long> val);
 //	RValue<Long> operator-(RValue<Long> val);
 //	RValue<Long> operator~(RValue<Long> val);
-//	RValue<Long> operator++(const Long &val, int);   // Post-increment
-//	const Long &operator++(const Long &val);   // Pre-increment
-//	RValue<Long> operator--(const Long &val, int);   // Post-decrement
-//	const Long &operator--(const Long &val);   // Pre-decrement
+//	RValue<Long> operator++(Long &val, int);   // Post-increment
+//	const Long &operator++(Long &val);   // Pre-increment
+//	RValue<Long> operator--(Long &val, int);   // Post-decrement
+//	const Long &operator--(Long &val);   // Pre-decrement
 //	RValue<Bool> operator<(RValue<Long> lhs, RValue<Long> rhs);
 //	RValue<Bool> operator<=(RValue<Long> lhs, RValue<Long> rhs);
 //	RValue<Bool> operator>(RValue<Long> lhs, RValue<Long> rhs);
@@ -1141,13 +1141,13 @@
 	//	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;
+	//	RValue<Long1> operator=(qword rhs);
+	//	RValue<Long1> operator=(RValue<Long1> rhs);
+	//	RValue<Long1> operator=(RValue<ULong1> rhs);
+	//	RValue<Long1> operator=(const Long1 &rhs);
+	//	RValue<Long1> operator=(const Reference<Long1> &rhs);
+	//	RValue<Long1> operator=(const ULong1 &rhs);
+	//	RValue<Long1> operator=(const Reference<ULong1> &rhs);
 
 		static Type *getType();
 	};
@@ -1162,23 +1162,23 @@
 //	RValue<Long1> operator^(RValue<Long1> lhs, RValue<Long1> rhs);
 //	RValue<Long1> operator<<(RValue<Long1> lhs, RValue<Long1> rhs);
 //	RValue<Long1> operator>>(RValue<Long1> lhs, RValue<Long1> rhs);
-//	RValue<Long1> operator+=(const Long1 &lhs, RValue<Long1> rhs);
-//	RValue<Long1> operator-=(const Long1 &lhs, RValue<Long1> rhs);
-//	RValue<Long1> operator*=(const Long1 &lhs, RValue<Long1> rhs);
-//	RValue<Long1> operator/=(const Long1 &lhs, RValue<Long1> rhs);
-//	RValue<Long1> operator%=(const Long1 &lhs, RValue<Long1> rhs);
-//	RValue<Long1> operator&=(const Long1 &lhs, RValue<Long1> rhs);
-//	RValue<Long1> operator|=(const Long1 &lhs, RValue<Long1> rhs);
-//	RValue<Long1> operator^=(const Long1 &lhs, RValue<Long1> rhs);
-//	RValue<Long1> operator<<=(const Long1 &lhs, RValue<Long1> rhs);
-//	RValue<Long1> operator>>=(const Long1 &lhs, RValue<Long1> rhs);
+//	RValue<Long1> operator+=(Long1 &lhs, RValue<Long1> rhs);
+//	RValue<Long1> operator-=(Long1 &lhs, RValue<Long1> rhs);
+//	RValue<Long1> operator*=(Long1 &lhs, RValue<Long1> rhs);
+//	RValue<Long1> operator/=(Long1 &lhs, RValue<Long1> rhs);
+//	RValue<Long1> operator%=(Long1 &lhs, RValue<Long1> rhs);
+//	RValue<Long1> operator&=(Long1 &lhs, RValue<Long1> rhs);
+//	RValue<Long1> operator|=(Long1 &lhs, RValue<Long1> rhs);
+//	RValue<Long1> operator^=(Long1 &lhs, RValue<Long1> rhs);
+//	RValue<Long1> operator<<=(Long1 &lhs, RValue<Long1> rhs);
+//	RValue<Long1> operator>>=(Long1 &lhs, RValue<Long1> rhs);
 //	RValue<Long1> operator+(RValue<Long1> val);
 //	RValue<Long1> operator-(RValue<Long1> val);
 //	RValue<Long1> operator~(RValue<Long1> val);
-//	RValue<Long1> operator++(const Long1 &val, int);   // Post-increment
-//	const Long1 &operator++(const Long1 &val);   // Pre-increment
-//	RValue<Long1> operator--(const Long1 &val, int);   // Post-decrement
-//	const Long1 &operator--(const Long1 &val);   // Pre-decrement
+//	RValue<Long1> operator++(Long1 &val, int);   // Post-increment
+//	const Long1 &operator++(Long1 &val);   // Pre-increment
+//	RValue<Long1> operator--(Long1 &val, int);   // Post-decrement
+//	const Long1 &operator--(Long1 &val);   // Pre-decrement
 //	RValue<Bool> operator<(RValue<Long1> lhs, RValue<Long1> rhs);
 //	RValue<Bool> operator<=(RValue<Long1> lhs, RValue<Long1> rhs);
 //	RValue<Bool> operator>(RValue<Long1> lhs, RValue<Long1> rhs);
@@ -1207,13 +1207,13 @@
 		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;
+		RValue<UInt> operator=(unsigned int rhs);
+		RValue<UInt> operator=(RValue<UInt> rhs);
+		RValue<UInt> operator=(RValue<Int> rhs);
+		RValue<UInt> operator=(const UInt &rhs);
+		RValue<UInt> operator=(const Int &rhs);
+		RValue<UInt> operator=(const Reference<UInt> &rhs);
+		RValue<UInt> operator=(const Reference<Int> &rhs);
 
 		static Type *getType();
 	};
@@ -1228,23 +1228,23 @@
 	RValue<UInt> operator^(RValue<UInt> lhs, RValue<UInt> rhs);
 	RValue<UInt> operator<<(RValue<UInt> lhs, RValue<UInt> rhs);
 	RValue<UInt> operator>>(RValue<UInt> lhs, RValue<UInt> rhs);
-	RValue<UInt> operator+=(const UInt &lhs, RValue<UInt> rhs);
-	RValue<UInt> operator-=(const UInt &lhs, RValue<UInt> rhs);
-	RValue<UInt> operator*=(const UInt &lhs, RValue<UInt> rhs);
-	RValue<UInt> operator/=(const UInt &lhs, RValue<UInt> rhs);
-	RValue<UInt> operator%=(const UInt &lhs, RValue<UInt> rhs);
-	RValue<UInt> operator&=(const UInt &lhs, RValue<UInt> rhs);
-	RValue<UInt> operator|=(const UInt &lhs, RValue<UInt> rhs);
-	RValue<UInt> operator^=(const UInt &lhs, RValue<UInt> rhs);
-	RValue<UInt> operator<<=(const UInt &lhs, RValue<UInt> rhs);
-	RValue<UInt> operator>>=(const UInt &lhs, RValue<UInt> rhs);
+	RValue<UInt> operator+=(UInt &lhs, RValue<UInt> rhs);
+	RValue<UInt> operator-=(UInt &lhs, RValue<UInt> rhs);
+	RValue<UInt> operator*=(UInt &lhs, RValue<UInt> rhs);
+	RValue<UInt> operator/=(UInt &lhs, RValue<UInt> rhs);
+	RValue<UInt> operator%=(UInt &lhs, RValue<UInt> rhs);
+	RValue<UInt> operator&=(UInt &lhs, RValue<UInt> rhs);
+	RValue<UInt> operator|=(UInt &lhs, RValue<UInt> rhs);
+	RValue<UInt> operator^=(UInt &lhs, RValue<UInt> rhs);
+	RValue<UInt> operator<<=(UInt &lhs, RValue<UInt> rhs);
+	RValue<UInt> operator>>=(UInt &lhs, RValue<UInt> rhs);
 	RValue<UInt> operator+(RValue<UInt> val);
 	RValue<UInt> operator-(RValue<UInt> val);
 	RValue<UInt> operator~(RValue<UInt> val);
-	RValue<UInt> operator++(const UInt &val, int);   // Post-increment
-	const UInt &operator++(const UInt &val);   // Pre-increment
-	RValue<UInt> operator--(const UInt &val, int);   // Post-decrement
-	const UInt &operator--(const UInt &val);   // Pre-decrement
+	RValue<UInt> operator++(UInt &val, int);   // Post-increment
+	const UInt &operator++(UInt &val);   // Pre-increment
+	RValue<UInt> operator--(UInt &val, int);   // Post-decrement
+	const UInt &operator--(UInt &val);   // Pre-decrement
 	RValue<Bool> operator<(RValue<UInt> lhs, RValue<UInt> rhs);
 	RValue<Bool> operator<=(RValue<UInt> lhs, RValue<UInt> rhs);
 	RValue<Bool> operator>(RValue<UInt> lhs, RValue<UInt> rhs);
@@ -1270,9 +1270,9 @@
 		Int2(const Reference<Int2> &rhs);
 		Int2(RValue<Int> lo, RValue<Int> hi);
 
-		RValue<Int2> operator=(RValue<Int2> rhs) const;
-		RValue<Int2> operator=(const Int2 &rhs) const;
-		RValue<Int2> operator=(const Reference<Int2> &rhs) const;
+		RValue<Int2> operator=(RValue<Int2> rhs);
+		RValue<Int2> operator=(const Int2 &rhs);
+		RValue<Int2> operator=(const Reference<Int2> &rhs);
 
 		static Type *getType();
 	};
@@ -1289,25 +1289,25 @@
 	RValue<Int2> operator>>(RValue<Int2> lhs, unsigned char rhs);
 	RValue<Int2> operator<<(RValue<Int2> lhs, RValue<Long1> rhs);
 	RValue<Int2> operator>>(RValue<Int2> lhs, RValue<Long1> rhs);
-	RValue<Int2> operator+=(const Int2 &lhs, RValue<Int2> rhs);
-	RValue<Int2> operator-=(const Int2 &lhs, RValue<Int2> rhs);
-//	RValue<Int2> operator*=(const Int2 &lhs, RValue<Int2> rhs);
-//	RValue<Int2> operator/=(const Int2 &lhs, RValue<Int2> rhs);
-//	RValue<Int2> operator%=(const Int2 &lhs, RValue<Int2> rhs);
-	RValue<Int2> operator&=(const Int2 &lhs, RValue<Int2> rhs);
-	RValue<Int2> operator|=(const Int2 &lhs, RValue<Int2> rhs);
-	RValue<Int2> operator^=(const Int2 &lhs, RValue<Int2> rhs);
-	RValue<Int2> operator<<=(const Int2 &lhs, unsigned char rhs);
-	RValue<Int2> operator>>=(const Int2 &lhs, unsigned char rhs);
-	RValue<Int2> operator<<=(const Int2 &lhs, RValue<Long1> rhs);
-	RValue<Int2> operator>>=(const Int2 &lhs, RValue<Long1> rhs);
+	RValue<Int2> operator+=(Int2 &lhs, RValue<Int2> rhs);
+	RValue<Int2> operator-=(Int2 &lhs, RValue<Int2> rhs);
+//	RValue<Int2> operator*=(Int2 &lhs, RValue<Int2> rhs);
+//	RValue<Int2> operator/=(Int2 &lhs, RValue<Int2> rhs);
+//	RValue<Int2> operator%=(Int2 &lhs, RValue<Int2> rhs);
+	RValue<Int2> operator&=(Int2 &lhs, RValue<Int2> rhs);
+	RValue<Int2> operator|=(Int2 &lhs, RValue<Int2> rhs);
+	RValue<Int2> operator^=(Int2 &lhs, RValue<Int2> rhs);
+	RValue<Int2> operator<<=(Int2 &lhs, unsigned char rhs);
+	RValue<Int2> operator>>=(Int2 &lhs, unsigned char rhs);
+	RValue<Int2> operator<<=(Int2 &lhs, RValue<Long1> rhs);
+	RValue<Int2> operator>>=(Int2 &lhs, RValue<Long1> rhs);
 //	RValue<Int2> operator+(RValue<Int2> val);
 //	RValue<Int2> operator-(RValue<Int2> val);
 	RValue<Int2> operator~(RValue<Int2> val);
-//	RValue<Int2> operator++(const Int2 &val, int);   // Post-increment
-//	const Int2 &operator++(const Int2 &val);   // Pre-increment
-//	RValue<Int2> operator--(const Int2 &val, int);   // Post-decrement
-//	const Int2 &operator--(const Int2 &val);   // Pre-decrement
+//	RValue<Int2> operator++(Int2 &val, int);   // Post-increment
+//	const Int2 &operator++(Int2 &val);   // Pre-increment
+//	RValue<Int2> operator--(Int2 &val, int);   // Post-decrement
+//	const Int2 &operator--(Int2 &val);   // Pre-decrement
 //	RValue<Bool> operator<(RValue<Int2> lhs, RValue<Int2> rhs);
 //	RValue<Bool> operator<=(RValue<Int2> lhs, RValue<Int2> rhs);
 //	RValue<Bool> operator>(RValue<Int2> lhs, RValue<Int2> rhs);
@@ -1330,9 +1330,9 @@
 		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;
+		RValue<UInt2> operator=(RValue<UInt2> rhs);
+		RValue<UInt2> operator=(const UInt2 &rhs);
+		RValue<UInt2> operator=(const Reference<UInt2> &rhs);
 
 		static Type *getType();
 	};
@@ -1349,25 +1349,25 @@
 	RValue<UInt2> operator>>(RValue<UInt2> lhs, unsigned char rhs);
 	RValue<UInt2> operator<<(RValue<UInt2> lhs, RValue<Long1> rhs);
 	RValue<UInt2> operator>>(RValue<UInt2> lhs, RValue<Long1> rhs);
-	RValue<UInt2> operator+=(const UInt2 &lhs, RValue<UInt2> rhs);
-	RValue<UInt2> operator-=(const UInt2 &lhs, RValue<UInt2> rhs);
-//	RValue<UInt2> operator*=(const UInt2 &lhs, RValue<UInt2> rhs);
-//	RValue<UInt2> operator/=(const UInt2 &lhs, RValue<UInt2> rhs);
-//	RValue<UInt2> operator%=(const UInt2 &lhs, RValue<UInt2> rhs);
-	RValue<UInt2> operator&=(const UInt2 &lhs, RValue<UInt2> rhs);
-	RValue<UInt2> operator|=(const UInt2 &lhs, RValue<UInt2> rhs);
-	RValue<UInt2> operator^=(const UInt2 &lhs, RValue<UInt2> rhs);
-	RValue<UInt2> operator<<=(const UInt2 &lhs, unsigned char rhs);
-	RValue<UInt2> operator>>=(const UInt2 &lhs, unsigned char rhs);
-	RValue<UInt2> operator<<=(const UInt2 &lhs, RValue<Long1> rhs);
-	RValue<UInt2> operator>>=(const UInt2 &lhs, RValue<Long1> rhs);
+	RValue<UInt2> operator+=(UInt2 &lhs, RValue<UInt2> rhs);
+	RValue<UInt2> operator-=(UInt2 &lhs, RValue<UInt2> rhs);
+//	RValue<UInt2> operator*=(UInt2 &lhs, RValue<UInt2> rhs);
+//	RValue<UInt2> operator/=(UInt2 &lhs, RValue<UInt2> rhs);
+//	RValue<UInt2> operator%=(UInt2 &lhs, RValue<UInt2> rhs);
+	RValue<UInt2> operator&=(UInt2 &lhs, RValue<UInt2> rhs);
+	RValue<UInt2> operator|=(UInt2 &lhs, RValue<UInt2> rhs);
+	RValue<UInt2> operator^=(UInt2 &lhs, RValue<UInt2> rhs);
+	RValue<UInt2> operator<<=(UInt2 &lhs, unsigned char rhs);
+	RValue<UInt2> operator>>=(UInt2 &lhs, unsigned char rhs);
+	RValue<UInt2> operator<<=(UInt2 &lhs, RValue<Long1> rhs);
+	RValue<UInt2> operator>>=(UInt2 &lhs, RValue<Long1> rhs);
 //	RValue<UInt2> operator+(RValue<UInt2> val);
 //	RValue<UInt2> operator-(RValue<UInt2> val);
 	RValue<UInt2> operator~(RValue<UInt2> val);
-//	RValue<UInt2> operator++(const UInt2 &val, int);   // Post-increment
-//	const UInt2 &operator++(const UInt2 &val);   // Pre-increment
-//	RValue<UInt2> operator--(const UInt2 &val, int);   // Post-decrement
-//	const UInt2 &operator--(const UInt2 &val);   // Pre-decrement
+//	RValue<UInt2> operator++(UInt2 &val, int);   // Post-increment
+//	const UInt2 &operator++(UInt2 &val);   // Pre-increment
+//	RValue<UInt2> operator--(UInt2 &val, int);   // Post-decrement
+//	const UInt2 &operator--(UInt2 &val);   // Pre-decrement
 //	RValue<Bool> operator<(RValue<UInt2> lhs, RValue<UInt2> rhs);
 //	RValue<Bool> operator<=(RValue<UInt2> lhs, RValue<UInt2> rhs);
 //	RValue<Bool> operator>(RValue<UInt2> lhs, RValue<UInt2> rhs);
@@ -1402,9 +1402,9 @@
 		Int4(const Int &rhs);
 		Int4(const Reference<Int> &rhs);
 
-		RValue<Int4> operator=(RValue<Int4> rhs) const;
-		RValue<Int4> operator=(const Int4 &rhs) const;
-		RValue<Int4> operator=(const Reference<Int4> &rhs) const;
+		RValue<Int4> operator=(RValue<Int4> rhs);
+		RValue<Int4> operator=(const Int4 &rhs);
+		RValue<Int4> operator=(const Reference<Int4> &rhs);
 
 		static Type *getType();
 
@@ -1424,23 +1424,23 @@
 	RValue<Int4> operator>>(RValue<Int4> lhs, unsigned char rhs);
 	RValue<Int4> operator<<(RValue<Int4> lhs, RValue<Int4> rhs);
 	RValue<Int4> operator>>(RValue<Int4> lhs, RValue<Int4> rhs);
-	RValue<Int4> operator+=(const Int4 &lhs, RValue<Int4> rhs);
-	RValue<Int4> operator-=(const Int4 &lhs, RValue<Int4> rhs);
-	RValue<Int4> operator*=(const Int4 &lhs, RValue<Int4> rhs);
-//	RValue<Int4> operator/=(const Int4 &lhs, RValue<Int4> rhs);
-//	RValue<Int4> operator%=(const Int4 &lhs, RValue<Int4> rhs);
-	RValue<Int4> operator&=(const Int4 &lhs, RValue<Int4> rhs);
-	RValue<Int4> operator|=(const Int4 &lhs, RValue<Int4> rhs);
-	RValue<Int4> operator^=(const Int4 &lhs, RValue<Int4> rhs);
-	RValue<Int4> operator<<=(const Int4 &lhs, unsigned char rhs);
-	RValue<Int4> operator>>=(const Int4 &lhs, unsigned char rhs);
+	RValue<Int4> operator+=(Int4 &lhs, RValue<Int4> rhs);
+	RValue<Int4> operator-=(Int4 &lhs, RValue<Int4> rhs);
+	RValue<Int4> operator*=(Int4 &lhs, RValue<Int4> rhs);
+//	RValue<Int4> operator/=(Int4 &lhs, RValue<Int4> rhs);
+//	RValue<Int4> operator%=(Int4 &lhs, RValue<Int4> rhs);
+	RValue<Int4> operator&=(Int4 &lhs, RValue<Int4> rhs);
+	RValue<Int4> operator|=(Int4 &lhs, RValue<Int4> rhs);
+	RValue<Int4> operator^=(Int4 &lhs, RValue<Int4> rhs);
+	RValue<Int4> operator<<=(Int4 &lhs, unsigned char rhs);
+	RValue<Int4> operator>>=(Int4 &lhs, unsigned char rhs);
 	RValue<Int4> operator+(RValue<Int4> val);
 	RValue<Int4> operator-(RValue<Int4> val);
 	RValue<Int4> operator~(RValue<Int4> val);
-//	RValue<Int4> operator++(const Int4 &val, int);   // Post-increment
-//	const Int4 &operator++(const Int4 &val);   // Pre-increment
-//	RValue<Int4> operator--(const Int4 &val, int);   // Post-decrement
-//	const Int4 &operator--(const Int4 &val);   // Pre-decrement
+//	RValue<Int4> operator++(Int4 &val, int);   // Post-increment
+//	const Int4 &operator++(Int4 &val);   // Pre-increment
+//	RValue<Int4> operator--(Int4 &val, int);   // Post-decrement
+//	const Int4 &operator--(Int4 &val);   // Pre-decrement
 //	RValue<Bool> operator<(RValue<Int4> lhs, RValue<Int4> rhs);
 //	RValue<Bool> operator<=(RValue<Int4> lhs, RValue<Int4> rhs);
 //	RValue<Bool> operator>(RValue<Int4> lhs, RValue<Int4> rhs);
@@ -1482,9 +1482,9 @@
 		UInt4(const Reference<Int4> &rhs);
 		UInt4(RValue<UInt2> lo, RValue<UInt2> hi);
 
-		RValue<UInt4> operator=(RValue<UInt4> rhs) const;
-		RValue<UInt4> operator=(const UInt4 &rhs) const;
-		RValue<UInt4> operator=(const Reference<UInt4> &rhs) const;
+		RValue<UInt4> operator=(RValue<UInt4> rhs);
+		RValue<UInt4> operator=(const UInt4 &rhs);
+		RValue<UInt4> operator=(const Reference<UInt4> &rhs);
 
 		static Type *getType();
 
@@ -1504,23 +1504,23 @@
 	RValue<UInt4> operator>>(RValue<UInt4> lhs, unsigned char rhs);
 	RValue<UInt4> operator<<(RValue<UInt4> lhs, RValue<UInt4> rhs);
 	RValue<UInt4> operator>>(RValue<UInt4> lhs, RValue<UInt4> rhs);
-	RValue<UInt4> operator+=(const UInt4 &lhs, RValue<UInt4> rhs);
-	RValue<UInt4> operator-=(const UInt4 &lhs, RValue<UInt4> rhs);
-	RValue<UInt4> operator*=(const UInt4 &lhs, RValue<UInt4> rhs);
-//	RValue<UInt4> operator/=(const UInt4 &lhs, RValue<UInt4> rhs);
-//	RValue<UInt4> operator%=(const UInt4 &lhs, RValue<UInt4> rhs);
-	RValue<UInt4> operator&=(const UInt4 &lhs, RValue<UInt4> rhs);
-	RValue<UInt4> operator|=(const UInt4 &lhs, RValue<UInt4> rhs);
-	RValue<UInt4> operator^=(const UInt4 &lhs, RValue<UInt4> rhs);
-	RValue<UInt4> operator<<=(const UInt4 &lhs, unsigned char rhs);
-	RValue<UInt4> operator>>=(const UInt4 &lhs, unsigned char rhs);
+	RValue<UInt4> operator+=(UInt4 &lhs, RValue<UInt4> rhs);
+	RValue<UInt4> operator-=(UInt4 &lhs, RValue<UInt4> rhs);
+	RValue<UInt4> operator*=(UInt4 &lhs, RValue<UInt4> rhs);
+//	RValue<UInt4> operator/=(UInt4 &lhs, RValue<UInt4> rhs);
+//	RValue<UInt4> operator%=(UInt4 &lhs, RValue<UInt4> rhs);
+	RValue<UInt4> operator&=(UInt4 &lhs, RValue<UInt4> rhs);
+	RValue<UInt4> operator|=(UInt4 &lhs, RValue<UInt4> rhs);
+	RValue<UInt4> operator^=(UInt4 &lhs, RValue<UInt4> rhs);
+	RValue<UInt4> operator<<=(UInt4 &lhs, unsigned char rhs);
+	RValue<UInt4> operator>>=(UInt4 &lhs, unsigned char rhs);
 	RValue<UInt4> operator+(RValue<UInt4> val);
 	RValue<UInt4> operator-(RValue<UInt4> val);
 	RValue<UInt4> operator~(RValue<UInt4> val);
-//	RValue<UInt4> operator++(const UInt4 &val, int);   // Post-increment
-//	const UInt4 &operator++(const UInt4 &val);   // Pre-increment
-//	RValue<UInt4> operator--(const UInt4 &val, int);   // Post-decrement
-//	const UInt4 &operator--(const UInt4 &val);   // Pre-decrement
+//	RValue<UInt4> operator++(UInt4 &val, int);   // Post-increment
+//	const UInt4 &operator++(UInt4 &val);   // Pre-increment
+//	RValue<UInt4> operator--(UInt4 &val, int);   // Post-decrement
+//	const UInt4 &operator--(UInt4 &val);   // Pre-decrement
 //	RValue<Bool> operator<(RValue<UInt4> lhs, RValue<UInt4> rhs);
 //	RValue<Bool> operator<=(RValue<UInt4> lhs, RValue<UInt4> rhs);
 //	RValue<Bool> operator>(RValue<UInt4> lhs, RValue<UInt4> rhs);
@@ -1569,8 +1569,8 @@
 	public:
 		operator RValue<Float4>() const;
 
-		RValue<Float4> operator=(RValue<Float4> rhs) const;
-		RValue<Float4> operator=(RValue<Float> rhs) const;
+		RValue<Float4> operator=(RValue<Float4> rhs);
+		RValue<Float4> operator=(RValue<Float> rhs);
 
 	private:
 		Float4 *parent;
@@ -1583,9 +1583,9 @@
 		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;
+		RValue<Float4> operator=(float x);
+		RValue<Float4> operator=(RValue<Float4> rhs);
+		RValue<Float4> operator=(RValue<Float> rhs);
 
 	private:
 		Float4 *parent;
@@ -1599,7 +1599,7 @@
 	public:
 		operator RValue<Float4>() const;
 
-		RValue<Float4> operator=(RValue<Float4> rhs) const;
+		RValue<Float4> operator=(RValue<Float4> rhs);
 
 	private:
 		Float4 *parent;
@@ -1619,13 +1619,13 @@
 		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;
+	//	RValue<Float> operator=(float rhs);   // FIXME: Implement
+		RValue<Float> operator=(RValue<Float> rhs);
+		RValue<Float> operator=(const Float &rhs);
+		RValue<Float> operator=(const Reference<Float> &rhs);
 
 		template<int T>
-		RValue<Float> operator=(const SwizzleMask1Float4<T> &rhs) const;
+		RValue<Float> operator=(const SwizzleMask1Float4<T> &rhs);
 
 		static Type *getType();
 	};
@@ -1634,10 +1634,10 @@
 	RValue<Float> operator-(RValue<Float> lhs, RValue<Float> rhs);
 	RValue<Float> operator*(RValue<Float> lhs, RValue<Float> rhs);
 	RValue<Float> operator/(RValue<Float> lhs, RValue<Float> rhs);
-	RValue<Float> operator+=(const Float &lhs, RValue<Float> rhs);
-	RValue<Float> operator-=(const Float &lhs, RValue<Float> rhs);
-	RValue<Float> operator*=(const Float &lhs, RValue<Float> rhs);
-	RValue<Float> operator/=(const Float &lhs, RValue<Float> rhs);
+	RValue<Float> operator+=(Float &lhs, RValue<Float> rhs);
+	RValue<Float> operator-=(Float &lhs, RValue<Float> rhs);
+	RValue<Float> operator*=(Float &lhs, RValue<Float> rhs);
+	RValue<Float> operator/=(Float &lhs, RValue<Float> rhs);
 	RValue<Float> operator+(RValue<Float> val);
 	RValue<Float> operator-(RValue<Float> val);
 	RValue<Bool> operator<(RValue<Float> lhs, RValue<Float> rhs);
@@ -1681,13 +1681,13 @@
 	//	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;
+	//	RValue<Float2> operator=(float replicate);
+	//	RValue<Float2> operator=(RValue<Float2> rhs);
+	//	RValue<Float2> operator=(const Float2 &rhs);
+	//	RValue<Float2> operator=(const Reference<Float2> &rhs);
+	//	RValue<Float2> operator=(RValue<Float> rhs);
+	//	RValue<Float2> operator=(const Float &rhs);
+	//	RValue<Float2> operator=(const Reference<Float> &rhs);
 
 	//	template<int T>
 	//	RValue<Float2> operator=(const SwizzleMask1Float4<T> &rhs);
@@ -1700,11 +1700,11 @@
 //	RValue<Float2> operator*(RValue<Float2> lhs, RValue<Float2> rhs);
 //	RValue<Float2> operator/(RValue<Float2> lhs, RValue<Float2> rhs);
 //	RValue<Float2> operator%(RValue<Float2> lhs, RValue<Float2> rhs);
-//	RValue<Float2> operator+=(const Float2 &lhs, RValue<Float2> rhs);
-//	RValue<Float2> operator-=(const Float2 &lhs, RValue<Float2> rhs);
-//	RValue<Float2> operator*=(const Float2 &lhs, RValue<Float2> rhs);
-//	RValue<Float2> operator/=(const Float2 &lhs, RValue<Float2> rhs);
-//	RValue<Float2> operator%=(const Float2 &lhs, RValue<Float2> rhs);
+//	RValue<Float2> operator+=(Float2 &lhs, RValue<Float2> rhs);
+//	RValue<Float2> operator-=(Float2 &lhs, RValue<Float2> rhs);
+//	RValue<Float2> operator*=(Float2 &lhs, RValue<Float2> rhs);
+//	RValue<Float2> operator/=(Float2 &lhs, RValue<Float2> rhs);
+//	RValue<Float2> operator%=(Float2 &lhs, RValue<Float2> rhs);
 //	RValue<Float2> operator+(RValue<Float2> val);
 //	RValue<Float2> operator-(RValue<Float2> val);
 
@@ -1749,13 +1749,13 @@
 		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;
+		RValue<Float4> operator=(float replicate);
+		RValue<Float4> operator=(RValue<Float4> rhs);
+		RValue<Float4> operator=(const Float4 &rhs);
+		RValue<Float4> operator=(const Reference<Float4> &rhs);
+		RValue<Float4> operator=(RValue<Float> rhs);
+		RValue<Float4> operator=(const Float &rhs);
+		RValue<Float4> operator=(const Reference<Float> &rhs);
 
 		template<int T>
 		RValue<Float4> operator=(const SwizzleMask1Float4<T> &rhs);
@@ -2117,11 +2117,11 @@
 	RValue<Float4> operator*(RValue<Float4> lhs, RValue<Float4> rhs);
 	RValue<Float4> operator/(RValue<Float4> lhs, RValue<Float4> rhs);
 	RValue<Float4> operator%(RValue<Float4> lhs, RValue<Float4> rhs);
-	RValue<Float4> operator+=(const Float4 &lhs, RValue<Float4> rhs);
-	RValue<Float4> operator-=(const Float4 &lhs, RValue<Float4> rhs);
-	RValue<Float4> operator*=(const Float4 &lhs, RValue<Float4> rhs);
-	RValue<Float4> operator/=(const Float4 &lhs, RValue<Float4> rhs);
-	RValue<Float4> operator%=(const Float4 &lhs, RValue<Float4> rhs);
+	RValue<Float4> operator+=(Float4 &lhs, RValue<Float4> rhs);
+	RValue<Float4> operator-=(Float4 &lhs, RValue<Float4> rhs);
+	RValue<Float4> operator*=(Float4 &lhs, RValue<Float4> rhs);
+	RValue<Float4> operator/=(Float4 &lhs, RValue<Float4> rhs);
+	RValue<Float4> operator%=(Float4 &lhs, RValue<Float4> rhs);
 	RValue<Float4> operator+(RValue<Float4> val);
 	RValue<Float4> operator-(RValue<Float4> val);
 
@@ -2178,9 +2178,9 @@
 		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;
+		RValue<Pointer<T>> operator=(RValue<Pointer<T>> rhs);
+		RValue<Pointer<T>> operator=(const Pointer<T> &rhs);
+		RValue<Pointer<T>> operator=(const Reference<Pointer<T>> &rhs);
 
 		Reference<T> operator*();
 		Reference<T> operator[](int index);
@@ -2195,16 +2195,16 @@
 	RValue<Pointer<Byte>> operator+(RValue<Pointer<Byte>> lhs, int offset);
 	RValue<Pointer<Byte>> operator+(RValue<Pointer<Byte>> lhs, RValue<Int> offset);
 	RValue<Pointer<Byte>> operator+(RValue<Pointer<Byte>> lhs, RValue<UInt> offset);
-	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, int offset);
-	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, RValue<Int> offset);
-	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, RValue<UInt> offset);
+	RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, int offset);
+	RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, RValue<Int> offset);
+	RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, RValue<UInt> offset);
 
 	RValue<Pointer<Byte>> operator-(RValue<Pointer<Byte>> lhs, int offset);
 	RValue<Pointer<Byte>> operator-(RValue<Pointer<Byte>> lhs, RValue<Int> offset);
 	RValue<Pointer<Byte>> operator-(RValue<Pointer<Byte>> lhs, RValue<UInt> offset);
-	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, int offset);
-	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, RValue<Int> offset);
-	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, RValue<UInt> offset);
+	RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, int offset);
+	RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, RValue<Int> offset);
+	RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, RValue<UInt> offset);
 
 	template<class T, int S = 1>
 	class Array : public LValue<T>
@@ -2216,10 +2216,10 @@
 		Reference<T> operator[](RValue<Int> index);
 	};
 
-//	RValue<Array<T>> operator++(const Array<T> &val, int);   // Post-increment
-//	const Array<T> &operator++(const Array<T> &val);   // Pre-increment
-//	RValue<Array<T>> operator--(const Array<T> &val, int);   // Post-decrement
-//	const Array<T> &operator--(const Array<T> &val);   // Pre-decrement
+//	RValue<Array<T>> operator++(Array<T> &val, int);   // Post-increment
+//	const Array<T> &operator++(Array<T> &val);   // Pre-increment
+//	RValue<Array<T>> operator--(Array<T> &val, int);   // Post-decrement
+//	const Array<T> &operator--(Array<T> &val);   // Pre-decrement
 
 	bool branch(RValue<Bool> cmp, BasicBlock *bodyBB, BasicBlock *endBB);
 
@@ -2417,13 +2417,13 @@
 	}
 
 	template<int T>
-	RValue<Float4> SwizzleMaskFloat4<T>::operator=(RValue<Float4> rhs) const
+	RValue<Float4> SwizzleMaskFloat4<T>::operator=(RValue<Float4> rhs)
 	{
 		return Mask(*parent, rhs, T);
 	}
 
 	template<int T>
-	RValue<Float4> SwizzleMaskFloat4<T>::operator=(RValue<Float> rhs) const
+	RValue<Float4> SwizzleMaskFloat4<T>::operator=(RValue<Float> rhs)
 	{
 		return Mask(*parent, Float4(rhs), T);
 	}
@@ -2443,19 +2443,19 @@
 	}
 
 	template<int T>
-	RValue<Float4> SwizzleMask1Float4<T>::operator=(float x) const
+	RValue<Float4> SwizzleMask1Float4<T>::operator=(float x)
 	{
 		return *parent = Insert(*parent, Float(x), T & 0x3);
 	}
 
 	template<int T>
-	RValue<Float4> SwizzleMask1Float4<T>::operator=(RValue<Float4> rhs) const
+	RValue<Float4> SwizzleMask1Float4<T>::operator=(RValue<Float4> rhs)
 	{
 		return Mask(*parent, Float4(rhs), T);
 	}
 
 	template<int T>
-	RValue<Float4> SwizzleMask1Float4<T>::operator=(RValue<Float> rhs) const   // FIXME: Call a non-template function
+	RValue<Float4> SwizzleMask1Float4<T>::operator=(RValue<Float> rhs)   // FIXME: Call a non-template function
 	{
 		return *parent = Insert(*parent, rhs, T & 0x3);
 	}
@@ -2469,7 +2469,7 @@
 	}
 
 	template<int T>
-	RValue<Float4> SwizzleMask2Float4<T>::operator=(RValue<Float4> rhs) const
+	RValue<Float4> SwizzleMask2Float4<T>::operator=(RValue<Float4> rhs)
 	{
 		return Mask(*parent, Float4(rhs), T);
 	}
@@ -2481,7 +2481,7 @@
 	}
 
 	template<int T>
-	RValue<Float> Float::operator=(const SwizzleMask1Float4<T> &rhs) const
+	RValue<Float> Float::operator=(const SwizzleMask1Float4<T> &rhs)
 	{
 		return *this = rhs.operator RValue<Float>();
 	}
@@ -2587,7 +2587,7 @@
 	}
 
 	template<class T>
-	RValue<Pointer<T>> Pointer<T>::operator=(RValue<Pointer<T>> rhs) const
+	RValue<Pointer<T>> Pointer<T>::operator=(RValue<Pointer<T>> rhs)
 	{
 		LValue<Pointer<T>>::storeValue(rhs.value);
 
@@ -2595,7 +2595,7 @@
 	}
 
 	template<class T>
-	RValue<Pointer<T>> Pointer<T>::operator=(const Pointer<T> &rhs) const
+	RValue<Pointer<T>> Pointer<T>::operator=(const Pointer<T> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		LValue<Pointer<T>>::storeValue(value);
@@ -2604,7 +2604,7 @@
 	}
 
 	template<class T>
-	RValue<Pointer<T>> Pointer<T>::operator=(const Reference<Pointer<T>> &rhs) const
+	RValue<Pointer<T>> Pointer<T>::operator=(const Reference<Pointer<T>> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		LValue<Pointer<T>>::storeValue(value);
@@ -2662,25 +2662,25 @@
 	}
 
 //	template<class T>
-//	RValue<Array<T>> operator++(const Array<T> &val, int)
+//	RValue<Array<T>> operator++(Array<T> &val, int)
 //	{
 //		// FIXME: Requires storing the address of the array
 //	}
 
 //	template<class T>
-//	const Array<T> &operator++(const Array<T> &val)
+//	const Array<T> &operator++(Array<T> &val)
 //	{
 //		// FIXME: Requires storing the address of the array
 //	}
 
 //	template<class T>
-//	RValue<Array<T>> operator--(const Array<T> &val, int)
+//	RValue<Array<T>> operator--(Array<T> &val, int)
 //	{
 //		// FIXME: Requires storing the address of the array
 //	}
 
 //	template<class T>
-//	const Array<T> &operator--(const Array<T> &val)
+//	const Array<T> &operator--(Array<T> &val)
 //	{
 //		// FIXME: Requires storing the address of the array
 //	}
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
index db2294a..eab0bf7 100644
--- a/src/Reactor/SubzeroReactor.cpp
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -1318,14 +1318,14 @@
 		storeValue(value);
 	}
 
-	RValue<Bool> Bool::operator=(RValue<Bool> rhs) const
+	RValue<Bool> Bool::operator=(RValue<Bool> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Bool> Bool::operator=(const Bool &rhs) const
+	RValue<Bool> Bool::operator=(const Bool &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1333,7 +1333,7 @@
 		return RValue<Bool>(value);
 	}
 
-	RValue<Bool> Bool::operator=(const Reference<Bool> &rhs) const
+	RValue<Bool> Bool::operator=(const Reference<Bool> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1418,14 +1418,14 @@
 		storeValue(value);
 	}
 
-	RValue<Byte> Byte::operator=(RValue<Byte> rhs) const
+	RValue<Byte> Byte::operator=(RValue<Byte> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Byte> Byte::operator=(const Byte &rhs) const
+	RValue<Byte> Byte::operator=(const Byte &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1433,7 +1433,7 @@
 		return RValue<Byte>(value);
 	}
 
-	RValue<Byte> Byte::operator=(const Reference<Byte> &rhs) const
+	RValue<Byte> Byte::operator=(const Reference<Byte> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1491,52 +1491,52 @@
 		return RValue<Byte>(Nucleus::createLShr(lhs.value, rhs.value));
 	}
 
-	RValue<Byte> operator+=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator+=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Byte> operator-=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator-=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Byte> operator*=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator*=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<Byte> operator/=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator/=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<Byte> operator%=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator%=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<Byte> operator&=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator&=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Byte> operator|=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator|=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Byte> operator^=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator^=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Byte> operator<<=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator<<=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Byte> operator>>=(const Byte &lhs, RValue<Byte> rhs)
+	RValue<Byte> operator>>=(Byte &lhs, RValue<Byte> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -1556,27 +1556,27 @@
 		return RValue<Byte>(Nucleus::createNot(val.value));
 	}
 
-	RValue<Byte> operator++(const Byte &val, int)   // Post-increment
+	RValue<Byte> operator++(Byte &val, int)   // Post-increment
 	{
 		RValue<Byte> res = val;
 		val += Byte(1);
 		return res;
 	}
 
-	const Byte &operator++(const Byte &val)   // Pre-increment
+	const Byte &operator++(Byte &val)   // Pre-increment
 	{
 		val += Byte(1);
 		return val;
 	}
 
-	RValue<Byte> operator--(const Byte &val, int)   // Post-decrement
+	RValue<Byte> operator--(Byte &val, int)   // Post-decrement
 	{
 		RValue<Byte> res = val;
 		val -= Byte(1);
 		return res;
 	}
 
-	const Byte &operator--(const Byte &val)   // Pre-decrement
+	const Byte &operator--(Byte &val)   // Pre-decrement
 	{
 		val -= Byte(1);
 		return val;
@@ -1662,14 +1662,14 @@
 		storeValue(value);
 	}
 
-	RValue<SByte> SByte::operator=(RValue<SByte> rhs) const
+	RValue<SByte> SByte::operator=(RValue<SByte> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<SByte> SByte::operator=(const SByte &rhs) const
+	RValue<SByte> SByte::operator=(const SByte &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1677,7 +1677,7 @@
 		return RValue<SByte>(value);
 	}
 
-	RValue<SByte> SByte::operator=(const Reference<SByte> &rhs) const
+	RValue<SByte> SByte::operator=(const Reference<SByte> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1735,52 +1735,52 @@
 		return RValue<SByte>(Nucleus::createAShr(lhs.value, rhs.value));
 	}
 
-	RValue<SByte> operator+=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator+=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<SByte> operator-=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator-=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<SByte> operator*=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator*=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<SByte> operator/=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator/=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<SByte> operator%=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator%=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<SByte> operator&=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator&=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<SByte> operator|=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator|=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<SByte> operator^=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator^=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<SByte> operator<<=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator<<=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<SByte> operator>>=(const SByte &lhs, RValue<SByte> rhs)
+	RValue<SByte> operator>>=(SByte &lhs, RValue<SByte> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -1800,27 +1800,27 @@
 		return RValue<SByte>(Nucleus::createNot(val.value));
 	}
 
-	RValue<SByte> operator++(const SByte &val, int)   // Post-increment
+	RValue<SByte> operator++(SByte &val, int)   // Post-increment
 	{
 		RValue<SByte> res = val;
 		val += SByte(1);
 		return res;
 	}
 
-	const SByte &operator++(const SByte &val)   // Pre-increment
+	const SByte &operator++(SByte &val)   // Pre-increment
 	{
 		val += SByte(1);
 		return val;
 	}
 
-	RValue<SByte> operator--(const SByte &val, int)   // Post-decrement
+	RValue<SByte> operator--(SByte &val, int)   // Post-decrement
 	{
 		RValue<SByte> res = val;
 		val -= SByte(1);
 		return res;
 	}
 
-	const SByte &operator--(const SByte &val)   // Pre-decrement
+	const SByte &operator--(SByte &val)   // Pre-decrement
 	{
 		val -= SByte(1);
 		return val;
@@ -1899,14 +1899,14 @@
 		storeValue(value);
 	}
 
-	RValue<Short> Short::operator=(RValue<Short> rhs) const
+	RValue<Short> Short::operator=(RValue<Short> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Short> Short::operator=(const Short &rhs) const
+	RValue<Short> Short::operator=(const Short &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1914,7 +1914,7 @@
 		return RValue<Short>(value);
 	}
 
-	RValue<Short> Short::operator=(const Reference<Short> &rhs) const
+	RValue<Short> Short::operator=(const Reference<Short> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -1972,52 +1972,52 @@
 		return RValue<Short>(Nucleus::createAShr(lhs.value, rhs.value));
 	}
 
-	RValue<Short> operator+=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator+=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Short> operator-=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator-=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Short> operator*=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator*=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<Short> operator/=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator/=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<Short> operator%=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator%=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<Short> operator&=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator&=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Short> operator|=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator|=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Short> operator^=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator^=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Short> operator<<=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator<<=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Short> operator>>=(const Short &lhs, RValue<Short> rhs)
+	RValue<Short> operator>>=(Short &lhs, RValue<Short> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -2037,27 +2037,27 @@
 		return RValue<Short>(Nucleus::createNot(val.value));
 	}
 
-	RValue<Short> operator++(const Short &val, int)   // Post-increment
+	RValue<Short> operator++(Short &val, int)   // Post-increment
 	{
 		RValue<Short> res = val;
 		val += Short(1);
 		return res;
 	}
 
-	const Short &operator++(const Short &val)   // Pre-increment
+	const Short &operator++(Short &val)   // Pre-increment
 	{
 		val += Short(1);
 		return val;
 	}
 
-	RValue<Short> operator--(const Short &val, int)   // Post-decrement
+	RValue<Short> operator--(Short &val, int)   // Post-decrement
 	{
 		RValue<Short> res = val;
 		val -= Short(1);
 		return res;
 	}
 
-	const Short &operator--(const Short &val)   // Pre-decrement
+	const Short &operator--(Short &val)   // Pre-decrement
 	{
 		val -= Short(1);
 		return val;
@@ -2143,14 +2143,14 @@
 		storeValue(value);
 	}
 
-	RValue<UShort> UShort::operator=(RValue<UShort> rhs) const
+	RValue<UShort> UShort::operator=(RValue<UShort> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UShort> UShort::operator=(const UShort &rhs) const
+	RValue<UShort> UShort::operator=(const UShort &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2158,7 +2158,7 @@
 		return RValue<UShort>(value);
 	}
 
-	RValue<UShort> UShort::operator=(const Reference<UShort> &rhs) const
+	RValue<UShort> UShort::operator=(const Reference<UShort> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2216,52 +2216,52 @@
 		return RValue<UShort>(Nucleus::createLShr(lhs.value, rhs.value));
 	}
 
-	RValue<UShort> operator+=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator+=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<UShort> operator-=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator-=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<UShort> operator*=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator*=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<UShort> operator/=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator/=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<UShort> operator%=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator%=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<UShort> operator&=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator&=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<UShort> operator|=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator|=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<UShort> operator^=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator^=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<UShort> operator<<=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator<<=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UShort> operator>>=(const UShort &lhs, RValue<UShort> rhs)
+	RValue<UShort> operator>>=(UShort &lhs, RValue<UShort> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -2281,27 +2281,27 @@
 		return RValue<UShort>(Nucleus::createNot(val.value));
 	}
 
-	RValue<UShort> operator++(const UShort &val, int)   // Post-increment
+	RValue<UShort> operator++(UShort &val, int)   // Post-increment
 	{
 		RValue<UShort> res = val;
 		val += UShort(1);
 		return res;
 	}
 
-	const UShort &operator++(const UShort &val)   // Pre-increment
+	const UShort &operator++(UShort &val)   // Pre-increment
 	{
 		val += UShort(1);
 		return val;
 	}
 
-	RValue<UShort> operator--(const UShort &val, int)   // Post-decrement
+	RValue<UShort> operator--(UShort &val, int)   // Post-decrement
 	{
 		RValue<UShort> res = val;
 		val -= UShort(1);
 		return res;
 	}
 
-	const UShort &operator--(const UShort &val)   // Pre-decrement
+	const UShort &operator--(UShort &val)   // Pre-decrement
 	{
 		val -= UShort(1);
 		return val;
@@ -2394,14 +2394,14 @@
 		storeValue(value);
 	}
 
-	RValue<Byte8> Byte8::operator=(RValue<Byte8> rhs) const
+	RValue<Byte8> Byte8::operator=(RValue<Byte8> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Byte8> Byte8::operator=(const Byte8 &rhs) const
+	RValue<Byte8> Byte8::operator=(const Byte8 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2409,7 +2409,7 @@
 		return RValue<Byte8>(value);
 	}
 
-	RValue<Byte8> Byte8::operator=(const Reference<Byte8> &rhs) const
+	RValue<Byte8> Byte8::operator=(const Reference<Byte8> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2467,52 +2467,52 @@
 //		return RValue<Byte8>(Nucleus::createLShr(lhs.value, C(::context->getConstantInt32(rhs))));
 //	}
 
-	RValue<Byte8> operator+=(const Byte8 &lhs, RValue<Byte8> rhs)
+	RValue<Byte8> operator+=(Byte8 &lhs, RValue<Byte8> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Byte8> operator-=(const Byte8 &lhs, RValue<Byte8> rhs)
+	RValue<Byte8> operator-=(Byte8 &lhs, RValue<Byte8> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-//	RValue<Byte8> operator*=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	RValue<Byte8> operator*=(Byte8 &lhs, RValue<Byte8> rhs)
 //	{
 //		return lhs = lhs * rhs;
 //	}
 
-//	RValue<Byte8> operator/=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	RValue<Byte8> operator/=(Byte8 &lhs, RValue<Byte8> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<Byte8> operator%=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	RValue<Byte8> operator%=(Byte8 &lhs, RValue<Byte8> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<Byte8> operator&=(const Byte8 &lhs, RValue<Byte8> rhs)
+	RValue<Byte8> operator&=(Byte8 &lhs, RValue<Byte8> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Byte8> operator|=(const Byte8 &lhs, RValue<Byte8> rhs)
+	RValue<Byte8> operator|=(Byte8 &lhs, RValue<Byte8> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Byte8> operator^=(const Byte8 &lhs, RValue<Byte8> rhs)
+	RValue<Byte8> operator^=(Byte8 &lhs, RValue<Byte8> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-//	RValue<Byte8> operator<<=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	RValue<Byte8> operator<<=(Byte8 &lhs, RValue<Byte8> rhs)
 //	{
 //		return lhs = lhs << rhs;
 //	}
 
-//	RValue<Byte8> operator>>=(const Byte8 &lhs, RValue<Byte8> rhs)
+//	RValue<Byte8> operator>>=(Byte8 &lhs, RValue<Byte8> rhs)
 //	{
 //		return lhs = lhs >> rhs;
 //	}
@@ -2642,14 +2642,14 @@
 		storeValue(value);
 	}
 
-	RValue<SByte8> SByte8::operator=(RValue<SByte8> rhs) const
+	RValue<SByte8> SByte8::operator=(RValue<SByte8> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<SByte8> SByte8::operator=(const SByte8 &rhs) const
+	RValue<SByte8> SByte8::operator=(const SByte8 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2657,7 +2657,7 @@
 		return RValue<SByte8>(value);
 	}
 
-	RValue<SByte8> SByte8::operator=(const Reference<SByte8> &rhs) const
+	RValue<SByte8> SByte8::operator=(const Reference<SByte8> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2715,52 +2715,52 @@
 //		return RValue<SByte8>(Nucleus::createAShr(lhs.value, C(::context->getConstantInt32(rhs))));
 //	}
 
-	RValue<SByte8> operator+=(const SByte8 &lhs, RValue<SByte8> rhs)
+	RValue<SByte8> operator+=(SByte8 &lhs, RValue<SByte8> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<SByte8> operator-=(const SByte8 &lhs, RValue<SByte8> rhs)
+	RValue<SByte8> operator-=(SByte8 &lhs, RValue<SByte8> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-//	RValue<SByte8> operator*=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	RValue<SByte8> operator*=(SByte8 &lhs, RValue<SByte8> rhs)
 //	{
 //		return lhs = lhs * rhs;
 //	}
 
-//	RValue<SByte8> operator/=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	RValue<SByte8> operator/=(SByte8 &lhs, RValue<SByte8> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<SByte8> operator%=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	RValue<SByte8> operator%=(SByte8 &lhs, RValue<SByte8> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<SByte8> operator&=(const SByte8 &lhs, RValue<SByte8> rhs)
+	RValue<SByte8> operator&=(SByte8 &lhs, RValue<SByte8> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<SByte8> operator|=(const SByte8 &lhs, RValue<SByte8> rhs)
+	RValue<SByte8> operator|=(SByte8 &lhs, RValue<SByte8> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<SByte8> operator^=(const SByte8 &lhs, RValue<SByte8> rhs)
+	RValue<SByte8> operator^=(SByte8 &lhs, RValue<SByte8> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-//	RValue<SByte8> operator<<=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	RValue<SByte8> operator<<=(SByte8 &lhs, RValue<SByte8> rhs)
 //	{
 //		return lhs = lhs << rhs;
 //	}
 
-//	RValue<SByte8> operator>>=(const SByte8 &lhs, RValue<SByte8> rhs)
+//	RValue<SByte8> operator>>=(SByte8 &lhs, RValue<SByte8> rhs)
 //	{
 //		return lhs = lhs >> rhs;
 //	}
@@ -2869,14 +2869,14 @@
 		storeValue(value);
 	}
 
-	RValue<Byte16> Byte16::operator=(RValue<Byte16> rhs) const
+	RValue<Byte16> Byte16::operator=(RValue<Byte16> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Byte16> Byte16::operator=(const Byte16 &rhs) const
+	RValue<Byte16> Byte16::operator=(const Byte16 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -2884,7 +2884,7 @@
 		return RValue<Byte16>(value);
 	}
 
-	RValue<Byte16> Byte16::operator=(const Reference<Byte16> &rhs) const
+	RValue<Byte16> Byte16::operator=(const Reference<Byte16> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3017,14 +3017,14 @@
 		storeValue(rhs.loadValue());
 	}
 
-	RValue<Short4> Short4::operator=(RValue<Short4> rhs) const
+	RValue<Short4> Short4::operator=(RValue<Short4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Short4> Short4::operator=(const Short4 &rhs) const
+	RValue<Short4> Short4::operator=(const Short4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3032,7 +3032,7 @@
 		return RValue<Short4>(value);
 	}
 
-	RValue<Short4> Short4::operator=(const Reference<Short4> &rhs) const
+	RValue<Short4> Short4::operator=(const Reference<Short4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3040,14 +3040,14 @@
 		return RValue<Short4>(value);
 	}
 
-	RValue<Short4> Short4::operator=(RValue<UShort4> rhs) const
+	RValue<Short4> Short4::operator=(RValue<UShort4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return RValue<Short4>(rhs);
 	}
 
-	RValue<Short4> Short4::operator=(const UShort4 &rhs) const
+	RValue<Short4> Short4::operator=(const UShort4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3055,7 +3055,7 @@
 		return RValue<Short4>(value);
 	}
 
-	RValue<Short4> Short4::operator=(const Reference<UShort4> &rhs) const
+	RValue<Short4> Short4::operator=(const Reference<UShort4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3127,62 +3127,62 @@
 		assert(false && "UNIMPLEMENTED"); return RValue<Short4>(V(nullptr));
 	}
 
-	RValue<Short4> operator+=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator+=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Short4> operator-=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator-=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Short4> operator*=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator*=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-//	RValue<Short4> operator/=(const Short4 &lhs, RValue<Short4> rhs)
+//	RValue<Short4> operator/=(Short4 &lhs, RValue<Short4> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<Short4> operator%=(const Short4 &lhs, RValue<Short4> rhs)
+//	RValue<Short4> operator%=(Short4 &lhs, RValue<Short4> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<Short4> operator&=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator&=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Short4> operator|=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator|=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Short4> operator^=(const Short4 &lhs, RValue<Short4> rhs)
+	RValue<Short4> operator^=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Short4> operator<<=(const Short4 &lhs, unsigned char rhs)
+	RValue<Short4> operator<<=(Short4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Short4> operator>>=(const Short4 &lhs, unsigned char rhs)
+	RValue<Short4> operator>>=(Short4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<Short4> operator<<=(const Short4 &lhs, RValue<Long1> rhs)
+	RValue<Short4> operator<<=(Short4 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Short4> operator>>=(const Short4 &lhs, RValue<Long1> rhs)
+	RValue<Short4> operator>>=(Short4 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -3447,14 +3447,14 @@
 		storeValue(value);
 	}
 
-	RValue<UShort4> UShort4::operator=(RValue<UShort4> rhs) const
+	RValue<UShort4> UShort4::operator=(RValue<UShort4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UShort4> UShort4::operator=(const UShort4 &rhs) const
+	RValue<UShort4> UShort4::operator=(const UShort4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3462,7 +3462,7 @@
 		return RValue<UShort4>(value);
 	}
 
-	RValue<UShort4> UShort4::operator=(const Reference<UShort4> &rhs) const
+	RValue<UShort4> UShort4::operator=(const Reference<UShort4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3470,14 +3470,14 @@
 		return RValue<UShort4>(value);
 	}
 
-	RValue<UShort4> UShort4::operator=(RValue<Short4> rhs) const
+	RValue<UShort4> UShort4::operator=(RValue<Short4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return RValue<UShort4>(rhs);
 	}
 
-	RValue<UShort4> UShort4::operator=(const Short4 &rhs) const
+	RValue<UShort4> UShort4::operator=(const Short4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3485,7 +3485,7 @@
 		return RValue<UShort4>(value);
 	}
 
-	RValue<UShort4> UShort4::operator=(const Reference<Short4> &rhs) const
+	RValue<UShort4> UShort4::operator=(const Reference<Short4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3543,22 +3543,22 @@
 		assert(false && "UNIMPLEMENTED"); return RValue<UShort4>(V(nullptr));
 	}
 
-	RValue<UShort4> operator<<=(const UShort4 &lhs, unsigned char rhs)
+	RValue<UShort4> operator<<=(UShort4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UShort4> operator>>=(const UShort4 &lhs, unsigned char rhs)
+	RValue<UShort4> operator>>=(UShort4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<UShort4> operator<<=(const UShort4 &lhs, RValue<Long1> rhs)
+	RValue<UShort4> operator<<=(UShort4 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UShort4> operator>>=(const UShort4 &lhs, RValue<Long1> rhs)
+	RValue<UShort4> operator>>=(UShort4 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -3747,14 +3747,14 @@
 		assert(false && "UNIMPLEMENTED");
 	}
 
-	RValue<UShort8> UShort8::operator=(RValue<UShort8> rhs) const
+	RValue<UShort8> UShort8::operator=(RValue<UShort8> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UShort8> UShort8::operator=(const UShort8 &rhs) const
+	RValue<UShort8> UShort8::operator=(const UShort8 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3762,7 +3762,7 @@
 		return RValue<UShort8>(value);
 	}
 
-	RValue<UShort8> UShort8::operator=(const Reference<UShort8> &rhs) const
+	RValue<UShort8> UShort8::operator=(const Reference<UShort8> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3795,7 +3795,7 @@
 		return RValue<UShort8>(Nucleus::createMul(lhs.value, rhs.value));
 	}
 
-	RValue<UShort8> operator+=(const UShort8 &lhs, RValue<UShort8> rhs)
+	RValue<UShort8> operator+=(UShort8 &lhs, RValue<UShort8> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
@@ -3921,26 +3921,26 @@
 		storeValue(value);
 	}
 
-	RValue<Int> Int::operator=(int rhs) const
+	RValue<Int> Int::operator=(int rhs)
 	{
 		return RValue<Int>(storeValue(Nucleus::createConstantInt(rhs)));
 	}
 
-	RValue<Int> Int::operator=(RValue<Int> rhs) const
+	RValue<Int> Int::operator=(RValue<Int> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Int> Int::operator=(RValue<UInt> rhs) const
+	RValue<Int> Int::operator=(RValue<UInt> rhs)
 	{
 		storeValue(rhs.value);
 
 		return RValue<Int>(rhs);
 	}
 
-	RValue<Int> Int::operator=(const Int &rhs) const
+	RValue<Int> Int::operator=(const Int &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3948,7 +3948,7 @@
 		return RValue<Int>(value);
 	}
 
-	RValue<Int> Int::operator=(const Reference<Int> &rhs) const
+	RValue<Int> Int::operator=(const Reference<Int> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3956,7 +3956,7 @@
 		return RValue<Int>(value);
 	}
 
-	RValue<Int> Int::operator=(const UInt &rhs) const
+	RValue<Int> Int::operator=(const UInt &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -3964,7 +3964,7 @@
 		return RValue<Int>(value);
 	}
 
-	RValue<Int> Int::operator=(const Reference<UInt> &rhs) const
+	RValue<Int> Int::operator=(const Reference<UInt> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4022,52 +4022,52 @@
 		return RValue<Int>(Nucleus::createAShr(lhs.value, rhs.value));
 	}
 
-	RValue<Int> operator+=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator+=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Int> operator-=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator-=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Int> operator*=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator*=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<Int> operator/=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator/=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<Int> operator%=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator%=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<Int> operator&=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator&=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Int> operator|=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator|=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Int> operator^=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator^=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Int> operator<<=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator<<=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Int> operator>>=(const Int &lhs, RValue<Int> rhs)
+	RValue<Int> operator>>=(Int &lhs, RValue<Int> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -4087,27 +4087,27 @@
 		return RValue<Int>(Nucleus::createNot(val.value));
 	}
 
-	RValue<Int> operator++(const Int &val, int)   // Post-increment
+	RValue<Int> operator++(Int &val, int)   // Post-increment
 	{
 		RValue<UInt> res = val;
 		val += 1;
 		return res;
 	}
 
-	const Int &operator++(const Int &val)   // Pre-increment
+	const Int &operator++(Int &val)   // Pre-increment
 	{
 		val += 1;
 		return val;
 	}
 
-	RValue<Int> operator--(const Int &val, int)   // Post-decrement
+	RValue<Int> operator--(Int &val, int)   // Post-decrement
 	{
 		RValue<Int> res = val;
 		val -= 1;
 		return res;
 	}
 
-	const Int &operator--(const Int &val)   // Pre-decrement
+	const Int &operator--(Int &val)   // Pre-decrement
 	{
 		val -= 1;
 		return val;
@@ -4195,19 +4195,19 @@
 		storeValue(rhs.value);
 	}
 
-	RValue<Long> Long::operator=(int64_t rhs) const
+	RValue<Long> Long::operator=(int64_t rhs)
 	{
 		return RValue<Long>(storeValue(Nucleus::createConstantLong(rhs)));
 	}
 
-	RValue<Long> Long::operator=(RValue<Long> rhs) const
+	RValue<Long> Long::operator=(RValue<Long> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Long> Long::operator=(const Long &rhs) const
+	RValue<Long> Long::operator=(const Long &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4215,7 +4215,7 @@
 		return RValue<Long>(value);
 	}
 
-	RValue<Long> Long::operator=(const Reference<Long> &rhs) const
+	RValue<Long> Long::operator=(const Reference<Long> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4233,12 +4233,12 @@
 		return RValue<Long>(Nucleus::createSub(lhs.value, rhs.value));
 	}
 
-	RValue<Long> operator+=(const Long &lhs, RValue<Long> rhs)
+	RValue<Long> operator+=(Long &lhs, RValue<Long> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Long> operator-=(const Long &lhs, RValue<Long> rhs)
+	RValue<Long> operator-=(Long &lhs, RValue<Long> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
@@ -4340,26 +4340,26 @@
 		storeValue(value);
 	}
 
-	RValue<UInt> UInt::operator=(unsigned int rhs) const
+	RValue<UInt> UInt::operator=(unsigned int rhs)
 	{
 		return RValue<UInt>(storeValue(Nucleus::createConstantInt(rhs)));
 	}
 
-	RValue<UInt> UInt::operator=(RValue<UInt> rhs) const
+	RValue<UInt> UInt::operator=(RValue<UInt> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UInt> UInt::operator=(RValue<Int> rhs) const
+	RValue<UInt> UInt::operator=(RValue<Int> rhs)
 	{
 		storeValue(rhs.value);
 
 		return RValue<UInt>(rhs);
 	}
 
-	RValue<UInt> UInt::operator=(const UInt &rhs) const
+	RValue<UInt> UInt::operator=(const UInt &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4367,7 +4367,7 @@
 		return RValue<UInt>(value);
 	}
 
-	RValue<UInt> UInt::operator=(const Reference<UInt> &rhs) const
+	RValue<UInt> UInt::operator=(const Reference<UInt> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4375,7 +4375,7 @@
 		return RValue<UInt>(value);
 	}
 
-	RValue<UInt> UInt::operator=(const Int &rhs) const
+	RValue<UInt> UInt::operator=(const Int &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4383,7 +4383,7 @@
 		return RValue<UInt>(value);
 	}
 
-	RValue<UInt> UInt::operator=(const Reference<Int> &rhs) const
+	RValue<UInt> UInt::operator=(const Reference<Int> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4441,52 +4441,52 @@
 		return RValue<UInt>(Nucleus::createLShr(lhs.value, rhs.value));
 	}
 
-	RValue<UInt> operator+=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator+=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<UInt> operator-=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator-=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<UInt> operator*=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator*=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<UInt> operator/=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator/=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<UInt> operator%=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator%=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
 
-	RValue<UInt> operator&=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator&=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<UInt> operator|=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator|=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<UInt> operator^=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator^=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<UInt> operator<<=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator<<=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UInt> operator>>=(const UInt &lhs, RValue<UInt> rhs)
+	RValue<UInt> operator>>=(UInt &lhs, RValue<UInt> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -4506,27 +4506,27 @@
 		return RValue<UInt>(Nucleus::createNot(val.value));
 	}
 
-	RValue<UInt> operator++(const UInt &val, int)   // Post-increment
+	RValue<UInt> operator++(UInt &val, int)   // Post-increment
 	{
 		RValue<UInt> res = val;
 		val += 1;
 		return res;
 	}
 
-	const UInt &operator++(const UInt &val)   // Pre-increment
+	const UInt &operator++(UInt &val)   // Pre-increment
 	{
 		val += 1;
 		return val;
 	}
 
-	RValue<UInt> operator--(const UInt &val, int)   // Post-decrement
+	RValue<UInt> operator--(UInt &val, int)   // Post-decrement
 	{
 		RValue<UInt> res = val;
 		val -= 1;
 		return res;
 	}
 
-	const UInt &operator--(const UInt &val)   // Pre-decrement
+	const UInt &operator--(UInt &val)   // Pre-decrement
 	{
 		val -= 1;
 		return val;
@@ -4650,14 +4650,14 @@
 		storeValue(Nucleus::createBitCast(packed, Int2::getType()));
 	}
 
-	RValue<Int2> Int2::operator=(RValue<Int2> rhs) const
+	RValue<Int2> Int2::operator=(RValue<Int2> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Int2> Int2::operator=(const Int2 &rhs) const
+	RValue<Int2> Int2::operator=(const Int2 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4665,7 +4665,7 @@
 		return RValue<Int2>(value);
 	}
 
-	RValue<Int2> Int2::operator=(const Reference<Int2> &rhs) const
+	RValue<Int2> Int2::operator=(const Reference<Int2> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4733,62 +4733,62 @@
 		assert(false && "UNIMPLEMENTED"); return RValue<Int2>(V(nullptr));
 	}
 
-	RValue<Int2> operator+=(const Int2 &lhs, RValue<Int2> rhs)
+	RValue<Int2> operator+=(Int2 &lhs, RValue<Int2> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Int2> operator-=(const Int2 &lhs, RValue<Int2> rhs)
+	RValue<Int2> operator-=(Int2 &lhs, RValue<Int2> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-//	RValue<Int2> operator*=(const Int2 &lhs, RValue<Int2> rhs)
+//	RValue<Int2> operator*=(Int2 &lhs, RValue<Int2> rhs)
 //	{
 //		return lhs = lhs * rhs;
 //	}
 
-//	RValue<Int2> operator/=(const Int2 &lhs, RValue<Int2> rhs)
+//	RValue<Int2> operator/=(Int2 &lhs, RValue<Int2> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<Int2> operator%=(const Int2 &lhs, RValue<Int2> rhs)
+//	RValue<Int2> operator%=(Int2 &lhs, RValue<Int2> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<Int2> operator&=(const Int2 &lhs, RValue<Int2> rhs)
+	RValue<Int2> operator&=(Int2 &lhs, RValue<Int2> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Int2> operator|=(const Int2 &lhs, RValue<Int2> rhs)
+	RValue<Int2> operator|=(Int2 &lhs, RValue<Int2> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Int2> operator^=(const Int2 &lhs, RValue<Int2> rhs)
+	RValue<Int2> operator^=(Int2 &lhs, RValue<Int2> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Int2> operator<<=(const Int2 &lhs, unsigned char rhs)
+	RValue<Int2> operator<<=(Int2 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Int2> operator>>=(const Int2 &lhs, unsigned char rhs)
+	RValue<Int2> operator>>=(Int2 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<Int2> operator<<=(const Int2 &lhs, RValue<Long1> rhs)
+	RValue<Int2> operator<<=(Int2 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Int2> operator>>=(const Int2 &lhs, RValue<Long1> rhs)
+	RValue<Int2> operator>>=(Int2 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -4869,14 +4869,14 @@
 		storeValue(value);
 	}
 
-	RValue<UInt2> UInt2::operator=(RValue<UInt2> rhs) const
+	RValue<UInt2> UInt2::operator=(RValue<UInt2> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UInt2> UInt2::operator=(const UInt2 &rhs) const
+	RValue<UInt2> UInt2::operator=(const UInt2 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4884,7 +4884,7 @@
 		return RValue<UInt2>(value);
 	}
 
-	RValue<UInt2> UInt2::operator=(const Reference<UInt2> &rhs) const
+	RValue<UInt2> UInt2::operator=(const Reference<UInt2> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -4952,62 +4952,62 @@
 		assert(false && "UNIMPLEMENTED"); return RValue<UInt2>(V(nullptr));
 	}
 
-	RValue<UInt2> operator+=(const UInt2 &lhs, RValue<UInt2> rhs)
+	RValue<UInt2> operator+=(UInt2 &lhs, RValue<UInt2> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<UInt2> operator-=(const UInt2 &lhs, RValue<UInt2> rhs)
+	RValue<UInt2> operator-=(UInt2 &lhs, RValue<UInt2> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-//	RValue<UInt2> operator*=(const UInt2 &lhs, RValue<UInt2> rhs)
+//	RValue<UInt2> operator*=(UInt2 &lhs, RValue<UInt2> rhs)
 //	{
 //		return lhs = lhs * rhs;
 //	}
 
-//	RValue<UInt2> operator/=(const UInt2 &lhs, RValue<UInt2> rhs)
+//	RValue<UInt2> operator/=(UInt2 &lhs, RValue<UInt2> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<UInt2> operator%=(const UInt2 &lhs, RValue<UInt2> rhs)
+//	RValue<UInt2> operator%=(UInt2 &lhs, RValue<UInt2> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<UInt2> operator&=(const UInt2 &lhs, RValue<UInt2> rhs)
+	RValue<UInt2> operator&=(UInt2 &lhs, RValue<UInt2> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<UInt2> operator|=(const UInt2 &lhs, RValue<UInt2> rhs)
+	RValue<UInt2> operator|=(UInt2 &lhs, RValue<UInt2> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<UInt2> operator^=(const UInt2 &lhs, RValue<UInt2> rhs)
+	RValue<UInt2> operator^=(UInt2 &lhs, RValue<UInt2> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<UInt2> operator<<=(const UInt2 &lhs, unsigned char rhs)
+	RValue<UInt2> operator<<=(UInt2 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UInt2> operator>>=(const UInt2 &lhs, unsigned char rhs)
+	RValue<UInt2> operator>>=(UInt2 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<UInt2> operator<<=(const UInt2 &lhs, RValue<Long1> rhs)
+	RValue<UInt2> operator<<=(UInt2 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UInt2> operator>>=(const UInt2 &lhs, RValue<Long1> rhs)
+	RValue<UInt2> operator>>=(UInt2 &lhs, RValue<Long1> rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -5206,14 +5206,14 @@
 		*this = RValue<Int>(rhs.loadValue());
 	}
 
-	RValue<Int4> Int4::operator=(RValue<Int4> rhs) const
+	RValue<Int4> Int4::operator=(RValue<Int4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Int4> Int4::operator=(const Int4 &rhs) const
+	RValue<Int4> Int4::operator=(const Int4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5221,7 +5221,7 @@
 		return RValue<Int4>(value);
 	}
 
-	RValue<Int4> Int4::operator=(const Reference<Int4> &rhs) const
+	RValue<Int4> Int4::operator=(const Reference<Int4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5289,52 +5289,52 @@
 		return RValue<Int4>(Nucleus::createAShr(lhs.value, rhs.value));
 	}
 
-	RValue<Int4> operator+=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator+=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Int4> operator-=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator-=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Int4> operator*=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator*=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-//	RValue<Int4> operator/=(const Int4 &lhs, RValue<Int4> rhs)
+//	RValue<Int4> operator/=(Int4 &lhs, RValue<Int4> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<Int4> operator%=(const Int4 &lhs, RValue<Int4> rhs)
+//	RValue<Int4> operator%=(Int4 &lhs, RValue<Int4> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<Int4> operator&=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator&=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<Int4> operator|=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator|=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<Int4> operator^=(const Int4 &lhs, RValue<Int4> rhs)
+	RValue<Int4> operator^=(Int4 &lhs, RValue<Int4> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<Int4> operator<<=(const Int4 &lhs, unsigned char rhs)
+	RValue<Int4> operator<<=(Int4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<Int4> operator>>=(const Int4 &lhs, unsigned char rhs)
+	RValue<Int4> operator>>=(Int4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -5555,14 +5555,14 @@
 		assert(false && "UNIMPLEMENTED");
 	}
 
-	RValue<UInt4> UInt4::operator=(RValue<UInt4> rhs) const
+	RValue<UInt4> UInt4::operator=(RValue<UInt4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<UInt4> UInt4::operator=(const UInt4 &rhs) const
+	RValue<UInt4> UInt4::operator=(const UInt4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5570,7 +5570,7 @@
 		return RValue<UInt4>(value);
 	}
 
-	RValue<UInt4> UInt4::operator=(const Reference<UInt4> &rhs) const
+	RValue<UInt4> UInt4::operator=(const Reference<UInt4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5638,52 +5638,52 @@
 		return RValue<UInt4>(Nucleus::createLShr(lhs.value, rhs.value));
 	}
 
-	RValue<UInt4> operator+=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator+=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<UInt4> operator-=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator-=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<UInt4> operator*=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator*=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-//	RValue<UInt4> operator/=(const UInt4 &lhs, RValue<UInt4> rhs)
+//	RValue<UInt4> operator/=(UInt4 &lhs, RValue<UInt4> rhs)
 //	{
 //		return lhs = lhs / rhs;
 //	}
 
-//	RValue<UInt4> operator%=(const UInt4 &lhs, RValue<UInt4> rhs)
+//	RValue<UInt4> operator%=(UInt4 &lhs, RValue<UInt4> rhs)
 //	{
 //		return lhs = lhs % rhs;
 //	}
 
-	RValue<UInt4> operator&=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator&=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs & rhs;
 	}
 
-	RValue<UInt4> operator|=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator|=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs | rhs;
 	}
 
-	RValue<UInt4> operator^=(const UInt4 &lhs, RValue<UInt4> rhs)
+	RValue<UInt4> operator^=(UInt4 &lhs, RValue<UInt4> rhs)
 	{
 		return lhs = lhs ^ rhs;
 	}
 
-	RValue<UInt4> operator<<=(const UInt4 &lhs, unsigned char rhs)
+	RValue<UInt4> operator<<=(UInt4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
 	}
 
-	RValue<UInt4> operator>>=(const UInt4 &lhs, unsigned char rhs)
+	RValue<UInt4> operator>>=(UInt4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs >> rhs;
 	}
@@ -5810,14 +5810,14 @@
 		storeValue(value);
 	}
 
-	RValue<Float> Float::operator=(RValue<Float> rhs) const
+	RValue<Float> Float::operator=(RValue<Float> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Float> Float::operator=(const Float &rhs) const
+	RValue<Float> Float::operator=(const Float &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5825,7 +5825,7 @@
 		return RValue<Float>(value);
 	}
 
-	RValue<Float> Float::operator=(const Reference<Float> &rhs) const
+	RValue<Float> Float::operator=(const Reference<Float> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -5853,22 +5853,22 @@
 		return RValue<Float>(Nucleus::createFDiv(lhs.value, rhs.value));
 	}
 
-	RValue<Float> operator+=(const Float &lhs, RValue<Float> rhs)
+	RValue<Float> operator+=(Float &lhs, RValue<Float> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Float> operator-=(const Float &lhs, RValue<Float> rhs)
+	RValue<Float> operator-=(Float &lhs, RValue<Float> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Float> operator*=(const Float &lhs, RValue<Float> rhs)
+	RValue<Float> operator*=(Float &lhs, RValue<Float> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<Float> operator/=(const Float &lhs, RValue<Float> rhs)
+	RValue<Float> operator/=(Float &lhs, RValue<Float> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
@@ -6127,19 +6127,19 @@
 		*this = RValue<Float>(rhs.loadValue());
 	}
 
-	RValue<Float4> Float4::operator=(float x) const
+	RValue<Float4> Float4::operator=(float x)
 	{
 		return *this = Float4(x, x, x, x);
 	}
 
-	RValue<Float4> Float4::operator=(RValue<Float4> rhs) const
+	RValue<Float4> Float4::operator=(RValue<Float4> rhs)
 	{
 		storeValue(rhs.value);
 
 		return rhs;
 	}
 
-	RValue<Float4> Float4::operator=(const Float4 &rhs) const
+	RValue<Float4> Float4::operator=(const Float4 &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -6147,7 +6147,7 @@
 		return RValue<Float4>(value);
 	}
 
-	RValue<Float4> Float4::operator=(const Reference<Float4> &rhs) const
+	RValue<Float4> Float4::operator=(const Reference<Float4> &rhs)
 	{
 		Value *value = rhs.loadValue();
 		storeValue(value);
@@ -6155,17 +6155,17 @@
 		return RValue<Float4>(value);
 	}
 
-	RValue<Float4> Float4::operator=(RValue<Float> rhs) const
+	RValue<Float4> Float4::operator=(RValue<Float> rhs)
 	{
 		return *this = Float4(rhs);
 	}
 
-	RValue<Float4> Float4::operator=(const Float &rhs) const
+	RValue<Float4> Float4::operator=(const Float &rhs)
 	{
 		return *this = Float4(rhs);
 	}
 
-	RValue<Float4> Float4::operator=(const Reference<Float> &rhs) const
+	RValue<Float4> Float4::operator=(const Reference<Float> &rhs)
 	{
 		return *this = Float4(rhs);
 	}
@@ -6195,27 +6195,27 @@
 		return RValue<Float4>(Nucleus::createFRem(lhs.value, rhs.value));
 	}
 
-	RValue<Float4> operator+=(const Float4 &lhs, RValue<Float4> rhs)
+	RValue<Float4> operator+=(Float4 &lhs, RValue<Float4> rhs)
 	{
 		return lhs = lhs + rhs;
 	}
 
-	RValue<Float4> operator-=(const Float4 &lhs, RValue<Float4> rhs)
+	RValue<Float4> operator-=(Float4 &lhs, RValue<Float4> rhs)
 	{
 		return lhs = lhs - rhs;
 	}
 
-	RValue<Float4> operator*=(const Float4 &lhs, RValue<Float4> rhs)
+	RValue<Float4> operator*=(Float4 &lhs, RValue<Float4> rhs)
 	{
 		return lhs = lhs * rhs;
 	}
 
-	RValue<Float4> operator/=(const Float4 &lhs, RValue<Float4> rhs)
+	RValue<Float4> operator/=(Float4 &lhs, RValue<Float4> rhs)
 	{
 		return lhs = lhs / rhs;
 	}
 
-	RValue<Float4> operator%=(const Float4 &lhs, RValue<Float4> rhs)
+	RValue<Float4> operator%=(Float4 &lhs, RValue<Float4> rhs)
 	{
 		return lhs = lhs % rhs;
 	}
@@ -6455,17 +6455,17 @@
 		return RValue<Pointer<Byte>>(Nucleus::createGEP(lhs.value, Byte::getType(), offset.value));
 	}
 
-	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, int offset)
+	RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, int offset)
 	{
 		return lhs = lhs + offset;
 	}
 
-	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, RValue<Int> offset)
+	RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, RValue<Int> offset)
 	{
 		return lhs = lhs + offset;
 	}
 
-	RValue<Pointer<Byte>> operator+=(const Pointer<Byte> &lhs, RValue<UInt> offset)
+	RValue<Pointer<Byte>> operator+=(Pointer<Byte> &lhs, RValue<UInt> offset)
 	{
 		return lhs = lhs + offset;
 	}
@@ -6485,17 +6485,17 @@
 		return lhs + -offset;
 	}
 
-	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, int offset)
+	RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, int offset)
 	{
 		return lhs = lhs - offset;
 	}
 
-	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, RValue<Int> offset)
+	RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, RValue<Int> offset)
 	{
 		return lhs = lhs - offset;
 	}
 
-	RValue<Pointer<Byte>> operator-=(const Pointer<Byte> &lhs, RValue<UInt> offset)
+	RValue<Pointer<Byte>> operator-=(Pointer<Byte> &lhs, RValue<UInt> offset)
 	{
 		return lhs = lhs - offset;
 	}
diff --git a/src/Renderer/Rasterizer.hpp b/src/Renderer/Rasterizer.hpp
index 3c746c8..8d0b4fb 100644
--- a/src/Renderer/Rasterizer.hpp
+++ b/src/Renderer/Rasterizer.hpp
@@ -29,10 +29,10 @@
 		virtual ~Rasterizer() {};
 
 	protected:
-		const Pointer<Byte> primitive;
-		const Int count;
-		const Int cluster;
-		const Pointer<Byte> data;
+		Pointer<Byte> primitive;
+		Int count;
+		Int cluster;
+		Pointer<Byte> data;
 	};
 }
 
diff --git a/src/Shader/PixelRoutine.cpp b/src/Shader/PixelRoutine.cpp
index 2025da7..7e6c943 100644
--- a/src/Shader/PixelRoutine.cpp
+++ b/src/Shader/PixelRoutine.cpp
@@ -868,7 +868,7 @@
 		}
 	}
 
-	void PixelRoutine::blendFactor(const Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorActive)
+	void PixelRoutine::blendFactor(Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorActive)
 	{
 		switch(blendFactorActive)
 		{
@@ -949,7 +949,7 @@
 		}
 	}
 
-	void PixelRoutine::blendFactorAlpha(const Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorAlphaActive)
+	void PixelRoutine::blendFactorAlpha(Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorAlphaActive)
 	{
 		switch(blendFactorAlphaActive)
 		{
@@ -1899,7 +1899,7 @@
 		}
 	}
 
-	void PixelRoutine::blendFactor(const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorActive)
+	void PixelRoutine::blendFactor(Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorActive)
 	{
 		switch(blendFactorActive)
 		{
@@ -1970,7 +1970,7 @@
 		}
 	}
 
-	void PixelRoutine::blendFactorAlpha(const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorAlphaActive)
+	void PixelRoutine::blendFactorAlpha(Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorAlphaActive)
 	{
 		switch(blendFactorAlphaActive)
 		{
diff --git a/src/Shader/PixelRoutine.hpp b/src/Shader/PixelRoutine.hpp
index ba692c3..d57f2cb 100644
--- a/src/Shader/PixelRoutine.hpp
+++ b/src/Shader/PixelRoutine.hpp
@@ -76,11 +76,11 @@
 		Bool depthTest(Pointer<Byte> &zBuffer, int q, Int &x, Float4 &z, Int &sMask, Int &zMask, Int &cMask);
 
 		// Raster operations
-		void blendFactor(const Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorActive);
-		void blendFactorAlpha(const Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorAlphaActive);
+		void blendFactor(Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorActive);
+		void blendFactorAlpha(Vector4s &blendFactor, const Vector4s &current, const Vector4s &pixel, BlendFactor blendFactorAlphaActive);
 		void readPixel(int index, Pointer<Byte> &cBuffer, Int &x, Vector4s &pixel);
-		void blendFactor(const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorActive);
-		void blendFactorAlpha(const Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorAlphaActive);
+		void blendFactor(Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorActive);
+		void blendFactorAlpha(Vector4f &blendFactor, const Vector4f &oC, const Vector4f &pixel, BlendFactor blendFactorAlphaActive);
 		void writeStencil(Pointer<Byte> &sBuffer, int q, Int &x, Int &sMask, Int &zMask, Int &cMask);
 		void writeDepth(Pointer<Byte> &zBuffer, int q, Int &x, Float4 &z, Int &zMask);
 
diff --git a/src/Shader/SetupRoutine.cpp b/src/Shader/SetupRoutine.cpp
index 1845047..c31bbec 100644
--- a/src/Shader/SetupRoutine.cpp
+++ b/src/Shader/SetupRoutine.cpp
@@ -555,25 +555,23 @@
 		}
 	}
 
-	void SetupRoutine::edge(Pointer<Byte> &primitive, Pointer<Byte> &data, const Int &X1, const Int &Y1, const Int &X2, const Int &Y2, Int &q)
+	void SetupRoutine::edge(Pointer<Byte> &primitive, Pointer<Byte> &data, const Int &Xa, const Int &Ya, const Int &Xb, const Int &Yb, Int &q)
 	{
-		If(Y1 != Y2)
+		If(Ya != Yb)
 		{
 			Int xMin = *Pointer<Int>(data + OFFSET(DrawData,scissorX0));
 			Int xMax = *Pointer<Int>(data + OFFSET(DrawData,scissorX1));
 
-			Bool swap = Y2 < Y1;
+			Bool swap = Yb < Ya;
 
 			Pointer<Byte> leftEdge = primitive + q * sizeof(Primitive) + OFFSET(Primitive,outline->left);
 			Pointer<Byte> rightEdge = primitive + q * sizeof(Primitive) + OFFSET(Primitive,outline->right);
 			Pointer<Byte> edge = IfThenElse(swap, rightEdge, leftEdge);
 
-			Int X0 = X1;
-			Int Y0 = Y1;
-			X1 = IfThenElse(swap, X2, X1);
-			X2 = IfThenElse(swap, X0, X2);
-			Y1 = IfThenElse(swap, Y2, Y1);
-			Y2 = IfThenElse(swap, Y0, Y2);
+			Int X1 = IfThenElse(swap, Xb, Xa);
+			Int X2 = IfThenElse(swap, Xa, Xb);
+			Int Y1 = IfThenElse(swap, Yb, Ya);
+			Int Y2 = IfThenElse(swap, Ya, Yb);
 
 			Int y1 = Max((Y1 + 0x0000000F) >> 4, *Pointer<Int>(data + OFFSET(DrawData,scissorY0)));
 			Int y2 = Min((Y2 + 0x0000000F) >> 4, *Pointer<Int>(data + OFFSET(DrawData,scissorY1)));
diff --git a/src/Shader/SetupRoutine.hpp b/src/Shader/SetupRoutine.hpp
index ac31299..ebcc080 100644
--- a/src/Shader/SetupRoutine.hpp
+++ b/src/Shader/SetupRoutine.hpp
@@ -34,7 +34,7 @@
 
 	private:
 		void setupGradient(Pointer<Byte> &primitive, Pointer<Byte> &triangle, Float4 &w012, Float4 (&m)[3], Pointer<Byte> &v0, Pointer<Byte> &v1, Pointer<Byte> &v2, int attribute, int planeEquation, bool flatShading, bool sprite, bool perspective, bool wrap, int component);
-		void edge(Pointer<Byte> &primitive, Pointer<Byte> &data, const Int &X1, const Int &Y1, const Int &X2, const Int &Y2, Int &q);
+		void edge(Pointer<Byte> &primitive, Pointer<Byte> &data, const Int &Xa, const Int &Ya, const Int &Xb, const Int &Yb, Int &q);
 		void conditionalRotate1(Bool condition, Pointer<Byte> &v0, Pointer<Byte> &v1, Pointer<Byte> &v2);
 		void conditionalRotate2(Bool condition, Pointer<Byte> &v0, Pointer<Byte> &v1, Pointer<Byte> &v2);
 
diff --git a/src/Shader/VertexRoutine.hpp b/src/Shader/VertexRoutine.hpp
index 4aec45f..dd4bf13 100644
--- a/src/Shader/VertexRoutine.hpp
+++ b/src/Shader/VertexRoutine.hpp
@@ -29,10 +29,10 @@
 		virtual ~VertexRoutinePrototype() {};
 
 	protected:
-		const Pointer<Byte> vertex;
-		const Pointer<Byte> batch;
-		const Pointer<Byte> task;
-		const Pointer<Byte> data;
+		Pointer<Byte> vertex;
+		Pointer<Byte> batch;
+		Pointer<Byte> task;
+		Pointer<Byte> data;
 	};
 
 	class VertexRoutine : public VertexRoutinePrototype