diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-10-08 21:41:40 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-10-08 21:41:40 +0200 |
| commit | 3d9744362ff61b2990ac0472a6d7b15ef1abaf20 (patch) | |
| tree | c28ceeb03bdc16a784b187780164aaf65ab30e09 /src | |
| parent | b2162ba263ed486e6db5c18b9be6ef5a7dc6011f (diff) | |
| download | box64-3d9744362ff61b2990ac0472a6d7b15ef1abaf20.tar.gz box64-3d9744362ff61b2990ac0472a6d7b15ef1abaf20.zip | |
[ARM64_DYNAREC] Fixed most DA opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_da.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_da.c b/src/dynarec/arm64/dynarec_arm64_da.c index 14b43345..101978e7 100644 --- a/src/dynarec/arm64/dynarec_arm64_da.c +++ b/src/dynarec/arm64/dynarec_arm64_da.c @@ -162,6 +162,7 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: INST_NAME("FIMUL ST0, Ed"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, NEON_CACHE_ST_D); + v2 = fpu_get_scratch(dyn); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 @@ -171,6 +172,7 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 2: INST_NAME("FICOM ST0, Ed"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, NEON_CACHE_ST_D); + v2 = fpu_get_scratch(dyn); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 @@ -181,6 +183,7 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 3: INST_NAME("FICOMP ST0, Ed"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, NEON_CACHE_ST_D); + v2 = fpu_get_scratch(dyn); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 @@ -192,6 +195,7 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 4: INST_NAME("FISUB ST0, Ed"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, NEON_CACHE_ST_D); + v2 = fpu_get_scratch(dyn); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 @@ -201,6 +205,7 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 5: INST_NAME("FISUBR ST0, Ed"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, NEON_CACHE_ST_D); + v2 = fpu_get_scratch(dyn); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 @@ -210,6 +215,7 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 6: INST_NAME("FIDIV ST0, Ed"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, NEON_CACHE_ST_D); + v2 = fpu_get_scratch(dyn); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 @@ -219,6 +225,7 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 7: INST_NAME("FIDIVR ST0, Ed"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, NEON_CACHE_ST_D); + v2 = fpu_get_scratch(dyn); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 |