非専門的シンギュラリティー研究所

無限に動き続けるシステムを表す方法を AI なども使って考えていきます。

X68000(32)

「現在の位置から楕円の弧を描画する関数」の実行速度を改善するために三角関数を表から取得するように変更しました。

現在の位置から楕円の弧を描画する関数(インラインアセンブラ)

asm(
    "drawarctox_a:\n\t"
    "lea (-20,%sp),%sp\n\t"
    "movem.l #7966,-(%sp)\n\t"
    "move.l 60(%sp),52(%sp)\n\t"
    "move.l 72(%sp),%d7\n\t"
    "move.l 76(%sp),%d6\n\t"
    "move.l 88(%sp),%a4\n\t"
    "move.l %d7,%d0\n\t"
    "jpl datxL418\n\t"
    "addq.l #1,%d0\n\t"
    "datxL418:\n\t"
    "asr.l #1,%d0\n\t"
    "add.l 64(%sp),%d0\n\t"
    "move.l %d0,40(%sp)\n\t"
    "move.l %d6,%d0\n\t"
    "jpl datxL419\n\t"
    "addq.l #1,%d0\n\t"
    "datxL419:\n\t"
    "asr.l #1,%d0\n\t"
    "add.l 68(%sp),%d0\n\t"
    "move.l %d0,44(%sp)\n\t"
    "move.l 80(%sp),%d3\n\t"
    "move.l %d3,%d5\n\t"
    "add.l 84(%sp),%d5\n\t"
    "lea __floatsisf,%a6\n\t"
    "lea tab_cos_a,%a5\n\t"
    "lea __mulsf3,%a3\n\t"
    "datxL416:\n\t"
    "move.l %d7,-(%sp)\n\t"
    "jsr (%a6)\n\t"
    "move.l %d0,%d4\n\t"
    "move.l %d6,(%sp)\n\t"
    "jsr (%a6)\n\t"
    "addq.l #4,%sp\n\t"
    "move.l %d0,48(%sp)\n\t"
    "cmp.l %d5,%d3\n\t"
    "jlt datxL417\n\t"
    "move.l %d5,-(%sp)\n\t"
    "jsr (%a5)\n\t"
    "lea __mulsf3,%a3\n\t"
    "move.l %d4,(%sp)\n\t"
    "move.l %d0,-(%sp)\n\t"
    "jsr (%a3)\n\t"
    "addq.l #4,%sp\n\t"
    "move.l #0x3f000000,(%sp)\n\t"
    "move.l %d0,-(%sp)\n\t"
    "jsr (%a3)\n\t"
    "addq.l #8,%sp\n\t"
    "lea __fixsfsi,%a5\n\t"
    "move.l %d0,-(%sp)\n\t"
    "jsr (%a5)\n\t"
    "move.l 44(%sp),%d3\n\t"
    "add.l %d0,%d3\n\t"
    "move.l %d5,(%sp)\n\t"
    "jsr _Z7tab_sini\n\t"
    "addq.l #4,%sp\n\t"
    "move.l %a4,72(%sp)\n\t"
    "move.l 48(%sp),-(%sp)\n\t"
    "move.l %d0,-(%sp)\n\t"
    "jsr (%a3)\n\t"
    "addq.l #4,%sp\n\t"
    "move.l #0x3f000000,(%sp)\n\t"
    "move.l %d0,-(%sp)\n\t"
    "jsr (%a3)\n\t"
    "addq.l #4,%sp\n\t"
    "move.l %d0,(%sp)\n\t"
    "jsr (%a5)\n\t"
    "addq.l #4,%sp\n\t"
    "move.l 44(%sp),%d1\n\t"
    "sub.l %d0,%d1\n\t"
    "move.l %d1,68(%sp)\n\t"
    "move.l %d3,64(%sp)\n\t"
    "move.l 52(%sp),60(%sp)\n\t"
    "movem.l (%sp)+,#30968\n\t"
    "lea (20,%sp),%sp\n\t"
    "jra drawlinetox_a\n\t"
    "datxL417:\n\t"
    "move.l %d3,-(%sp)\n\t"
    "jsr (%a5)\n\t"
    "move.l %d4,(%sp)\n\t"
    "move.l %d0,-(%sp)\n\t"
    "jsr (%a3)\n\t"
    "addq.l #4,%sp\n\t"
    "move.l #0x3f000000,(%sp)\n\t"
    "move.l %d0,-(%sp)\n\t"
    "jsr (%a3)\n\t"
    "addq.l #8,%sp\n\t"
    "lea __fixsfsi,%a0\n\t"
    "move.l %d0,-(%sp)\n\t"
    "move.l %a0,40(%sp)\n\t"
    "jsr (%a0)\n\t"
    "move.l 44(%sp),%d4\n\t"
    "add.l %d0,%d4\n\t"
    "move.l %d3,(%sp)\n\t"
    "jsr tab_sin_a\n\t"
    "move.l %a4,(%sp)\n\t"
    "move.l 52(%sp),-(%sp)\n\t"
    "move.l %d0,-(%sp)\n\t"
    "jsr (%a3)\n\t"
    "addq.l #4,%sp\n\t"
    "move.l #0x3f000000,(%sp)\n\t"
    "move.l %d0,-(%sp)\n\t"
    "jsr (%a3)\n\t"
    "addq.l #4,%sp\n\t"
    "move.l %d0,(%sp)\n\t"
    "move.l 44(%sp),%a0\n\t"
    "jsr (%a0)\n\t"
    "move.l 52(%sp),%d1\n\t"
    "sub.l %d0,%d1\n\t"
    "move.l %d1,(%sp)\n\t"
    "move.l %d4,-(%sp)\n\t"
    "move.l 64(%sp),-(%sp)\n\t"
    "jsr drawlinetox_a\n\t"
    "addq.l #5,%d3\n\t"
    "lea (16,%sp),%sp\n\t"
    "jra datxL416\n\t"
);

表から三角関数を取得する関数(インラインアセンブラ)

asm(
  "tab_sin_a:\n\t"
    "move.l 4(%sp),%d0\n\t"
    "cmp.l #360,%d0\n\t"
    "jhi tsinL411\n\t"
    "pea 5.w\n\t"
    "move.l %d0,-(%sp)\n\t"
    "jsr __divsi3\n\t"
    "addq.l #8,%sp\n\t"
    "lsl.l #2,%d0\n\t"
    "lea sine_table_a,%a0\n\t"
    "move.l (%a0,%d0.l),%d0\n\t"
    "tsinL409:\n\t"
    "rts\n\t"
    "tsinL411:\n\t"
    "moveq #0,%d0\n\t"
    "jra tsinL409\n\t"
  "tab_cos_a:\n\t"
    "move.l 4(%sp),%a0\n\t"
    "cmp.w #360,%a0\n\t"
    "jhi tcosL414\n\t"
    "pea 5.w\n\t"
    "pea 90(%a0)\n\t"
    "jsr __divsi3\n\t"
    "addq.l #8,%sp\n\t"
    "lsl.l #2,%d0\n\t"
    "lea sine_table_a,%a0\n\t"
    "move.l (%a0,%d0.l),%d0\n\t"
    "tcosL412:\n\t"
    "rts\n\t"
    "tcosL414:\n\t"
    "moveq #0,%d0\n\t"
    "jra tcosL412\n\t"
);
asm(
  "sine_table_a:\n\t"
    ".long	0\n\t"
    ".long	1035108016\n\t"
    ".long	1043452117\n\t"
    ".long	1048871917\n\t"
    ".long	1051663682\n\t"
    ".long	1054368109\n\t"
    ".long	1056964608\n\t"
    ".long	1058199015\n\t"
    ".long	1059360186\n\t"
    ".long	1060439284\n\t"
    ".long	1061428092\n\t"
    ".long	1062319090\n\t"
    ".long	1063105495\n\t"
    ".long	1063781322\n\t"
    ".long	1064341426\n\t"
    ".long	1064781546\n\t"
    ".long	1065098333\n\t"
    ".long	1065289374\n\t"
    ".long	1065353216\n\t"
    ".long	1065289374\n\t"
    ".long	1065098333\n\t"
    ".long	1064781546\n\t"
    ".long	1064341426\n\t"
    ".long	1063781322\n\t"
    ".long	1063105495\n\t"
    ".long	1062319090\n\t"
    ".long	1061428092\n\t"
    ".long	1060439284\n\t"
    ".long	1059360186\n\t"
    ".long	1058199015\n\t"
    ".long	1056964608\n\t"
    ".long	1054368109\n\t"
    ".long	1051663682\n\t"
    ".long	1048871917\n\t"
    ".long	1043452117\n\t"
    ".long	1035108016\n\t"
    ".long	0\n\t"
    ".long	-1112375632\n\t"
    ".long	-1104031531\n\t"
    ".long	-1098611731\n\t"
    ".long	-1095819966\n\t"
    ".long	-1093115539\n\t"
    ".long	-1090519040\n\t"
    ".long	-1089284633\n\t"
    ".long	-1088123462\n\t"
    ".long	-1087044364\n\t"
    ".long	-1086055556\n\t"
    ".long	-1085164558\n\t"
    ".long	-1084378153\n\t"
    ".long	-1083702326\n\t"
    ".long	-1083142222\n\t"
    ".long	-1082702102\n\t"
    ".long	-1082385315\n\t"
    ".long	-1082194274\n\t"
    ".long	-1082130432\n\t"
    ".long	-1082194274\n\t"
    ".long	-1082385315\n\t"
    ".long	-1082702102\n\t"
    ".long	-1083142222\n\t"
    ".long	-1083702326\n\t"
    ".long	-1084378153\n\t"
    ".long	-1085164558\n\t"
    ".long	-1086055556\n\t"
    ".long	-1087044364\n\t"
    ".long	-1088123462\n\t"
    ".long	-1089284633\n\t"
    ".long	-1090519040\n\t"
    ".long	-1093115539\n\t"
    ".long	-1095819966\n\t"
    ".long	-1098611728\n\t"
    ".long	-1104031531\n\t"
    ".long	-1112375632\n\t"
    ".long	-2147483648\n\t"
    ".long	1035108016\n\t"
    ".long	1043452117\n\t"
    ".long	1048871917\n\t"
    ".long	1051663682\n\t"
    ".long	1054368109\n\t"
    ".long	1056964608\n\t"
    ".long	1058199015\n\t"
    ".long	1059360186\n\t"
    ".long	1060439284\n\t"
    ".long	1061428092\n\t"
    ".long	1062319090\n\t"
    ".long	1063105495\n\t"
    ".long	1063781322\n\t"
    ".long	1064341426\n\t"
    ".long	1064781546\n\t"
    ".long	1065098333\n\t"
    ".long	1065289374\n\t"
    ".long	1065353216\n\t"
);