CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

比較テスト(MC68040)

MC68040ボードでも同じパラメータで実行してみました
MC68040は数値演算プロセッサMC68882のサブセットを内蔵しているので高速化が期待できます。

コンパイラgcc-m68kで-mc68040オプション設定で内蔵FPU命令をインラインで生成させますが
生成されるコードの質はすばらしいです。
前回と同じようにmandel_chk()のコンパイル結果はこんな感じで、ほとんどFPU命令だけで
出来上がっているのがわかります。

.file	"man68040.c"
gcc2_compiled.:
__gnu_compiled_c:
.text
	.even
.globl mandel_chk
mandel_chk:
	pea (%a6)
	move.l %sp,%a6
	fmovm #0xfc,-(%sp)
	fdmove.d 8(%a6),%fp7
	fdmove.d 16(%a6),%fp6
	fmove.d #0r0.00000000000000000000e0,%fp2
	fdmove.x %fp2,%fp4
	moveq.l #1,%d1
	fmove.d #0r4.00000000000000000000e0,%fp5
	clr.l %d0
.L5:
	fdmove.x %fp4,%fp0
	fdmul.x %fp4,%fp0
	fdmove.x %fp2,%fp1
	fdmul.x %fp2,%fp1
	fdsub.x %fp1,%fp0
	fdmove.x %fp0,%fp3
	fdadd.x %fp7,%fp3
	fdmove.x %fp4,%fp0
	fdadd.x %fp4,%fp0
	fdmul.x %fp2,%fp0
	fdmove.x %fp0,%fp2
	fdsub.x %fp6,%fp2
	fdmove.x %fp3,%fp0
	fdmul.x %fp3,%fp0
	fdmove.x %fp2,%fp1
	fdmul.x %fp2,%fp1
	fdadd.x %fp1,%fp0
	fcmp.x %fp5,%fp0
	fbngt .L6
	move.l %d1,%a0
	tst.l %d1
	jbge .L7
	add.w #255,%a0
.L7:
	move.b %d1,%d0
	jbra .L9
.L6:
	fdmove.x %fp3,%fp4
	addq.l #1,%d1
	cmp.l #8191,%d1
	jble .L5
	clr.l %d0
.L9:
	fmovm -72(%a6),#0x3f
	unlk %a6
	rts

これまた久々に68040ボードを動かしたのですがGCCWindowsXPコマンドプロンプト
正常動作しないことに今になって気づきました。
そのためホストマシンにWindows98のノートPCを持ってきてます。

実行中の様子

イメージ 1


結果です。ボード上にRTCが載っているので結構正確。動作クロック32MHzで約17分です

イメージ 2