CPU実験室

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

NS32000用GCC(5)

一応、整数型のCソースは問題なくコンパイルでき、遅いですが実行もできたので今度は浮動小数点演算を試してみました。

例題は最初にアセンブラNS32081のテストをした時と同じ処理です。

 

TEST2.C

f:id:O3I:20201120175045j:plain

これをコンパイルアセンブラコードを生成します 

ns32k-pc532-netbsd-gcc -S  test2.c

TEST2.S

f:id:O3I:20201120175109j:plain

 特にFPUの存在を指示しなくてもFPU命令を生成しています。もともとのターゲットマシンであるPC532というのがNS32532/NS32381を搭載していたらしいのでコマンドラインオプションの-m32532 -m32381はデフォルトのようです。ただ浮動小数レジスタはF01個しか使ってないので多分今のボードでも動くでしょう。

それよりCソースの16進数値や浮動小数点表現がコンパイルされたアセンブラソースではすべて10進表現になってしまうのは何とかならないでしょうか。本来は中間ファイルで目に見えるものではありませんけど

 

ではもう少し複雑な演算の例題として今まで何回もでてきたマンデルブロ集合判定関数で見てみます。

 TEST3.C

f:id:O3I:20201120175124j:plain

これもコンパイルしますが、ターゲットに合わせてオプション-m32032 -m32081 を指定してみます

ns32k-pc532-netbsd-gcc -S -m32032 -m32081 test3.c

 TEST3.S

f:id:O3I:20201120175143j:plain

f:id:O3I:20201120175156j:plain

 アセンブラ直コーディングよりは冗長ですがまあまあの出来です。ところがここでまずいところを発見しました。上のコードで赤枠で示した部分やその他で倍精度FPU命令セットで奇数番の浮動小数レジスタを使ってしまっています。これはNS32081アーキテクチャ的にできないはずで明らかに誤りでこれでは動きません。

オプションを-m32081 、-m32381の どちらを指定しても同じコードを吐くので単に未サポートなのかGCCのバグなのか、はたまた自分の使い方が間違っているのか謎です。

未サポートだとしても今どき世界中でたぶん誰も困ってないと思いますが