Commit d9d27bbe by Alexis Hetu Committed by Alexis Hétu

Added missing Nucleus level operations

Very few operations were missing in Nucleus for integer types support, but there were a few nonetheless, so Int4 and UInt4 now have new operators: divide, modulo, right shift (from non constant) and left shift (from non constant). These were simply un-commented out as they were already there, just commented out. Change-Id: I4c124c9297cd4d3d755c37f11168a43dcfeee290 Reviewed-on: https://swiftshader-review.googlesource.com/3886Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 9a74a0e0
...@@ -5264,15 +5264,15 @@ namespace sw ...@@ -5264,15 +5264,15 @@ namespace sw
return RValue<Int4>(Nucleus::createMul(lhs.value, rhs.value)); return RValue<Int4>(Nucleus::createMul(lhs.value, rhs.value));
} }
// RValue<Int4> operator/(RValue<Int4> lhs, RValue<Int4> rhs) RValue<Int4> operator/(RValue<Int4> lhs, RValue<Int4> rhs)
// { {
// return RValue<Int4>(Nucleus::createSDiv(lhs.value, rhs.value)); return RValue<Int4>(Nucleus::createSDiv(lhs.value, rhs.value));
// } }
// RValue<Int4> operator%(RValue<Int4> lhs, RValue<Int4> rhs) RValue<Int4> operator%(RValue<Int4> lhs, RValue<Int4> rhs)
// { {
// return RValue<Int4>(Nucleus::createSRem(lhs.value, rhs.value)); return RValue<Int4>(Nucleus::createSRem(lhs.value, rhs.value));
// } }
RValue<Int4> operator&(RValue<Int4> lhs, RValue<Int4> rhs) RValue<Int4> operator&(RValue<Int4> lhs, RValue<Int4> rhs)
{ {
...@@ -5291,18 +5291,24 @@ namespace sw ...@@ -5291,18 +5291,24 @@ namespace sw
RValue<Int4> operator<<(RValue<Int4> lhs, unsigned char rhs) RValue<Int4> operator<<(RValue<Int4> lhs, unsigned char rhs)
{ {
// return RValue<Int4>(Nucleus::createShl(lhs.value, rhs.value));
return x86::pslld(lhs, rhs); return x86::pslld(lhs, rhs);
} }
RValue<Int4> operator>>(RValue<Int4> lhs, unsigned char rhs) RValue<Int4> operator>>(RValue<Int4> lhs, unsigned char rhs)
{ {
// return RValue<Int4>(Nucleus::createAShr(lhs.value, rhs.value));
return x86::psrad(lhs, rhs); return x86::psrad(lhs, rhs);
} }
RValue<Int4> operator<<(RValue<Int4> lhs, RValue<Int4> rhs)
{
return RValue<Int4>(Nucleus::createShl(lhs.value, rhs.value));
}
RValue<Int4> operator>>(RValue<Int4> lhs, RValue<Int4> rhs)
{
return RValue<Int4>(Nucleus::createAShr(lhs.value, rhs.value));
}
RValue<Int4> operator+=(const Int4 &lhs, RValue<Int4> rhs) RValue<Int4> operator+=(const Int4 &lhs, RValue<Int4> rhs)
{ {
return lhs = lhs + rhs; return lhs = lhs + rhs;
...@@ -5603,15 +5609,15 @@ namespace sw ...@@ -5603,15 +5609,15 @@ namespace sw
return RValue<UInt4>(Nucleus::createMul(lhs.value, rhs.value)); return RValue<UInt4>(Nucleus::createMul(lhs.value, rhs.value));
} }
// RValue<UInt4> operator/(RValue<UInt4> lhs, RValue<UInt4> rhs) RValue<UInt4> operator/(RValue<UInt4> lhs, RValue<UInt4> rhs)
// { {
// return RValue<UInt4>(Nucleus::createUDiv(lhs.value, rhs.value)); return RValue<UInt4>(Nucleus::createUDiv(lhs.value, rhs.value));
// } }
// RValue<UInt4> operator%(RValue<UInt4> lhs, RValue<UInt4> rhs) RValue<UInt4> operator%(RValue<UInt4> lhs, RValue<UInt4> rhs)
// { {
// return RValue<UInt4>(Nucleus::createURem(lhs.value, rhs.value)); return RValue<UInt4>(Nucleus::createURem(lhs.value, rhs.value));
// } }
RValue<UInt4> operator&(RValue<UInt4> lhs, RValue<UInt4> rhs) RValue<UInt4> operator&(RValue<UInt4> lhs, RValue<UInt4> rhs)
{ {
...@@ -5630,18 +5636,24 @@ namespace sw ...@@ -5630,18 +5636,24 @@ namespace sw
RValue<UInt4> operator<<(RValue<UInt4> lhs, unsigned char rhs) RValue<UInt4> operator<<(RValue<UInt4> lhs, unsigned char rhs)
{ {
// return RValue<UInt4>(Nucleus::createShl(lhs.value, rhs.value));
return As<UInt4>(x86::pslld(As<Int4>(lhs), rhs)); return As<UInt4>(x86::pslld(As<Int4>(lhs), rhs));
} }
RValue<UInt4> operator>>(RValue<UInt4> lhs, unsigned char rhs) RValue<UInt4> operator>>(RValue<UInt4> lhs, unsigned char rhs)
{ {
// return RValue<UInt4>(Nucleus::createLShr(lhs.value, rhs.value));
return x86::psrld(lhs, rhs); return x86::psrld(lhs, rhs);
} }
RValue<UInt4> operator<<(RValue<UInt4> lhs, RValue<UInt4> rhs)
{
return RValue<UInt4>(Nucleus::createShl(lhs.value, rhs.value));
}
RValue<UInt4> operator>>(RValue<UInt4> lhs, RValue<UInt4> rhs)
{
return RValue<UInt4>(Nucleus::createLShr(lhs.value, rhs.value));
}
RValue<UInt4> operator+=(const UInt4 &lhs, RValue<UInt4> rhs) RValue<UInt4> operator+=(const UInt4 &lhs, RValue<UInt4> rhs)
{ {
return lhs = lhs + rhs; return lhs = lhs + rhs;
......
...@@ -1645,13 +1645,15 @@ namespace sw ...@@ -1645,13 +1645,15 @@ namespace sw
RValue<Int4> operator+(RValue<Int4> lhs, RValue<Int4> rhs); RValue<Int4> operator+(RValue<Int4> lhs, RValue<Int4> rhs);
RValue<Int4> operator-(RValue<Int4> lhs, RValue<Int4> rhs); RValue<Int4> operator-(RValue<Int4> lhs, RValue<Int4> rhs);
RValue<Int4> operator*(RValue<Int4> lhs, RValue<Int4> rhs); RValue<Int4> operator*(RValue<Int4> lhs, RValue<Int4> rhs);
// RValue<Int4> operator/(RValue<Int4> lhs, RValue<Int4> rhs); RValue<Int4> operator/(RValue<Int4> lhs, RValue<Int4> rhs);
// RValue<Int4> operator%(RValue<Int4> lhs, RValue<Int4> rhs); RValue<Int4> operator%(RValue<Int4> lhs, RValue<Int4> rhs);
RValue<Int4> operator&(RValue<Int4> lhs, RValue<Int4> rhs); RValue<Int4> operator&(RValue<Int4> lhs, RValue<Int4> rhs);
RValue<Int4> operator|(RValue<Int4> lhs, RValue<Int4> rhs); RValue<Int4> operator|(RValue<Int4> lhs, RValue<Int4> rhs);
RValue<Int4> operator^(RValue<Int4> lhs, RValue<Int4> rhs); RValue<Int4> operator^(RValue<Int4> lhs, RValue<Int4> rhs);
RValue<Int4> operator<<(RValue<Int4> lhs, unsigned char rhs); RValue<Int4> operator<<(RValue<Int4> lhs, unsigned char rhs);
RValue<Int4> operator>>(RValue<Int4> lhs, unsigned char rhs); 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);
...@@ -1723,13 +1725,15 @@ namespace sw ...@@ -1723,13 +1725,15 @@ namespace sw
RValue<UInt4> operator+(RValue<UInt4> lhs, RValue<UInt4> rhs); RValue<UInt4> operator+(RValue<UInt4> lhs, RValue<UInt4> rhs);
RValue<UInt4> operator-(RValue<UInt4> lhs, RValue<UInt4> rhs); RValue<UInt4> operator-(RValue<UInt4> lhs, RValue<UInt4> rhs);
RValue<UInt4> operator*(RValue<UInt4> lhs, RValue<UInt4> rhs); RValue<UInt4> operator*(RValue<UInt4> lhs, RValue<UInt4> rhs);
// RValue<UInt4> operator/(RValue<UInt4> lhs, RValue<UInt4> rhs); RValue<UInt4> operator/(RValue<UInt4> lhs, RValue<UInt4> rhs);
// RValue<UInt4> operator%(RValue<UInt4> lhs, RValue<UInt4> rhs); RValue<UInt4> operator%(RValue<UInt4> lhs, RValue<UInt4> rhs);
RValue<UInt4> operator&(RValue<UInt4> lhs, RValue<UInt4> rhs); RValue<UInt4> operator&(RValue<UInt4> lhs, RValue<UInt4> rhs);
RValue<UInt4> operator|(RValue<UInt4> lhs, RValue<UInt4> rhs); RValue<UInt4> operator|(RValue<UInt4> lhs, RValue<UInt4> rhs);
RValue<UInt4> operator^(RValue<UInt4> lhs, RValue<UInt4> rhs); RValue<UInt4> operator^(RValue<UInt4> lhs, RValue<UInt4> rhs);
RValue<UInt4> operator<<(RValue<UInt4> lhs, unsigned char rhs); RValue<UInt4> operator<<(RValue<UInt4> lhs, unsigned char rhs);
RValue<UInt4> operator>>(RValue<UInt4> lhs, unsigned char rhs); 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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment