Squidge posted on Apr 23 2004 at 02:06 PM said:
It would be nice to have some 68k benchmark that you could run on an interpreted core and the new Cyclone, just so we know how much difference this asm core makes as a percentage.
Probably Rlyeh is the best one to talk to about that. For example he could run Sonic1 unthrottled using both Musashi and Cyclone, and count how long to get to the end of the level 1 demo or something, and that would give a ballpark figure.
(I've only got a dual compile of Cyclone and A68K, which obviously doesn't run on ARM.)
I think he though it might be about 4x, but we're not sure yet.
All I know is Cyclone will be close to the theorical interpreting limit on the ARM9. For example this is the code for move.w Dn,Dm:
;@ ---------- [3000] move.w d0, d0 uses Op3000 ----------
Op3000:
;@ EaCalc : Get register index * 4 into r0:
and r0,r8,#0x000f
mov r0,r0,lsl #2
;@ EaRead : Read register[r0] into r0:
ldrsh r0,[r7,r0]
adds r1,r0,#0 ;@ Defines NZ, clears CV
mrs r9,cpsr ;@ r9=NZCV flags
;@ EaCalc : Get register index * 4 into r0:
and r0,r8,#0x0e00
mov r0,r0,lsr #7
;@ EaWrite: r1 into register[r0]:
strh r1,[r7,r0]
ldrh r8,[r4],#2 ;@ Fetch next opcode
subs r5,r5,#4 ;@ Subtract cycles
ldrge pc,[r6,r8,asl #2] ;@ Jump to opcode handler
b CycloneEnd
I can't think of anything which could run that opcode any faster and still calculate flags, unless anyone has any cool ideas!
(Without blowing up the size of Cyclone beyond 500k!)
Without recompilation of some sort of course, and obviously that wouldn't slot into existing emulators.