diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-11-03 20:01:56 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-11-03 20:01:56 +0100 |
| commit | 08085be36070ba22b9e2e99529826d60d5ba149f (patch) | |
| tree | 500d1b706b6c84b19e42e6eb5d57cbbc66368e02 /src/dynarec/la64 | |
| parent | 3809866d99b8f8ac8efa3a41d5410906029229b8 (diff) | |
| download | box64-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.S | 70 |
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 |