x86_64 call Ev fix

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1259 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
bellard 2005-01-31 23:31:02 +00:00
parent 99c475abf1
commit 1ef3868708
2 changed files with 19 additions and 1 deletions

View File

@ -517,6 +517,11 @@ void OPPROTO op_movq_T0_im64(void)
T0 = PARAMQ1;
}
void OPPROTO op_movq_T1_im64(void)
{
T1 = PARAMQ1;
}
void OPPROTO op_movq_A0_im(void)
{
A0 = (int32_t)PARAM1;

View File

@ -2216,6 +2216,19 @@ static void gen_movtl_T0_im(target_ulong val)
#endif
}
static void gen_movtl_T1_im(target_ulong val)
{
#ifdef TARGET_X86_64
if ((int32_t)val == val) {
gen_op_movl_T1_im(val);
} else {
gen_op_movq_T1_im64(val >> 32, val);
}
#else
gen_op_movl_T1_im(val);
#endif
}
static GenOpFunc1 *gen_ldq_env_A0[3] = {
gen_op_ldq_raw_env_A0,
#ifndef CONFIG_USER_ONLY
@ -3391,7 +3404,7 @@ static target_ulong disas_insn(DisasContext *s, target_ulong pc_start)
if (s->dflag == 0)
gen_op_andl_T0_ffff();
next_eip = s->pc - s->cs_base;
gen_op_movl_T1_im(next_eip);
gen_movtl_T1_im(next_eip);
gen_push_T1(s);
gen_op_jmp_T0();
gen_eob(s);