diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-10-20 05:05:47 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-19 23:05:47 +0200 |
| commit | b0c11ae14f59346e3348a3c66823cbac52aad835 (patch) | |
| tree | 4a52c16d98d5aca71a8936ca10530ec503f34be5 | |
| parent | 2db2532092029ab62575bbec1fb560d7839ff9cb (diff) | |
| download | box64-b0c11ae14f59346e3348a3c66823cbac52aad835.tar.gz box64-b0c11ae14f59346e3348a3c66823cbac52aad835.zip | |
[LA64_DYNAREC] Added more opcodes (#3079)
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_00.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/dynarec/la64/dynarec_la64_00.c b/src/dynarec/la64/dynarec_la64_00.c index 74a543b5..f3c44ce1 100644 --- a/src/dynarec/la64/dynarec_la64_00.c +++ b/src/dynarec/la64/dynarec_la64_00.c @@ -3,6 +3,7 @@ #include <stddef.h> #include <errno.h> +#include "la64_mapping.h" #include "x64_signals.h" #include "os.h" #include "debug.h" @@ -1259,6 +1260,24 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni jump_to_epilog(dyn, addr, 0, ninst); } break; + case 0x9E: + INST_NAME("SAHF"); + SETFLAGS(X_CF | X_PF | X_AF | X_ZF | X_SF, SF_SUBSET, NAT_FLAGS_NOFUSION); + ADDI_D(x1, xZR, ~0b11010101); + AND(xFlags, xFlags, x1); + NOR(x1, x1, x1); + SRLI_D(x2, xRAX, 8); + AND(x1, x1, x2); + OR(xFlags, xFlags, x1); + SPILL_EFLAGS(); + SET_DFNONE(); + break; + case 0x9F: + INST_NAME("LAHF"); + READFLAGS(X_CF | X_PF | X_AF | X_ZF | X_SF); + RESTORE_EFLAGS(x1); + BSTRINS_D(xRAX, xFlags, 15, 8); + break; case 0xA0: INST_NAME("MOV AL,Ob"); if (rex.is32bits) |