Skip to main content

CubeSuite アップデート情報

CX

V1.10 からV1.11 の変更点

Ver.1.10の制限事項の解除

CX Ver.1.10 の以下の制限事項を解除しました。

No. 8  関数呼び出し後に参照した変数値が不正になる制限
【内 容】
下記1.~6.の条件を全て満たす場合に、関数“F2”の呼び出し後の変数“V”の値が不正になります。
1. 最適化オプションとして-O/-Osize/-Ospeed のいずれかを指定している。
2. volatile指定されていないグローバル変数、またはvolatile指定されていない
  ファイル内static変数“V”が存在し、関数“F1”の中でアドレスが取られない。
3. 関数“F1”の中に、変数“V”の値を書き換える関数“F2”の呼び出しが存在し、
  その呼び出し前後に変数“V”の読み出しが存在する。
4. 関数“F2”の呼び出し後に変数“V”を読み出す基本ブロック“B2”から、関数“F2”
  の呼び出し前に変数"V"を読み出す基本ブロック"B1"にさかのぼる実行パスが
  1つに限定される。
5. 基本ブロック“B2”以降の実行パスに、関数呼び出しが存在しない。
  または関数呼び出しが存在するが、その関数呼び出しからさかのぼると必ず
  基本ブロック“B2”に到達する。
6. 関数“F1”の中に、組み込み関数 asm/nop/halt/set_il/ldsr/stsr/ldgr/stgr
  のいずれも含まない。
No. 9  間接代入後に参照した変数値が不正になる制限
【内 容】
下記1.~5.の条件を全て満たす場合に、間接代入“A”の後の変数“V”の値が不正になります。
1. 最適化オプションとして-O/-Osize/-Ospeed のいずれかを指定している。
2. volatile指定されていない変数“V”のアドレスが、ポインタの初期値として使用される。
  あるいは別ファイルで変数“V”のアドレスが取られる。
3. 関数“F1”の中で、ポインタを用いた間接代入“A”により変数“V”の値を
  書き換えており、その間接代入前後に変数“V”の読み出しが存在する。
4. 間接代入“A”の後に変数“V”を読み出す基本ブロック“B2”から、間接代入“A”の前
  に変数“A”を読み出す基本ブロック“B1”にさかのぼる実行パスが1つに限定される。
5. 関数“F1”の中に、組み込み関数 asm/nop/halt/set_il/ldsr/stsr/ldgr/stgr
  のいずれも含まない。


V1.01 からV1.10 の変更点

マルチコア対応

マルチコア に対応しました。マルチコアCPUの各コア上で動作するアプリケーションを1個のロード・モジュール・ファイルとして作成可能です。


割り込み関数の退避/復帰コードの変更・制御機能追加

割り込み関数の退避/復帰コードにおいて,EIIC/EIWR レジスタの退避・復帰を行わないようにしました。
また退避/復帰コードの生成をより詳細に制御できるようにしました。


最適化強化/出力コードの変更

最適化を強化し,出力コードを変更しました。主な内容は次のようになります。
- 1ビット操作命令の強化
- コンパイル時に条件が決定するif文の削除
- const変数の定数置換
- レジスタ割り付けの改善
- インライン展開の強化


数学ライブラリ関数の高速化

以下の数学ライブラリ関数を,浮動小数点演算命令を使用することで高速化しました。
(注意) sinf,cosf, tanf,atanf,sqrtf はVer.1.01で高速化しました。

- 単精度(libf32.lib)
sinf,cosf, tanf,atanf,sqrtf,expf,logf,log10f,powf,ceilf,floorf,fmodf,frexpf,ldexpf,modff,
acosf,asinf,atan2f,coshf,sinhf,tanhf

- 倍精度(libf64.lib)
sin,cos,tan,atan,sqrt,exp,log,log10,pow,ceil,floor,fmod,frexp,ldexp,modf,
acos,asin,atan2,cosh,sinh,tanh


周辺I/Oレジスタのアクセス属性チェック強化

ライト・オンリーの周辺I/Oレジスタに対するリードのチェックを強化しました。不正にリードが発生する場合には,エラー(E0521622)を出力します。


-Xsort_var オプションの追加

-Xsort_var オプションを追加しました。本オプションを指定することで,const,sconstセクション以外のセクションに配置されている外部変数をアライメントの大きい順に並び替えます。


-Xno_cube_suite_infoオプションの追加

-Xno_cube_suite_info オプションを追加しました。CXはコンパイル時にCubeSuite用情報ファイル(.cref)を出力しますが,これによりビルド・リビルド時間が長くなることがあります。Ver.1.10では-Xno_cube_suite_info オプションを指定することで,CubeSuite用情報ファイルの生成を抑止し,ビルド・リビルド時間を短縮することができます。


オブジェクト・モジュール・ファイル仕様の一部変更

オブジェクト・モジュール・ファイル中に,浮動小数点演算命令を含むか否かを示す情報を追加しました。これによりFPU(浮動小数点ユニット)を持たないターゲット・デバイス用のプログラムに対して,浮動小数点演算命令を使用しているオブジェクト・モジュール・ファイルやライブラリ・ファイルをリンクしようとした場合,エラー(F0560115)となります。


エラー/警告メッセージの追加

以下の13個のエラー/警告を追加しました。
E0511157,E0511158,E0511159,E0511160,E0511161,E0521649,E0521650,E0550263,E0550264,
F0550536,F0560115,F0560220,W0560116


V1.00 からV1.01 の変更点

RX850V4 への対応

ルネサスエレクトロニクス製リアルタイムOS 「RX850V4」に対応しました。 RX850V4 を使用する場合は、RX850V4 V4.30 Rev2 以降を使用してください。


一部の数学ライブラリ関数の高速化

以下の数学ライブラリ関数を浮動小数点演算命令を使用することにより高速化しました。
sinf, cosf, tanf, atanf, sqrtf


-Xcall_lib オプションの追加

sqrtf関数の呼び出し箇所にsqrtf命令を直接生成するのを抑止する -Xcall_lib オプションを追加しました。


-U オプションの機能追加

"-U"オプションによりCXの既定義マクロの定義を解除できるようにしました。


Ver.1.00の制限事項の解除

CX Ver.1.00 の以下の制限事項を解除しました。

No. 5  static修飾した割り込み関数およびスマート・コレクション修正後関数の制限
【内 容】
割り込み関数をstatic修飾している場合,下記の1.~2. のいずれかになります。
1. -Odelete_static_func=off オプションを指定した場合,CXが異常終了する
2. -Odelete_static_func=off オプションを指定しない場合,static修飾した割り込み関数が削除される

また,スマート・コレクション機能による修正後関数にstatic修飾している場合、 F0550508エラーとなります。
F0550508:定義されていない識別子xxx が参照されています。
No. 6  data / bss 属性セクションに配置された配列の制限
【内 容】
下記の1.~4.の条件を全て満たす場合に,3.のアクセスあるいはアドレス取得が不正になる場合があります。
1. 最適化オプションとして”-O” “-Osize” “-Ospeed” のいずれかを指定している
2. data 属性セクションあるいは bss 属性セクションに配列を配置している
3. 2.の配列に対して変数を用いた添え字により,先頭以外の要素へのアクセスあるいは先頭以外の要素のアドレス取得を行っている
4. 3.の添え字が最適化の影響で定数として扱われる


V3.43 からV3.45 の変更点

警告メッセージW3029, W3030, W3031 抑制アセンブラオプションの追加

警告メッセージ W3029, W3030, W3031 の出力を抑制するアセンブラオプション“-woff=string”を追加しました。string には3029,3030,3031 のいずれかが指定できます。string は省略できません。


V3.41 からV3.43 の変更点

V850ES コア mul,mulu 命令の制限事項への対応

V850ES コア mul,mulu 命令の制限事項に対応しました。制限事項に該当する可能性がある場合,下記のいずれかのワーニングメッセージを出力します。

W3029: can not use r0 as destination in mul/mulu in V850ES core. replaced to r1.
W3030: can not use r0 as destination in mul/mulu in V850ES core.
W3031: can not use mul/mulu X,Y,Y format in V850ES core.


V3.31 からV3.41 の変更点

制限事項の解除

以下の7件の制限事項を解除しました。

No. 104  ループの実行回数が不正になる制限
【内 容】
下記の1~5の条件を全て満たす場合に,ループの実行回数が不正になる場合があります。

【条件】
1. 最適化オプションとして"-Og" "-O" "-Os" "-Ot"のいずれかを指定している
2. 帰納変数がvolatile未指定である
3. ループの終了条件が帰納変数と定数との比較である
4. ループ内で帰納変数に対して定数の加減算を行っている
5. ループ内で帰納変数を(ア)または(イ)のように使用している

(ア) a.からe.の全てを満たす
a. 帰納変数を配列のインデックスとして使用
b. a.の配列の要素が構造体・共用体・配列のいずれか
c. a.の配列の要素サイズが2のべき乗以外
d. a.の配列の要素サイズが65534バイトの範囲内
e. ループの終了条件として指定している3. の定数とa. の配列の要素サイズの積が32bit整数を超過

(イ) f.からi.の全てを満たす
f. 帰納変数を定数との乗算の一方のみに使用
g. f.の定数が2のべき乗以外
h. f.の定数が-65534~65534の範囲内
i. ループの終了条件として指定している3. の定数とf. の定数との積が32bit整数を超過

(注意) 帰納変数とは,ループの終了条件を制御する変数です。
No. 105  文字列定数の内容が不正になる制限
【内 容】
下記の1. ~ 2. の条件を全て満たす場合,文字列定数の内容が不正になります。

【条件】
1. 文字列定数中に ASCIIコードの 0x00 を使用している
2. 1.に対してASCIIコードの 0x30~0x37 のいずれかが連続する
No. 106  sscanf,fscanf,scanf 関数の型指定に関する制限
【内 容】
下記の1.~3.の条件を全て満たす場合,3.の型指定に対応する引数の内容が書き換わります。

【条件】
1. sscanf,fscanf,scanf 関数のいずれかを使用している
2. 型指定の数より入力フィールドが少ない
3. 余った最初の型指定文字がs,e,f,g,E,F,G,[ ] のいずれかである

また下記の4.~5.の条件を全て満たす場合,5.の型指定に対応する引数の内容が書き換わります。
【 条 件 】
4. sscanf, fscanf, scanf 関数のいずれかを使用している
5. 型指定文字として[ ] を使用し,[ ]で囲まれた文字パターンが入力フィールドにない
No. 107  atoi,atol,strtol,strtoul 関数の引数文字列に関する制限
【内 容】
下記の1.~5.の条件を全て満たす場合,戻り値が不正になります。またstrtol,strtoul 関数の場合は,グローバル変数errno にマクロ ERANGE が設定されません。

【条件】
1. atoi,atol,strtol,strtoul 関数のいずれかを使用している
2. atoi, atol 関数の場合は,引数文字列を10進数値として表現すると,32ビットを超過するstrtol, trtoul
   関数の場合は,第一引数の文字列を,第三引数により指定した基数の値で表現すると,32 ビ ットを超過す
   る
3. 2.の引数文字列の先頭からある文字までを変換した数値と,先頭からある文字の次の文字までを変換した
   数値の絶対値の下位32ビット同士を比較して,後者の値が前者の値以上である
4. 3.の比較が文字列の先頭から末尾まで成立する
5. atoi,atol,strtol 関数の場合は,2.の変換数値の下位32ビットに符号を付加した値が
   LONG_MIN ~LONG_MAXの範囲内である
No. 108  ビットフィールドをメンバに持つ構造体型変数の初期化の制限
【内 容】
下記の1.~2.の条件を全て満たす場合,ビットフィールドが正しく初期化されません。

【条件】
1. ビットフィールド,構造体(または共用体)の順番で連続しているメンバを持つ構造体型変数を使用している
2. 1.の構造体型変数のメンバを両方とも初期値を利用して初期化している

また下記の3.~5.の条件を全て満たす場合もビットフィールドが正しく初期化されない場合があります。
【 条 件 】
3. 構造体型自動変数の配列を使用している
4. 3.の構造体のメンバに,ビットフィールドと125バイト以上の要素を含む
5. 125バイト以上の要素に対する初期化子を省略し,暗黙の0初期化をしている
No. 109  条件アセンブル擬似命令のネストの制限
【内 容】
下記の1.~4.の条件を全て満たす場合,エラーメッセージ(F3510)を出力します。

【条件】
1. .elseif,または.elseifn擬似命令を使用している
2. 1.の擬似命令で指定した式が真である
3. 1.の擬似命令に対応する擬似命令が.elseif,または.else擬似命令である
4. 1.の擬似命令に対応するブロック間に条件アセンブル疑似命令をネストしている
No. 110  switch,if文内での代入の制限
【内 容】
下記の1.~2.の条件を全て満たす場合,その後のca850の最適化により,switch文あるいはif文内の処理が不正となる場合があります。

【条件】
1. Cソース上において(ア)~(ウ)の条件を全て満たす
(ア) Ver.2.50未満の場合,コンパイラの最適化オプションとして"-Os" "-Ot" のいずれかと”-Ol”を指定して
     おり,”-Wi,-O4” は未指定である
     Ver.2.50以上の場合,コンパイラの最適化オプションとして"-Os" "-Ot" のいずれかを指定しており,
     <>”-Wi,-O4” は未指定である
(イ) switch文,あるいはif文内で同じ変数に値を代入する処理が並列している (ウ) (イ)の代入後,同じ位置
     に分岐する

2. 1.のCソース記述により出力されたアセンブラが(エ)~(ク)の条件を全て満たす
(エ) 2つ以上の基本ブロック(A)の末尾で,同じレジスタへmov命令またはld命令で転送する
(オ) (A)のブロックが全て1つのブロック(B)へ合流する
(カ) (B)のブロックに命令がなく,出力コードとはならないコンパイラが使用する情報が1つ以上含まれる
(キ) (B)の次のブロック(C)で,(A)で転送したレジスタを他のレジスタへ転送する
(ク) ブロック(C)に直接合流するブロックの内,(A)と同様のレジスタへ転送を行っているブロック(D)が存在す
     る

(注意) 「基本ブロック」とは,必ず先頭の命令から入り,分岐命令までの命令並びです。


ワーニングメッセージの追加

以下のワーニングメッセージを追加しました。

(1) 未定義のエスケープ文字が使用された場合に,ワーニングメッセージW2181を出力します。
W2181: undefined escape character (code)
未定義のエスケープ文字です。

(2) シフト演算において,右オペランドの値が0から31の範囲を超えた場合に,ワーニングメッセージ
W5301を出力します。
W5301: shift count(num) in function 'func' is out of range 関数func のある式のシフト数(num)が0 から31 の範囲を超えました。

(3) 除算,及び剰余算において,第二オペランドが 0 であるとき,ワーニングメッセージW5302を出力します。
W5302: division by zero in function 'func' 関数func のある式で0 除算がありました


ワーニングメッセージ出力規則の変更

V3.31では -wcast_type+ オプション指定時に,変数を,サイズが小さい型の変数に代入した場合にワーニングメッセージW2784を出力していました。

V3.41では -wcast_type+ オプション指定時に,ポインタを,サイズが小さい型の変数に代入した場合にもワーニングメッセージW2784を出力するようにメッセージ出力規則を追加変更しました。

W2784: Conversion may lose significant digitデータが失われている可能性があります。



Back To Top



End of content

Back To Top