about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-11-03 19:29:54 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-11-03 19:29:54 +0100
commit3809866d99b8f8ac8efa3a41d5410906029229b8 (patch)
tree95e1a37085b1caf90a329962eb255dbfebe0d59d /src
parent52a05c9f67aa61215cae13a61c94347de4b58e07 (diff)
downloadbox64-3809866d99b8f8ac8efa3a41d5410906029229b8.tar.gz
box64-3809866d99b8f8ac8efa3a41d5410906029229b8.zip
[LA64_DYNAREC] This should fix Loongarch dynarec
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/la64/la64_next.S11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/dynarec/la64/la64_next.S b/src/dynarec/la64/la64_next.S
index ec502ac9..59fcf43c 100644
--- a/src/dynarec/la64/la64_next.S
+++ b/src/dynarec/la64/la64_next.S
@@ -33,6 +33,17 @@ la64_next:
     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)
 
     move   $a2, $ra      // "from" is in ra, so put in a2
     // call the function