CPU実験室

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

MS/Cコーディング

LSIC-86は元々が組込み用途なのか浮動小数点演算はちょっと苦手なようで
8087コードもエミュレーションもかなり遅く感じます。
アセンブラ出力を見ても演算1行ごとにライブラリをコールしていて生成効率が悪そうです。
80286でやったように処理系をMicroSoftC/C++6.0Aへ移行します。メモリマップを指定し、CODEとDATAの配置セグメントをコンフィグレーションファイルに与えるだけ
 
イメージ 1
このあとMAKEをかけるだけですが、浮動小数点演算がある場合は/FPi87コンパイルオプションを指定し8087のインラインコードを生成するようにしておきます。
 
イメージ 2
これで8087有り状態で実行。約260msでLSIC-86から5倍も速くなっています。
やっと8087の真の実力が引き出せました。

イメージ 3

ではMSC/C++でのソフトエミュレーションはどうかというと/FPc87オプションでエミュレーションコード
を含むライブラリがリンクされるのですが、内部で8087検出を自動でやっていて外部からいじれないようでした。
(DOS環境下ならNO87という環境変数を見るらしいですが)
 
つまり8087を引っこ抜かないとエミュレーションが選択されないので、それはまたの機会でやってみます。
MSC/C++5.1のマニュアルによると8087はエミュレーションの20~25倍の速度になるようです