「現在の位置から楕円の弧を描画する関数」の実行速度を改善するために三角関数を表から取得するように変更しました。
現在の位置から楕円の弧を描画する関数(インラインアセンブラ)
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" );




