Renesas Synergy™

FAQ 1008135 : 比較演算のオペランドの一方が16または-17の定数の場合の記述例は?

回答

比較命令cmpは、一方のオペランドが-16~15の即値以外の場合には、 アセンブラにより命令展開が行われて複数命令になります。
したがって、条件を変更してオペランド値を-16~15の範囲に抑えられれば、展開が抑止され、 コード・サイズが小さくなります。
以下のような for、if などの条件式において比較に用いられる値を変更します。

 

変更前   変更後 (4byte減 ※)
    for (i = 0; i < 16; i++) {
        ...
    }
    for (i = 0; i <= 15; i++) {
        ...
    }


※削減量は例に関するものであり、個々のケースにより異なります。



ソースを変更した結果、出力命令が減少し、高速化もされる場合があります。



ソース変更を行う際には、次のような点に注意してください。

  • ソース変更によりレジスタの使用状況が変わるため、意図しない箇所において、 それまで最適化されずに残っていたレジスタ転送が削除されたり、 逆に、最適化が効かなくなって冗長なレジスタ転送が残ったりする可能性があります。
  • テンポラリ変数を追加することにより、新たなレジスタ変数用レジスタが使用されるようになり、それに伴い、関数の入口/出口でそのレジスタの退避/復帰が追加されることがあります。この場合、退避/復帰のコード分(8バイト)だけコード・サイズが増加します。

 

 

適用製品

V850用コンパイラパッケージ [CA850]
他にご質問がございましたら、リクエストを送信してください