Arm Compiler 6.9のリリースノート
1. 紹介
Arm Compiler 6.9 は次のサポートを追加しました:
- Armv8.4-Aアーキテクチャ向けの、armclang インラインアセンブラと統合されたアセンブラのサポートを追加しました。
Arm Compiler 6.9 以下のように使用されることを意図しています:
- DS-5に組込み使用
- Keil MDKに組込み使用
- スタンドアロンでのツールインストレーション
これら製品から少なくとも1つの適切なライセンスが利用可能である必要があります。 ライセンスの購入については info-arm@dts-insight.co.jp へご連絡ください。
フローティングライセンスをご使用の場合は、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は、ARM Compiler 5の後継であり、以下にリストされたコンポーネントを含みます。以前のプロジェクトからプロジェクトを移行するための情報は、製品ドキュメンテーション内のMigration and Compatibility Guide をご覧ください。
-
armclang
- armclangはarmccの後継で、LLVMとClangテクノロジをベースとしています。
-
armlink, armasm, fromelf, armar
- armlink, armasm, fromelf, および armarはARMv8をサポートするために拡張され、ARM Compiler5と同様に振る舞います。
-
組込みシステム向けのArm C/C++ライブラリ
- 標準のARMコンパイラ組込みライブラリはARMv8をサポートするために拡張され、機能的には完全に一致していない可能性がありますが、ARM Compiler 5で見出されるものと同様に振る舞います
- ARM Compiler 6は、C++標準テンプレートライブラリとして、libc++を含みます
アセンブラに関する注意事項:
- GNUとARM Compilerツールチェン間の移植性を向上させるために、ARM Compiler 6はデフォルトで、GNUアセンブラシンタックスにより近いとされるLLVMに統合されたアセンブラを採用しています。LLVMに統合されたアセンブラはデフォルトでarmclangによって呼び出されます。副作用として、ARM Compiler 6はレガシーなarmccのインラインおよび組込みアセンブラを含むC/C++ソースファイルをコンパイルできません
- GNUとARM Compilerツールチェン間の移植性を向上させるために、ARM Compiler 6はデフォルトで、GNUアセンブラシンタックスにより近いとされるLLVMに統合されたアセンブラを採用しています。LLVMに統合されたアセンブラはデフォルトでarmclangによって呼び出されます。副作用として、ARM Compiler 6はレガシーなarmccのインラインおよび組込みアセンブラを含むC/C++ソースファイルをコンパイルできません。
- レガシーなアセンブラ(armasm)はデフォルトでは呼び出されませんが、レガシーなarmasmシンタクスで書かれたアセンブラファイルをアセンブルするために、armasmがARM Compiler 6内に含まれます。
1.2 Arm Compiler 6.9でのサポート
アーキテクチャとプロセッサ | サポートレベル |
Armv8-A (アップデートリリースを含む),ARMv7-A と準拠するプロセッサ | サポート済み(製品化レベル) |
Armv8-R, Armv7-R と準拠するプロセッサ | サポート済み(製品化レベル) |
Armv8-M, Armv7-M, Armv6-M と準拠するプロセッサ | サポート済み(製品化レベル) |
Armv6-M 以前のアーキテクチャ | 未サポート。ARM Compiler 5 をご使用ください |
Arm以外のアーキテクチャ | 未サポート |
サポートレベル | 説明 |
サポート済み(製品化レベル) | 製品品質を保ち、一番高位のサポート優先度 |
ベータ | 実装は完了済みだが、テストは部分的。お客様の試用とフィードバックを歓迎 |
アルファ | 実装は未完了でテストは部分的。 お客様の試用とフィードバックを歓迎 |
コミュニティ | オープンソーステクノロジで利用可能な追加の機能がARM Compiler 6に構築済み。 お客様の試用とフィードバックを歓迎 |
未サポート | 機能がツールチェインに含まれていないか非推奨になっており、テストは未実施。 当該機能を使用する場合は完全な自己責任。 |
サポートされている機能および機能のサポートレベルの詳細については、製品のマニュアルを参照してください。
2. インストール手順
Arm Compiler 6.9 が、ツールキット(例:DS-5)の一部として含まれている場合、ツールキットのインストーラがインストレーションプロセスを処理します。ツールキットのインストレーション方法を参照してください。
その他のケースの場合、Arm Compiler 6.9 をどのように使用するかに依存して適切なインストレーションの場所を選択する必要があります:
- DS-5 5.20 以降に統合する
- Keil MDK 5.22 以降に統合する
- スタンドアロン製品として使用
2.1. DS-5 5.20 以降への統合
Arm Compiler 6.9 は、DS-5製品のインストレーションの外であるなら、デフォルトの場所を含み、任意の場所にインストールすることができます。
インストール後、 https://developer.arm.com/products/software-development-tools/ds-5-development-studio/resources/tutorials/adding-new-compiler-toolchains-to-ds-5 のチュートリアルで示す方法に従って、DS-5 5.20以降のツールチェーンに統合することができます。
DS-5 Eclipse IDE あるいは DS-5 Command PromptからArm Compiler 6.9 を使用することをおすすめします。これら環境の外でツールチェーンを使用するとき、以下の環境変数の構成が必要となります:
- DS-5インストレーション内の sw/mappings ディレクトリへのパスをARM_PRODUCT_PATHにセットします。
- DS-5 Professional Editionライセンスを使用していない場合は、ARM_TOOL_VARIANTを適切に設定してください。
詳細な情報は、 https://developer.arm.com/products/software-development-tools/license-management/resources/product-and-toolkit-configurationをご参照ください。
2.2. MDK-ARM 5.22 以降への統合
Arm Compiler 6.9 は、Keil MDKインストレーションのARMサブディレクトリ以下にインストールする必要があります。たとえば、Keil MDKインストレーションがC:Keil_v5の場合、C:Keil_v5ARMARMCompiler6.9へインストールすることをおすすめします。
インストール後、 http://www.keil.com/support/man/docs/uv4/uv4_armcompilers.htm のチュートリアルで示す方法に従って、MDKのプロジェクトへツールチェーンの統合が可能です。
2.3. スタンドアロン製品としての使用
ARM Compiler 6.9 は、DS-5製品のそれぞれのインストレーションの外であるなら、デフォルトの場所を含み、任意の場所にインストールすることができます。
ライセンスファイルあるいはライセンスサーバの場所を指定するARMLMD_LICENSE_FILE環境変数をセットしてください。Windows上ではダブルクォーテーションをこのパス内に含めないでください。パス内の空白はクォーツなしで、動作します。
DS-5 Professional Editionライセンスを使用していない場合は、ARM_TOOL_VARIANTを適切に設定してください。
詳細な情報は、 https://developer.arm.com/products/software-development-tools/license-management/resources/product-and-toolkit-configurationをご参照ください。
2.4. Linux環境へのインストレーション
Arm Compiler 6.9 は、以下のサポートされるプラットフォームでテストされています:
- Red Hat Enterprise Linux 6 Workstation, 64-bit only.
- Red Hat Enterprise Linux 7 Workstation, 64-bit only.
- Ubuntu Desktop Edition 14.04 LTS, 64-bit only.
- Ubuntu Desktop Edition 16.04 LTS, 64-bit only.
Arm Compiler 6.9 は、古いプロットフォームでは動作しません。
Arm Compiler 6.9をインストールするには、 install_x86_64.shを実行(sourceではありません)し、画面の指示に従ってください。インストーラは、Arm Compiler 6.9 をお客様が指定したディレクトリに解凍します。
armclangバイナリは、お客様の指定したディレクトリ内にArm Compiler 6.9 の一部としてインストールされたlibstdc++のコピーへ動的にリンクされています。
2.5. Windows環境へのインストレーション
Arm Compiler 6.9 は、以下のサポートされるプラットフォームでテストされています:
- Windows Server 2012, 64-bit only.
- Windows 7 Enterprise SP1.
- Windows 7 Professional SP1.
- 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.9 は、古いプロットフォームでは動作しません。
Windows 64-bitホストプラットフォーム上でArm Compiler 6.9 をインストールするために、win-x86_64setup.exeを実行し、画面の指示に従ってください。Windows 32-bitホストプラットフォーム上でArm Compiler 6.9をインストールするために、win-x86_32setup.exeを実行し、画面の指示に従ってください。以前のバージョンのArm Compiler 6 がすでにインストールされており、アップグレードしたい場合は、以前のバージョンを一旦アンインストールしてから新しいバージョンのArm Compiler 6 をインストールいただくことを推奨します。
Arm Compiler 6は、Microsoft Visual Studio 2015のランタイムライブラリがインストールされることを必要とします。プロダクトインストーラを使用するか、あるいはこのツールチェンがDS-5の一部としてインストールされるなら、ランタイムライブラリは製品と共にインストールされます。後からコピーあるいは別のPCへインストレーションを移動される場合、ランタイムライブラリがホスト上で利用可能であることを保証する必要があります。
3. アンインストール
Linuxの場合、Arm Compiler 6.9 をインストールディレクトリから削除してください
Windowsの場合、コントロールパネルのプログラムの追加と削除からArm Compiler 6.9 を選択し、アンインストールボタンを押下してください
4. ドキュメンテーション
Arm Compiler 6.9 の以下ドキュメントが利用可能です:
- User Guide.
- armar User Guide.
- armasm User Guide.
- armclang Reference Guide.
- armlink User Guide.
- fromelf User Guide.
- Arm C and C++ Libraries and Floating-Point Support User Guide.
- Migration and Compatibility Guide.
- Software Development Guide.
- Errors and Warnings Reference Guide.
- Scalable Vector Extension User Guide.
これ以上の情報は、developer.arm.com内の Arm Compiler 6 documentationをご参照ください。
5. フィードバックとサポートについて
お客様からのフィードバックは我々にとって重要です。製品のあらゆる局面において、欠陥報告と改善に関する提案を歓迎します。フィードバックあるいはサポートについて、お客様の製品の購入元あるいは、https://developer.arm.com/supportへご連絡ください。必要に応じて、ツールからの--vsnの出力、問題を再現するのに必要なソースコードおよびその他のファイルとコマンドラインを提供してください。当社へのお問い合わせは、 こちら 。
6. リリース履歴と変更点について
以下に、Arm Compiler 6.9 シリーズのリリース日付を示します:
- 6.9 (2017年10月にリリースされました)
以下に、新しい機能と修正された不具合を含むそれぞれのリリースで変更された概要を示します。特に指定がない限り、一つ前のリリースからの変更点を示します。それぞれの項目別に分類され、ユニークな識別子SDCOMP-<NNNNN>を伴います。もしARMへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください。
Arm Compiler 6.9 での変更点
以下に以前のリリースであるArm Compiler 6.8 からの変更点を示します。
Arm Compiler 6.9 での一般的な変更点
-
[SDCOMP-49098] Armv8.4-A アーキテクチャへのサポートが追加されました。Armv8.4-Aをターゲットにする場合、以下のオプションを選択してください:
armclang:
- AArch64ステート用 --target=aarch64-arm-none-eabi -march=armv8.4-a
- AArch32ステート用 --target=arm-arm-none-eabi -march=armv8.4-a
armlink および fromelf:
- --cpu=name オプションを使用しないでください。
レガシーアセンブラ (armasm) は、Armv8.4-Aをサポートしません。
-
[SDCOMP-48770] Armv8.4-Aのオプションの暗号拡張がサポートされました。Armv8.4-Aで暗号拡張をターゲットとする場合、以下のオプションを選択してください:
armclang:
- AArch64ステート用 --target=aarch64-arm-none-eabi -march=armv8.4-a+crypto
- AArch32ステート用 --target=arm-arm-none-eabi -march=armv8.4-a -mfpu=crypto-neon-fp-armv8
armlink および fromelf:
- --cpu=name オプションを使用しないでください。
レガシーアセンブラ (armasm) は、Armv8.4-Aをサポートしていません。
特定の暗号アルゴリズムの選択についての詳細は、armclang Reference Guideの-mcpu章をご参照ください。
-
[SDCOMP-49172] 次のリリースのArm Compiler 6 (version 6.10)では、__declspecは、非推奨です。
__declspec使用のリプレイスに関する情報は、Migration and Compatibility Guideをご参照ください。
Arm Compiler 6.9で修正された不具合
コンパイラと統合されたアセンブラ(armclang)
-
[SDCOMP-49421] Armv6-MあるいはArmv8-Mメイン拡張以外のターゲットで、-O0以外の最適化レベルを指定されたとき、特定の状況で、スタックを使用して渡さなければならない少なくとも1つのパラメータを持つ関数呼び出しに対して、コンパイラが誤ったコードを生成する可能性があります。この不具合は修正されました。
-
[SDCOMP-49207] 特定の状況で、コンパイル時に-mexecute-onlyを指定すると、コンパイラは次の浮動小数点拡張のいずれかをサポートするターゲットのバックエンドでfatal error: error in backendを誤って報告する可能性があります:
- Armv7 FPv5-D16.
- Armv7 FPv5-SP-D16.
- Armv8.
この不具合は修正されました。
-
[SDCOMP-49001] T32ステートの SUB命令の2つのオペランド形式をアセンブルするとき、インラインアセンブラおよび統合アセンブラは、error: instruction requires: arm-mode or incorrectly generate a 32-bit instruction instead of a 16-bit instructionを誤ってレポートします。これは修正されました。
-
[SDCOMP-48937] 8バイトを超える整列要件を持つ変数を含むコードで、Armv6-Mあるいはメイン拡張なしのArmv8-Mターゲット向けにコンパイルするとき、特定の状況で、コンパイラは、変数のアライメント要件を考慮しない誤ったコードを生成する可能性があります。これは修正されました。
-
[SDCOMP-48900] インラインアセンブラと統合アセンブラでは、 #文字の不正なな使用を、コメントの開始として間違って扱います。これにより、アセンブラは無効な命令を、異なった有効な命令として誤って扱う可能性があります。これは修正されました。インラインアセンブラと統合アセンブラでは、 error: unexpected token in argument listと表示されるようになりました。
-
[SDCOMP-48825] まれに、AArch32ステート用にコンパイルするときにコードに比較演算が含まれていると、コンパイラがアプリケーションプログラムステータスレジスタ(APSR)を破壊する不正なコードを生成する可能性があります。これは修正されました。
-
[SDCOMP-48772] オプションのDot Product命令をサポートするターゲットに対してAArch32ステート用にアセンブルするとき、インラインアセンブラおよび統合アセンブラは、2番目のソースレジスタのオペランドに無効なレジスタ名を指定するVUDOT命令のエラーを誤って報告しませんでした。これは修正されました。インラインアセンブラと統合アセンブラでは、 error: invalid operand for instructionがレポートされるようになりました。
-
[SDCOMP-48718] まれに、AArch64ステート用に-O1でコンパイルするときに、コードに比較演算が含まれていると、コンパイラは最初のソースオペランドレジスタとしてSPレジスタを誤って使用するCMP命令を生成する可能性があります。これは修正されました。
-
[SDCOMP-48682] コンパイラは、 constメンバを含む structまたは union型の変数への代入のエラーを誤って報告していました。これは修正されました。コンパイラは、error: cannot assign to lvalue with const-qualified data member '<member>'を報告します。
レガシーアセンブラ (armasm)
-
[SDCOMP-48774] Main拡張でArmv8-Mターゲットをアセンブルするとき、アセンブラは、無効な値146または無効な特殊レジスタ名BASEPRI_MAX_NSをアクセスする特別なレジスタとして指定する MRS命令またはMSR命令のエラーを誤って報告していました。代わりに、アセンブラは、UNPREDICTABLE特殊レジスタのエンコーディング値146を使用してMRSまたはMSR命令を生成しました。これは修正されました。アセンブラは、 Error: A1477E: This register combination results in UNPREDICTABLE behaviour あるいは Error: A1516E: Bad symbol 'BASEPRI_MAX_NS', not defined or externalを報告します。
リンカ (armlink)
-
[SDCOMP-48776] まれに、小さなT32関数を呼び出すA32関数を含むプログラムをリンクすると、リンカの関数インライン機能が、小さなT32関数の呼び出しを、A32状態でUNPREDICTABLEである無効な命令で間違って置き換えることがありました。これは修正されました。
-
[SDCOMP-48715] AArch64ステートのSHF_ALLOC ELFセクションフラグを持たないセクション、または--pagedまたは--sysvを指定したAArch32ステートのセクションを含むオブジェクトをリンクすると、リンカは、計算に失敗したセクションのメモリ内のサイズをプログラムヘッダに含むイメージを生成します。これは修正されました。
-
[SDCOMP-48714] 状況によっては、AArch64ステートの異なるタイプとアラインメントを持つ2つのセクション、または--pagedまたは--sysvのAArch32ステートの2つのセクションを含むプログラムをリンクすると、リンカーは大きなサイズを誤って指定したプログラムヘッダーを含むイメージを生成する可能性がありますファイル内のサイズはメモリのサイズよりも大きくなります。これは修正されました。
-
[SDCOMP-45848] Arm Compilerで提供されているC++ライブラリと、--cpu=nameのnameがArmv7-Rターゲットを指定しリンクされるとき、入力オブジェクトがArmv7-RターゲットのC++ソース言語モードでコンパイルされていると、 Error: L6366E: <object> attributes are not compatible with the provided attributesが誤って報告されることがありました。これは修正されました。
ライブラリおよびシステムヘッダ
-
[SDCOMP-46889] 特定の状況で、-ffp-mode=fullでコンパイルするときに、その型によって正確に表現できない浮動小数点数がプログラムに含まれていると、その数値のバイナリ表現は、コンパイル時にコンパイラによって評価されるか、実行時に以下の文字列から浮動小数点への変換関数のいずれかを使用して生成されるかによって、誤って異なることがありました:
- atof().
- strtod().
- strtof().
- strtold().
- 浮動小数点変換指定子を使用するscanf()ファミリ関数のメンバ.
これは修正されました。
-
[SDCOMP-29999] 特定のArm Cライブラリヘッダーファイルでは、ポインタの後にコメントが続くところに文字シーケンス*/*が使用されていました。*/*は、サードパーティの静的解析ツールによってフォールトとして報告されていました。これは修正されました。
その他の不具合
-
[SDCOMP-49019] 特定の状況で、アセンブラ、コンパイラ、またはリンカプロセスが別のツールをサブプロセスとして起動した場合、すべての適切なライセンスがすでに使用されていた場合、プロセスがデッドロックすることがありました。これは修正されました。
-
[SDCOMP-49009] Arm CompilerがMDK-ARMインストレーションへインポートされ、Keil MDKのノードロックあるいはフローティングライセンスと使用された場合、ツールが誤って、error: Failed to check out a license.Keil Licensing error: No TOOLS.ini file foundをレポートすることがありました。これは修正されました。
Arm Compiler 6.9 の既知の不具合
-
[SDCOMP-47864] Scalable Vector Extension(SVE)をサポートするターゲットに対して、 -march=name+sve を指定してコンパイルするとき、リンク時間の最適化(LTO)はサポートされません。LTOの使用を避けるには:
- -fltoオプションを使用してコンパイルしないおよび--ltoを使用してリンクしない.
- -Omaxでコンパイルするときは、 -fno-lto でコンパイルし、 --no_ltoでリンクします。
このサポートされない機能は、Scalable Vector Extension User GuideのSVE support章の既知の制限事項にリストされました。今後のリリースノートでは既知の問題としては表示されません。
-
[SDCOMP-28016] 現在のArm Cライブラリの制限のため、long doubleデータ型はAArch64ステートではサポートされません。
このサポートされない機能は、armclang Reference GuideのSupport level definitions章 にリストされました。今後のリリースノートでは既知の問題としては表示されません。
-
[SDCOMP-26080] 現在のArm Cライブラリの制限のため、複素数はAArch64ステートではサポートされません。 .
このサポートされない機能は、armclang Reference GuideのSupport level definitions章 にリストされました。今後のリリースノートでは既知の問題としては表示されません。