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