Compare commits

..

No commits in common. "27957e154928e7939b1feb388d3b79746690051a" and "6da9e965bb7ce1c154c5b343aacb2c14a5470fde" have entirely different histories.

2 changed files with 3 additions and 11 deletions

View File

@ -15,7 +15,7 @@ pub fn halfAndSignedDataTransfer(comptime P: bool, comptime U: bool, comptime I:
const rm = opcode & 0xF; const rm = opcode & 0xF;
const imm_offset_high = opcode >> 8 & 0xF; const imm_offset_high = opcode >> 8 & 0xF;
const base = cpu.r[rn] + if (!L and rn == 0xF) 4 else @as(u32, 0); const base = cpu.r[rn] + if (!L) 4 else @as(u32, 0);
const offset = if (I) imm_offset_high << 4 | rm else cpu.r[rm]; const offset = if (I) imm_offset_high << 4 | rm else cpu.r[rm];
const modified_base = if (U) base +% offset else base -% offset; const modified_base = if (U) base +% offset else base -% offset;

View File

@ -45,16 +45,8 @@ pub fn singleDataTransfer(comptime I: bool, comptime P: bool, comptime U: bool,
} }
address = modified_base; address = modified_base;
if (W and P or !P) { if (W and P or !P) cpu.r[rn] = address;
cpu.r[rn] = address; if (L) cpu.r[rd] = result; // This emulates the LDR rd == rn behaviour
if (rn == 0xF) cpu.pipe.flush();
}
if (L) {
// This emulates the LDR rd == rn behaviour
cpu.r[rd] = result;
if (rd == 0xF) cpu.pipe.flush();
}
} }
}.inner; }.inner;
} }