about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2024-10-29 06:10:17 +0800
committerGitHub <noreply@github.com>2024-10-28 23:10:17 +0100
commitf148b106a5a84cde608f2fb3d8a545f5090d7f58 (patch)
treefb51c1ade2694f70ebb60f654a73e1b9168c1c5e /src
parent9ffabf4c859ba4933abffc2fba0f0460d05ca3c9 (diff)
downloadbox64-f148b106a5a84cde608f2fb3d8a545f5090d7f58.tar.gz
box64-f148b106a5a84cde608f2fb3d8a545f5090d7f58.zip
[RV64_DYNAREC] Fixed MAXSS and MAXSD for vector (#1974)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_f20f_vector.c8
-rw-r--r--src/dynarec/rv64/dynarec_rv64_f30f_vector.c8
2 files changed, 4 insertions, 12 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_f20f_vector.c b/src/dynarec/rv64/dynarec_rv64_f20f_vector.c
index e90e5956..ce46c0e0 100644
--- a/src/dynarec/rv64/dynarec_rv64_f20f_vector.c
+++ b/src/dynarec/rv64/dynarec_rv64_f20f_vector.c
@@ -360,10 +360,8 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i
                 GETGX_vector(v0, 1, VECTOR_SEW64);
             }
             if (box64_dynarec_fastnan) {
-                q0 = fpu_get_scratch(dyn);
                 VECTOR_LOAD_VMASK(0b01, x4, 1);
-                VFMIN_VV(q0, v0, v1, VECTOR_MASKED);
-                VMERGE_VVM(v0, v0, q0);
+                VFMIN_VV(v0, v0, v1, VECTOR_MASKED);
             } else {
                 d0 = fpu_get_scratch(dyn);
                 d1 = fpu_get_scratch(dyn);
@@ -443,10 +441,8 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i
                 GETGX_vector(v0, 1, VECTOR_SEW64);
             }
             if (box64_dynarec_fastnan) {
-                q0 = fpu_get_scratch(dyn);
                 VECTOR_LOAD_VMASK(0b01, x4, 1);
-                VFMIN_VV(q0, v0, v1, VECTOR_MASKED);
-                VMERGE_VVM(v0, v0, q0);
+                VFMAX_VV(v0, v0, v1, VECTOR_MASKED);
             } else {
                 d0 = fpu_get_scratch(dyn);
                 d1 = fpu_get_scratch(dyn);
diff --git a/src/dynarec/rv64/dynarec_rv64_f30f_vector.c b/src/dynarec/rv64/dynarec_rv64_f30f_vector.c
index 2c62e35c..d5ac666a 100644
--- a/src/dynarec/rv64/dynarec_rv64_f30f_vector.c
+++ b/src/dynarec/rv64/dynarec_rv64_f30f_vector.c
@@ -208,10 +208,8 @@ uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i
                 GETGX_vector(v0, 1, VECTOR_SEW32);
             }
             if (box64_dynarec_fastnan) {
-                q0 = fpu_get_scratch(dyn);
                 VECTOR_LOAD_VMASK(0b0001, x4, 1);
-                VFMIN_VV(q0, v0, v1, VECTOR_MASKED);
-                VMERGE_VVM(v0, v0, q0);
+                VFMIN_VV(v0, v0, v1, VECTOR_MASKED);
             } else {
                 d0 = fpu_get_scratch(dyn);
                 d1 = fpu_get_scratch(dyn);
@@ -251,10 +249,8 @@ uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i
                 GETGX_vector(v0, 1, VECTOR_SEW32);
             }
             if (box64_dynarec_fastnan) {
-                q0 = fpu_get_scratch(dyn);
                 VECTOR_LOAD_VMASK(0b0001, x4, 1);
-                VFMIN_VV(q0, v0, v1, VECTOR_MASKED);
-                VMERGE_VVM(v0, v0, q0);
+                VFMAX_VV(v0, v0, v1, VECTOR_MASKED);
             } else {
                 d0 = fpu_get_scratch(dyn);
                 d1 = fpu_get_scratch(dyn);