- cycles++;
- //emit_move_r_r(SHR_PC, SHR_PR);
- emit_move_r_imm32(SHR_PC, pc - 4);
- emith_pass_arg(2, sh2, op);
- emith_call(sh2_do_op);
- goto end_block;
- }
- // BRAF Rm 0000mmmm00100011
- if (op == 0x0023) {
- DELAYED_OP;
- cycles++;
- emit_braf((op >> 8) & 0x0f, pc);
- goto end_block;
- }
- // BSRF Rm 0000mmmm00000011
- if (op == 0x0003) {
- DELAYED_OP;
- emit_move_r_imm32(SHR_PR, pc);
- emit_braf((op >> 8) & 0x0f, pc);
- cycles++;
- goto end_block;
+ if (!(op & 0x20)) {
+ // RTS 0000000000001011
+ emit_move_r_r(SHR_PPC, SHR_PR);
+ cycles++;
+ } else {
+ // RTE 0000000000101011
+ //emit_move_r_r(SHR_PC, SHR_PR);
+ emit_move_r_imm32(SHR_PC, pc - 2);
+ emith_pass_arg(2, sh2, op);
+ emith_call(sh2_do_op);
+ emit_move_r_r(SHR_PPC, SHR_PC);
+ test_irq = 1;
+ cycles += 3;
+ }
+ goto end_op;