Esempio n. 1
0
void
ARMul_CPSRAltered (ARMul_State * state)
{
    ARMword oldmode;

    if (state->prog32Sig == LOW)
        state->Cpsr &= (CCBITS | INTBITS | R15MODEBITS);

    oldmode = state->Mode;

    if (state->Mode != (state->Cpsr & MODEBITS))
    {
        state->Mode =
            ARMul_SwitchMode (state, state->Mode, state->Cpsr & MODEBITS);

        state->NtransSig = (state->Mode & 3) ? HIGH : LOW;
    }
    state->Cpsr &= ~MODEBITS;

    ASSIGNINT (state->Cpsr & INTBITS);
    state->Cpsr &= ~INTBITS;
    ASSIGNN ((state->Cpsr & NBIT) != 0);
    state->Cpsr &= ~NBIT;
    ASSIGNZ ((state->Cpsr & ZBIT) != 0);
    state->Cpsr &= ~ZBIT;
    ASSIGNC ((state->Cpsr & CBIT) != 0);
    state->Cpsr &= ~CBIT;
    ASSIGNV ((state->Cpsr & VBIT) != 0);
    state->Cpsr &= ~VBIT;
    ASSIGNS ((state->Cpsr & SBIT) != 0);
    state->Cpsr &= ~SBIT;
#ifdef MODET
    ASSIGNT ((state->Cpsr & TBIT) != 0);
    state->Cpsr &= ~TBIT;
#endif

    if (oldmode > SVC26MODE)
    {
        if (state->Mode <= SVC26MODE)
        {
            state->Emulate = CHANGEMODE;
            state->Reg[15] = ECC | ER15INT | EMODE | R15PC;
        }
    }
    else
    {
        if (state->Mode > SVC26MODE)
        {
            state->Emulate = CHANGEMODE;
            state->Reg[15] = R15PC;
        }
        else
            state->Reg[15] = ECC | ER15INT | EMODE | R15PC;
    }
}
Esempio n. 2
0
void ARMul_R15Altered(ARMul_State *state)
{
 if (state->Mode != R15MODE) {
    state->Mode = ARMul_SwitchMode(state,state->Mode,R15MODE) ;
    state->NtransSig = (state->Mode & 3)?HIGH:LOW ;
    }
 if (state->Mode > SVC26MODE)
    state->Emulate = CHANGEMODE ;
 ASSIGNR15INT(R15INT) ;
 ASSIGNN((state->Reg[15] & NBIT) != 0) ;
 ASSIGNZ((state->Reg[15] & ZBIT) != 0) ;
 ASSIGNC((state->Reg[15] & CBIT) != 0) ;
 ASSIGNV((state->Reg[15] & VBIT) != 0) ;
}