if (T1 > 0) {
if ((PARAM(1) < PARAM(2) && (PARAM(1) + T1) > PARAM(2)) ||
(PARAM(1) < PARAM(3) && (PARAM(1) + T1) > PARAM(3))) {
- do_queue_exception_err(EXCP_PROGRAM, EXCP_INVAL | EXCP_INVAL_LSWX);
- do_process_exceptions();
+ do_raise_exception_err(EXCP_PROGRAM, EXCP_INVAL | EXCP_INVAL_LSWX);
} else {
glue(do_lsw, MEMSUFFIX)(PARAM(1));
}
PPC_OP(glue(lwarx, MEMSUFFIX))
{
if (T0 & 0x03) {
- do_queue_exception(EXCP_ALIGN);
- do_process_exceptions();
+ do_raise_exception(EXCP_ALIGN);
} else {
- glue(ldl, MEMSUFFIX)((void *)T0);
- regs->reserve = T0 & ~0x03;
+ T1 = glue(ldl, MEMSUFFIX)((void *)T0);
+ regs->reserve = T0;
}
RETURN();
}
PPC_OP(glue(stwcx, MEMSUFFIX))
{
if (T0 & 0x03) {
- do_queue_exception(EXCP_ALIGN);
- do_process_exceptions();
+ do_raise_exception(EXCP_ALIGN);
} else {
if (regs->reserve != T0) {
env->crf[0] = xer_ov;