Implement additional types.
Bug swiftshader:6
Change-Id: I6443479e34b0819de45196c61a2e9fc0bf0e84d7
Reviewed-on: https://swiftshader-review.googlesource.com/7752
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-on: https://swiftshader-review.googlesource.com/8134
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
index 11ffaf2..67d5edb 100644
--- a/src/Reactor/SubzeroReactor.cpp
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -66,6 +66,7 @@
Type_v2i16 = Ice::IceType_v8i16 | EmulatedV2,
Type_v8i8 = Ice::IceType_v16i8 | EmulatedV8,
Type_v4i8 = Ice::IceType_v16i8 | EmulatedV4,
+ Type_v2f32 = Ice::IceType_v4f32 | EmulatedV2,
};
class Value : public Ice::Variable {};
@@ -671,6 +672,7 @@
case Type_v2i32:
case Type_v8i8:
case Type_v4i16:
+ case Type_v2f32:
{
const Ice::Intrinsics::IntrinsicInfo intrinsic = {Ice::Intrinsics::LoadSubVector, Ice::Intrinsics::SideEffects_F, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_F};
auto target = ::context->getConstantUndef(Ice::IceType_i32);
@@ -715,6 +717,7 @@
case Type_v2i32:
case Type_v8i8:
case Type_v4i16:
+ case Type_v2f32:
{
const Ice::Intrinsics::IntrinsicInfo intrinsic = {Ice::Intrinsics::StoreSubVector, Ice::Intrinsics::SideEffects_T, Ice::Intrinsics::ReturnsTwice_F, Ice::Intrinsics::MemoryWrite_T};
auto target = ::context->getConstantUndef(Ice::IceType_i32);
@@ -1154,6 +1157,7 @@
}
break;
case Type_v2i32:
+ case Type_v2f32:
{
const int initializer[4] = {(int)c[0], (int)c[1], (int)c[0], (int)c[1]};
static_assert(sizeof(initializer) == vectorSize, "!");
@@ -1285,7 +1289,7 @@
Type *Bool::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Ice::IceType_i1);
}
Byte::Byte(Argument<Byte> argument)
@@ -1800,7 +1804,7 @@
Type *SByte::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Ice::IceType_i8);
}
Short::Short(Argument<Short> argument)
@@ -2047,7 +2051,7 @@
Type *Short::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Ice::IceType_i16);
}
UShort::UShort(Argument<UShort> argument)
@@ -2301,7 +2305,7 @@
Type *UShort::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Ice::IceType_i16);
}
Byte4::Byte4(RValue<Byte8> cast)
@@ -2325,7 +2329,7 @@
Type *SByte4::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Type_v4i8);
}
Byte8::Byte8()
@@ -2751,7 +2755,7 @@
Type *SByte8::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Type_v8i8);
}
Byte16::Byte16(RValue<Byte16> rhs)
@@ -3489,7 +3493,7 @@
Type *Short8::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Ice::IceType_v8i16);
}
UShort8::UShort8(unsigned short c0, unsigned short c1, unsigned short c2, unsigned short c3, unsigned short c4, unsigned short c5, unsigned short c6, unsigned short c7)
@@ -3590,7 +3594,7 @@
Type *UShort8::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Ice::IceType_v8i16);
}
Int::Int(Argument<Int> argument)
@@ -4013,7 +4017,7 @@
Type *Long::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Ice::IceType_i64);
}
Long1::Long1(const RValue<UInt> cast)
@@ -4341,7 +4345,7 @@
Type *UInt::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Ice::IceType_i32);
}
// Int2::Int2(RValue<Int> cast)
@@ -4783,7 +4787,7 @@
Type *UInt2::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Type_v2i32);
}
Int4::Int4(RValue<Byte4> cast)
@@ -5429,7 +5433,7 @@
Type *UInt4::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Ice::IceType_v4i32);
}
Float::Float(RValue<Int> cast)
@@ -5635,7 +5639,7 @@
Type *Float2::getType()
{
- assert(false && "UNIMPLEMENTED"); return nullptr;
+ return T(Type_v2f32);
}
Float4::Float4(RValue<Byte4> cast)