about summary refs log tree commit diff stats
path: root/src/dynarec/la64
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-11-03 20:01:56 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-11-03 20:01:56 +0100
commit08085be36070ba22b9e2e99529826d60d5ba149f (patch)
tree500d1b706b6c84b19e42e6eb5d57cbbc66368e02 /src/dynarec/la64
parent3809866d99b8f8ac8efa3a41d5410906029229b8 (diff)
downloadbox64-08085be36070ba22b9e2e99529826d60d5ba149f.tar.gz
box64-08085be36070ba22b9e2e99529826d60d5ba149f.zip
[DYNAREC] Reverted last 2 commit, will use CancelFillblock mecanism instead
Diffstat (limited to 'src/dynarec/la64')
-rw-r--r--src/dynarec/la64/la64_next.S70
1 files changed, 23 insertions, 47 deletions
diff --git a/src/dynarec/la64/la64_next.S b/src/dynarec/la64/la64_next.S
index 59fcf43c..f98558b0 100644
--- a/src/dynarec/la64/la64_next.S
+++ b/src/dynarec/la64/la64_next.S
@@ -14,38 +14,22 @@
 la64_next:
     // emu is a0
     // IP address is a1
-    addi.d $sp, $sp, -(8 * 2)
+    addi.d $sp, $sp, -(8 * 12)
     st.d   $a0, $sp, 0
     st.d   $a1, $sp, 8
-    st.d   $r12, $a0, (8 * 0)
-    st.d   $r13, $a0, (8 * 1)
-    st.d   $r14, $a0, (8 * 2)
-    st.d   $r15, $a0, (8 * 3)
-    st.d   $r16, $a0, (8 * 4)
-    st.d   $r17, $a0, (8 * 5)
-    st.d   $r18, $a0, (8 * 6)
-    st.d   $r19, $a0, (8 * 7)
-    st.d   $r23, $a0, (8 * 8)
-    st.d   $r24, $a0, (8 * 9)
-    st.d   $r25, $a0, (8 * 10)
-    st.d   $r26, $a0, (8 * 11)
-    st.d   $r27, $a0, (8 * 12)
-    st.d   $r28, $a0, (8 * 13)
-    st.d   $r29, $a0, (8 * 14)
-    st.d   $r30, $a0, (8 * 15)
-    // restore xFlags from LBT.eflags
-    la.global $r12, la64_lbt
-    ldptr.d   $r12, $r12, 0
-    beqz      $r12, 1f
-    ori       $r13, $r0, 0b100011010101
-    andn      $r31, $r31, $r13
-    x86mfflag $r13, 0b111111
-    or        $r31, $r31, $r13
-1:
-    st.d   $r31, $a0, (8 * 16) // xFlags
-    st.d   $r20, $a0, (8 * 17) // put back reg value in emu, including EIP (so $r20 must be EIP now)
+    st.d   $r11, $sp, 16
+    st.d   $r12, $sp, 24
+    st.d   $r13, $sp, 32
+    st.d   $r14, $sp, 40
+    st.d   $r15, $sp, 48
+    st.d   $r16, $sp, 56
+    st.d   $r17, $sp, 64
+    st.d   $r18, $sp, 72
+    st.d   $r19, $sp, 80
+    st.d   $r20, $sp, 88 // also save r20(rip) to allow change in LinkNext
 
     move   $a2, $ra      // "from" is in ra, so put in a2
+    addi.d $a3, $sp, 88  // a3 is address to change rip
     // call the function
     bl LinkNext
     // preserve return value
@@ -53,24 +37,16 @@ la64_next:
     // pop regs
     ld.d   $a0, $sp, 0
     ld.d   $a1, $sp, 8
-    ld.d   $r12, $a0, (8 * 0)
-    ld.d   $r13, $a0, (8 * 1)
-    ld.d   $r14, $a0, (8 * 2)
-    ld.d   $r15, $a0, (8 * 3)
-    ld.d   $r16, $a0, (8 * 4)
-    ld.d   $r17, $a0, (8 * 5)
-    ld.d   $r18, $a0, (8 * 6)
-    ld.d   $r19, $a0, (8 * 7)
-    ld.d   $r23, $a0, (8 * 8)
-    ld.d   $r24, $a0, (8 * 9)
-    ld.d   $r25, $a0, (8 * 10)
-    ld.d   $r26, $a0, (8 * 11)
-    ld.d   $r27, $a0, (8 * 12)
-    ld.d   $r28, $a0, (8 * 13)
-    ld.d   $r29, $a0, (8 * 14)
-    ld.d   $r30, $a0, (8 * 15)
-    ld.d   $r31, $a0, (8 * 16)  // xFlags
-    ld.d   $r20, $a0, (8 * 17)  // xRIP
-    addi.d $sp,  $sp, (8 * 2)
+    ld.d   $r11, $sp, 16
+    ld.d   $r12, $sp, 24
+    ld.d   $r13, $sp, 32
+    ld.d   $r14, $sp, 40
+    ld.d   $r15, $sp, 48
+    ld.d   $r16, $sp, 56
+    ld.d   $r17, $sp, 64
+    ld.d   $r18, $sp, 72
+    ld.d   $r19, $sp, 80
+    ld.d   $r20, $sp, 88
+    addi.d $sp,  $sp, (8 * 12)
     // return offset is jump address
     jr     $a3
\ No newline at end of file