Arm Compiler 6.14のリリースノート
目次
1. 紹介
これは、リリース時に提供されたリリースノートの最初のセットです。 リリースノートの 最新版 については、 https://developer.arm.com をご参照ください。
Arm Compiler 6.14では次の機能が追加されました:
- Cortex-A34、Cortex-M55のサポート
- Armv8.6-A:
- アセンブリのサポート
- BFloat16拡張の組み込み関数サポート
- 行列乗算拡張の組み込み関数サポート
- Armv8-M:
- カスタムデータパス拡張アセンブリのベータサポート
- Armv8.1-M:
- Mプロファイルベクタ拡張(MVE)オプション向け自動ベクタライズのサポート
Arm Compiler 6.14は、以下のように使用されることを意図しています:
- Arm Development Studioに組み込み使用
- Keil MDKに組み込み使用
- 適切なツールキット用ライセンスを用いて、スタンドアロンでツールチェインをインストールして使用
ライセンスの購入についてはinfo-arm@dts-insight.co.jpへご連絡ください。
ライセンスの管理およびトラブルシューティングは以下のArm社webサイトをご覧いただくか、
https://developer.arm.com/support/licensing
弊社FAQのwebサイトをご覧ください。
フローティングライセンスをご使用の場合は、armlmdおよびlmgrdをversion 11.14.1.0以降にアップデートする必要があります。ARMでは、常にhttps://developer.arm.com/products/software-development-tools/license-management/downloadsから入手できる最新バージョンのライセンスサーバーソフトウェアを使用することをお勧めします。
1.1 Arm Compiler 6 の構成
Arm Compiler 6.14は以下を含みます。
- armclang:LLVMとClangテクノロジをベースとしたコンパイラおよび統合アセンブラ
- armasm:armasm-syntaxアセンブリコード用のアセンブラ。新しいアセンブリファイルではarmclang統合アセンブラの使用を推奨
- armar:ELFオブジェクトファイル群をまとめるアーカイバ
- armlink:オブジェクトやライブラリをまとめ、実行可能形式を生成するリンカ
- fromlef:イメージ変換ユーティリティ兼逆アセンブラ
- Arm C++ libraries:LLVM libc++プロジェクトベースのライブラリ
- Arm C libraries:組込みシステム向けのランタイムサポートライブラリ
1.2 Arm Compiler 6.14 でサポートされたこと
次の表は、Arm Compiler 6.14のサポートするArm アーキテクチャとプロセッサのターゲットリストです。正確な対応状況はお使いのツールキットとライセンスに依存します。表はArm Compiler 6.14の時点のものであり、将来的に変更となる可能性があります。より詳細についてはツールの購入元にご確認ください。
アーキテクチャおよびプロセッサ | サポートレベル | ライセンス | ||||||||
Keil MDK(Windows only) | Arm Development Studio(Windows /Linux) | |||||||||
Lite | Essential | Plus | Professional | Bronze | Silver | Gold | Platinum | |||
将来のアーキテクチャ | - | サポート予定 | - | - | - | - | - | - | - | Yes |
Armv8.6-A | - | サポート予定 | - | - | - | - | - | - | - | Yes |
8.5-AまでのArmv8-A | Neoverse N1/E1 | サポート済 | - | - | - | - | - | - | - | Yes |
Cortex-A77/76AE/76/65AE/65 | サポート済 | - | - | - | - | - | - | - | Yes | |
Cortex-A75/73/72/57/55/53/35/34/32 | サポート済 | - | - | - | - | - | - | Yes | Yes | |
Armv7-A | Cortex-A17/15/12/9/8/7/5 | サポート済 | - | - | - | Yes | - | Yes | Yes | Yes |
Armv8-R | Cortex-R52 | サポート済 | - | - | - | - | - | - | Yes | Yes |
Armv7-R | Cortex-R8/7/5 | サポート済 | - | - | - | - | - | Yes | Yes | Yes |
Cortex-R4F/4 | サポート済 | - | - | Yes | Yes | - | Yes | Yes | Yes | |
Armv8.1-M | Cortex-M55 | サポート済 | - | 非セキュアのみ | Yes | Yes | Yes | Yes | Yes | Yes |
Armv8-M | Star | サポート済 | - | - | - | - | - | - | - | Yes |
Cortex-M35P/33/23 | サポート済 | - | 非セキュアのみ | Yes | Yes | Yes | Yes | Yes | Yes | |
Armv7-M | SC300 | サポート済 | - | - | Yes | Yes | Yes | Yes | Yes | Yes |
Cortex-M7/4/3 | サポート済 | 32 Kbyte コード制限 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
Armv6-M | SC000 | サポート済 | - | - | Yes | Yes | Yes | Yes | Yes | Yes |
Cortex-M1/0/0+ | サポート済 | 32 Kbyte コード制限 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
Armv6-M 以前のアーキテクチャ | 非サポート | - | - | - | - | - | - | - | - | |
Arm以外のアーキテクチャ | 非サポート | - | - | - | - | - | - | - | - |
2. インストール方法
Arm Compiler 6.14が、ツールキット(例:Arm Development Studio)の一部として含まれている場合、ツールキットのインストーラがインストレーションプロセスを処理します。ツールキットのインストレーション方法を参照してください。
その他のケースの場合、Arm Compiler 6.14をどのように使用するかに依存して適切なインストレーションの場所を選択する必要があります:
- Arm Development Studio 2018.0 以降へ統合
- Keil MDK 5.22 以降へ統合
- スタンドアロン製品として使用
Keil MDKを使用していない場合は、Arm Compiler 6.14はデフォルトのインストレーションディレクトリを含む、その他任意の場所にインストールすることができます。ただし、Arm Development Studio製品のインストールディレクトリ外でなければなりません。
コンフィギュレーションの手順については以下のArm社サイトの手順に従ってください:
https://developer.arm.com/tools-and-software/software-development-tools/license-management/resources/product-and-toolkit-configuration
※本内容は弊社FAQページでも日本語での解説を行っております。内容の一部は保守契約ユーザ様にのみ公開をしておりますのであらかじめFAQページにログインの上ご参照ください:
Arm Compilerを呼びだす環境別のライセンスおよび設定について ( LIC-D-25 )
2.1. Arm Development Studio 2018.0 以降への統合
Arm Compiler 6.13.1 は、Arm Development Studioのデフォルトのインストレーションディレクトリを含む、その他任意の場所にインストールすることができます。
https://developer.arm.com/docs/101470/latest/configure-arm-development-studio/register-a-compiler-toolchain
で示す方法に従って、ツールチェーンをArm Development Studio 2018.0以降に統合することができます。
2.2. Keil MDK 5.22 以降への統合
Arm Compiler 6.14はKeil MDKインストレーションのARMサブディレクトリ以下にインストールする必要があります。たとえば、Keil MDKインストレーションがC:\Keil_v5\の場合、C:\Keil_v5\ARM\ARMCompiler6.14へインストールすることをおすすめします。
インストール後、
http://www.keil.com/support/man/docs/uv4/uv4_armcompilers.htm
のチュートリアルで示す方法に従って、MDKのプロジェクトへツールチェーンの統合が可能です。
Arm Compiler 6.14 32-bit Windowsバージョンのみが、Keil シングルユーザライセンスまたはKeil フローティングユーザライセンスと一緒に使用できます。
2.3. スタンドアロン製品として使用
環境変数ARMLMD_LICENSE_FILEがライセンスファイルまたはライセンスサーバーを指していることを確認してください。
2.4. Linuxへのインストール
Arm Compiler 6.14は、以下のサポート済みプラットフォームでテストされています:
- Red Hat Enterprise Linux 6 Workstation, 64-bit only.
- Red Hat Enterprise Linux 7 Workstation, 64-bit only.
- Red Hat Enterprise Linux 8 Workstation, 64-bit only.
- Ubuntu Desktop Edition 16.04 LTS, 64-bit only.
- Ubuntu Desktop Edition 18.04 LTS, 64-bit only.
Arm Compiler 6.14 は、古いプラットフォームでは動作しません。
Arm Compiler 6.14 をインストールするには、install_x86_64.sh を実行( sourceではありません) し、画面の指示に従ってください。インストーラは、Arm Compiler 6.14 をお客様が指定したディレクトリに解凍します。
armclang バイナリは、お客様の指定したディレクトリ内にArm Compiler 6.14 の一部としてインストールされたlibstdc++のコピーへ動的にリンクされています。
2.5. Windowsへのインストール
Arm Compiler 6.14 は、以下のサポートされるプラットフォームでテストされています:
- Windows Server 2012, 64-bit only.
- Windows Server 2016, 64-bit only.
- Windows 8.1 Enterprise, 64-bit only.
- Windows 8.1 Professional, 64-bit only.
- Windows 10 Enterprise, 64-bit only.
- Windows 10 Professional, 64-bit only.
Arm Compiler 6.14 は、古いプラットフォームでは動作しません。
Arm Compiler 6.14 は、2020年02月現在のWindows 10の最新の機能アップデートでテストされています。以降のアップデートでも問題なく動作することが期待されます。
Windows 64-bitホストプラットフォーム上でArm Compiler 6.14 をインストールするために、win-x86_64\setup.exeを実行し、画面の指示に従ってください。
Windows 32-bitホストプラットフォーム上でArm Compiler 6.14 をインストールするために、 win-x86_32\setup.exeを実行し、画面の指示に従ってください。
以前のバージョンのArm Compiler 6 がすでにインストールされており、アップグレードしたい場合は、以前のバージョンを一旦アンインストールしてから新しいバージョンのArm Compiler 6 をインストールいただくことを推奨します。
Arm Compiler 6.14はMicrosoft Visual Studio 2017で構築されており、WindowsのUniversal C Runtimeをインストールする必要があります。詳細な情報は、
https://support.microsoft.com/en-gb/help/2999226/update-for-universal-c-runtime-in-windows
をご確認ください。
3. アンインストール
Linuxでは、Arm Compiler 6.14 インストールディレクトリを削除してください。
Windowsでは、コントロールパネルのプログラムの追加と削除からArm Compiler 6.14 を選択し、アンインストールボタンを押下してください。
4. ドキュメンテーション
Arm Compiler 6.14 の以下ドキュメントが利用可能です。
- User Guide
- Reference Guide
- Arm C and C++ Libraries and Floating-Point Support User Guide
- Migration and Compatibility Guide
- Errors and Warnings Reference Guide
2018年1月、Arm社は、脆弱性 Variant 1: bounds check bypass (CVE-2017-5753)に関する情報を公開しました。
https://developer.arm.com/support/security-update/compiler-support-for-mitigations
を参照し、 このArm CompilerリリースのMigration pathの推奨事項を使用して、この脆弱性を軽減してください。この軽減のAPIは変更される可能性があることに注意してください。
5. フィードバックとサポート
お客様からのフィードバックは我々にとって重要です。
製品のあらゆる局面において、欠陥報告と改善に関する提案を歓迎します。フィードバックあるいはサポートについて、お客様の製品の購入元あるいは、
https://support.developer.arm.com
へご連絡ください。
必要に応じて、ツールからの--vsnの出力、問題を再現するのに必要なソースコードおよびその他のファイルとコマンドラインを提供してください。
当社へのお問い合わせは、こちら。
6. リリース履歴と変更
以下に、Arm Compiler 6.14 シリーズのリリース日付を示します:
- 6.14 (2020年02月にリリースされました)
以下に、新しい機能と修正された不具合を含むそれぞれのリリースで変更された概要を示します。
特に指定がない限り、一つ前のリリースからの変更点を示します。
それぞれの項目別に分類され、ユニークな識別子SDCOMP-<NNNNN>を伴います。
もしARMへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください
Arm Compiler 6.14 での変更点
以下に直前のリリースであるArm Compiler 6.13からの変更点を示します。
Arm Compiler 6.14 での一般的な変更
- [SDCOMP-55145] Armv8.1-Mに対するMプロファイルベクタ拡張(MVE)オプション向け自動ベクタライズは完全にサポートされました。
- [SDCOMP-55144] Armv8.6-Aに対する行列乗算拡張の組み込み関数が完全にサポートされました。この拡張はArmv8.2-A から Armv8.5-Aではオプションです。行列乗算拡張を持つターゲットでは以下のarmclangオプションの <ext> の個所で2以上を選択してください:
-
- AArch64状態で8-bit整数処理に対する行列乗算を有効にするには --target=aarch64-arm-none-eabi -march=armv8.<ext>-a+i8mm
- AArch64状態で32-bit単精度浮動小数点処理に対する行列乗算を有効にするには --target=aarch64-arm-none-eabi -march=armv8.<ext>-a+f32mm
- AArch64状態で64-bit倍精度浮動小数点処理に対する行列乗算を有効にするには --target=aarch64-arm-none-eabi -march=armv8.<ext>-a+f64mm
- AArch32状態で8-bit整数処理に対する行列乗算を有効にするには --target=arm-arm-none-eabi -march=armv8.<ext>-a+i8mm
-
- [SDCOMP-55143] Armv8.6-Aに対するBFloat16 拡張の組み込み関数が完全にサポートされました。この拡張はArmv8.2-A から Armv8.5-Aではオプションです。BFloat16拡張を持つターゲットでは以下のarmclangオプションの <ext> の個所で2以上を選択してください:
-
- AArch64状態では --target=aarch64-arm-none-eabi -march=armv8.<ext>-a+bf16
- AArch32状態では --target=arm-arm-none-eabi -march=armv8.<ext>-a+bf16
-
- [SDCOMP-55142] Armv8.6-Aアーキテクチャに対するアセンブリが完全にサポートされました。Armv8.6-Aのターゲットでは以下のarmclangオプションを選択してください:
-
- AArch64状態では --target=aarch64-arm-none-eabi -march=armv8.6-a
- AArch32状態では --target=arm-arm-none-eabi -march=armv8.6-a
-
- [SDCOMP-54946] Cortex-M55プロセッサをサポートしました。Cortex-M55の特定の機能セットをターゲットとするには以下のオプションから選択してください:
整数MVE 半精度、単精度浮動小数点MVE スカラ浮動小数点 armclang armlinkおよびfromelf 含む 含まない 含む --target=arm-arm-none-eabi -mcpu=cortex-m55 --cpu=Cortex-M55 含む 含まない 含む --target=arm-arm-none-eabi -mcpu=cortex-m55+nomve.fp --cpu=Cortex-M55.no_mvefp 含む 含まない 含まない --target=arm-arm-none-eabi -mcpu=cortex-m55+nofp --cpu=Cortex-M55.no_fp 含まない 含まない 含む --target=arm-arm-none-eabi -mcpu=cortex-m55+nomve --cpu=Cortex-M55.no_mve 含まない 含まない 含まない --target=arm-arm-none-eabi -mcpu=cortex-m55+nofp+nomve --cpu=Cortex-M55.no_mve.no_fp - [SDCOMP-54871] Cortex-A34プロセッサをサポートしました。Cortex-A34をターゲットとするには以下のオプションを選択してください:
armclang:
- --target=aarch64-arm-none-eabi -mcpu=cortex-a34
- --cpu=8-A.64
- [SDCOMP-54826] Armv8-M以降のMain拡張に対するオプションのカスタムデータパス拡張(CDE)のアセンブリについてベータサポートが行われました。CDEをターゲットとするには以下のオプションを選択してください:
armclang:
- --target=arm-arm-none-eabi -march=armv8.1-m.main+cdecpN:Armv8.1-MターゲットのMain拡張に対するNは0-7の範囲
- --target=arm-arm-none-eabi -march=armv8-m.main+cdecpN:Armv8-MターゲットのMain拡張に対するNは0-7の範囲
- --cpu=8.1-M.main --coprocN=value:Armv8.1-MターゲットのMain拡張に対するNは0-7の範囲で、valueはcdeまたはCDEの値
- --cpu=8-M.main --coprocN=value:Armv8-MターゲットのMain拡張に対するNは0-7の範囲、valueはcdeまたはCDEの値
Arm Compiler 6.14 での拡張
コンパイラと統合されたアセンブラ(armclang)
- [SDCOMP-54955] Mプロファイルベクタ拡張をターゲットとしたコンパイル時、自動ループテイル予測のアルファサポートが追加されました。自動ループテイル予測を有効にするには、-mllvm -disable-mve-tail-predication=falseオプションを付けてください。
- [SDCOMP-49669] 事前定義マクロ __FILE__ のファイル名部分を含む、事前定義マクロ __FILE_NAME__ がサポートされました。
Arm Compiler 6.14 で修正された不具合
コンパイラと統合されたアセンブラ(armclang)
- [SDCOMP-55088] 特定の環境下で、2つの同一の呼び出しによってコンパイラが誤って内容は異なるが有効な命令シーケンスを生成することがありました。
- [SDCOMP-54534] 特定の環境下で、AArch64状態のコードをコンパイル時に浮動小数点処理に対するflush-to-zeroモードを要求する出力オブジェクトを示すビルド属性の生成に失敗することがありました。これによってリンカはflush-to-zeroモードを有効にしていない実装のライブラリ関数を誤ってリンクする可能性がありました。
- [SDCOMP-54466] 受け付けることのできる最大サイズの2GBを越すような変換ユニット(サイズがプリプロセスの最中にこの制限のみを超える場合を含む)に対して、コンパイラはエラーのレポートに失敗することがありました。コンパイラはfatal error: sorry, this include generates a translation unit too large for Clang to processをレポートするようになりました。
- [SDCOMP-54427] 稀な環境下で、-fsanitize=memtag を使用したコンパイル時にコンパイラは不正なメモリタギングコードを生成することがありました。これによってスタック領域内のアドレスに対する偽のメモリタギング例外を生成させることがありました。
- [SDCOMP-54406] 特定の環境下で、ハードウェア浮動小数点ユニットをサポートしないターゲット向けに-mfloat-abi=soft でAArch32状態のコードを生成する際、-Ofast と-ffast-math の組み合わせか、-ffp-mode=fast を使用すると不正にerror: clang frontend command failed due to signal のエラーをレポートしていました。
- [SDCOMP-54351] 特定の環境下で、-O0 を除くすべての最適化レベルにおいてコンパイラがポインタ算術演算 0 で使用されるオフセットが負ではないと誤った想定を行い、その後 0 を含む計算に対して誤ったコードを生成することがありました。
- [SDCOMP-54294] 特定の環境下で、AArch64状態のコードのコンパイル時-g または-gdwarf-version の有無に対してコンパイラが誤って内容は異なるが有効な分岐命令シーケンスを生成することがありました。
- [SDCOMP-54255] 特定の環境下で、-O0 を除くすべての最適化レベルにおいて_Float16 型の変数を含むコードを半浮動小数点 (FP16)をサポートとするターゲットに対して、コンパイラは誤ってfatal error: error in backend: Cannot select: <value> のエラーをレポートすることがありました。
- [SDCOMP-54190] 静的プロファイリング拡張(SPE)を持つArm v8-Aターゲットに対するAArch64状態のコードのアセンブル時、CurrentEL、ICH_MISR_EL2、PMBIDR_EL1およびPMSIDR_EL1をアクセスするスペシャルレジスタとして定義したMSR 命令に対してインラインアセンブラおよび統合アセンブラにおいてエラーのレポートに失敗することがありました。インラインアセンブラおよび統合アセンブラでは、error: expected writable system register or pstate. をレポートするようになりました。
- [SDCOMP-54141] 特定の環境下で、プログラムが__attribute__((section(".ARM.__at_<address>"))) のアノテート付きの関数または変数を含む場合、コンパイラは誤ってこれらの関数または変数を含むセクションをマージ可能としてマークすることがありました。これによってリンカはError: L6975E: (.ARM.__at_<address>) cannot have a required base and SHF_MERGE をレポートすることがありました。
- [SDCOMP-54010] 特定の環境下で、-O0 を除くすべての最適化レベルにおいてT32状態のコードをコンパイル時、ソースオペランドではなくディスティネーションオペランドとしてスタックポインタ(SP) を指定する予測不能なADD またはSUB 命令をコンパイラが誤って生成することがありました。
- [SDCOMP-53743] 特定の環境下で、-mbranch-protection=bti または-mbranch-protection=standard オプションを使用してAArch64状態のコードをコンパイル時、コンパイラは誤ってerror: error in backend: fixup value out of range. をレポートすることがありました。
- [SDCOMP-51231] -g および-gdwarf-version オプションなしでAArch32状態のコードをコンパイル時、コンパイラはスタックフレームアンワインディングなデバッグ情報を含む.debug_frame セクションの生成に失敗することがありました。
- [SDCOMP-50543] 稀な環境下で、-mcmse オプション付きで__attribute__((cmse_nonsecure_call)) のアノテーションがついた関数ポインタ経由での関数呼び出しが含まれる場合、コンパイラが誤ってerror: clang frontend command failed due to signal. をレポートすることがありました。
- [SDCOMP-46159] -mcmse オプション付きでコンパイル時、コンパイラは__attribute__((cmse_nonsecure_call)) のアノテーション付き関数へのパラメータか、__attribute__((cmse_nonsecure_entry)) のアノテーション付き関数の戻り値として__fp16 または_Float16 型の変数に対して使用されるレジスタの上位16ビットのクリアに失敗することがありました。
- [SDCOMP-30463] -mcmse オプション付きでコンパイル時、コンパイラは__attribute__((cmse_nonsecure_call)) のアノテーション付き関数へのパラメータか、__attribute__((cmse_nonsecure_entry)) のアノテーション付き関数の戻り値としての構造体型変数に対して使用されるレジスタの未使用ビットのクリアに失敗することがありました。
- [SDCOMP-30440] 特定の環境下で、-g または-gdwarf-version オプション付きでC++例外を使用するAArch64状態のコードをコンパイル時、コンパイラはスタックフレームアンワインディングなデバッグ情報を含む.debug_frame セクションの生成に失敗することがありました。
旧アセンブラ(armasm)
- [SDCOMP-55207] Armv8.2-A以降をターゲットとしてAArch64状態のコードをアセンブル時、旧アセンブラはCurrentEL、ICH_MISR_EL2、PMBIDR_EL1およびPMSIDR_EL1をアクセスするスペシャルレジスタとして定義したMSR 命令に対してエラーのレポートに失敗することがありました。旧アセンブラはError: A1616E: Instruction, offset, immediate or register combination is not supported by the current instruction set またはError: A1805E: Register is Read-Only をレポートするようになりました。
Linker (armlink)
- [SDCOMP-46190] 特定の環境下で、--no_remove オプション付きでリンク時、リンカは誤ってデバッグ情報を含むELFセクションを削除してしまう事がありました。
ライブラリおよびシステムヘッダ
- [SDCOMP-54710] snprintf() およびvsnprintf() 関数のmicrolib実装バッファサイズ 0 として呼び出されたときに誤って常に 0 をリターンすることがありました。
- [SDCOMP-54589] arm_mve.h システムヘッダはMプロファイルベクタ拡張組み込み関数のvreinterpretq_s64_*()、vreinterpretq_u64_*()、vreinterpretq_*_s64() およびvreinterpretq_*_u64() の定義に失敗していました。
Fromelf
- [SDCOMP-54453] BFCSEL 命令を含み、タイプR_ARM_THM_BF12 のリロケーションを含むELFファイルの逆アセンブル時、fromelfユーティリティはリロケーションのタイプを誤ってR_ARM_THM_BF13 としてレポートしていました。
Arm Compiler 6.14の既知の不具合
- [SDCOMP-54724] 特定の環境下で、-ffixed-r6 オプションを使用したコンパイル時、コンパイラはスタックのアライメント要件を満たさないコードを生成する可能性があります。
- [SDCOMP-54513] 特定の環境下でMプロファイルベクタ拡張組み込み関数のネストした呼び出しにおいて、コンパイル時にコンパイルに時間がかかりメモリを大量に消費する可能性があります。これを避けるには、Mプロファイルベクタ拡張組み込み関数のネストした呼び出しを行わないでください。
- [SDCOMP-54391] -fstack-protector-strong オプションを使用し、-O0 の最適化レベルでコンパイル時、コンパイラは配列以外のローカル変数の特定のアドレス取得を含む関数のスタック保護の有効化に失敗します。これを避けるには、-fstack-protector-strong ではなく-fstack-protector-all オプションを使用するようにしてください。
- [SDCOMP-50470] コンパイラは_Float16 データ型の不正なデフォルト引数の拡張を含む関数呼び出しのエラーのレポートに失敗します。