mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-09 19:45:27 +00:00
Merge pull request #448 from zaddach/jonas/load_eflags_after_helper
Fixed restoring of eflags after helper call
This commit is contained in:
commit
5a4d9609d6
|
@ -4721,6 +4721,17 @@ static void sync_eflags(DisasContext *s, TCGContext *tcg_ctx)
|
||||||
tcg_gen_st_tl(tcg_ctx, *cpu_T[0], cpu_env, offsetof(CPUX86State, eflags));
|
tcg_gen_st_tl(tcg_ctx, *cpu_T[0], cpu_env, offsetof(CPUX86State, eflags));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void restore_eflags(DisasContext *s, TCGContext *tcg_ctx)
|
||||||
|
{
|
||||||
|
TCGv **cpu_T = (TCGv **)tcg_ctx->cpu_T;
|
||||||
|
TCGv_ptr cpu_env = tcg_ctx->cpu_env;
|
||||||
|
|
||||||
|
tcg_gen_ld_tl(tcg_ctx, *cpu_T[0], cpu_env, offsetof(CPUX86State, eflags));
|
||||||
|
gen_helper_write_eflags(tcg_ctx, cpu_env, *cpu_T[0],
|
||||||
|
tcg_const_i32(tcg_ctx, (TF_MASK | AC_MASK | ID_MASK | NT_MASK) & 0xffff));
|
||||||
|
set_cc_op(s, CC_OP_EFLAGS);
|
||||||
|
}
|
||||||
|
|
||||||
/* convert one instruction. s->is_jmp is set if the translation must
|
/* convert one instruction. s->is_jmp is set if the translation must
|
||||||
be stopped. Return the next pc value */
|
be stopped. Return the next pc value */
|
||||||
static target_ulong disas_insn(CPUX86State *env, DisasContext *s,
|
static target_ulong disas_insn(CPUX86State *env, DisasContext *s,
|
||||||
|
@ -4773,6 +4784,7 @@ static target_ulong disas_insn(CPUX86State *env, DisasContext *s,
|
||||||
changed_cc_op = true;
|
changed_cc_op = true;
|
||||||
}
|
}
|
||||||
gen_uc_tracecode(tcg_ctx, 0xf1f1f1f1, UC_HOOK_CODE_IDX, env->uc, pc_start);
|
gen_uc_tracecode(tcg_ctx, 0xf1f1f1f1, UC_HOOK_CODE_IDX, env->uc, pc_start);
|
||||||
|
restore_eflags(s, tcg_ctx);
|
||||||
// the callback might want to stop emulation immediately
|
// the callback might want to stop emulation immediately
|
||||||
check_exit_request(tcg_ctx);
|
check_exit_request(tcg_ctx);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue