Implement remaining vector extract/insert operations. Bug swiftshader:15 Change-Id: I9ed683b6d122183c4313d2bf609fd7c14bf5e387 Reviewed-on: https://swiftshader-review.googlesource.com/7958 Reviewed-by: Nicolas Capens <capn@google.com> Tested-by: Nicolas Capens <capn@google.com> Reviewed-on: https://swiftshader-review.googlesource.com/8163 Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp index 4305776..198d589 100644 --- a/src/Reactor/SubzeroReactor.cpp +++ b/src/Reactor/SubzeroReactor.cpp
@@ -3307,12 +3307,12 @@ RValue<Short4> Insert(RValue<Short4> val, RValue<Short> element, int i) { - assert(false && "UNIMPLEMENTED"); return RValue<Short4>(V(nullptr)); + return RValue<Short4>(Nucleus::createInsertElement(val.value, element.value, i)); } RValue<Short> Extract(RValue<Short4> val, int i) { - assert(false && "UNIMPLEMENTED"); return RValue<Short>(V(nullptr)); + return RValue<Short>(Nucleus::createExtractElement(val.value, Int::getType(), i)); } RValue<Short4> CmpGT(RValue<Short4> x, RValue<Short4> y) @@ -4776,12 +4776,12 @@ RValue<Int> Extract(RValue<Int2> val, int i) { - assert(false && "UNIMPLEMENTED"); return RValue<Int>(V(nullptr)); + return RValue<Int>(Nucleus::createExtractElement(val.value, Int::getType(), i)); } RValue<Int2> Insert(RValue<Int2> val, RValue<Int> element, int i) { - assert(false && "UNIMPLEMENTED"); return RValue<Int2>(V(nullptr)); + return RValue<Int2>(Nucleus::createInsertElement(val.value, element.value, i)); } Type *Int2::getType() @@ -6187,14 +6187,9 @@ return RValue<Float4>(V(result)); } - RValue<Float4> Insert(const Float4 &val, RValue<Float> element, int i) + RValue<Float4> Insert(RValue<Float4> x, RValue<Float> element, int i) { - Value *value = val.loadValue(); - Value *insert = Nucleus::createInsertElement(value, element.value, i); - - val = RValue<Float4>(insert); - - return val; + return RValue<Float4>(Nucleus::createInsertElement(x.value, element.value, i)); } RValue<Float> Extract(RValue<Float4> x, int i)