一応、整数型のCソースは問題なくコンパイルでき、遅いですが実行もできたので今度は浮動小数点演算を試してみました。
例題は最初にアセンブラでNS32081のテストをした時と同じ処理です。
TEST2.C
ns32k-pc532-netbsd-gcc -S test2.c
TEST2.S
特にFPUの存在を指示しなくてもFPU命令を生成しています。もともとのターゲットマシンであるPC532というのがNS32532/NS32381を搭載していたらしいのでコマンドラインオプションの-m32532 -m32381はデフォルトのようです。ただ浮動小数点レジスタはF01個しか使ってないので多分今のボードでも動くでしょう。
それよりCソースの16進数値や浮動小数点表現がコンパイルされたアセンブラソースではすべて10進表現になってしまうのは何とかならないでしょうか。本来は中間ファイルで目に見えるものではありませんけど
ではもう少し複雑な演算の例題として今まで何回もでてきたマンデルブロ集合判定関数で見てみます。
TEST3.C
これもコンパイルしますが、ターゲットに合わせてオプション-m32032 -m32081 を指定してみます
ns32k-pc532-netbsd-gcc -S -m32032 -m32081 test3.c
TEST3.S
アセンブラ直コーディングよりは冗長ですがまあまあの出来です。ところがここでまずいところを発見しました。上のコードで赤枠で示した部分やその他で倍精度FPU命令セットで奇数番の浮動小数点レジスタを使ってしまっています。これはNS32081のアーキテクチャ的にできないはずで明らかに誤りでこれでは動きません。
オプションを-m32081 、-m32381の どちらを指定しても同じコードを吐くので単に未サポートなのかGCCのバグなのか、はたまた自分の使い方が間違っているのか謎です。
未サポートだとしても今どき世界中でたぶん誰も困ってないと思いますが