@@ -92,15 +92,15 @@ void INSTRUCTIONS::arm::misc::PSR(const u32 code) {
9292void INSTRUCTIONS::arm::misc::SWI () {
9393 const u32 saved_cpsr = reg.read (id::reg::CPSR );
9494 reg.switch_mode (id::mode::SUPERVISOR );
95- reg.write (id::reg::R14_svc, reg.force_read (id::reg::PC ));
95+ reg.write (id::reg::R14_svc, reg.force_read (id::reg::PC ) + 4 );
9696 reg.write (id::reg::SPSR_svc, saved_cpsr);
9797 reg.write (id::cpsr::T, 0 );
9898 reg.write (id::cpsr::I, 1 );
9999
100100 if (coprocessor.read (id::cp15::R1_V )) {
101- reg.write (id::reg::PC , 0xFFFF0008 );
101+ reg.write (id::reg::PC , 0xFFFF0004 );
102102 } else {
103- reg.write (id::reg::PC , 0x00000008 );
103+ reg.write (id::reg::PC , 0x00000004 );
104104 }
105105}
106106
@@ -120,14 +120,14 @@ void INSTRUCTIONS::arm::misc::SWI() {
120120void INSTRUCTIONS::arm::misc::BKPT () {
121121 const u32 CPSR = reg.read (id::reg::CPSR );
122122 reg.switch_mode (id::mode::ABORT );
123- reg.write (id::reg::R14_abt, reg.force_read (id::reg::PC ));
123+ reg.write (id::reg::R14_abt, reg.force_read (id::reg::PC ) + 4 );
124124 reg.write (id::reg::SPSR_abt, CPSR );
125125 reg.write (id::cpsr::T, false );
126126 reg.write (id::cpsr::I, true );
127127
128128 if (coprocessor.read (id::cp15::R1_V )) {
129- reg.write (id::reg::PC , 0xFFFF000C );
129+ reg.write (id::reg::PC , 0xFFFF0008 );
130130 } else {
131- reg.write (id::reg::PC , 0x0000000C );
131+ reg.write (id::reg::PC , 0x00000008 );
132132 }
133133}
0 commit comments