e2k: Restore usage of env CRs.
Fixes syscall e2k_longjmp2.
This commit is contained in:
parent
ce88afe251
commit
28aafb053c
|
@ -61,6 +61,11 @@ static void proc_chain_save(CPUE2KState *env, int wd_base, target_ulong ret_ip)
|
|||
{
|
||||
env->pshtp.index += wd_base;
|
||||
|
||||
pcs_push(env, env->crs.cr0_lo);
|
||||
pcs_push(env, env->crs.cr0_hi);
|
||||
pcs_push(env, env->crs.cr1.lo);
|
||||
pcs_push(env, env->crs.cr1.hi);
|
||||
|
||||
env->crs.cr0_lo = env->pregs;
|
||||
env->crs.cr0_hi = ret_ip;
|
||||
env->crs.cr1.wbs = wd_base / 2;
|
||||
|
@ -70,11 +75,6 @@ static void proc_chain_save(CPUE2KState *env, int wd_base, target_ulong ret_ip)
|
|||
env->crs.cr1.br = e2k_state_br(env);
|
||||
env->crs.cr1.ussz = env->usd.size >> 4;
|
||||
|
||||
pcs_push(env, env->crs.cr0_lo);
|
||||
pcs_push(env, env->crs.cr0_hi);
|
||||
pcs_push(env, env->crs.cr1.lo);
|
||||
pcs_push(env, env->crs.cr1.hi);
|
||||
|
||||
env->wd.fx = true;
|
||||
env->wd.base = e2k_wrap_reg_index(env->wd.base + wd_base);
|
||||
env->wd.size -= wd_base;
|
||||
|
@ -85,11 +85,6 @@ static void proc_chain_restore(CPUE2KState *env)
|
|||
{
|
||||
int wd_base;
|
||||
|
||||
env->crs.cr1.hi = pcs_pop(env);
|
||||
env->crs.cr1.lo = pcs_pop(env);
|
||||
env->crs.cr0_hi = pcs_pop(env);
|
||||
env->crs.cr0_lo = pcs_pop(env);
|
||||
|
||||
env->pregs = env->crs.cr0_lo;
|
||||
env->ip = env->crs.cr0_hi;
|
||||
wd_base = env->crs.cr1.wbs * 2;
|
||||
|
@ -102,6 +97,11 @@ static void proc_chain_restore(CPUE2KState *env)
|
|||
env->usd.size = env->crs.cr1.ussz << 4;
|
||||
env->usd.base = env->sbr - env->usd.size;
|
||||
|
||||
env->crs.cr1.hi = pcs_pop(env);
|
||||
env->crs.cr1.lo = pcs_pop(env);
|
||||
env->crs.cr0_hi = pcs_pop(env);
|
||||
env->crs.cr0_lo = pcs_pop(env);
|
||||
|
||||
env->pshtp.index -= wd_base;
|
||||
}
|
||||
|
||||
|
@ -209,7 +209,7 @@ uint64_t HELPER(prep_return)(CPUE2KState *env, int ipd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
ret.base = cpu_ldq_le_data(env, env->pcsp.base + env->pcsp.index - 0x18);
|
||||
ret.base = env->crs.cr0_hi;
|
||||
ret.tag = CTPR_TAG_RETURN;
|
||||
ret.ipd = ipd;
|
||||
|
||||
|
|
Loading…
Reference in New Issue