about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/la64/la64_epilog.S6
-rw-r--r--src/dynarec/la64/la64_prolog.S6
-rw-r--r--src/emu/x64emu_private.h3
3 files changed, 5 insertions, 10 deletions
diff --git a/src/dynarec/la64/la64_epilog.S b/src/dynarec/la64/la64_epilog.S
index 91627ea2..97f5e9ac 100644
--- a/src/dynarec/la64/la64_epilog.S
+++ b/src/dynarec/la64/la64_epilog.S
@@ -27,10 +27,8 @@ la64_epilog:
     st.d   $r30, $r4, (8 * 15)
     st.d   $r31, $r4, (8 * 16) // xFlags
     st.d   $r20, $r4, (8 * 17) // put back reg value in emu, including EIP (so x27 must be EIP now)
-    ld.d   $sp,  $r4, 552      // restore saved sp from emu->xSPSave, see la64_prolog
-    ld.d   $r22, $sp, -8
-    st.d   $r22, $r4, 552
-    // vpop {d8-d15}
+    addi.d $sp, $r22, 0       // restore save sp from xSavedSP
+    // restore all used register
     ld.d   $r1,  $sp, (8 * 0) // load ra
     ld.d   $r22, $sp, (8 * 1) // load fp
     ld.d   $r23, $sp, (8 * 2)
diff --git a/src/dynarec/la64/la64_prolog.S b/src/dynarec/la64/la64_prolog.S
index 5f57218d..c1d1ed80 100644
--- a/src/dynarec/la64/la64_prolog.S
+++ b/src/dynarec/la64/la64_prolog.S
@@ -50,12 +50,12 @@ la64_prolog:
     ld.d   $r30, $r4, (8 * 15)
     ld.d   $r31, $r4, (8 * 16)  //xFlags
     ld.d   $r20, $r4, (8 * 17)  //xRIP
-    ld.d   $r22, $r4, 552 // grab an old value of emu->xSPSave
-    st.d   $sp,  $r4, 552 // save current sp to emu->xSPSave
     // push sentinel onto the stack
-    st.d   $r22, $sp, -16
+    st.d   $r0, $sp, -16
     st.d   $r0,  $sp, -8
     addi.d $sp,  $sp, -16
+    // save old sp into xSavedSP
+    addi.d $r22, $sp, 16
     // setup xMASK
     addi.w  $r11, $r0, -1
     lu32i.d $r11, 0
diff --git a/src/emu/x64emu_private.h b/src/emu/x64emu_private.h
index 65a99bc3..90c9b7b0 100644
--- a/src/emu/x64emu_private.h
+++ b/src/emu/x64emu_private.h
@@ -74,9 +74,6 @@ typedef struct x64emu_s {
     #ifdef RV64         // it would be better to use a dedicated register for this like arm64 xSavedSP, but we're running of of free registers.
     uintptr_t xSPSave;  // sp base value of current dynarec frame, used by call/ret optimization to reset stack when unmatch.
     #endif
-    #ifdef LA64         // it would be better to use a dedicated register for this like arm64 xSavedSP, but we're running of of free registers.
-    uintptr_t xSPSave;  // sp base value of current dynarec frame, used by call/ret optimization to reset stack when unmatch.
-    #endif
     fpu_ld_t    fpu_ld[8]; // for long double emulation / 80bits fld fst
     fpu_ll_t    fpu_ll[8]; // for 64bits fild / fist sequence
 	fpu_p_reg_t p_regs[8];