diff --git a/src/frontend/A64/translate/impl/simd_three_same.cpp b/src/frontend/A64/translate/impl/simd_three_same.cpp index ad27bbe4..15d93fe6 100644 --- a/src/frontend/A64/translate/impl/simd_three_same.cpp +++ b/src/frontend/A64/translate/impl/simd_three_same.cpp @@ -123,9 +123,12 @@ bool TranslatorVisitor::ORN_asimd(bool Q, Vec Vm, Vec Vn, Vec Vd) { auto operand1 = V(datasize, Vn); auto operand2 = V(datasize, Vm); - // TODO: This does not zero the upper 64 bits when datasize == 64. This may break future optimization passes. auto result = ir.VectorOr(operand1, ir.VectorNot(operand2)); + if (datasize == 64) { + result = ir.VectorZeroUpper(result); + } + V(datasize, Vd, result); return true;