about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-11-15 15:34:22 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-11-15 15:34:22 +0100
commit8c1335626f69bf93e43ba701b89e0686b35875f7 (patch)
treecc536363497b4fd4ea81aee76ca600f01830efa5 /src
parent8b0eec097bf9f9c9166e24d902394a3e85082c54 (diff)
downloadbox64-8c1335626f69bf93e43ba701b89e0686b35875f7.tar.gz
box64-8c1335626f69bf93e43ba701b89e0686b35875f7.zip
[ARM64_DYNAREC] A few fixes to 8/16bits logic/math opcodes
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_emit_logic.c18
-rw-r--r--src/dynarec/arm64/dynarec_arm64_emit_math.c4
-rw-r--r--src/dynarec/arm64/dynarec_arm64_helper.h10
3 files changed, 16 insertions, 16 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_emit_logic.c b/src/dynarec/arm64/dynarec_arm64_emit_logic.c
index 50791333..7433dc86 100644
--- a/src/dynarec/arm64/dynarec_arm64_emit_logic.c
+++ b/src/dynarec/arm64/dynarec_arm64_emit_logic.c
@@ -350,7 +350,7 @@ void emit_or8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4)
 }
 
 // emit OR8 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch
-void emit_or8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4)
+void emit_or8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4)
 {
     int mask = convert_bitmask_w(c);
     if(!mask) {
@@ -401,7 +401,7 @@ void emit_xor8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4)
 }
 
 // emit XOR8 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch
-void emit_xor8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4)
+void emit_xor8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4)
 {
     int mask = convert_bitmask_w(c);
     if(!mask) {
@@ -469,7 +469,7 @@ void emit_and8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4)
 }
 
 // emit AND8 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch
-void emit_and8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4)
+void emit_and8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4)
 {
     int mask = convert_bitmask_w(c);
     if(!mask) {
@@ -539,9 +539,9 @@ void emit_or16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4)
 // emit OR16 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch
 void emit_or16c(dynarec_arm_t* dyn, int ninst, int s1, int16_t c, int s3, int s4)
 {
-    int mask = convert_bitmask_w(c);
+    int mask = convert_bitmask_w((uint16_t)c);
     if(!mask) {
-        MOV32w(s3, c);
+        MOV32w(s3, (uint16_t)c);
         emit_or16(dyn, ninst, s1, s3, s3, s4);
         return;
     }
@@ -590,9 +590,9 @@ void emit_xor16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4)
 // emit XOR16 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch
 void emit_xor16c(dynarec_arm_t* dyn, int ninst, int s1, int16_t c, int s3, int s4)
 {
-    int mask = convert_bitmask_w(c);
+    int mask = convert_bitmask_w((uint16_t)c);
     if(!mask) {
-        MOV32w(s3, c);
+        MOV32w(s3, (uint16_t)c);
         emit_xor16(dyn, ninst, s1, s3, s3, s4);
         return;
     }
@@ -659,9 +659,9 @@ void emit_and16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4)
 // emit AND16 instruction, from s1 , constant c, store result in s1 using s3 and s4 as scratch
 void emit_and16c(dynarec_arm_t* dyn, int ninst, int s1, int16_t c, int s3, int s4)
 {
-    int mask = convert_bitmask_w(c);
+    int mask = convert_bitmask_w((uint16_t)c);
     if(!mask) {
-        MOV32w(s3, c);
+        MOV32w(s3, (uint16_t)c);
         emit_and16(dyn, ninst, s1, s3, s3, s4);
         return;
     }
diff --git a/src/dynarec/arm64/dynarec_arm64_emit_math.c b/src/dynarec/arm64/dynarec_arm64_emit_math.c
index b23244c8..ee3d4ecc 100644
--- a/src/dynarec/arm64/dynarec_arm64_emit_math.c
+++ b/src/dynarec/arm64/dynarec_arm64_emit_math.c
@@ -345,7 +345,7 @@ void emit_add8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4)
 }
 
 // emit ADD8 instruction, from s1, const c, store result in s1 using s3 and s4 as scratch
-void emit_add8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4)
+void emit_add8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4)
 {
     IFX(X_PEND) {
         MOV32w(s4, c);
@@ -432,7 +432,7 @@ void emit_sub8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4)
 }
 
 // emit SUB8 instruction, from s1, constant c, store result in s1 using s3 and s4 as scratch
-void emit_sub8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4, int s5)
+void emit_sub8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4, int s5)
 {
     MAYUSE(s5);
     IFX(X_ALL|X_PEND) {
diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h
index 84533591..e9fd068b 100644
--- a/src/dynarec/arm64/dynarec_arm64_helper.h
+++ b/src/dynarec/arm64/dynarec_arm64_helper.h
@@ -1453,11 +1453,11 @@ void emit_test32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i
 void emit_add32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4);
 void emit_add32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4, int s5);
 void emit_add8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4);
-void emit_add8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4);
+void emit_add8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4);
 void emit_sub32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4);
 void emit_sub32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4, int s5);
 void emit_sub8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4);
-void emit_sub8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4, int s5);
+void emit_sub8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4, int s5);
 void emit_or32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4);
 void emit_or32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4);
 void emit_xor32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4);
@@ -1465,11 +1465,11 @@ void emit_xor32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, in
 void emit_and32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3, int s4);
 void emit_and32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4);
 void emit_or8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4);
-void emit_or8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4);
+void emit_or8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4);
 void emit_xor8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4);
-void emit_xor8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4);
+void emit_xor8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4);
 void emit_and8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4);
-void emit_and8c(dynarec_arm_t* dyn, int ninst, int s1, int8_t c, int s3, int s4);
+void emit_and8c(dynarec_arm_t* dyn, int ninst, int s1, uint8_t c, int s3, int s4);
 void emit_add16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4);
 //void emit_add16c(dynarec_arm_t* dyn, int ninst, int s1, int32_t c, int s3, int s4);
 void emit_sub16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4);