about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2023-11-20 17:55:37 +0800
committerGitHub <noreply@github.com>2023-11-20 10:55:37 +0100
commit8fe46092c0ed5479b8143b923220010433669caa (patch)
tree490bce4478da312d98ee77260b75dfe92e18247c /src
parent02bad8bcd1e5753ed256d0899ea8945c3b810623 (diff)
downloadbox64-8fe46092c0ed5479b8143b923220010433669caa.tar.gz
box64-8fe46092c0ed5479b8143b923220010433669caa.zip
[RV64_DYNAREC] Fixed zbb andn optimization (#1074)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_emit_math.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_emit_math.c b/src/dynarec/rv64/dynarec_rv64_emit_math.c
index da7269ba..3664a8d9 100644
--- a/src/dynarec/rv64/dynarec_rv64_emit_math.c
+++ b/src/dynarec/rv64/dynarec_rv64_emit_math.c
@@ -63,7 +63,7 @@ void emit_add32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s
     }
     IFX(X_AF | X_OF) {
         if(rv64_zbb) {
-            ANDN(s3, s1, s3);   // s3 = ~res & (op1 | op2)
+            ANDN(s3, s3, s1);   // s3 = ~res & (op1 | op2)
         } else {
             NOT(s5, s1);   // s5 = ~res
             AND(s3, s5, s3);   // s3 = ~res & (op1 | op2)
@@ -160,7 +160,7 @@ void emit_add32c(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int64_t c, i
     }
     IFX(X_AF | X_OF) {
         if(rv64_zbb) {
-            ANDN(s3, s1, s3);   // s3 = ~res & (op1 | op2)
+            ANDN(s3, s3, s1);   // s3 = ~res & (op1 | op2)
         } else {
             NOT(s2, s1);   // s2 = ~res
             AND(s3, s2, s3);   // s3 = ~res & (op1 | op2)
@@ -218,7 +218,7 @@ void emit_add16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4,
     }
     IFX(X_AF | X_OF) {
         if(rv64_zbb) {
-            ANDN(s3, s1, s3);    // s3 = ~res & (op1 | op2)
+            ANDN(s3, s3, s1);    // s3 = ~res & (op1 | op2)
         } else {
             NOT(s5, s1);   // s5 = ~res
             AND(s3, s5, s3);   // s3 = ~res & (op1 | op2)
@@ -280,7 +280,7 @@ void emit_add8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4)
 
     IFX(X_AF|X_OF) {
         if(rv64_zbb) {
-            ANDN(s3, s1, s3);   // s3 = ~res & (op1 | op2)
+            ANDN(s3, s3, s1);   // s3 = ~res & (op1 | op2)
         } else {
             NOT(s4, s1);   // s4 = ~res
             AND(s3, s4, s3);   // s3 = ~res & (op1 | op2)
@@ -344,7 +344,7 @@ void emit_add8c(dynarec_rv64_t* dyn, int ninst, int s1, int c, int s2, int s3, i
 
     IFX(X_AF|X_OF) {
         if(rv64_zbb) {
-            ANDN(s3, s1, s3);   // s3 = ~res & (op1 | op2)
+            ANDN(s3, s3, s1);   // s3 = ~res & (op1 | op2)
         } else {
             NOT(s2, s1);   // s2 = ~res
             AND(s3, s2, s3);   // s3 = ~res & (op1 | op2)
@@ -596,7 +596,7 @@ void emit_inc8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4)
     }
     IFX(X_AF | X_OF) {
         if(rv64_zbb) {
-            ANDN(s3, s1, s3);   // s3 = ~res & (op1 | op2)
+            ANDN(s3, s3, s1);   // s3 = ~res & (op1 | op2)
         } else {
             NOT(s2, s1);   // s2 = ~res
             AND(s3, s2, s3);   // s3 = ~res & (op1 | op2)
@@ -709,7 +709,7 @@ void emit_inc32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s
     }
     IFX(X_AF | X_OF) {
         if(rv64_zbb) {
-            ANDN(s3, s1, s3);    // s3 = ~res & (op1 | op2)
+            ANDN(s3, s3, s1);    // s3 = ~res & (op1 | op2)
         } else {
             NOT(s2, s1);   // s2 = ~res
             AND(s3, s2, s3);   // s3 = ~res & (op1 | op2)
@@ -825,7 +825,7 @@ void emit_inc16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4)
     }
     IFX(X_AF | X_OF) {
         if(rv64_zbb) {
-            ANDN(s3, s1, s3);   // s3 = ~res & (op1 | op2)
+            ANDN(s3, s3, s1);   // s3 = ~res & (op1 | op2)
         } else {
             NOT(s2, s1);   // s2 = ~res
             AND(s3, s2, s3);   // s3 = ~res & (op1 | op2)
@@ -968,8 +968,8 @@ void emit_adc8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, i
         SET_DFNONE();
     }
     IFX(X_AF | X_OF) {
-        OR(s4, s1, s2);  // s3 = op1 | op2
-        AND(s5, s1, s2); // s4 = op1 & op2
+        OR(s4, s1, s2);  // s4 = op1 | op2
+        AND(s5, s1, s2); // s5 = op1 & op2
     }
 
     ADD(s1, s1, s2);
@@ -982,7 +982,7 @@ void emit_adc8(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4, i
     }
     IFX(X_AF | X_OF) {
         if(rv64_zbb) {
-            ANDN(s3, s1, s4);   // s3 = ~res & (op1 | op2)
+            ANDN(s3, s4, s1);   // s3 = ~res & (op1 | op2)
         } else {
             NOT(s2, s1);     // s2 = ~res
             AND(s3, s2, s4); // s3 = ~res & (op1 | op2)
@@ -1304,8 +1304,8 @@ void emit_adc16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4,
         SET_DFNONE();
     }
     IFX(X_AF | X_OF) {
-        OR(s4, s1, s2);  // s3 = op1 | op2
-        AND(s5, s1, s2); // s4 = op1 & op2
+        OR(s4, s1, s2);  // s4 = op1 | op2
+        AND(s5, s1, s2); // s5 = op1 & op2
     }
 
     ADD(s1, s1, s2);
@@ -1318,7 +1318,7 @@ void emit_adc16(dynarec_rv64_t* dyn, int ninst, int s1, int s2, int s3, int s4,
     }
     IFX(X_AF | X_OF) {
         if(rv64_zbb) {
-            ANDN(s3, s1, s4);   // s3 = ~res & (op1 | op2)
+            ANDN(s3, s4, s1);   // s3 = ~res & (op1 | op2)
         } else {
             NOT(s2, s1);     // s2 = ~res
             AND(s3, s2, s4); // s3 = ~res & (op1 | op2)
@@ -1386,8 +1386,8 @@ void emit_adc32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s
         }
     }
     IFX(X_AF | X_OF) {
-        OR(s4, s1, s2);  // s3 = op1 | op2
-        AND(s5, s1, s2); // s4 = op1 & op2
+        OR(s4, s1, s2);  // s4 = op1 | op2
+        AND(s5, s1, s2); // s5 = op1 & op2
     }
 
     ADDxw(s1, s1, s2);
@@ -1404,7 +1404,7 @@ void emit_adc32(dynarec_rv64_t* dyn, int ninst, rex_t rex, int s1, int s2, int s
     }
     IFX(X_AF | X_OF) {
         if(rv64_zbb) {
-            ANDN(s3, s1, s4);   // s3 = ~res & (op1 | op2)
+            ANDN(s3, s4, s1);   // s3 = ~res & (op1 | op2)
         } else {
             NOT(s2, s1);     // s2 = ~res
             AND(s3, s2, s4); // s3 = ~res & (op1 | op2)