Implement increment/decrement operators.
Bug swiftshader:6
Change-Id: Ie59ca6e16eb82b84b01d9f47e5168fce7614084e
Reviewed-on: https://swiftshader-review.googlesource.com/7953
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-on: https://swiftshader-review.googlesource.com/8158
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
index d3ff61e..13c01c6 100644
--- a/src/Reactor/SubzeroReactor.cpp
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -1529,32 +1529,26 @@
RValue<Byte> operator++(const Byte &val, int) // Post-increment
{
RValue<Byte> res = val;
-
- assert(false && "UNIMPLEMENTED");
-
+ val += Byte(1);
return res;
}
const Byte &operator++(const Byte &val) // Pre-increment
{
- assert(false && "UNIMPLEMENTED");
-
+ val += Byte(1);
return val;
}
RValue<Byte> operator--(const Byte &val, int) // Post-decrement
{
RValue<Byte> res = val;
-
- assert(false && "UNIMPLEMENTED");
-
+ val -= Byte(1);
return res;
}
const Byte &operator--(const Byte &val) // Pre-decrement
{
- assert(false && "UNIMPLEMENTED");
-
+ val -= Byte(1);
return val;
}
@@ -1779,35 +1773,26 @@
RValue<SByte> operator++(const SByte &val, int) // Post-increment
{
RValue<SByte> res = val;
-
- assert(false && "UNIMPLEMENTED");
-
+ val += SByte(1);
return res;
}
const SByte &operator++(const SByte &val) // Pre-increment
{
- assert(false && "UNIMPLEMENTED");
- assert(false && "UNIMPLEMENTED");
-
+ val += SByte(1);
return val;
}
RValue<SByte> operator--(const SByte &val, int) // Post-decrement
{
RValue<SByte> res = val;
-
- assert(false && "UNIMPLEMENTED");
- assert(false && "UNIMPLEMENTED");
-
+ val -= SByte(1);
return res;
}
const SByte &operator--(const SByte &val) // Pre-decrement
{
- assert(false && "UNIMPLEMENTED");
- assert(false && "UNIMPLEMENTED");
-
+ val -= SByte(1);
return val;
}
@@ -2025,36 +2010,26 @@
RValue<Short> operator++(const Short &val, int) // Post-increment
{
RValue<Short> res = val;
-
- assert(false && "UNIMPLEMENTED");
- assert(false && "UNIMPLEMENTED");
-
+ val += Short(1);
return res;
}
const Short &operator++(const Short &val) // Pre-increment
{
- assert(false && "UNIMPLEMENTED");
- assert(false && "UNIMPLEMENTED");
-
+ val += Short(1);
return val;
}
RValue<Short> operator--(const Short &val, int) // Post-decrement
{
RValue<Short> res = val;
-
- assert(false && "UNIMPLEMENTED");
- assert(false && "UNIMPLEMENTED");
-
+ val -= Short(1);
return res;
}
const Short &operator--(const Short &val) // Pre-decrement
{
- assert(false && "UNIMPLEMENTED");
- assert(false && "UNIMPLEMENTED");
-
+ val -= Short(1);
return val;
}
@@ -2279,36 +2254,26 @@
RValue<UShort> operator++(const UShort &val, int) // Post-increment
{
RValue<UShort> res = val;
-
- assert(false && "UNIMPLEMENTED");
- assert(false && "UNIMPLEMENTED");
-
+ val += UShort(1);
return res;
}
const UShort &operator++(const UShort &val) // Pre-increment
{
- assert(false && "UNIMPLEMENTED");
- assert(false && "UNIMPLEMENTED");
-
+ val += UShort(1);
return val;
}
RValue<UShort> operator--(const UShort &val, int) // Post-decrement
{
RValue<UShort> res = val;
-
- assert(false && "UNIMPLEMENTED");
- assert(false && "UNIMPLEMENTED");
-
+ val -= UShort(1);
return res;
}
const UShort &operator--(const UShort &val) // Pre-decrement
{
- assert(false && "UNIMPLEMENTED");
- assert(false && "UNIMPLEMENTED");
-
+ val -= UShort(1);
return val;
}
@@ -2358,7 +2323,8 @@
{
// xyzw.parent = this;
- assert(false && "UNIMPLEMENTED");
+ Value *value = rhs.loadValue();
+ storeValue(value);
}
Type *Byte4::getType()
@@ -3973,28 +3939,28 @@
RValue<Int> operator++(const Int &val, int) // Post-increment
{
- auto oldValue = val.loadValue();
- auto newValue = ::function->makeVariable(Ice::IceType_i32);
- auto inc = Ice::InstArithmetic::create(::function, Ice::InstArithmetic::Add, newValue, oldValue, ::context->getConstantInt32(1));
- ::basicBlock->appendInst(inc);
- val.storeValue(V(newValue));
-
- return RValue<Int>(oldValue);
+ RValue<UInt> res = val;
+ val += 1;
+ return res;
}
const Int &operator++(const Int &val) // Pre-increment
{
- assert(false && "UNIMPLEMENTED"); return val;
+ val += 1;
+ return val;
}
RValue<Int> operator--(const Int &val, int) // Post-decrement
{
- assert(false && "UNIMPLEMENTED"); return RValue<Int>(V(nullptr));
+ RValue<Int> res = val;
+ val -= 1;
+ return res;
}
const Int &operator--(const Int &val) // Pre-decrement
{
- assert(false && "UNIMPLEMENTED"); return val;
+ val -= 1;
+ return val;
}
RValue<Bool> operator<(RValue<Int> lhs, RValue<Int> rhs)
@@ -4388,22 +4354,28 @@
RValue<UInt> operator++(const UInt &val, int) // Post-increment
{
- assert(false && "UNIMPLEMENTED"); return RValue<UInt>(V(nullptr));
+ RValue<UInt> res = val;
+ val += 1;
+ return res;
}
const UInt &operator++(const UInt &val) // Pre-increment
{
- assert(false && "UNIMPLEMENTED"); return val;
+ val += 1;
+ return val;
}
RValue<UInt> operator--(const UInt &val, int) // Post-decrement
{
- assert(false && "UNIMPLEMENTED"); return RValue<UInt>(V(nullptr));
+ RValue<UInt> res = val;
+ val -= 1;
+ return res;
}
const UInt &operator--(const UInt &val) // Pre-decrement
{
- assert(false && "UNIMPLEMENTED"); return val;
+ val -= 1;
+ return val;
}
RValue<UInt> Max(RValue<UInt> x, RValue<UInt> y)