Arm Compiler for Embedded 6.22 のリリースノート
目次
1. リリース概要
1.1 製品の説明
Arm Compiler for Embedded 6.22 は、ベアメタルソフトウェア、ファームウェア、およびリアルタイムオペレーティングシステム(RTOS) アプリケーションを開発するための、Arm の最新の組み込みC/C++コンパイルツールチェインです。
ツールチェインは、次の Arm 統合開発環境 (IDE) と互換性があります:
- Arm Development Studio
- Keil MDK version 5
- Keil MDK version 6
Arm Compiler for Embedded は、Arm アーキテクチャの最新のアーキテクチャ機能と拡張のために、最も早く、最も完全で、正確なサポートを提供します。開発中のものも含め、すべての最新のArm プロセッサをサポートします。 強力な最適化手法と最適化されたライブラリを通して、Arm Compiler for Embedded は組み込みシステム開発者が挑戦的なパフォーマンス目標とメモリ制約を満たすことを可能にします。
Arm Compiler for Embedded は、自動車、家電、産業、医療、ネットワーク、鉄道、ストレージ、通信など、さまざまな業界のリーディングカンパニーで使用されています。 Armは、プロジェクトが以下の場合は、本リリースの代わりに、LTSおよび機能安全認証版のArm Compiler for Embedded FuSa を検討することを強く推奨します。
- 長期メンテナンス要件がある
- EN50128、IEC61508、IEC62304、ISO26262などの機能安全要件がある
- Automotive Enhanced プロセッサを使用している
Arm Compiler for Embedded または Armの統合開発環境(IDE)については、代理店にお問い合わせください。
1.2 リリースのハイライト
Arm Compiler for Embedded 6.22 は2024年3月現在の最新リリースであり、それ以前のリリースの置き換えとなります。
本リリースのキーとなるハイライトは以下の通りです:
- Armv9.5-Aアーキテクチャのサポート
- A-profileアーキテクチャの 2023 拡張機能のサポート
- 以下のプロセッサのサポート:
- Neoverse V3AE
- Cortex-A720AE
- Cortex-A520AE
- Cortex-R82AE
- Cortex-M52
- ハードウェア浮動小数点サポートのない Armv8-R AArch64 実装のサポート
ライセンス条件に従い、Arm Compiler for Embedded 6.22 を使用して、以下のArm アーキテクチャおよびプロセッサ用のビルドが行えます:
Architecture | Processor Family | Standard Processors | Automotive Enhanced Processors |
Armv9.5-AまでのArmv9-A | Neoverse | V2 N2 |
V3AE |
Cortex | X4, X3, X2 A715, A710, A510 A520, A510 |
A720AE, A520AE | |
Armv8.9-AまでのArmv8-A | Neoverse | V1 N1 E1 |
- |
Cortex |
X1, A17, A15, A12 |
A78AE, A76AE A65AE |
|
Armv7-A | Cortex | A17, A15, A12 A9, A8, A7, A5 |
- |
Armv8-R AArch64 | Cortex | R82 | R82AE |
Armv8-R | Cortex | R52+, R52 | - |
Armv7-R | Cortex | R8, R7, R5, R4F, R4 | - |
Armv8.1-MまでのArmv8-M | Cortex | M85 M55, M52 M35P, M33 M23 |
- |
STAR | STAR-MC1 | - | |
Armv7-M | Cortex | M7, M4, M3 | - |
SecurCore | SC300 | - | |
Armv6-M | Cortex | M1, M0, M0+ | - |
SecurCore | SC000 | - |
詳細については以下のドキュメントを参照してください:
- Arm Development Studioプロダクトページ
- Keil MDK 5プロダクトページ
- Keil Studio for VS Codeプロダクトページ
- Arm Compiler for Embedded User Guideの Support level definitions の章
1.3 含まれるコンポーネント
Arm Compiler for Embedded 6.22 は以下を含みます:
- ツールチェインコンポーネント:
- armclang:LLVMとClangテクノロジをベースとしたコンパイラおよび統合アセンブラ
- armar:ELFオブジェクトファイル群をまとめるアーカイバ
- armlink:オブジェクトやライブラリをまとめ、実行可能形式を生成するリンカ
- fromlef:イメージ変換ユーティリティ兼逆アセンブラ
- armasm:非推奨となった古いArm アーキテクチャ専用のarmasm-syntaxアセンブリコード用の旧アセンブラ。新しいアセンブリファイルではarmclang統合アセンブラを使用
- Arm C libraries:組込みシステム向けのランタイムサポートライブラリ
- Arm C++ libraries:LLVM libc++プロジェクトベースのライブラリ
-
User documentation:
- User Guide:ツールチェインの使用を助けるサンプルとガイドを提供します
- Reference Guide:ツールチェインの設定に役立つ情報を提供します
- Arm C and C++ Libraries and Floating-Point Support User Guide:Arm libraryと浮動小数点サポートに関する情報を提供します
- Errors and Warnings Reference Guide:Arm Compiler for Embedded に含まれるツールがレポートするエラーやワーニングのリストを提供します
- Migration and Compatibility Guide:Arm Compiler 5 からArm Compiler for Embedded への移行を支援する情報を提供します
- Release notes: 最新のリリースノートはArm Compiler 6 ダウンロードページで確認できます。
1.4 製品の品質
これは実動作環境での使用に適した最終リリース品質の製品です。
この製品内の一部の機能は最終リリース品質の機能ではありません。該当する場合は、ドキュメント内にその旨が明示的に記載されています。このような機能の詳細については、 User Guideの Support level definitionsセクションを参照してください。
2. Arm Compiler for Embedded 6.22 をダウンロード
Arm Compiler for Embedded 6.22 は、所持されているライセンスと権限に応じて、スタンドアローン、Arm統合開発環境 (IDE) の一部として、または Success Kit の一部としてダウンロードが可能です。
このリリースをスタンドアローンでダウンロードするには、Arm Product Download Hub (PDH)の ACOMPEプロダクトコードを使用します。 この製品コード内のダウンロードパッケージは、2024年3月時点で次の環境での使用を想定としています:
Host architecture | Host operating system | Toolchain download package | Host environment |
x86_64 | Red Hat Enterprise Linux 9 Red Hat Enterprise Linux 8 Red Hat Enterprise Linux 7 Ubuntu Desktop Edition 22.04 LTS Ubuntu Desktop Edition 20.04 LTS |
x86_64 Linux | スタンドアロン製品として使用 Arm Development Studioに統合 |
Windows Server 2022 Windows Server 2019 Windows 11 Windows 10 |
x86_64 Windows | スタンドアロン製品として使用 Arm Development Studioに統合 |
|
for Keil® MDK | Keil MDK 5 に統合 | ||
AArch64 | Ubuntu 20.04 LTS | AArch64 Linux | スタンドアロン製品として使用 |
✝ Arm は、このリリースに環境を追加する権利を留保します。
以下の制限が適用されます:
- ツールチェインは、x86_32 Windowsホストプラットフォームでの使用を意図していません。
- Linuxホストプラットフォームに必要なglibcの最小バージョンは 2.15 です。
- ツールチェインを Arm Development Studio のインストールディレクトリに直接インストールしないでください。
- Keil MDK 5 ライセンスでの使用は、x86_64 Windows ホストプラットフォームでのみ許可されます。
- Keil MDK 5 で使用するには、Keil MDK 5 インストールディレクトリの ARMサブディレクトリにインストールする必要があります。例えば、
C:\Keil_v5\ARM\ARMCompiler6.22
詳細については、以下を参照してください:
- ツールチェインのインストール手順についてはArm Compiler for Embedded User GuideのSystem requirements and installationの章を参照してください。
- ツールチェインを Arm Development Studio に統合する手順については、Arm Development Studio Getting Started GuideのRegister a compiler toolchainの章を参照してください。
- ツールチェインを Keil MDK 5 に統合する手順については、µVision User's GuideのManage Arm Compiler Versionsの章を参照してください。
- ツールチェーンを Keil Studio for VS Code に統合する手順については、Arm Keil Studio Visual Studio Code Extensions User Guideを参照してください。
- FlexNet Publisher(FNP)ライセンスを使用するようにツールチェインを構成する手順については、Product and toolkit configuration for FlexNet Publisher (FNP) licensesを参照してください。 FNPフローティングライセンスを使用している場合は、最新バージョンのライセンスサーバーソフトウェアを使用してください。
- User-based ライセンス(UBL)を使用するようにツールチェインを構成する手順については、User-based ライセンスに関するドキュメンテーションを参照してください。
3. 以前のリリースとの違い
以下に、Arm Compiler for Embedded 6.22 シリーズのリリース日付を示します:
- 6.22 (2024年3月にリリースされました)
以下に、以前のリリースのArm Compiler for Embedded 6.21 との違いを示します。
この章の範囲に関する情報については、Does Arm document all known issues that affect each Arm Compiler release? の記事を参照してください。
以下の情報には、技術的な不正確さや誤植が含まれる場合があります。
それぞれの変更点には、ユニークな識別子SDCOMP-が割り振られています。
もしArmへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください。
3.1 一般的な変更
- [SDCOMP-65070] ハードウェア浮動小数点なしの Armv8-R AArch64 実装のサポートが追加されました。ハードウェア浮動小数点なしの Armv8-R AArch64 実装をターゲットにするには、次のオプションから選択します:
ターゲット armclang オプション armlink オプション Cortex-R82AE processor --target=aarch64-arm-none-eabi -mcpu=cortex-r82ae+nofp -mabi=aapcs-soft --cpu=8-R.64 --fpu=SoftVFP Cortex-R82 processor --target=aarch64-arm-none-eabi -mcpu=cortex-r82+nofp -mabi=aapcs-soft --cpu=8-R.64 --fpu=SoftVFP Armv8-R AArch64 architecture --target=aarch64-arm-none-eabi -march=armv8-r+nofp -mabi=aapcs-soft --cpu=8-R.64 --fpu=SoftVFP
詳細については、以下を参照ください。
- Reference Guideの -mabi=<value> の章
- Reference Guideの -march の章
- Reference Guideの -mcpu の章
- Reference Guideの --cpu=name (armlink) の章
- Reference Guideの --fpu=name (armlink) の章
- User Guideの How to build for an Armv8-R AArch64 target without hardware floating-point support の章
- [SDCOMP-65066] AArch64 状態の以下のA-プロファイル機能のサポートが変更されました:
機能識別子 機能の説明 -march / -mcpu +<feature> option(s) 以前のサポートレベル 新しいサポートレベル FEAT_CPA Checked Pointer Arithmetic 命令のみ cpa Alpha サポート FEAT_E3DSE EL3のDelegated SError 例外 - Beta サポート FEAT_FAMINMAX 絶対値の最大値と最小値の命令 faminmax Alpha サポート FEAT_FGWTE3 Fine Grained Write Trap EL3 - Beta サポート FEAT_FP8 FP8命令用の Arm FP8フォーマット E5M2 および E4M3 FP8 Alpha サポート FEAT_FP8DOT2 FP8 から半精度 2-way dot積命令 fp8dot2 未サポート サポート FEAT_FP8DOT4 FP8 から単精度 4-way dot積命令 fp8dot4 Alpha サポート FEAT_FP8FMA FP8から半精度および単精度の積和演算命令 fp8fma Alpha サポート FEAT_FPMR 浮動小数点モードレジスタ制御 fpmr Alpha サポート FEAT_HACDBS ダーティ状態をクリーンするためのハードウェアアクセラレータ - Beta サポート FEAT_HDBSS ハードウェアのダーティ状態のトラッキング構造 - Beta サポート FEAT_LUT ルックアップテーブル命令 lut Alpha サポート FEAT_PAuth_LR PC をリターンアドレス署名の2番目のdiversifier として使用するためのPAC の機能強化 pauth-lr Beta サポート FEAT_SME_F8F16 SME2 FP8 から半精度の積和、ドット積、外積命令 sme-f8f16(*) Alpha サポート FEAT_SME_F8F32 SME2 FP8 から単精度の積和演算、ドット積、外積演算命令 sme-f8f32(*) Alpha サポート FEAT_SME_LUTv2 追加の SME2ルックアップテーブル命令 sme-lutv2(✝) Alpha サポート FEAT_SSVE_FP8DOT2 Streaming SVE モードでの SVE2 FP8 から半精度 2-way dot積命令 ssve-fp8dot2 未サポート サポート FEAT_SSVE_FP8DOT4 Streaming SVE モードでの SVE2 FP8 から単精度 4-way dot積命令 ssve-fp8dot4 未サポート サポート FEAT_SSVE_FP8FMA Streaming SVE モードでの SVE2 FP8 から半精度および単精度の乗算累算命令 ssve-fp8fma 未サポート サポート FEAT_STEP2 Software Step の強化 - Beta サポート FEAT_TLBIW ダーティ状態の TLBI VMALL tlbiw Beta サポート
(*) Alphaでサポートされている FEAT_SME2 機能を暗黙的に有効にします。
(✝) Alphaでサポートされている FEAT_SME2 機能を有効にするには、+sme2 +<feature> オプションが必要です。
より詳細については以下を参照してください:
- Reference Guide 内、-marchの章
- Reference Guide 内、-mbranch-protectionの章
- Reference Guide 内、-mcpuの章
- Arm Architecture Reference Manual およびReference Manual Supplement内の各機能に関連する項目
- [SDCOMP-64874] Cortex-A720AEプロセッサのサポートが追加されました。
Cortex-A720AEをターゲットにするには、以下のarmclangオプションのいずれかを使用してください:
暗号化拡張 オプション あり --target=aarch64-arm-none-eabi -mcpu=cortex-a720ae+crypto+sve2-aes+sve2-sha3+sve2-sm4 なし --target=aarch64-arm-none-eabi -mcpu=cortex-a720ae
- [SDCOMP-64873] Cortex-A520AEプロセッサのサポートが追加されました。
Cortex-A520Eをターゲットにするには、以下のarmclangオプションのいずれかを使用してください:
暗号化拡張 オプション あり --target=aarch64-arm-none-eabi -mcpu=cortex-a520ae+crypto+sve2-aes+sve2-sha3+sve2-sm4 なし --target=aarch64-arm-none-eabi -mcpu=cortex-a520ae
- [SDCOMP-64871] Neoverse-V3AEプロセッサのサポートが追加されました。
Neoverse-V3AEをターゲットにするには、以下のarmclangオプションのいずれかを使用してください:
暗号化拡張 オプション あり --target=aarch64-arm-none-eabi -mcpu=neoverse-v3ae+crypto+sve2-aes+sve2-sha3+sve2-sm4 なし --target=aarch64-arm-none-eabi -mcpu=neoverse-v3ae
- [SDCOMP-64754] プリプロセッサがカスタムワーニング<message>をリポートできるように、 #pragma message <message>のサポートが追加されました。
詳細については、Reference Guideの #pragma message の章を参照ください。 - [SDCOMP-64632]<install_dir>/sw/checksums.txt ( <install_dir>はインストールディレクトリ)には、Arm Compiler for Embedded のインストール内のファイルのチェックサムが含まれています。
以前は、チェックサムは MD5ハッシュアルゴリズムを使用して計算されていましたが、現在チェックサムは SHA256ハッシュアルゴリズムを使用して計算するように変更されています。
- [SDCOMP-64545]以前は、コンパイラと統合アセンブラは、下記のターゲットプロセッサに対して、 特定の暗号化拡張機能をデフォルトで誤って有効にしていました。
- Cortex-X4
- Cortex-A720
- Cortex-A520
- Neoverse N2
機能修飾子 機能識別子 +crypto FEAT_AES, FEAT_SHA3, FEAT_SM3, FEAT_SM4 +sve2-aes FEAT_SVE_AES, FEAT_SVE_PMULL128 +sve2-sha3 FEAT_SVE_SHA3 +sve2-sm4 FEAT_SVE_SM4
- [SDCOMP-64530]コンパイルプロセス中にスタック使用量情報ファイルを生成する -fstack-usage コンパイラオプションのサポートが追加されました。
詳細については、Reference Guideの-fstack-usageの章をご参照ください。
- [SDCOMP-64440]以前、C++11以降のソース言語モードの operator newの実装では、実行時にメモリの割り当てに失敗すると、下記のような振る舞いをしていました。
C++ 例外 operator new 式 振る舞い 有効 std::nothrow_t パラメータなし std::bad_alloc 例外をスローする 有効 std::nothrow_t パラメータ付き nullptr を返す 無効 std::nothrow_t パラメータなし nullptr を返す 無効 std::nothrow_t パラメータ付き nullptr を返す C++ 例外 operator new 式 振る舞い 有効 std::nothrow_t パラメータなし std::bad_alloc 例外をスローする 有効 std::nothrow_t パラメータ付き nullptr を返す 無効 std::nothrow_t パラメータなし bad_alloc が -fno-exceptions モードでスローされたことを stderr に出力し、SIGABRT シグナルを発生させる 無効 std::nothrow_t パラメータ付き nullptr を返す std::nothrow_tパラメータなしでoperator new式をオーバーライドする場合、 対応する式もstd::nothrow_tパラメータでオーバーライドする必要があります。 たとえば、std::new(size_t)をオーバーライドした場合は、std::new(size_t, const std::nothrow_t&) もオーバーライドする必要があります。std::nothrow_tパラメータなしで影響を受ける式を使用して、 operator newを明示的に呼び出した場合の以前の振る舞いを復元するには、影響を受ける各式を、 std::nothrow_tパラメータ付き同等の式に置き換えます。
この振る舞いの変更は、operator newへの暗黙的な呼び出しにも影響します。 たとえばstd::coutからの暗黙的な呼び出しなどです。
- [SDCOMP-64414]ディレクトリをシステムヘッダーディレクトリとして指定するための -isystemコンパイラオプションのサポートが追加されました。
詳細については、Reference Guideの-isystem <directory>の章をご参照ください。
- [SDCOMP-64409]末尾呼び出しの最適化を有効または無効にする-foptimize-sibling-calls および-fno-optimize-sibling-callsコンパイラオプションのサポートが追加されました。
詳細については、Reference Guideの-foptimize-sibling-calls, -fno-optimize-sibling-callsの章をご参照ください。
- [SDCOMP-64241]下記のA-profileアーキテクチャのサポートが変更されました。
アーキテクチャ 状態 -march=<name> オプション 以前のサポートレベル 新しいサポートレベル Armv9.5-A AArch64 sarmv9.5-a Beta サポート Armv9.5-A AArch32 sarmv9.5-a 未サポート サポート
- [SDCOMP-60422]Arm C ライブラリに strnlen()関数のサポートが追加されました。
詳細については、C and C++ Libraries and Floating-Point Support User Guideのstrnlen()の章をご参照ください。
- [SDCOMP-58216]Cortex-M52 プロセッサのサポートが追加されました。Cortex-M52をターゲットにするには下記のオプションから選択します。
Scalar FP half-precision and single-precision Scalar FP double-precision MVE integer MVE FP half-precision and single-precision M-profile PACBTI Extension armclang -mcpu=<name> オプション armlink --cpu=<name> オプション fromelf --cpu=<name> オプション(*) あり あり あり あり あり cortex-m52 - Armv8.1-M.Main.mve あり あり なし なし あり cortex-m52+nomve - Armv8.1-M.Main.mve あり なし あり なし あり cortex-m52+nomve.fp+nofp.dp - Armv8.1-M.Main.mve あり なし なし なし あり cortex-m52+nomve+nofp.dp - Armv8.1-M.Main.mve なし なし あり なし あり cortex-m52+nomve.fp+nofp - SoftVFP あり あり あり あり なし cortex-m52+nopacbti - Armv8.1-M.Main.mve あり あり なし なし なし cortex-m52+nomve+nopacbti - Armv8.1-M.Main.mve あり なし あり なし なし cortex-m52+nomve.fp+nofp.dp+nopacbti - Armv8.1-M.Main.mve あり なし なし なし なし cortex-m52+nomve+nofp.dp+nopacbti - Armv8.1-M.Main.mve なし なし あり なし なし cortex-m52+nomve.fp+nofp+nopacbti - Armv8.1-M.Main.mve
詳細については、Reference GuideのSupported architecture feature combinations for specific processorsの章をご参照ください。
- [SDCOMP-56786]Armv8.5-A以降で浮動小数点丸め機能(FEAT_FRINTTS)のArm C Language Extensions(ACLE)組み込み関数のサポートが追加されました。
- [SDCOMP-56149]-faligned-new コンパイラオプションがサポートされ、C++14およびそれ以前のソース言語モードでC++17のアラインされた new 演算子を使用可能になりました。
詳細については、Reference Guideの-faligned-newの章をご参照ください。
- [SDCOMP-56120]Cortex-R82AEプロセッサのサポートが追加されました。
Cortex-R82AEをターゲットにするには、以下のオプションを選択してください:
Floating-point Unit armclang オプション armlink オプション あり --target=aarch64-arm-none-eabi -mcpu=cortex-r82ae --cpu=8-R.64 なし --target=aarch64-arm-none-eabi -mcpu=cortex-r82ae+nofpbr -mabi=aapcs-soft --cpu=8-R.64 --fpu=SoftVFP
詳細については、Reference Guideの以下の章を参照ください。- -mabi=<value>
- -march
- -mcpu
- --cpu=name (armlink)
- --fpu=name (armlink)
- [SDCOMP-52685]関数のすべての最適化を無効にする__attribute__((optnone))関数属性のサポートが追加されました。
詳細については、Reference Guideの__attribute__((optnone)) function attributeの章をご参照ください。
- [SDCOMP-51219]AArch64状態に対する下記の有向丸め Arm C Language Extensions(ACLE)組み込み関数のサポートが追加されました:
- __rintn()
- __rintnf()
- [SDCOMP-49086]AArch32 状態用にコンパイルするときに、下記の関数属性のサポートが追加されました:
- __attribute__((target("arm")))は、関数を A32状態用にコンパイルする必要があることを指定します
- __attribute__((target("thumb")))は、関数を T32 状態用にコンパイルする必要があることを指定します
3.2 不具合の修正
3.2.1 armclang
- [SDCOMP-65264]Scalable Vector Extension(SVE) を備えた Armv8.6-A 以降のターゲットをビルドする場合、コンパイラと統合アセンブラは誤って常に単精度行列乗算機能 (FEAT_F32MM) をデフォルトで有効にしていました。 この問題は修正され、FEAT_F32MMを有効にするには、適切な-march=<name>または-mcpu=<name>オプションとともに +f32mm 機能修飾子を使用します。
- [SDCOMP-64997]Armv9-A Scalable Vector Extension version 2(SVE2) をサポートするターゲット用にコンパイルすると、 コンパイラが誤って以下の致命的なエラーをレポートする可能性がありました:
- error in backend: Cannot select: intrinsic
- [SDCOMP-64958]ffp-mode=stdおよび-fno-vectorizeを使用せずに、 整数MVE(MVE-I) のみをサポートする M-profile Vector Extension(MVE) を持つターゲットに対してコンパイルすると、 コンパイラが誤って下記の致命的なエラーをレポートする可能性がありました:
- error in backend: Cannot select: <value>
- [SDCOMP-64898] M-profile Vector Extension(MVE) を備えた Armv8.1-M ターゲットを、 -O0以外の最適化レベルで-fno-vectorizeなしでコンパイルすると、 コンパイラが誤ったコードを生成する可能性がありました。
- [SDCOMP-64836]-mbranch-protection=<protection> オプションを使用して AArch64状態用にコンパイルすると、リターンアドレス署名の 2番目の多様化子としてプログラムカウンタ (PC) が有効になり、 コンパイラが誤ったコードを生成する可能性がありました。
- [SDCOMP-64742]Branch Target Identification(BTI) を有効にする-mbranch-protection=<protection>オプションを使用してコンパイルすると、 コンパイラはsetjmp(<env>)を呼び出す関数に対して誤ったコードを生成する可能性がありました。
- [SDCOMP-64695]C++ソース言語モードでコンパイルすると、コンパイラが誤って下記のエラーをレポートする可能性がありました:
- no type named <type_name> in <templated_class>
- [SDCOMP-64591]AArch32状態用にコンパイルすると、コンパイラは<arm_neon.h>システムヘッダーで定義されている下記の Neon組み込み関数に対して誤ったコードを生成する可能性がありました:
-
- vld2q_dup_bf16()
- vld2q_dup_f16()
- vld2q_dup_f32()
- vld2q_dup_p16()
- vld2q_dup_p8()
- vld2q_dup_s16()
- vld2q_dup_s32()
- vld2q_dup_s8()
- vld2q_dup_u16()
- vld2q_dup_u32()
- vld2q_dup_u8()
-
- [SDCOMP-64445]Pointer Authentication Code(PAC) 保護を有効にする-mbranch-protection=<protection>オプションを使用してコンパイルし、 メイン拡張機能を備えた Armv8.1-Mターゲットの場合、関数に末尾呼び出し最適化を適用すると、 コンパイラが誤ったコードを生成する可能性がありました。
- [SDCOMP-64165]A32状態用にアセンブルする場合、インラインアセンブラと統合アセンブラは、PC 相対 ADR命令またはロードリテラル命令に対して誤ったコードを生成する可能性がありました。
- [SDCOMP-64164]-mharden-pac-ret=load-return-addressを指定してAArch64状態でコンパイルすると、関数に末尾呼び出し最適化を適用するときにコンパイラが誤ったコードを生成する可能性がありました。
- [SDCOMP-64069]-O0以外の最適化レベルで M-profile Vector Extension (MVE) を使用して Armv8.1-M ターゲットをコンパイルすると、 コンパイラは下記のMVE組み込み関数に対して誤ったコードを生成する可能性がありました:
-
- vgetq_lane_*()
- vmovl*()
- vmovn*()
- vrev*()
-
- [SDCOMP-64066]M-profile Vector Extension(MVE) を持つターゲット用にコンパイルすると、 __arm_sqrshr()および__arm_uqrshl() MVE 組み込み関数の両方のオペランドに同じレジスタを誤って使用するコードがコンパイラによって生成される可能性がありました。
- [SDCOMP-64059]コンパイラは、 システムヘッダーで定義されたM-profile Vector Extension(MVE) 組み込み関数Iに対して誤ったコードを生成する可能性がありました。 このI は、 *vuninitializedq*()形式の MVE組み込み関数を使用して作成された引数で呼び出されていました。
- [SDCOMP-63964]C++例外を有効にし、-moutlineを使用するか、-mno-outlineなしで-OzでAArch32状態をコンパイルすると、 コンパイラが誤った例外解除情報を生成する可能性がありました。
- [SDCOMP-63946] Scalable Vector Extension(SVE) を持つターゲット用にコンパイルする場合、 <arm_sve.h>システムヘッダーで定義された型のパラメータを持つ関数の呼び出しに対して、コンパイラが誤ったコードを生成する可能性がありました。
- [SDCOMP-63945]C++ソース言語モードでコンパイルすると、<arm_sve.h>システムヘッダーで定義されている型の複数のパラメータを持つ関数に対して、コンパイラが誤った名前で修飾を生成する可能性がありました。
- [SDCOMP-63894] ビッグエンディアンターゲットとAArch64状態用にコンパイルすると、 コンパイラは volatile 変数を含むプログラムに対して誤ったコードを生成する可能性がありました。
- [SDCOMP-63366]コンパイラと統合アセンブラは、レジスタリストパラメータを指定する VLLDMまたはVLSTM命令に対して、 下記のいずれかのエラーを誤ってリポートしていました。
- register expected
- too many operands for instruction
- [SDCOMP-63192]Cortex-A78Cターゲット用にビルドする場合、コンパイラと統合アセンブラは、 浮動小数点半精度乗算命令機能 (FEAT_FHM) をデフォルトで誤って有効にしていました。 Cortex-A78Cプロセッサは FEAT_FHM機能はサポートしていません。
- [SDCOMP-63113]__bf16型のメンバーと__fp16型のメンバーを持つ構造体または共用体を含むコードをコンパイルすると、 コンパイラが誤ったコードを生成したり、下記のような誤ったレポートをしたりする可能性がありました。
- fatal error: error in backend: Cannot select: <number>
- [SDCOMP-63087]コンパイラは、Neoverse N2 プロセッサを Armv9-Aターゲットではなく Armv8.5-Aターゲットとして誤って分類していました。
Neoverse N2 をターゲットにするには、下記のarmclangオプションから選択します。状態 暗号化拡張 オプション AArch64 あり --target=aarch64-arm-none-eabi -mcpu=neoverse-n2+crypto AArch64 なし --target=aarch64-arm-none-eabi -mcpu=neoverse-n2 AArch32 あり --target=arm-arm-none-eabi -mcpu=neoverse-n2 -mfpu=crypto-neon-fp-armv8 AArch32 なし --target=arm-arm-none-eabi -mcpu=neoverse-n2
- [SDCOMP-62861]Armv8-R AArch64ターゲット用にコンパイルすると、 ターゲットが EL3 を実装していることを誤って示すビルド属性を含むオブジェクトファイルがコンパイラによって生成されていました。
- [SDCOMP-60595]ビッグエンディアンターゲットとAArch64状態用にコンパイルすると、コンパイラは浮動小数点型を使用する関数に対して誤ったコードを生成する可能性がありました。
- [SDCOMP-57912]コンパイラは、サポートされていない<triple> を指定する--target=<triple>オプションに対して、 誤ってエラーをリポートしない可能性がありました。コンパイラは下記のエラーをリポートするようになりました。
- '--target=<number>' is not recognized. Supported values for this option are 'arm-arm-none-eabi' or 'aarch64-arm-none-eabi'
- [SDCOMP-55580]A32状態をアセンブルする場合、インラインアセンブラと統合アセンブラは、 命令と同じセクションにないラベルのアドレスをロードするVLDR命令のエラーを誤ってリポートしませんでした。 インラインアセンブラと統合アセンブラは、下記のエラーをリポートするようになりました。
- unsupported relocation type
- [SDCOMP-53780] M-profile Vector Extension(MVE) を持つターゲットを-Sまたは-save-temps付きでコンパイルすると、 コンパイラはMVEがサポートされていることを指定する.arch_extensionディレクティブなしでアセンブリファイルを誤って生成する可能性がありました。 その後、これにより、ファイルがアセンブルされたときに統合アセンブラが下記のエラーを正しくレポートする可能性がありました。
- invalid instruction, any one of the following would fix this
コンパイラは適切な.arch_extensionディレクティブを含むファイルを生成するようになりました。
- invalid instruction, any one of the following would fix this
3.2.2 armlink
- [SDCOMP-61480] AまたはT型のシンボルを含む symdefsファイルを使用して AArch64状態にリンクすると、 リンカーはワーニングをリポートできなかったか、下記の内容を誤ってリポートしていました。
-
- Internal fault: [0xb88f6f:=<ver=>]
-
- リンカーは下記のワーニングを正しくリポートするようになりました。
- L6151W: Converting AArch32 typed symbols from symdef files to untyped symbols
- [SDCOMP-60583]Link-Time Optimization(LTO) を有効にしてリンクし、 入力オブジェクトが C++ソース言語モードでコンパイルされている場合、リンカーが誤って次のエラーをリポートする可能性がありました。
- L6137E: Symbol <symbol> was not preserved by the LTO codegen but is needed by the image
3.2.3 fromelf
- [SDCOMP-64387]名前のないデータ構造(文字列リテラルなど)を含むELF形式の入力ファイルを--expandarraysで処理すると、 fromelfユーティリティが誤って次の致命的なエラーをレポートしていました。
-
-
- Execution interrupted due to an illegal storage access
-
-
3.2.4 Libraries and system headers
- [SDCOMP-64611]Arm C および C++ライブラリで定数math_errhandlingが誤って定義されていました。
math_errhandlingは下記のように定義されます。
-ffp-mode=<value> math_errhandling value fast MATH_ERRNO full MATH_ERRNO | MATH_ERREXCEPT std (Default) MATH_ERRNO
- [SDCOMP-64597]<arm_neon.h>システムヘッダーは、 符号なしの戻り値型ではなく符号付きの戻り値型を使用して、 下記のNeon組み込み関数を誤って定義していました。
- vqrshrund_n_s64()
- vqrshrunh_n_s16()
- vqrshruns_n_s32()
- vqshrund_n_s64()
- vqshrunh_n_s16()
- vqshruns_n_s32()
- [SDCOMP-64555]ハードウェア浮動小数点サポートのないターゲットに対する__aeabi_ddiv()関数のArm Cライブラリ実装では、 表現可能な2つの隣接する倍精度数値の中間未満の結果を誤って切り上げる可能性がありました。
- [SDCOMP-64192]AArch64状態のlongjmp()およびsetjmp()関数のArm C ライブラリ実装は、 -fsanitize=shadow-call-stackでコンパイルされたプログラムから呼び出された場合、 予期しない実行時動作を引き起こす可能性がありました。さらに、関数の振る舞いが下記のように変更されました。
- longjmp(<env>) は常に<env>からレジスタX18 を復元します。
- setjmp(<env>) は常にレジスタX18を<env> に保存します。
- longjmp()
- setjmp()
- [SDCOMP-64176]AArch64状態のnearbyint()関数の Arm Cライブラリバリアントが誤った結果を返す可能性がありました。
- [SDCOMP-64025]整数MVE(MVE-I) のみをサポートする M-profile Vector Extension(MVE)を備えたターゲットのArm C ライブラリバリアントには、 下記のような誤った振る舞いがありました。
- longjmp(<env>) は、呼び出し先が保存したベクトルレジスタを<env> から復元できませんでした。
- setjmp(<env>) は、呼び出し先が保存したベクトル レジスタを<env> に保存できませんでした。
3.3 既知の問題
- [SDCOMP-63050] -ffp-mode=full でコンパイルし、プログラムに _Float16型の変数が含まれている場合、コンパイラは誤ったコードを生成する可能性があります。
この問題は現在、Reference Guideの -ffp-mode の章に制限として記載されており、今後のリリースノートでは 既知の問題(Known issue) としては記載されません。
4. サポート
お客様からのフィードバックは我々にとって重要です。
製品のいかなる側面についても、障害報告と改善に関する提案を歓迎します。
不具合修正と機能拡張は、Arm Compiler for Embedded maintenance ポリシーに従って将来のリリースに対して検討されます。
プロジェクトに長期保守要件または機能安全要件がある場合、LTSおよび機能安全認証版のArm Compiler for Embedded FuSa の使用を検討してください。
フィードバックあるいはサポートが必要な問題について、お仕事あるいはアカデミックなE-mailアドレスを使用してお客様の製品の購入元にご連絡をいただくか、可能であればcaseをオープンしてください。
必要に応じて、以下の情報をお書き添えください:
-
- ツールからの--vsnの出力
- ツールが生成するエラーメッセージの完全な内容
- 問題を再現するのに必要なプリプロセス済みのソースコード、その他のファイル、コマンドラインオプション。プリプロセス済みのソースコードの生成方法はReference Guide 内の-E の章を参照してください。
Arm Compiler for Embedded 6.22 はLong-Term Support(LTS)リリースではありません。Arm Compiler for Embedded のメンテナンス ポリシーに従って、今後のリリースでさらなる不具合の修正と機能強化が検討される予定です。
当社へのお問い合わせは、こちら。
5. 今後の変更予定
このセクションには、Arm Compiler for Embedded 6.22 以降のリリースで計画されている変更に関する情報が記載されています。
以下の情報には、技術的な誤りや誤植が含まれている可能性があります。 各変更点には、固有のSDCOMP-<n> 識別子が付けられています。 リリースノート内の特定の問題について Armに問い合わせる必要がある場合は、適切な識別子を引用してください。
- [SDCOMP-65458] C++98 および C++03 ソース言語モードは、Arm Compiler for Embeddedの将来のリリースではサポートされなくなります。 この変更が行われると、下記のコンパイラオプションがサポートされなくなります:
- -std=c++03
- -std=c++98
- -std=gnu++03
- -std=gnu++98
詳細については、Reference Guideの以下の章を参照ください。- -std
- Support level definitions
6. リリースヒストリー
弊社FAQ<Arm Compiler for Embedded 製品のリリースヒストリー>をご参照ください。