Skip to content

Commit d00de3e

Browse files
committed
fixes to misc instructions
1 parent 26ab005 commit d00de3e

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

  • llarm-emu/src/cpu/instructions/arm

llarm-emu/src/cpu/instructions/arm/misc.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,15 @@ void INSTRUCTIONS::arm::misc::PSR(const u32 code) {
9292
void 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() {
120120
void 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

Comments
 (0)