about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2023-11-24 06:10:52 +0800
committerGitHub <noreply@github.com>2023-11-23 23:10:52 +0100
commit494510e2a89ebbbccb6b18324234843b2661d012 (patch)
treee9033acd82d0798c66c82ef9d58ee9340572fb1a /src
parent7c4b97961f1f3501d5d741407c80b67f0caf69c7 (diff)
downloadbox64-494510e2a89ebbbccb6b18324234843b2661d012.tar.gz
box64-494510e2a89ebbbccb6b18324234843b2661d012.zip
[DYNAREC_RV64] Fixed FCOMP opcode (#1080)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_d8.c18
-rw-r--r--src/dynarec/rv64/dynarec_rv64_dc.c10
2 files changed, 14 insertions, 14 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_d8.c b/src/dynarec/rv64/dynarec_rv64_d8.c
index e293236e..88fbc105 100644
--- a/src/dynarec/rv64/dynarec_rv64_d8.c
+++ b/src/dynarec/rv64/dynarec_rv64_d8.c
@@ -53,7 +53,7 @@ uintptr_t dynarec64_D8(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             v1 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7));
             v2 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7));
             LHU(x3, xEmu, offsetof(x64emu_t, sw));
-            MOV32w(x1, 0b1110100011111111); // mask off c0,c1,c2,c3
+            MOV32w(x1, 0b1011100011111111); // mask off c0,c1,c2,c3
             AND(x3, x3, x1);
             if(ST_IS_F(0)) {
                 FEQS(x5, v1, v1);
@@ -62,15 +62,15 @@ uintptr_t dynarec64_D8(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                 BEQZ(x5, 24); // undefined/NaN
                 FEQS(x5, v1, v2);
                 BNEZ(x5, 28); // equal
-                FLTS(x3, v1, v2); // x3 = (v1<v2)?1:0
-                SLLI(x1, x3, 8);
+                FLTS(x2, v1, v2); // x2 = (v1<v2)?1:0
+                SLLI(x1, x2, 8);
                 J(20); // end
                 // undefined/NaN
-                LUI(x1, 1);
+                LUI(x1, 4);
                 ADDI(x1, x1, 0b010100000000);
                 J(8); // end
                 // equal
-                LUI(x1, 1);
+                LUI(x1, 4);
                 // end
             } else {
                 FEQD(x5, v1, v1);
@@ -79,15 +79,15 @@ uintptr_t dynarec64_D8(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                 BEQZ(x5, 24); // undefined/NaN
                 FEQD(x5, v1, v2);
                 BNEZ(x5, 28); // equal
-                FLTD(x3, v1, v2); // x3 = (v1<v2)?1:0
-                SLLI(x1, x3, 8);
+                FLTD(x2, v1, v2); // x2 = (v1<v2)?1:0
+                SLLI(x1, x2, 8);
                 J(20); // end
                 // undefined/NaN
-                LUI(x1, 1);
+                LUI(x1, 4);
                 ADDI(x1, x1, 0b010100000000);
                 J(8); // end
                 // equal
-                LUI(x1, 1);
+                LUI(x1, 4);
                 // end
             }
             OR(x3, x3, x1);
diff --git a/src/dynarec/rv64/dynarec_rv64_dc.c b/src/dynarec/rv64/dynarec_rv64_dc.c
index 6a84c603..3cca69a2 100644
--- a/src/dynarec/rv64/dynarec_rv64_dc.c
+++ b/src/dynarec/rv64/dynarec_rv64_dc.c
@@ -80,7 +80,7 @@ uintptr_t dynarec64_DC(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     FLD(v2, wback, fixedaddress);
 
                     LHU(x3, xEmu, offsetof(x64emu_t, sw));
-                    MOV32w(x1, 0b1110100011111111); // mask off c0,c1,c2,c3
+                    MOV32w(x1, 0b1011100011111111); // mask off c0,c1,c2,c3
                     AND(x3, x3, x1);
                     FEQD(x5, v1, v1);
                     FEQD(x4, v2, v2);
@@ -88,15 +88,15 @@ uintptr_t dynarec64_DC(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     BEQZ(x5, 24); // undefined/NaN
                     FEQD(x5, v1, v2);
                     BNEZ(x5, 28); // equal
-                    FLTD(x3, v1, v2); // x3 = (v1<v2)?1:0
-                    SLLI(x1, x3, 8);
+                    FLTD(x2, v1, v2); // x3 = (v1<v2)?1:0
+                    SLLI(x1, x2, 8);
                     J(20); // end
                     // undefined/NaN
-                    LUI(x1, 1);
+                    LUI(x1, 4);
                     ADDI(x1, x1, 0b010100000000);
                     J(8); // end
                     // equal
-                    LUI(x1, 1);
+                    LUI(x1, 4);
                     // end
                     OR(x3, x3, x1);
                     SH(x3, xEmu, offsetof(x64emu_t, sw));