diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-04-08 09:39:34 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-04-08 09:39:34 +0200 |
| commit | 6255932e489af522171d92ec62311f9251c60074 (patch) | |
| tree | 9222f68cff4ceb88f7270b57828496cf4ebdcf77 /src | |
| parent | 9ad09a0166ca7e4a29e98c734abc0ccbbc6972f0 (diff) | |
| download | box64-6255932e489af522171d92ec62311f9251c60074.tar.gz box64-6255932e489af522171d92ec62311f9251c60074.zip | |
[ARM64_DYNAREC] Fixed 66 0F 38 2B opcode
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_660f.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c index 8461fbcf..57c092b5 100755 --- a/src/dynarec/arm64/dynarec_arm64_660f.c +++ b/src/dynarec/arm64/dynarec_arm64_660f.c @@ -434,12 +434,16 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETEX(q1, 0, 0); GETGX(q0, 1); v0 = fpu_get_scratch(dyn); + v1 = fpu_get_scratch(dyn); VEORQ(v0, v0, v0); - SMAX_32(v0, v0, q0); // values < 0 => 0 - UQXTN_16(q0, v0); - VEORQ(v0, v0, v0); - SMAX_32(v0, v0, q1); - UQXTN2_16(q0, v0); + SMAXQ_32(v1, v0, q0); // values < 0 => 0 + UQXTN_16(q0, v1); + if(q0==q1) { + VMOVeD(q0, 1, q0, 0); + } else { + SMAXQ_32(v0, v0, q1); + UQXTN2_16(q0, v0); + } break; case 0x29: |