Commit fff3c9bc by Nicolas Capens

Implement Concatenate() and Insert() for Int2.

Change-Id: I2f5bbf0cab904a9500a6219bd6a218cb877611fa Reviewed-on: https://swiftshader-review.googlesource.com/3142Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent ed4ca6e9
......@@ -4824,6 +4824,17 @@ namespace sw
}
}
RValue<Int2> Concatenate(RValue<Int> lo, RValue<Int> hi)
{
Constant *shuffle[2];
shuffle[0] = Nucleus::createConstantInt(0);
shuffle[1] = Nucleus::createConstantInt(1);
Value *packed = Nucleus::createShuffleVector(Nucleus::createBitCast(lo.value, VectorType::get(Int::getType(), 1)), Nucleus::createBitCast(hi.value, VectorType::get(Int::getType(), 1)), Nucleus::createConstantVector(shuffle, 2));
return RValue<Int2>(Nucleus::createBitCast(packed, Int2::getType()));
}
RValue<Int> Extract(RValue<Int2> val, int i)
{
if(false) // FIXME: LLVM does not generate optimal code
......@@ -4845,11 +4856,10 @@ namespace sw
}
}
// FIXME: Crashes LLVM
// RValue<Int2> Insert(RValue<Int2> val, RValue<Int> element, int i)
// {
// return RValue<Int2>(Nucleus::createInsertElement(val.value, element.value, Nucleus::createConstantInt(i)));
// }
RValue<Int2> Insert(RValue<Int2> val, RValue<Int> element, int i)
{
return RValue<Int2>(Nucleus::createBitCast(Nucleus::createInsertElement(Nucleus::createBitCast(val.value, VectorType::get(Int::getType(), 2)), element.value, i), Int2::getType()));
}
Type *Int2::getType()
{
......
......@@ -1555,8 +1555,9 @@ namespace sw
// RValue<Int2> RoundInt(RValue<Float4> cast);
RValue<Long1> UnpackLow(RValue<Int2> x, RValue<Int2> y);
RValue<Long1> UnpackHigh(RValue<Int2> x, RValue<Int2> y);
RValue<Int2> Concatenate(RValue<Int> lo, RValue<Int> hi);
RValue<Int> Extract(RValue<Int2> val, int i);
// RValue<Int2> Insert(RValue<Int2> val, RValue<Int> element, int i);
RValue<Int2> Insert(RValue<Int2> val, RValue<Int> element, int i);
class UInt2 : public Variable<UInt2>
{
......
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