はじめに
前の、投稿で、Renesas は GNU-RX 4.8.x ベースなので、サポートの可能性が低いと言ったが、あれは誤りだったーー
調べたら、「Open Source Tools for Renesas」 とゆー HP があり、ここに登録する事で、gcc-8.3.0 ベースの RX マイコン用ツールチェイン一式をダウンロード出来るようだ。
※ソースコードもダウンロード出来る。
登録が少し面倒で、登録したメールアドレスに起因するアクティベーションコードが発行され、そのコードが無いと、ツールをインストール出来ないようだが、コンパイラは制限無く使えるようだ。
ただ、gcc のソースツリーとは異なる実装を行っており、オプションが異なる。
「GNU Tools」は、「CyberTHOR Studios Limited」が保守管理しているようだが、ナゾの組織だ・・
※以前のKPITに類する物なのかもしれない。
それにしても、「知らない」とは恐ろしい・・・
このツールベースで、ルネサスの IDE から動かせば、E1エミュレータなどを使って、ステップ実行も出来そうに思う。
構成
このツールチェインは、以下のツールをまとめた物のようだ。
- binutils_rx_2.24_2020q2
- gcc_rx_8.3.0_2020q2
- newlib_rx_3.1.0_2020q2
- gdb_rx_7.8.2_2020q2
ターゲットヘルプの出力:
% rx-elf-gcc --target-help
The following options are target specific:
-fpu Enable the use of RX FPU instructions. This is
the default.
-m32bit-doubles Stores doubles in 32 bits. This is the default.
-m64bit-doubles Store doubles in 64 bits.
-mallow-string-insns Enables or disables the use of the SMOVF, SMOVB,
SMOVU, SUNTIL, SWHILE and RMPA instructions.
Enabled by default.
-mas100-syntax Generate assembler output that is compatible with
the Renesas AS100 assembler. This may restrict
some of the compiler's capabilities. The default
is to generate GAS compatible syntax.
-mbig-endian-data Data is stored in big-endian format.
-mcpu= Specify the target RX cpu type.
-mdfpu Enable the use of RX DFPU instructions.
-mgcc-abi Enable the use of the old, broken, ABI where all
stacked function arguments are aligned to 32-bits.
-mint-register= Specifies the number of registers to reserve for
interrupt handlers.
-misa= Specify RX ISA version.
-mjsr Always use JSR, never BSR, for calls.
-mlarge-function-growth= Permited value of the limit growth of large
function (in percent).
-mlittle-endian-data Data is stored in little-endian format.
(Default).
-mlra Enable the use of the LRA register allocator.
-mmax-constant-size= Maximum size in bytes of constant values allowed
as operands.
-mno-balign Do not use .balign
-mpid Enables Position-Independent-Data (PID) mode.
-mrelax Enable linker relaxation.
-mrx-abi Enable the use the standard RX ABI where all
stacked function arguments are naturally aligned.
This is the default.
-mrxpeephole Coremark improvement.
-mrxv2-fsqrt Enable to use of FSQRT hardware instruction for
RXv2 instruction set
-msave-acc-in-interrupts Specifies whether interrupt functions should save
and restore the accumulator register.
-msim Use the simulator runtime.
-msmall-data-limit= Maximum size of global and static variables which
can be placed into the small data area.
-mtfu= Enable the use of RX TFU instructions.
-mwarn-multiple-fast-interrupts Warn when multiple, different, fast interrupt
handlers are in the compilation unit.
-nofpu Disable the use of RX FPU instructions.
Assembler options
=================
Use "-Wa,OPTION" to pass "OPTION" to the assembler.
RX specific command line options:
--mbig-endian-data
--mlittle-endian-data [default]
--m32bit-doubles [default]
--m64bit-doubles
--muse-conventional-section-names
--muse-renesas-section-names [default]
--msmall-data-limit
--mrelax
--mpid
--mint-register=<value>
--mcpu=<rx100|rx200|rx230|rx600|rx610|rx64m|rx66T|rx71m|rx72T>
--misa=<v1|v2|v3>
--mno-allow-string-insns --mgcc-abi
--mrx-abi [default]
Linker options
==============
Use "-Wl,OPTION" to pass "OPTION" to the linker.
elf32rx:
--build-id[=STYLE] Generate build ID note
-z common-page-size=SIZE Set common page size to SIZE
-z defs Report unresolved symbols in object files.
-z execstack Mark executable as requiring executable stack
-z max-page-size=SIZE Set maximum page size to SIZE
-z muldefs Allow multiple definitions
-z noexecstack Mark executable as not requiring executable stack
--no-flag-mismatch-warnings Don't warn about objects with incompatible
endian or dsp settings
--flag-mismatch-warnings Warn about objects with incompatible
endian, dsp or ABI settings
--ignore-lma Ignore segment LMAs [default]
(for Renesas Tools compatibility)
--no-ignore-lma Don't ignore segment LMAs
注目するのは・・
--mcpu=<rx100|rx200|rx230|rx600|rx610|rx64m|rx66T|rx71m|rx72T>
RX72M、RX72N、RX66N などの CPU タイプは無いが、「RX72T」がある。
そして、
-mdfpu Enable the use of RX DFPU instructions.
-mtfu= Enable the use of RX TFU instructions.
多分、「倍精度浮動小数点命令」、「三角関数演算器」のサポートがある!
mcpu タイプに RX72N が無いのが、良く判らないが、gcc でも、サポートがされる事が判ったのがうれしい。
※まだ、有効にした場合の検証をしていない・・
MSYS2 からも、ツールのパスを設定すれば、使えるようだ・・
PATH=$PATH:/C/'Program Files (x86)'/'GCC for Renesas RX 8.3.0.202002-GNURX-ELF'/rx-elf/rx-elf/bin
ただ、
Assembler messages:
Warning: cannot compress debug sections (zlib not installed)
上記警告が出る・・・
お馴染み、レイトレースを走らせてみる
いつもの、ベンチマーク「レイトレース」を RX72N Envision Kit で走らせてみた。
何と、「最速」をマークした・・・
※gcc-7.5.0 では、361ms くらいだった・・
-mcpu=rx71m
※RX64M、とRX71M でコアの違いは無いと思うが・・・、とりあえず、RX71M でコンパイルした。
※RX64M でコンパイルしたものと同じバイナリーが出る。
今後の開発環境
今後、アップデートも行われるようなので、このコンパイラを使っていきたいと思う。
Makefile のオプションが変わるので、自分でビルドした gcc とは異なる設定が必要。
# CC_DEFS = -mcpu=rx600 -Wa,-mcpu=rxv2
CC_DEFS = -mcpu=rx71m -dfpu
# CP_DEFS = -mcpu=rx600
CP_DEFS = -mcpu=rx71m
上記のように、オプションを変更する。
もう少し、評価したら、Makefile を修正後、コミットする予定なので、自分で gcc をビルドしている人は、GNU-RX 8.3.0 をダウンロードして準備する必要がある。