重要な情報
-
アセンブラと
ワーニング[25]
廃止されたアセンブラ構造体について、アセンブラでワーニング[25]が表示されるようになりました。廃止されたアセンブラのソース構造体は以下のようになります。
ワーニングを回避するには、PUBWEAK NMI_Handler SECTION .text:CODE:REORDER(1) NMI_Handler:NOROOTをSECTION文に追加します。PUBWEAK NMI_Handler SECTION .text:CODE:REORDER:NOROOT(1) NMI_Handlerワーニング[25]の例...\vec.s(172) :Warning[25]:Label 'NMI_Handler' is defined pubweak in a section implicitly declared root 廃止された機能
-
XScaleコプロセッサの命令
ARM7.40用IARアセンブラは、XScaleコプロセッサの命令
MIA、MIAPH、MIA{B,T}{B,T}、MAR、MRAを認識しません。
-
XScaleコプロセッサの命令
新機能
- なし
既知の問題
プリプロセッサシンボルがELF/DWARF出力に含まれていません。
C形式のプリプロセッサマクロと、アセンブラ形式のマクロは、混在させるべきではありません。C形式のマクロをラベルフィールドの識別子の連結に使用する場合、そのラベルは再配置可能なセグメントにあっても絶対となります。識別子を連結する際は、シンボル引数名ではなく、序数のマクロ引数
\1-\9および\A-\Zを使用してください。たとえば、以下は正しく機能します。mymac MACRO first,second \1_\2: NOP ENDM mymac a,b
また、次のように拡張します。a_b:NOP
DS16は2バイトのアラインメントを強制するはずですが、強制していません。DS32は4バイトのアラインメントを強制するところを、そうしていません。
一時的な解決方法は、ALIGNRAM 1をDS16の前に、ALIGNRAM 2をDS32の前に挿入することです。-
アセンブラディレクティブは、ITブロック (IT命令の後の条件付き命令)内に表示されないことがあります。この制限はC形式のプリプロセッサディレクティブには適用されません。これらは、いずれかのアセンブラ命令が解析される前に処理されます。アセンブラディレクティブがITブロック内に見つかった場合、そのブロックは終了すると見なされ、アセンブラはエラー
#429:IT-block contains too few instructionsを報告します。対策としては、可能であれば対応するC形式のプリプロセッサディレクティブを代わりに使用することが挙げられます(たとえば、IFではなく#ifを使用するなど)。
[EW20356] -
C形式のプリプロセッサがマクロ拡張を実行するとき、基本のニーモニックに一致するすべての識別子も条件付きの派生形と同じになります。たとえば、
#define B 42は、BNEやBGEなども42として効率的に定義します。
[EW21470]
プログラム修正
- なし
ユーザガイドの訂正
-
新しいアセンブラオプション:
--no_literal_pool
-
データバス経由でのリードアクセスが禁止されているメモリ領域から実行するコードに対しては、このオプションを使用してください。
オプション--no_literal_poolによって、アセンブラは、LDRのリテラルプールを使用するかわりに、,= MOV32疑似命令を使用します。他の命令では、データバス経由のリードアクセスを発生させることに注意してください。
このオプションは、リンカが実行するライブラリの自動選択にも影響します。IAR固有のELF属性は、オプション--no_literal_poolによってコンパイルされたライブラリを使用すべきかどうか決定するのに使用されます。
オプション--no_literal_poolは、ARMv7-Mアーキテクチャを持つコアに対してのみ許可されます。
このオプションをEmbedded Workbenchプロジェクトに設定するには、[プロジェクト]>[オプション]>[アセンブラ]>[追加オプション]を使用します。
同じ名前を持つコンパイラとリンカオプションについては、C/C++ 開発ガイドをお読みください。
その他
- なし
リリース履歴
V7.40 2015-02-19
プログラム修正-
内容が必要とするものよりも低いアラインメントで定義された非絶対セクションに対して、インターナルエラーメッセージが発信されます。
[EW25168、EW25204] -
EWARM 7.40.5:
1つのレジスタのみがロードされる場合、LDM <Rn>!,<registers>のThumb-2エンコーディングは予測不可能となります。ただし、ARMのリファレンスマニュアルによれば、エンコーディングは使用するべきではありません。代わりに、対応するLDR命令に命令をアセンブルしてください。
[EW25467]
- なし
V7.30 2014-09-24
プログラム修正-
PUBWEAKとして宣言されたシンボルを定義する際にEQU命令を使用すると、アセンブラが異常終了することがあります。
[EW24946] -
EWARM 7.30.3:
Cプリプロセッサマクロのシンボル引数がアセンブラマクロに対する参照の場合(直接、または大文字バージョンを使用)、アセンブラが異常終了します。
[EW24985]
- なし
V7.20 2014-05-19
プログラム修正-
ビット0から始まる32ビット幅の
BFI命令について、アセンブラが"expression out of range"(式が範囲外)というメッセージを報告しなくなりました。
[EW24691] -
EWARM 7.20.2:
アセンブラで、VFNMA命令とVFNMS命令がARM DDI 0403E.aに基づいて生成されるようになりました。
[EW24745]
- なし
V7.10 2014-02-21
プログラム修正-
LDR <Rt>,=<expr>に対してTHUMBモードで後方の参照が生成されることがありますが、前方の参照にのみ対応しているため、オフセットが無効になります。
[EW24437] -
EWARM 7.10.3:
ビット単位の左ローテートに一致するソースコード用にThumb-1のコードを生成する際、ローテート数が不明でROR命令(右ローテート)のカウントを保持するためにレジスタR12が割り当てられていると、インターナルエラーが発生します。
[EW24582]
- なし
V6.70 2013-10-29
プログラム修正-
EWARM 6.70.2:
LTORGなどを使用してリテラルプールを生成した場合、生成されたデータテーブルの前にDATAモードに安定して切り替わりません。これによって、リンカエラーLp029: instruction validation failure(データがコードとして認識されているため)などの症状が発生することがあります。
明確な対策は、LTORGディレクティブの直前にDATAディレクティブを追加することです。
[EW24145]
- なし
V6.60 2013-06-27
プログラム修正-
アセンブラによって、関数のようなマクロがインクルードディレクティブで使用できるようになりました。
[EW23883]
- なし
V6.50 2012-11-10
プログラム修正-
アセンブラのプリプロセッサで、ラベルの定義にマクロが使用されると、マクロ内の使用済みシンボルが絶対に変わっていました。これは修正されました。
[EW23446] -
LTORGディレクティブが、リテラルプールの挿入後にThumbモードに正しく戻るようになりました。
[EW23489] -
EWARM 6.50.2:
Thumbモードにおいてもオペレーションコードオペランドの前で、命令MCRおよびMRCによって#が使用可能になりました。
[EW23559] -
EWARM 6.50.3:
いくつかの無条件命令(CPS、SRS、DMB、DSB、ISB、PLIおよびSETEND)で、条件が無視されました。エラーメッセージが発行されるようになりました。
[EW23621]
- なし
V6.40 2012-06-05
プログラム修正-
アセンブラで、ARMv6-M (Cortex-M0)アーキテクチャ内で
fにアクセスしようとするCPSIDやCPSIE命令に対して、エラーが発行されるようになりました。
[EW22873] -
条件付きのプリプロセッサディレクティブのスキップされた部分にある、シンボルを使用する
includeディレクティブが、妥当かどうか解析されなくなりました。
[EW22993] -
EWARM 6.40.4:
PUBLICディレクティブを含むITブロックを検証する際、アセンブラがNULLポインタを修飾参照しなくなりました。
[EW23455]
- なし
V6.30 2011-10-22
プログラム修正-
LDRD(リテラル)の再配置によって、参照が後方の場合にリンクが失敗します。この問題に対処するために、アセンブラが前方の参照であると判断できない場合は未解決のリテラルは使用できなくなりました。
[EW22726]
- なし
V6.21 2011-07-05
プログラム修正-
アセンブラで、UAL前の構文(たとえば
MOV<c>Sなど)がBICS、ORRS、ANDSでも受け入れられるようになりました。
[EW22459] -
EWARM 6.21.4:
SMLAWB、SMLAWT、SMULBB、SMULBT、SMULTB、SMULTTの各命令は、Cortex-M4のメディア拡張を必要とするため、Cortex-M3用にアセンブルする際に使用できなくなりました。
[EW22553]
- なし
V6.20 2011-04-29
プログラム修正-
アセンブラで、C/C++コメントが区切りなしに後に続く場合でも、キーワード
ELSE、ELSIF、ENDIFを解析できるようになりました。
[EW22296] -
EWARM 6.20.2:
アセンブラが、フォームLSR{S}の命令に対して「式が範囲外」と報告した後で、インターナルエラーを出力しなくなりました。, ,#0"
[EW22406]
- なし
V6.10 2010-11-04
プログラム修正-
EQUatedシンボルを使用しても、インターナルエラーが出力されなくなりました。
[EW21616] -
アセンブラが、前のエラーのあとにELFを続けて生成できない場合に、エラーを出力するようになりました。
[EW21760] -
ARMv6-Mのアセンブラがビットごとの即時論理命令のThumb-2派生型(
ORR、AND、BIC、EOR) または比較(CMP、CMN、TST、TEQ)を受け入れなくなりました。
[EW21980]
- なし
V5.50 2010-04-21
プログラム修正-
最初のオペランドに明示的な
SPを持つSRS命令構文が認識されるようになりました。
[EW21571] -
Thumb-2命令
CMN、CMP、TEQ、TSTのイミディエイト派生形は、Thumb-2以外のアーキテクチャで受け入れられなくなりました。
[EW21644] -
ARM1136は、ARMv6Kと見なされます。これは、コアレビジョンr1p0およびそれ以降については有効です。
[EW21653]
- なし
V5.41 2009-12-14
-
EWARM 5.41.2:
目的地のレジスタにSPを持つLDRが、予期しない命令として報告されなくなりました。
[EW21576]
V5.40 2009-07-10
-
MOVT命令は、イミディエイト値の下のハーフワードを目的のレジスタの上のハーフワードに移すように修正されました。これまでは、イミディエイト値の上のハーフワードが使用されていました。
[EW20852] -
アセンブラは、
SPまたはPCがThumbモードのSTM命令のレジスタリストにある場合に、ワーニングのunpredictable register combinationではなく、illegal registerエラーを報告するようになりました。SPおよびLDM命令についても同様です。
[EW20854] -
EWARM 5.40.4:
明示的なThumbディレクティブが使用されていない場合、Cortex-Mの暗黙的THUMBモードでラベルが奇数としてマークされるようになりました。
[EW20359、EW21173] -
EWARM 5.40.4:
Thumbモードでの条件付きBLXのアセンブリで、インターナルエラーが発生しなくなりました。
[EW21182] -
EWARM 5.40.4:
Cortex-M0でアセンブルする際に、SVC命令が使用できるようになりました。
[EW21213] -
EWARM 5.40.4:
CODE16モードで、条件の付かない分岐が8ビットのオフセットを持つBEQとなる可能性がありました。これにはAL(恒久的な条件)のエンコーディングがありません。条件のない分岐に、正しい11ビットのオフセットエンコーディングが使用されるようになりました。
[EW21257]
V5.30 2009-01-23
-
Thumb2 ISAの分岐長さのコーナーケース処理が改善されました。より小さい分岐を選択しようとする場合に、縮小された命令サイズが考慮されるようになりました。分岐とそのターゲットラベルの間の命令が小さくなっている場合、コーナーケースで狭い分岐を使用できるときに幅の広い分岐が生成されることがあります。
[EW20357] -
間違ったワーニングが出力されなくなりました。
[EW20358] -
SMC命令が、arm1176(f)jzコアで使用可能になりました。
[EW20388] -
アセンブラで、マクロ定義内のマルチバイトによるコメントを解析できるようになりました。
[EW20510]
V5.20 2008-06-24
-
無効な命令でインターナルエラーが生成される場合がありました。
[EW19411, EW19733] -
アセンブラで、同じ名前を使用するセグメント定義に続くローカルのラベル定義を処理できるようになりました。
[EW19474] -
必要とされたシステムレジスタのいくつかが、v6Mモードに追加されました。
[EW19813]
V5.11 2007-12-11
-
アセンブラが、オブジェクトファイル内のデバッグ情報で参照されるすべてのソースファイルへの絶対パスを使用するようになりました。
[EW18901] -
アセンブラが、オプション
-L、-O、-Iへのパラメータを、ディレクトリパスとしてのみ解釈するようになりました。以前のプレフィックスの動作は削除されました。
[EW18903] -
VFPコプロセッサを持つCPUコアが選択された場合、
--vfp=noneを使って無効にしようとしてもエラーが生成されなくなりました。
[EW19073] -
アセンブラで、同じ名前を使用するセグメント定義に続くローカルのラベル定義を処理できるようになりました。
[EW19474] -
再配置可能な式でインターナルエラーが生成されなくなりました。
[EW19580] -
特定のPCに関する式について、アセンブラがインターナルエラーを生成しなくなりました。
[EW19676]
V5.10 2007-05-25
-
アセンブラオプション
-jを指定した場合、アセンブラは、Advanced RISC Machines Ltd製TASMアセンブラによって使用されている命令構文を認識します。バージョン4.40Aでは、命令ニーモニックのCMPS、CMNS、TEQS、およびTSTSが偶発的に削除されていましたが、本バージョンで再び導入されました。
[EW18338]