diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_emit_shift.c | 8 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_helper.h | 1 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_emit_shift.c b/src/dynarec/arm64/dynarec_arm64_emit_shift.c index d69231ee..5b9e82af 100644 --- a/src/dynarec/arm64/dynarec_arm64_emit_shift.c +++ b/src/dynarec/arm64/dynarec_arm64_emit_shift.c @@ -309,7 +309,7 @@ void emit_shl8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) COMP_ZFSF(s1, 8) IFX(X_OF) { CMPSw_U12(s2, 1); // if s2==1 - IFX(X_SF && !arm64_flagm) {} else {LSRw(s3, s1, 7);} + IFX2(X_SF, && !arm64_flagm) {} else {LSRw(s3, s1, 7);} EORw_REG(s4, s3, xFlags); // CF is set if OF is asked CSELw(s4, s4, wZR, cEQ); BFIw(xFlags, s4, F_OF, 1); @@ -348,7 +348,7 @@ void emit_shl8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s COMP_ZFSF(s1, 8) IFX(X_OF) { if(c==1) { - IFX(X_SF && !arm64_flagm) {} else {LSRw(s3, s1, 7);} + IFX2(X_SF, && !arm64_flagm) {} else {LSRw(s3, s1, 7);} EORw_REG(s4, s3, xFlags); // CF is set if OF is asked BFIw(xFlags, s4, F_OF, 1); } else { @@ -570,7 +570,7 @@ void emit_shl16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) COMP_ZFSF(s1, 16) IFX(X_OF) { CMPSw_U12(s2, 1); // if s2==1 - IFX(X_SF && !arm64_flagm) {} else {LSRw(s3, s1, 15);} + IFX2(X_SF, && !arm64_flagm) {} else {LSRw(s3, s1, 15);} EORw_REG(s4, s3, xFlags); // CF is set if OF is asked CSELw(s4, s4, wZR, cEQ); BFIw(xFlags, s4, F_OF, 1); @@ -610,7 +610,7 @@ void emit_shl16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int COMP_ZFSF(s1, 16) IFX(X_OF) { if(c==1) { - IFX(X_SF && !arm64_flagm) {} else {LSRw(s3, s1, 15);} + IFX2(X_SF, && !arm64_flagm) {} else {LSRw(s3, s1, 15);} EORw_REG(s4, s3, xFlags); // CF is set if OF is asked BFIw(xFlags, s4, F_OF, 1); } else { diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h index 9f5c6c50..de7a02e3 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.h +++ b/src/dynarec/arm64/dynarec_arm64_helper.h @@ -650,6 +650,7 @@ CBNZx(reg, j64) #define IFX(A) if((dyn->insts[ninst].x64.gen_flags&(A))) +#define IFX2(A, B) if((dyn->insts[ninst].x64.gen_flags&(A)) B) #define IFX_PENDOR0 if((dyn->insts[ninst].x64.gen_flags&(X_PEND) || !dyn->insts[ninst].x64.gen_flags)) #define IFXX(A) if((dyn->insts[ninst].x64.gen_flags==(A))) #define IFX2X(A, B) if((dyn->insts[ninst].x64.gen_flags==(A) || dyn->insts[ninst].x64.gen_flags==(B) || dyn->insts[ninst].x64.gen_flags==((A)|(B)))) |