diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2024-12-27 17:06:19 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-27 10:06:19 +0100 |
| commit | 8b2b96d5c584e2b2dedc95c0a1056dd73fa93899 (patch) | |
| tree | 4bcb82cb163cf72a43e283618aaf16673ee09622 /src | |
| parent | e21a50693695820b475f094391b0c6efbc4cda96 (diff) | |
| download | box64-8b2b96d5c584e2b2dedc95c0a1056dd73fa93899.tar.gz box64-8b2b96d5c584e2b2dedc95c0a1056dd73fa93899.zip | |
[LA64_DYNAREC] Fixed some minor issues on LBT path (#2218)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_00.c | 3 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_0f.c | 2 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_helper.c | 1 |
3 files changed, 3 insertions, 3 deletions
diff --git a/src/dynarec/la64/dynarec_la64_00.c b/src/dynarec/la64/dynarec_la64_00.c index 7606421d..49b13433 100644 --- a/src/dynarec/la64/dynarec_la64_00.c +++ b/src/dynarec/la64/dynarec_la64_00.c @@ -532,7 +532,6 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni gd = TO_NAT((opcode & 0x07) + (rex.b << 3)); POP1z(gd); break; - break; case 0x63: if (rex.is32bits) { // this is ARPL opcode @@ -1220,6 +1219,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni case 0x9C: INST_NAME("PUSHF"); READFLAGS(X_ALL); + RESTORE_EFLAGS(x1); PUSH1z(xFlags); break; case 0x9D: @@ -1229,6 +1229,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni MOV32w(x1, 0x3F7FD7); AND(xFlags, xFlags, x1); ORI(xFlags, xFlags, 0x202); + SPILL_EFLAGS(); SET_DFNONE(); if (box64_wine) { // should this be done all the time? ANDI(x1, xFlags, 1 << F_TF); diff --git a/src/dynarec/la64/dynarec_la64_0f.c b/src/dynarec/la64/dynarec_la64_0f.c index d1a6c396..6d1a4da9 100644 --- a/src/dynarec/la64/dynarec_la64_0f.c +++ b/src/dynarec/la64/dynarec_la64_0f.c @@ -1072,7 +1072,6 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else if (!rex.w) { ZEROUP(ed); } - MARK; break; case 6: INST_NAME("BTR Ed, Ib"); @@ -1093,7 +1092,6 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else if (!rex.w) { ZEROUP(ed); } - MARK; break; case 7: INST_NAME("BTC Ed, Ib"); diff --git a/src/dynarec/la64/dynarec_la64_helper.c b/src/dynarec/la64/dynarec_la64_helper.c index 48e5fc10..b6448035 100644 --- a/src/dynarec/la64/dynarec_la64_helper.c +++ b/src/dynarec/la64/dynarec_la64_helper.c @@ -680,6 +680,7 @@ void iret_to_epilog(dynarec_la64_t* dyn, int ninst, int is64bits) MOV32w(x1, 0x3F7FD7); AND(xFlags, xFlags, x1); ORI(xFlags, xFlags, 0x2); + SPILL_EFLAGS(); SET_DFNONE(); // POP RSP if (is64bits) { |