about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-12-11 20:45:45 +0100
committerptitSeb <sebastien.chev@gmail.com>2022-12-11 20:45:45 +0100
commit63ba377f6fa0a1a3c52ac1449950cbc4d00bdf19 (patch)
tree3abac66ede38f0785e561f07f44fc49d0bb2e379 /src
parenta15cdb4c1d306ef1ff8170e89bc3c949ba33df70 (diff)
downloadbox64-63ba377f6fa0a1a3c52ac1449950cbc4d00bdf19.tar.gz
box64-63ba377f6fa0a1a3c52ac1449950cbc4d00bdf19.zip
[DYNAREC] Fixed F0 80 opcodes (helps #210, but is not enough)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_f0.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_f0.c b/src/dynarec/arm64/dynarec_arm64_f0.c
index 133d4aa4..c5bce3b7 100644
--- a/src/dynarec/arm64/dynarec_arm64_f0.c
+++ b/src/dynarec/arm64/dynarec_arm64_f0.c
@@ -372,6 +372,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         u8 = F8;
                         emit_add8c(dyn, ninst, x1, u8, x2, x4);
                         wb1 = 0;
+                        EBBACK;
                     } else {
                         addr = geted(dyn, addr, ninst, nextop, &wback, x5, &fixedaddress, 0, 0, rex, LOCK_LOCK, 0, 1);
                         u8 = F8;
@@ -382,7 +383,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         STLXRB(x3, x1, wback);
                         CBNZx_MARKLOCK(x3);
                     }
-                    EBBACK;
                     break;
                 case 1: //OR
                     INST_NAME("OR Eb, Ib");
@@ -392,6 +392,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         u8 = F8;
                         emit_or8c(dyn, ninst, x1, u8, x2, x4);
                         wb1 = 0;
+                        EBBACK;
                     } else {
                         addr = geted(dyn, addr, ninst, nextop, &wback, x5, &fixedaddress, 0, 0, rex, LOCK_LOCK, 0, 1);
                         u8 = F8;
@@ -402,7 +403,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         STLXRB(x3, x1, wback);
                         CBNZx_MARKLOCK(x3);
                     }
-                    EBBACK;
                     break;
                 case 2: //ADC
                     INST_NAME("ADC Eb, Ib");
@@ -413,6 +413,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         u8 = F8;
                         emit_adc8c(dyn, ninst, x1, u8, x2, x4, x5);
                         wb1 = 0;
+                        EBBACK;
                     } else {
                         addr = geted(dyn, addr, ninst, nextop, &wback, x5, &fixedaddress, 0, 0, rex, LOCK_LOCK, 0, 1);
                         u8 = F8;
@@ -423,7 +424,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         STLXRB(x3, x1, wback);
                         CBNZx_MARKLOCK(x3);
                     }
-                    EBBACK;
                     break;
                 case 3: //SBB
                     INST_NAME("SBB Eb, Ib");
@@ -434,6 +434,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         u8 = F8;
                         emit_sbb8c(dyn, ninst, x1, u8, x2, x4, x5);
                         wb1 = 0;
+                        EBBACK;
                     } else {
                         addr = geted(dyn, addr, ninst, nextop, &wback, x5, &fixedaddress, 0, 0, rex, LOCK_LOCK, 0, 1);
                         u8 = F8;
@@ -444,7 +445,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         STLXRB(x3, x1, wback);
                         CBNZx_MARKLOCK(x3);
                     }
-                    EBBACK;
                     break;
                 case 4: //AND
                     INST_NAME("AND Eb, Ib");
@@ -454,6 +454,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         u8 = F8;
                         emit_and8c(dyn, ninst, x1, u8, x2, x4);
                         wb1 = 0;
+                        EBBACK;
                     } else {
                         addr = geted(dyn, addr, ninst, nextop, &wback, x5, &fixedaddress, 0, 0, rex, LOCK_LOCK, 0, 1);
                         u8 = F8;
@@ -464,7 +465,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         STLXRB(x3, x1, wback);
                         CBNZx_MARKLOCK(x3);
                     }
-                    EBBACK;
                     break;
                 case 5: //SUB
                     INST_NAME("SUB Eb, Ib");
@@ -474,6 +474,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         u8 = F8;
                         emit_sub8c(dyn, ninst, x1, u8, x2, x4, x5);
                         wb1 = 0;
+                        EBBACK;
                     } else {
                         addr = geted(dyn, addr, ninst, nextop, &wback, x5, &fixedaddress, 0, 0, rex, LOCK_LOCK, 0, 1);
                         u8 = F8;
@@ -484,7 +485,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         STLXRB(x3, x1, wback);
                         CBNZx_MARKLOCK(x3);
                     }
-                    EBBACK;
                     break;
                 case 6: //XOR
                     INST_NAME("XOR Eb, Ib");
@@ -494,6 +494,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         u8 = F8;
                         emit_xor8c(dyn, ninst, x1, u8, x2, x4);
                         wb1 = 0;
+                        EBBACK;
                     } else {
                         addr = geted(dyn, addr, ninst, nextop, &wback, x5, &fixedaddress, 0, 0, rex, LOCK_LOCK, 0, 1);
                         u8 = F8;
@@ -504,7 +505,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         STLXRB(x3, x1, wback);
                         CBNZx_MARKLOCK(x3);
                     }
-                    EBBACK;
                     break;
                 case 7: //CMP
                     INST_NAME("CMP Eb, Ib");