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; } }
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) ; }