Implement Int to Int4 conversion.
BUG=swiftshader:3
Change-Id: I114384fc0e25ee1f7874f726b85ef5bcaf01ed36
Reviewed-on: https://swiftshader-review.googlesource.com/6951
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Reactor/Nucleus.cpp b/src/Reactor/Nucleus.cpp
index 2c18dc7..c7b94f7 100644
--- a/src/Reactor/Nucleus.cpp
+++ b/src/Reactor/Nucleus.cpp
@@ -5394,6 +5394,8 @@
Int4::Int4(RValue<Int2> lo, RValue<Int2> hi)
{
+ // xyzw.parent = this;
+
Value *loLong = Nucleus::createBitCast(lo.value, Long::getType());
Value *hiLong = Nucleus::createBitCast(hi.value, Long::getType());
@@ -5405,6 +5407,38 @@
storeValue(int4);
}
+ Int4::Int4(RValue<Int> rhs)
+ {
+ // xyzw.parent = this;
+
+ Value *vector = loadValue();
+ Value *insert = Nucleus::createInsertElement(vector, rhs.value, 0);
+
+ Constant *swizzle[4];
+ swizzle[0] = Nucleus::createConstantInt(0);
+ swizzle[1] = Nucleus::createConstantInt(0);
+ swizzle[2] = Nucleus::createConstantInt(0);
+ swizzle[3] = Nucleus::createConstantInt(0);
+
+ Value *replicate = Nucleus::createShuffleVector(insert, UndefValue::get(Int4::getType()), Nucleus::createConstantVector(swizzle, 4));
+
+ storeValue(replicate);
+ }
+
+ Int4::Int4(const Int &rhs)
+ {
+ // xyzw.parent = this;
+
+ *this = RValue<Int>(rhs.loadValue());
+ }
+
+ Int4::Int4(const Reference<Int> &rhs)
+ {
+ // xyzw.parent = this;
+
+ *this = RValue<Int>(rhs.loadValue());
+ }
+
RValue<Int4> Int4::operator=(RValue<Int4> rhs) const
{
storeValue(rhs.value);