diff options
| author | Yang Liu <numbksco@gmail.com> | 2024-07-16 14:57:53 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-16 08:57:53 +0200 |
| commit | d700cc1f55c94783ec3aba6b05bb2005365be11f (patch) | |
| tree | 27577bc72fd03c7f99055d80805430391805b87b | |
| parent | 5c212e92c39c88d57b4ead86c4c08aaab280408b (diff) | |
| download | box64-d700cc1f55c94783ec3aba6b05bb2005365be11f.tar.gz box64-d700cc1f55c94783ec3aba6b05bb2005365be11f.zip | |
[RV64_DYNAREC] Clear high 32bits when write back as single (#1684)
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_helper.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_helper.c b/src/dynarec/rv64/dynarec_rv64_helper.c index c51f50eb..b58481b1 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.c +++ b/src/dynarec/rv64/dynarec_rv64_helper.c @@ -11,6 +11,7 @@ #include "dynarec.h" #include "emu/x64emu_private.h" #include "emu/x64run_private.h" +#include "rv64_emitter.h" #include "x64run.h" #include "x64emu.h" #include "box64stack.h" @@ -1611,8 +1612,10 @@ int sse_get_reg_empty(dynarec_rv64_t* dyn, int ninst, int s1, int a, int single) if (dyn->e.ssecache[a].single != single) { if (single) { - // writing back the double, to clear upper 32 bit. - FSD(dyn->e.ssecache[a].reg, xEmu, offsetof(x64emu_t, xmm[a])); + // writing back the float + FSW(dyn->e.ssecache[a].reg, xEmu, offsetof(x64emu_t, xmm[a])); + // clear upper 32 bit + SW(xZR, xEmu, offsetof(x64emu_t, xmm[a]) + 4); } dyn->e.olds[a].changed = 1; dyn->e.olds[a].purged = 0; |