[a64] Fix `OPCODE_MAX`

Was not handling constant arguments properly
This commit is contained in:
Wunkolo 2024-05-12 09:02:51 -07:00
parent be0c7932ad
commit 28b629e529
1 changed files with 12 additions and 3 deletions

View File

@ -490,17 +490,26 @@ EMITTER_OPCODE_TABLE(OPCODE_CONTEXT_BARRIER, CONTEXT_BARRIER);
// ============================================================================
struct MAX_F32 : Sequence<MAX_F32, I<OPCODE_MAX, F32Op, F32Op, F32Op>> {
static void Emit(A64Emitter& e, const EmitArgType& i) {
e.FMAX(i.dest, i.src1, i.src2);
EmitCommutativeBinaryVOp<SReg>(
e, i, [](A64Emitter& e, SReg dest, SReg src1, SReg src2) {
e.FMAX(dest, src1, src2);
});
}
};
struct MAX_F64 : Sequence<MAX_F64, I<OPCODE_MAX, F64Op, F64Op, F64Op>> {
static void Emit(A64Emitter& e, const EmitArgType& i) {
e.FMAX(i.dest, i.src1, i.src2);
EmitCommutativeBinaryVOp<DReg>(
e, i, [](A64Emitter& e, DReg dest, DReg src1, DReg src2) {
e.FMAX(dest, src1, src2);
});
}
};
struct MAX_V128 : Sequence<MAX_V128, I<OPCODE_MAX, V128Op, V128Op, V128Op>> {
static void Emit(A64Emitter& e, const EmitArgType& i) {
e.FMAX(i.dest.reg().S4(), i.src1.reg().S4(), i.src2.reg().S4());
EmitCommutativeBinaryVOp<QReg>(
e, i, [](A64Emitter& e, QReg dest, QReg src1, QReg src2) {
e.FMAX(dest.S4(), src1.S4(), src2.S4());
});
}
};
EMITTER_OPCODE_TABLE(OPCODE_MAX, MAX_F32, MAX_F64, MAX_V128);