Interpreter: Handle 256-bit VBic

This commit is contained in:
lioncash committed 2022-09-15 16:18:14 +00:00
1 parent 5622bcae16
commit ecb1cc4ed4
1 file changed
+19 -5
@@ -95,12 +95,26 @@ DEF_OP(VAnd) {
}
DEF_OP(VBic) {
auto Op = IROp->C<IR::IROp_VBic>();
const auto Src1 = *GetSrc<__uint128_t*>(Data->SSAData, Op->Vector1);
const auto Src2 = *GetSrc<__uint128_t*>(Data->SSAData, Op->Vector2);
const auto Op = IROp->C<IR::IROp_VBic>();
const auto OpSize = IROp->Size;
const auto Dst = Src1 & ~Src2;
memcpy(GDP, &Dst, 16);
if (OpSize == 32) {
const auto Src1 = *GetSrc<InterpVector256*>(Data->SSAData, Op->Vector1);
const auto Src2 = *GetSrc<InterpVector256*>(Data->SSAData, Op->Vector2);
const auto Dst = InterpVector256{
.Lower = Src1.Lower & ~Src2.Lower,
.Upper = Src1.Upper & ~Src2.Upper,
};
memcpy(GDP, &Dst, sizeof(Dst));
} else {
const auto Src1 = *GetSrc<__uint128_t*>(Data->SSAData, Op->Vector1);
const auto Src2 = *GetSrc<__uint128_t*>(Data->SSAData, Op->Vector2);
const auto Dst = Src1 & ~Src2;
memcpy(GDP, &Dst, sizeof(Dst));
}
}
DEF_OP(VOr) {