bsnes/higan/processor
Tim Allen a72ff8b7fa Update to v103r28 release.
byuu says:

Changelog:

  - processor/arm7tdmi: implemented 10 of 19 ARM instructions
  - processor/arm7tdmi: implemented 1 of 22 THUMB instructions

Today's WIP was 6 hours of work, and yesterday's was 5 hours.

Half of today was just trying to come up with the design to use a
lambda-based dispatcher to map both instructions and disassembly,
similar to the 68K core. The problem is that the ARM core has 28 unique
bits, which is just far too many bits to have a full lookup table like
the 16-bit 68K core.

The thing I wanted more than anything else was to perform the opcode
bitfield decoding once, and have it decoded for both instructions and
the disassembler. It took three hours to come up with a design that
worked for the ARM half ... relying on #defines being able to pull in
other #defines that were declared and changed later after the first
one. But, I'm happy with it. The decoding is in the table building, as
it is with the 68K core. The decoding does happen at run-time on each
instruction invocation, but it has to be done.

As to the THUMB core, I can create a 64K-entry lambda table to cover all
possible encodings, and ... even though it's a cache killer, I've
decided to go for it, given the outstanding performance it obtained in
the M68K core, as well as considering that THUMB mode is far more common
in GBA games.

As to both cores ... I'm a little torn between two extremes:

On the one hand, I can condense the number of ARM/THUMB instructions
further to eliminate more redundant code. On the other, I can split them
apart to reduce the number of conditional tests needed to execute each
instruction. It's really the disassembler that makes me not want to
split them up further ... as I have to split the disassembler functions
up equally to the instruction functions. But it may be worth it if it's
a speed improvement.
2017-08-07 22:20:35 +10:00
..
arm Update to v103r28 release. 2017-08-07 22:20:35 +10:00
arm7tdmi Update to v103r28 release. 2017-08-07 22:20:35 +10:00
gsu Update to v102r27 release. 2017-06-19 12:07:54 +10:00
hg51b Update to v102r27 release. 2017-06-19 12:07:54 +10:00
huc6280 Update to v102r26 release. 2017-06-16 10:06:17 +10:00
lr35902 Update to v103r26 release. 2017-08-06 09:13:26 +10:00
m68k Update to v103r24 release. 2017-08-04 23:05:06 +10:00
mos6502 Update to v102r26 release. 2017-06-16 10:06:17 +10:00
spc700 Update to v103r07 release. 2017-07-05 15:29:27 +10:00
upd96050 Update to v099r12 release. 2016-06-28 20:43:47 +10:00
v30mz Update to v102r24 release. 2017-06-13 11:42:31 +10:00
wdc65816 Update to v102r26 release. 2017-06-16 10:06:17 +10:00
z80 Update to v103r02 release. 2017-06-27 11:18:28 +10:00
GNUmakefile Update to v103r27 release. 2017-08-06 23:36:26 +10:00
processor.hpp Update to v097r01 release. 2016-01-23 18:29:34 +11:00