Revision 375ee38b target-sparc/op_helper.c
b/target-sparc/op_helper.c | ||
---|---|---|
1675 | 1675 |
void helper_done(void) |
1676 | 1676 |
{ |
1677 | 1677 |
env->tl--; |
1678 |
env->pc = env->tnpc[env->tl]; |
|
1679 |
env->npc = env->tnpc[env->tl] + 4; |
|
1680 |
PUT_CCR(env, env->tstate[env->tl] >> 32); |
|
1681 |
env->asi = (env->tstate[env->tl] >> 24) & 0xff; |
|
1682 |
change_pstate((env->tstate[env->tl] >> 8) & 0xf3f); |
|
1683 |
PUT_CWP64(env, env->tstate[env->tl] & 0xff); |
|
1678 |
env->tsptr = &env->ts[env->tl]; |
|
1679 |
env->pc = env->tsptr->tpc; |
|
1680 |
env->npc = env->tsptr->tnpc + 4; |
|
1681 |
PUT_CCR(env, env->tsptr->tstate >> 32); |
|
1682 |
env->asi = (env->tsptr->tstate >> 24) & 0xff; |
|
1683 |
change_pstate((env->tsptr->tstate >> 8) & 0xf3f); |
|
1684 |
PUT_CWP64(env, env->tsptr->tstate & 0xff); |
|
1684 | 1685 |
} |
1685 | 1686 |
|
1686 | 1687 |
void helper_retry(void) |
1687 | 1688 |
{ |
1688 | 1689 |
env->tl--; |
1689 |
env->pc = env->tpc[env->tl]; |
|
1690 |
env->npc = env->tnpc[env->tl]; |
|
1691 |
PUT_CCR(env, env->tstate[env->tl] >> 32); |
|
1692 |
env->asi = (env->tstate[env->tl] >> 24) & 0xff; |
|
1693 |
change_pstate((env->tstate[env->tl] >> 8) & 0xf3f); |
|
1694 |
PUT_CWP64(env, env->tstate[env->tl] & 0xff); |
|
1690 |
env->tsptr = &env->ts[env->tl]; |
|
1691 |
env->pc = env->tsptr->tpc; |
|
1692 |
env->npc = env->tsptr->tnpc; |
|
1693 |
PUT_CCR(env, env->tsptr->tstate >> 32); |
|
1694 |
env->asi = (env->tsptr->tstate >> 24) & 0xff; |
|
1695 |
change_pstate((env->tsptr->tstate >> 8) & 0xf3f); |
|
1696 |
PUT_CWP64(env, env->tsptr->tstate & 0xff); |
|
1695 | 1697 |
} |
1696 | 1698 |
#endif |
1697 | 1699 |
|
... | ... | |
1813 | 1815 |
return; |
1814 | 1816 |
} |
1815 | 1817 |
#endif |
1816 |
env->tstate[env->tl] = ((uint64_t)GET_CCR(env) << 32) | ((env->asi & 0xff) << 24) | |
|
1817 |
((env->pstate & 0xf3f) << 8) | GET_CWP64(env); |
|
1818 |
env->tpc[env->tl] = env->pc; |
|
1819 |
env->tnpc[env->tl] = env->npc; |
|
1820 |
env->tt[env->tl] = intno; |
|
1818 |
env->tsptr->tstate = ((uint64_t)GET_CCR(env) << 32) | |
|
1819 |
((env->asi & 0xff) << 24) | ((env->pstate & 0xf3f) << 8) | |
|
1820 |
GET_CWP64(env); |
|
1821 |
env->tsptr->tpc = env->pc; |
|
1822 |
env->tsptr->tnpc = env->npc; |
|
1823 |
env->tsptr->tt = intno; |
|
1821 | 1824 |
change_pstate(PS_PEF | PS_PRIV | PS_AG); |
1822 | 1825 |
|
1823 | 1826 |
if (intno == TT_CLRWIN) |
... | ... | |
1835 | 1838 |
if (env->tl != MAXTL) |
1836 | 1839 |
env->tl++; |
1837 | 1840 |
} |
1841 |
env->tsptr = &env->ts[env->tl]; |
|
1838 | 1842 |
env->pc = env->tbr; |
1839 | 1843 |
env->npc = env->pc + 4; |
1840 | 1844 |
env->exception_index = 0; |
Also available in: Unified diff