FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

MIPSアーキテクチャ64bitへの対応を検討する(ベンチマークのビルド)

MIPSには、大昔から64ビットのアーキテクチャ仕様であるMIPS64が存在する。この対応を考えてみよう。

ベンチマークプログラムの64ビット命令対応

まずは、ベンチマークの移植から考えてみる。

まず、MIPS64R6の対応するコードを出すためには、イマジネーションのコンパイラが必要だ。

community.imgtec.com

これでCoremarkをベンチマークコンパイルしてみる。

github.com

あと、リンカスクリプトを変更することでスタートアップアドレスを変更した。

 SECTIONS
 {
-        .data   0x7F000000 : { *(.data) }
+        .data   0xFFFFFFFF7F000000 : { *(.data) }
         _gp = ALIGN(16);
         _sp = ALIGN(16) + 0x3FF8;
         .bss    :            { *(.bss)  }
-        .text   0x80000000 : {
+        .text   0xFFFFFFFF80000000 : {
                 *(.text)
         }
-        .text.reset 0xbfc00000 : {
+        .text.reset 0XFFFFFFFFBFC00000 : {
                 *(.text.reset)
         }
 }

シミュレータの64ビット命令対応

次にISSの64ビット命令対応を考えてみよう。基本的には、PCと汎用レジスタ、メモリマップのアドレスを変更すればうまく行くはずだ。

github.com

新しくmips64というブランチを作って作業を始めた。基本的にアドレスの幅を64ビットに変更しただけで、あとはとりあえず何もしていない。

ベンチマークをシミュレートしてみる。

早速コンパイルしたベンチマークを実行してみた。

<BSF_Global: 0x7f000010 _GLOBAL_OFFSET_TABLE_
<BSF_Global: 0x7f000214 seed2_volatile
<BSF_Global: 0x7f000000 default_num_contexts
<Finish loading global variable table>
StartDebug max_step=65535 <= curr_step(0) + stepCount(65535)
Result Max_step=65535
         0 : [bfc00000] 3c1c0000 : lui     r28,0x0000              r28<=00000000
         1 : [bfc00004] 3c017f00 : lui     r01,0x7f00              r01<=7f000000
<Error: instruction is not decoded. [bfc00008]=679cffff

変数のアドレスなどは、32ビット表記のままだが一応バイナリのロードには成功した。次は、64ビットの命令への対応だ。