Renesas RX向けGCCツールチェーン 14.2.0.202607をリリース
Renesas RX向けGCCツールチェーン バージョン14.2.0.202607をリリースしました。
本ツールチェーンは、すべてのRenesas RXデバイスを対象としたC/C++アプリケーション開発用のGCCベースのクロス開発ツールチェーンで、ELF形式のオブジェクトファイルを生成します。Ubuntu 22.04以降または互換性のあるLinuxディストリビューション、Windows 7以降、およびApple M1上で動作するmacOS Ventura 13.4向けのインストーラーを提供しています。
最新バージョンのツールチェーンは、こちらからダウンロードできます。
Renesas RX向けGCCツールチェーン 14.2.0.202607は、以下のコンポーネントをベースとしています。
– GCC 14.2.0
– GNU Binutils 2.44
– Newlib 4.4.0
– GDB 16.2
また、ツールチェーンのソースには、適用可能な最新のパッチが組み込まれています。
本リリースの主な改善点および修正点は、以下のとおりです。
– Renesas RXv3e Protect Zoneのサポート
新しいコンパイラオプション-mprotect-zoneにより、RXv3e Protect Zoneがサポートされました。本機能の設定および使用方法については、ツールチェーンに付属するGCCマニュアルならびに関連するRXv3eのソフトウェアマニュアルおよびハードウェアマニュアルをご参照ください。
– TFUセキュリティ属性を指定する新しいオプション
新しいコマンドラインオプション-mtfu-security-attribute=[secure/nonsecure]が追加されました。このオプションにより、TFUのベースアドレスとして使用するメモリ領域のアドレスを選択できます。
– rx-elf-libgenとMTFU関連オプションの連携を変更
関連するMakefileにより、MTFU関連のオプションがrx-elf-libgen --compiler-optionsのコマンドラインから除外されるようになりました。この変更は、Protect Zoneの導入に伴って発生する可能性のあるアドレスの不整合を防止するためのものです。
– C++における-mtfu=intrinsic,mathlibの動作を修正
C++コードのコンパイル時に、-mtfu=intrinsic,mathlibオプションを指定しても、sinf、cosf、atan2f、およびhypotfの呼び出しが対応する組み込み実装へ正しく置き換えられない問題がありました。本リリースでは、この問題が修正されています。
– 特定の64ビット減算処理で発生するコンパイラ障害を修正
一部の64ビット減算式において、コンパイラが適切な命令を選択できず、異常終了する場合がありました。このリグレッションは202505版および202511版のツールチェーンに含まれていましたが、バージョン14.2.0.202607で修正されています。
既存のプロジェクトを本バージョンへ移行する際は、以下の互換性に関する注意事項についてもご確認ください。
– -Wreturn-typeがデフォルトで有効になっています。戻り値を持つ関数が値を返さずに終了する可能性がある場合は警告が生成されます。このようなコードは最適化時に正しく動作しない可能性があるため、警告内容をご確認のうえ修正してください。
– G++では、不正なテンプレート定義に対する検証がさらに厳格化されています。どのようなテンプレート引数を指定しても正しくインスタンス化できないコードは、コンパイルエラーとして検出される場合があります。
– C++のalignof演算子は、コンパイラが推奨するアラインメントではなく、ターゲットABIが要求する最小アラインメントを返すようになっています。推奨アラインメントが必要な場合は、__alignof__を使用できます。
– C++17モードでは、std::map、std::multimap、std::set、およびstd::multisetなどの連想コンテナで使用する比較オブジェクトを、const修飾された状態でも呼び出せるようにする必要があります。
– Optlibライブラリは削除されました。これは、ANSI/ISO規格で必要とされるヘッダーおよび定義が完全には含まれていないこと、標準ライブラリ関数の一部のみが実装されていること、ならびに数学関数が速度やコードサイズを優先して精度を犠牲にしており、IEEE 754に準拠していないことによるものです。
e² studioをご利用の場合、e² studioの起動時にインストール済みのGNURXツールチェーンが自動的に検出されるため、本インストーラーには個別の統合オプションは用意されていません。e² studioの「Toolchain Management」機能を使用してツールチェーンを設定することもできます。なお、本インストーラーはHEW IDEとの統合には対応していません。
技術的な詳細、各オプションの使用方法、および既知の問題については、こちらのリリースノートをご覧ください。
本リリースに関するご意見、ご質問、または新しいツールチェーンをご利用になった感想がございましたら、ぜひ下のコメント欄にお寄せください。
Sex Cam6 Responses to Renesas RX向けGCCツールチェーン 14.2.0.202607をリリース
コメントを残す
コメントを投稿するにはログインしてください。

English
TFU Version2 を指定してコンパイルした場合のビルトイン関数の仕様等の情報はどこで参照できるでしょうか?
void sincosfx(int, int*, int*);
void atan2hypotfx(int, int, int*, int*);
int sinfx(int);
int cosfx(int);
int atan2fx(int, int);
int hypotfx(int, int);
こんにちは。
お問い合わせいただき、ありがとうございます。
各関数の説明については、ツールチェーンに同梱されている以下のドキュメントをご参照ください。
< ツールチェーンのインストール先>/Doc/gcc.pdf
6.62.34節「RX Built-in Functions」
その他にもご不明な点やお困りのことがございましたら、どうぞお気軽にお知らせください。
よろしくお願いいたします。
Open Source Tools Team
お世話になっております。
https://github.com/hirakuni45/RX/tree/master/RAYTRACER_sample
上記のプログラム(レイトレーシング、3Dレンダリングプログラム)で
RXv1 コア(RX62N、RX631 など)の場合に、gcc-8.3.0 に比べて極端に実行速度が遅くなる現象が発生しています
このプログラムは、単精度浮動小数点演算が多く含まれているプログラムです
又、rx64m、rx71m、rx66T、rx72T などの場合にも、微妙に実行速度が遅くなる現象があります
※実行時間の計測は、マイコン内蔵CMTタイマーによるものです
※実行時間は、上記リンクで表にしてあります
※gcc-8.3.0 は 202004 版を利用しています
上記プログラムは、一般的な e² studio 環境では無く、MSYS2上で、Makefile を使ったコマンドラインによるもので、スタートアップも独自に行っています
最適化は「-O3」で行っています
この件に関して、何か、情報がありましたら、教えて頂きたく思います
こんにちは。
詳細な情報をご提供いただき、ありがとうございます。
まずは、コンパイラオプションに **`-mno-balign`** を追加していただき、実行速度に改善が見られるかご確認いただけますでしょうか。
ご報告いただいた性能低下については、現在も原因の調査を進めておりますが、特定までにはしばらく時間を要する可能性があります。
弊社では、ツールチェーン自体に性能劣化がないかを確認するため、継続的に社内ベンチマークを実施しております。現時点では、ツールチェーン全体として、ご報告いただいたような性能低下は確認されておりません。ただし、これはお客様の特定のプロジェクトを対象とした検証結果ではないため、今回の事象については引き続き調査を進めてまいります。
また、調査の過程で、プロジェクトの構成やビルド条件などについて追加で確認させていただく場合がございます。その際はご協力いただけますと幸いです。
よろしくお願いいたします。
オープンソースツールチーム
お世話になっています。
RX62N で試してみましたが、「-mno-balign」オプションを追加しても、ほぼ変化しませんでした。(10ms 短縮した)
3868 —> 3856 [ms]
—
自分が簡単な調査をした処、以下の問題があるようです
RXv1 には、単精度浮動小数点の平方根を求める専用命令が無い為、数学関数の「sqrtf」を呼び出しています、この実装が、gcc-8.3.0とgcc-14.2.0で異なっているのでは無いかと考えています、RXv2、RXv3 では、インラインアセンブラで、専用命令fsqrtを呼び出しています、これは、「raytracer.hpp」の最初にあります
試しに、RX66T(RXv3) で、sqrtf を専用命令では無く、libm の数学関数命令に置き換えると
gcc-8.3.0 : 696[ms]
gcc-14.2.0: 1292[ms]
となり、RXv1で遅くなった傾向に類似しています
gcc-8.3.0とgcc-14.2.0で、リンクされているiee754-sqrtのアセンブラリストを見比べるとかなり大きな違いがあります(数学ライブラリは十分枯れたコードだと思うので、ここまで異なるのは一般的な感覚と異なります)
倍精度浮動小数点の関数がマッピングされているような印象があります
自分の調査はここまでです。
こんにちは。
あわせて、コンパイラオプションに `-fno-ipa-cp-clone` を追加していただくことをお勧めいたします。
このオプションを追加することで、特に `main.cpp` の `doRaytrace` 関数について、GCC 8.3.0 使用時に近いコード生成となります。
引き続き調査を進め、新たに判明した点がございましたらご報告いたします。
よろしくお願いいたします。
オープンソースツールチーム