about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-25 20:23:00 +0000
committerptitSeb <sebastien.chev@gmail.com>2023-03-25 20:23:07 +0000
commit567d48f813d383fd8a7c69878c9da4b7276aa1fd (patch)
tree1db3be3c5cb990d5d8410b8d7f0f2dbcdb74298f /src
parent0c3d350865b49af33a2a78167dc5365ef0dd1739 (diff)
downloadbox64-567d48f813d383fd8a7c69878c9da4b7276aa1fd.tar.gz
box64-567d48f813d383fd8a7c69878c9da4b7276aa1fd.zip
[RV64_DYNAREC] Some more fixes with sign extension issues
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_emit_tests.c2
-rw-r--r--src/dynarec/rv64/dynarec_rv64_helper.h1
2 files changed, 2 insertions, 1 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_emit_tests.c b/src/dynarec/rv64/dynarec_rv64_emit_tests.c
index 0abb5be2..16a580da 100644
--- a/src/dynarec/rv64/dynarec_rv64_emit_tests.c
+++ b/src/dynarec/rv64/dynarec_rv64_emit_tests.c
@@ -323,7 +323,7 @@ void emit_test32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c,
     if(c>=-2048 && c<=2047)
         ANDI(s3, s1, c);
     else {
-        MOV64x(s3, c);
+        MOV64xw(s3, c);
         AND(s3, s1, s3); // res = s1 & s2
     }
 
diff --git a/src/dynarec/rv64/dynarec_rv64_helper.h b/src/dynarec/rv64/dynarec_rv64_helper.h
index 8801c88b..223fc5a3 100644
--- a/src/dynarec/rv64/dynarec_rv64_helper.h
+++ b/src/dynarec/rv64/dynarec_rv64_helper.h
@@ -453,6 +453,7 @@
                 ANDI(scratch1, scratch2, 0x80);                           \
             } else {                                                      \
                 SRLI(scratch1, scratch2, (width)-1);                      \
+                if(width!=64) ANDI(scratch1, scratch1, 1);                \
             }                                                             \
             BEQZ(scratch1, 8);                                            \
             ORI(xFlags, xFlags, 1 << F_CF);                               \