CC-RLの変更履歴

ルネサス統合開発環境「CubeSuite+」は、2014年10月1日リリースのV3.00.00より、製品名を「CS+」に変更いたしました。

V1.13.01 → V1.13.02 への変更点 (2024/8/5)

1. 注意事項の改修
    以下のツールニュースの注意事項を改修しました。
    【注意事項】RL78ファミリ用Cコンパイラパッケージ (注意事項 CCRL#033)
    

V1.13.00 → V1.14.00 への変更点 (2024/6/5)

1. C++言語のサポート
    C++言語を正式にサポートしました。
    

V1.13.00 → V1.13.01 への変更点 (2024/4/22)

1. Linux OSサポート
    動作環境にLinux OSを追加しました。
    動作確認環境:
        Ubuntu 20.04 LTS – 64bit

V1.12.01 → V1.13.00 への変更点 (2024/1/22)

1. ライブラリ・ジェネレータの追加
    ライブラリ・ジェネレータを追加しました。

2. -Pオプションの改善
    -Pオプションを指定したときにCソース・ファイル以外を入力に取った場合、
    この入力ファイルをCソース・ファイルとして扱ってプリプロセス処理を実行しており、その結果、エラーが発生する場合がありました。
    これを、入力ファイルの拡張子をチェックしてCソース・ファイルのみプリプロセス処理の対象にするよう改善しました。

3. -ALLOW_OPTIMIZE_ENTRY_BLOCKオプションの追加
    リンカに、実行プログラムのエントリ・アドレスを最適化対象に含める-ALLOW_OPTIMIZE_ENTRY_BLOCKオプションを追加しました。

4. -RRMオプションの仕様変更
    リンカの-RRMオプションで指定したアドレスを予約領域とし、他のデータを配置できないように仕様変更しました。

5. -ROMオプションの仕様変更
    リンカの-ROMオプションにワイルドカードを指定できるように仕様変更しました。

6. -VFINFOオプションの改善
    CC-RL V1.11.00以降、
    -VFINFOオプションを指定したときに出力する変数情報および関数情報のシンボル名の先頭に余分なアンダースコアがついていましたが、これを改善しました。

7. 組み込み関数__mulsl、__mululの改善
    -lang=c99かつ-strict_stdオプションを指定して組み込み関数__mulsl、__mululを使用した場合に、不要にエラー(E0520020)が発生していましたが、
    これを改善しました。

V1.12.00 → V1.12.01 への変更点 (2023/7/20)

1. -Oliteまたは-Onothingオプション使用時のメッセージ改善
    アセンブリ・ソース・ファイルを使用している場合に、
    -Oliteまたは-Onothingオプションを指定しているにも関わらず以下のメッセージが出力される問題を改修しました。
      W0511187:CC-RL V1のオプション"-Odefault"の評価期間の有効期限が切れています。暗黙に"-Olite"指定に変更します。
      引き続き"-Odefault"を使用したい場合は製品の購入をご検討ください。明示的に"-Olite"か"-Onothing"を指定することで、この警告は消えます。

2. -lang=cpp14オプション[テクニカルプレビュー版]の動作改善
    -lang=cpp14オプション[テクニカルプレビュー版]のいくつかの問題点を修正しました。
    (1) 意図しないコンパイルエラーが発生する場合がありましたが、これを改善しました。
    (2) 内部エラーが発生する場合がありましたが、これを改善しました。
    (3) 不正なコードが生成される場合がありましたが、これを改善しました。

V1.11.00 → V1.12.00 への変更点 (2023/1/20)

1. -crcオプションの複数指定
    -crcオプションの複数同時指定が可能になりました。

2. セクション自動配置の改善
    -AUTO_SECTION_LAYOUTオプションによるセクション自動配置のアルゴリズムを改善しました。

3. -rrmオプションの改善
    -rrmオプションが有効になるデバイスの種類を拡張しました。

4. .SECTION疑似命令の機能拡張
    .SECTION疑似命令にCOMDAT引数を指定できるようになりました。

5. .SECTION疑似命令、.CSEG疑似命令の機能拡張
    .SECTION疑似命令、または.CSEG疑似命令を使用して、アセンブリ・ソース・ファイル上で
    フラッシュ・プログラマ・セキュリティID(シリアル・プログラミング・セキュリティID)を設定できるようになりました。

6. C++言語のサポート[テクニカルプレビュー版]
    テクニカルプレビュー版としてC++言語をサポートしました。

7. オプションの追加
    以下のオプションを追加しました。
    (1) -SECURITY_OPT_BYTEオプション
        セキュリティ・オプション・バイト制御値を設定します。
    (2) -FLASH_SECURITY_IDオプション
        フラッシュ・プログラマ・セキュリティIDを設定します。
    (3) -SPLIT_SECTIONオプション
        セクションの自動配置時に、同名セクションをオブジェクト間で結合しないで配置します。
    (4) -DSP_MEMORY_AREAオプション
        FLEXIBLE APPLICATION ACCELERATOR(FAA)用のメモリ領域にセクションを配置しません。
    (5) -STRIDE_DSP_MEMORY_AREAオプション
        セクションの自動配置時に、FLEXIBLE APPLICATION ACCELERATOR(FAA)用のメモリ領域をまたいで配置します。
    (6) -RAM_INIT_TABLE_SECTIONオプション
        RAM領域セクションを初期化するための情報テーブルを実行形式ファイルに埋め込みます。

V1.10.00 → V1.11.00 への変更点 (2022/1/20)

1. -SECURITY_IDオプションの仕様拡張
    -SECURITY_IDオプションで指定するセキュリティID値のサイズは従来10バイトでしたが、可変サイズに対応しました。
    なお、デバイスの種類によってセキュリティID値のサイズは異なります。

2. シンボル名に指定できる文字の追加
    シンボル名の先頭を除いてシンボル名に'$'、'.'の文字が使用可能になりました。

3. メッセージの追加
    コンパイラライセンスやアセンブラ疑似命令に関するエラーメッセージ、ワーニングメッセージを追加しました。

4. アセンブラ疑似命令の追加
    アセンブリ言語上のシンボルの情報を設定する3種類の疑似命令.type、.alias、.weakを追加しました。

5. 最適化強化
    関数呼び出し処理のコードサイズや処理速度を改善するなど、最適化を強化しました。

6.改修内容
    以下の注意事項を改修しました。
    - pack 機能の使用に関する注意事項 (CCRL#027)
    - ビット操作命令のビット位置指定を誤った場合の注意事項 (CCRL#028)
    - 構造体型または共用体型の引数の使用に関する注意事項 (CCRL#029)
    - ポインタ型のキャストの使用に関する注意事項 (CCRL#030)
    - 無名共用体または無名構造体の使用に関する注意事項 (CCRL#031)
    - アドレスを記憶領域に書き込んだ後で、読み出して参照する場合の注意事項 (CCRL#032)
    - FAQ 3000575 [ワーニング] W0561321,W0561110 (CC-RL使用時)
    - FAQ 3000576 [エラー] C0564001 (W0561321も同時に発生している場合)

V1.09.00 → V1.10.00 への変更点 (2021/1/20)

1. -stuff オプションの追加
    変数をアライメント数に応じたセクションに分けて配置する-stuff オプションを追加しました。

2. -Obranch_chaining オプションの追加
    分岐命令のコードサイズを削減する最適化を行う-Obranch_chaining オプションを追加しました。

3. -Oalign オプションの追加
    変数の整列条件の変更を伴う最適化を行う-Oalign オプションを追加しました。

4. -VERBOSE オプションの追加
    リンク時の詳細情報を表示する-VERBOSE オプションを追加しました。

5. -Osame_code オプションの機能強化
    共通の命令列を集約する機能を強化しました。

6. 別名解析の精度改善
    組み込み関数呼び出しや集大成のコピーをまたいでメモリアクセス命令を移動するなどの
    最適化を適用しやすくなるように改善しました。

7. 注意事項の改修
    以下の注意事項を改修しました。
    - -Ointermodule オプションの使用に関する注意事項 (CCRL#026)

V1.08.00 → V1.09.00 への変更点 (2020/1/20)

1. C99標準ライブラリ関数
    C99用標準ライブラリ関数またはマクロについて新規対応しました。

2. MISRA-C:2012ルールによるチェック機能の拡充【professional】
    MISRA-C:2012ルールによりソース・チェックを行う -misra2012オプションの引数にルール8.13、ルール14.2とルール14.3を指定できるようにしました。

3. 関数内での#pragma section記述の対応
    関数内で#pragma sectionを記述できるようになりました。

4. ライブラリ作成時の重複モジュール名の許可
    -allow_duplicate_module_nameオプションを追加しました。
    本オプションを指定することにより、ライブラリ作成時に重複するモジュール名の指定を許可します。

5. 最適化強化
    生成コードの性能を改善しました。

6. 注意事項の改修
    以下の注意事項を改修しました。
    - 数学ライブラリ関数atanの注意事項(CCRL#024)
    - -Oalias=ansiオプションの使用に関する注意事項(CCRL #025)

7. その他改善
    - -misra2012オプションを指定してMISRA-C:2012ルールによるチェックを行うと、標準ヘッダに対してチェックメッセージを出力する場合がありました。
      これを改善して、メッセージを出力しないようにしました。
    - ビルド時に内部エラーが発生する場合がありましたが、これを改善しました。

V1.07.00 → V1.08.00 への変更点 (2019/1/21)

1. C99標準ライブラリ関数
    C99用標準ライブラリ関数について新規対応、またはC99規格の機能を追加しました。

2. 複数ファイルにまたがるMISRA-C:2012チェックの追加【professional】
    複数ファイルにまたがるMISRA-C:2012ルールのソース・チェックを行うオプションを追加しました。

3. MISRA-C:2012ルールによるチェック機能の拡充【professional】
    MISRA-C:2012ルールによりソース・チェックを行う-misra2012オプションの引数にルール8.5とルール8.6を指定できるようにしました。

4. ライブラリ・ファイル入力時のセクション名変更機能の追加
    リンク時に入力するライブラリ・ファイル内の、セクション名やシンボル名を変更できるリンク・オプションを追加しました。

5. スタートアップのスタック領域初期化
    スタートアップ・ルーチンを変更し、スタック領域の初期化処理を追加しました。
    なお、RL78-S1 コア用のスタートアップ・ルーチンに変更はありません。

6. 最適化強化
    ループ内で更新される変数の値の取り得る範囲に応じて、変数の型サイズを削減する最適化を実施することにより、
    生成コードの性能を改善しました。

7. 注意事項の改修
    以下の注意事項を改修しました。
    - switch文の制御式に1 ビットの符号付きビット・フィールドを記述する場合の注意事項 (CCRL#020)
    - farポインタのメンバを持つ構造体または共用体をパッキングしてfar領域に配置する場合の注意事項 (CCRL#021)
    - 構造体または共用体の整数型メンバの初期値がアドレス定数の場合の注意事項 (CCRL#022)
    - -misra2012 オプション指定時の注意事項 (CCRL#023)

8. その他改善
    ビルド時に内部エラーが発生する場合がありましたが、これを改善しました。

V1.06.00 → V1.07.00 への変更点 (2018/7/20)

1. C99標準ライブラリ関数
    C99用標準ライブラリ関数について新規対応、またはC99規格の機能を追加しました。

2. ヘキサ・ファイル、バイナリ・ファイル出力機能の拡充
    ヘキサ・ファイル、バイナリ・ファイルに対する以下の機能を拡充しました。
    - -form=binaryオプション指定時に-crcオプションを使用可能にしました。
    - ヘキサ・ファイルの出力データのアドレスが内部ROMまたはデータフラッシュの範囲外にあるかチェックするオプション
      -CHECK_OUTPUT_ROM_AREAを追加しました。
    - インテル拡張ヘキサ・ファイルまたはモトローラ・Sタイプ・ファイルを出力する際、
      出力ファイル上の先頭ロード・アドレスを変更可能にしました。

3. ベクタテーブル・セクションをベクタテーブル・アドレス別に生成する機能の追加
    ベクタテーブル・セクションをベクタテーブル・アドレス別に分割して生成する-SPLIT_VECTオプションを追加しました。

4. #pragma addressの拡充
    __saddr宣言した変数に対して#pragma addressでの指定を可能にしました。

5. #pragma sectionの拡充
    CC-RL V1.06.00以前では、文字列リテラル、switch文の分岐テーブル、集成体型自動変数の初期値のセクション名を
    デフォルトセクション名から変更することが出来ませんでしたが、CC-RL V1.07.00では#pragma sectionでセクション名を
    変更できるようにしました。

6. 不正な間接関数呼び出し検出機能の拡充【professional】
    CC-RL V1.06.00でサポートした不正なアドレスへの間接関数呼び出しを検出する機能を拡充し、
    -cfi_ignore_moduleオプションにライブラリファイル(*.lib)を指定できるようにしました。

7. 最適化強化
    long型のゼロ等価比較コードに対して生成コードの改善等、最適化を強化しました。

8. 注意事項の改修
    以下の注意事項を改修しました。
    - 初期化子の指定がある配列型、構造体型または共用体型のstatic変数宣言に関する注意事項 (CCRL#019)

9. その他改善
    ビルド時に内部エラーが発生する場合がありましたが、これを改善しました。

V1.05.00 → V1.06.00 への変更点 (2018/1/22)

1. C99規格
    言語仕様としてC99規格をサポートしました。

2. MISRA-C:2012ルールによるソース・チェック機能の拡充 【professional】
    ソース・チェック可能なMISRA-C:2012ルール数を111から119に拡充しました。

3. 不正な間接関数呼び出し検出機能 【professional】
    不正なアドレスへの間接関数呼び出しを検出する機能をサポートしました。

4. ハードウェア割り込みハンドラのベクタテーブルのアドレス複数指定への対応
    #pragma interruptで同一関数に対し、複数のベクタテーブルのアドレスを指定できるようにしました。

5. ポインタ間接参照を1バイト単位でアクセスする機能
    CA78K0Rからのコンパイラ移行支援として、
    volatile指定がない型へのポインタ間接参照を1バイト単位でアクセスする -unaligned_pointer_for_ca78k0rオプションを追加しました。

6. 最適化強化
    生成コードの性能を改善しました。

7. メモリ使用量の上限拡張
    CC-RLが使用できるホストPC上のメモリ量を拡張しました。
    - 32bit/64bit OS とも2G byte 【V1.05.00 以前】
    - 32bit OS の場合は3G byte、64bit OS の場合は4G byte 【V1.06.00 以降】

8. メッセージ制御機能
    警告メッセージをエラーメッセージに変更するためのコンパイル・オプション-change_messageを追加しました。

9. ヘキサ・ファイルのレコード長固定機能
    インテル拡張ヘキサ・ファイル(.hex)とモトローラ・S タイプ・ファイル(.mot)の出力アドレスを、指定したアライメントで整合し、
    固定レコード長で出力するリンク・オプション-fix_record_length_and_alignを追加しました。

10. リンク時のメッセージ追加
    V1.05.00以前では、整列条件の異なる同名セクションをリンクした場合に、警告メッセージW0561322を出力していましたが、
    V1.06.00では、整列条件の異なる同名セクションであり、かつその整列条件の一方が他方の倍数ではないセクションをリンクした場合には、
    警告メッセージW0561331を代わりに出力するようにしました。

11. 注意事項の改修
    以下の注意事項を改修しました。
    - switch文中のラベルへのgoto文を使用している場合の注意事項 (CCRL#016)
    - 関数が複数の引数を持ち、仮引数同士の代入または比較がある場合の注意事項 (CCRL#017)
    - ループ制御変数の終了条件が定数のループ文に関する注意事項 (CCRL#018)

12. その他改善
    (1) 内部エラーの改善
         ビルド時に内部エラーが発生する問題を改善しました。

V1.04.00 → V1.05.00 への変更点 (2017/7/20)

1. 最適化強化
    生成コードの性能を改善しました。

2. MISRA-C:2012ルールによるソース・チェック機能の拡充 【professional】
    ソース・チェック可能なMISRA-C:2012ルール数を103から111に拡充しました。

3. ライセンスの認証方式の改善
    ライセンスの認証方式を改善し、ビルド時間を短縮しました。

4. 配列初期値データの出力方法変更
    配列型の初期値データをアセンブリ・ソース上で出力する際、1行にまとめて出力するように変更しました。
    この変更によりビルド時の解析処理が削減され、ビルド時間を短縮することができます。

5. モトローラ・Sタイプ・ファイルのエンドレコード指定
    モトローラ・Sタイプ・ファイルのエンドレコードを指定するリンカ・オプション -end_recordを追加しました。
    V1.05.00未満ではエントリ・ポイント・アドレスに合わせてエンドレコードを出力していましたが、
    指定したエンドレコードでモトローラ・Sタイプ・ファイルを生成できます。

6. リンク・マップ・ファイルの仕様変更
    リンク・マップ・ファイルの “Mapping List” に再配置属性のATTRIBUTE欄を追加しました。
    -show=relocation_attributeを指定した場合に、セクションに対応している再配置属性を表示します。

7. リンク・エラーのメッセージ変更
    リンク・エラー “F0563102” のメッセージに、ファイル名を出力するようにしました。

8. ローカル・ラベルおよびnop命令挿入オプションの追加
    CS+、e2 studioの消費電流測定ソリューション機能を使用するオプション-insert_nop_with_labelを追加しました。
    本オプションは、CS+、e2 studio上で使用します。

9. -vfinfoオプションの機能拡張
    -vfinfoオプションに出力属性attributeを追加しました。
    callt関数だけでなくnear関数も指定できるようになったほか、ROMオプションやfar領域に指定したセクションを
    関数情報出力対象から外せるようになりました。

10. -binaryオプションの機能拡張
    -binaryオプションのセクション属性attributeに指定可能な項目を拡張しました。

11. #pragma near/farの追加
    関数のnear/far属性を#pragma指令で指定できるようになりました。
    複数の関数に対して同時にnear/far属性を指定できます。

12. #pragma pack/unpackの追加
    構造体のパッキングの有無を#pragma指令で指定できるようになりました。
    Cソースの一部に対してパッキングの有無を指定できます。

13. #pragma addressの機能拡張
    const変数に対して、#pragma addressで配置アドレスを指定できるようになりました。

14. 移行支援機能指定時の#pragma重複記述の許可
    移行支援機能指定時に、#pragma nopなど一部の#pragma指令の重複記述に対してエラーとしないようにしました。

15. 無償評価版使用時メッセージの番号追加
    無償評価版を使用してビルドする際に出力していたメッセージに対し、
    無償評価版の残日数のメッセージに対しては番号W0561016を、期限切れのメッセージに対しては番号W0561017を付与しました。
    これにより、無償評価版使用時にエラーとして処理する等、-change_messageによる制御ができるようになりました。

16. 注意事項の改修
    以下の注意事項を改修しました。
    - 仕様外のアセンブリ記述時の注意事項 (CCRL#001)
    - 制御式に比較演算があるswitch文の注意事項 (CCRL#015)

17. その他改善
    (1) float四則演算ランタイムライブラリの改善
         floatの加算・減算・乗算・除算について、ランタイムライブラリ関数の性能を改善しました。
    (2) コンパイル・エラーの改善
         -merge_filesオプション指定時にコンパイル・エラー ”F0530800” が発生する問題を改善しました。
    (3) 内部エラーの改善
         ビルド時に内部エラーが発生する問題を改善しました。

V1.03.00 → V1.04.00 への変更点 (2017/1/20)

1. 最適化強化
    生成コードの性能を改善しました。

2. MISRA-C:2012ルールによるソース・チェック機能の拡充 【professional】
    ソース・チェック可能なMISRA-C:2012ルール数を82から103に拡充しました。

3. .VECTOR 疑似命令の機能拡張
    割り込みベクタテーブルと割り込みハンドラを別ファイルに記述できるようにしました。

4. #pragma inline_asm 指令の拡張
    #pragma inline_asm 指令で指定した関数内に.public 疑似命令を記述できるようにしました。

5. リンク・オプション-subcommand の仕様変更
    サブコマンド・ファイル内で-subcommand オプションを指定できるようにしました。

6. リンク・オプション-vfinfo/-list の仕様変更
    -vfinfo オプションは変数/関数情報を生成します。
    従来は、-vfinfo オプション指定時の1 回目のビルドにおいて、セクションのアドレスが使用可能なアドレス範囲を超えた場合は
    エラーとしてビルドを終了し、変数/関数情報ファイルも生成していませんでした。
    本バージョンより同様の場合でも可能な限りエラーとせずビルド処理を継続させ、変数/関数情報ファイルを出力するようにしました。
    それにより変数や関数のアクセスを最適化できるようになります。
    また、-vfinfo オプションと同時に-list オプションを指定した場合には、リンク・マップ・ファイルにシンボル情報を
    出力するようにしました。

7. ライセンスの認証方式
    ライセンスの認証方式を変更しました。
    V1.04.00 以降を使用する場合は、ライセンス・マネージャV2.00.00 以降をインストールしてください。

8. 注意事項の改修
    以下3件の注意事項を改修しました。
    - 2 回以上のループを含むプログラムに関する注意事項 (CCRL#012)
    - 配列要素、構造体メンバまたは共用体メンバへの値の更新が反映されない注意事項 (CCRL#013)
    - 値が1 ずつ減少する演算式を含むループの注意事項 (CCRL#014)

9. その他改善
    (1) ビット操作命令の出力の制限
         V1.04.00未満では、最適化レベルやソース・プログラムの記述内容によってコンパイラが自動的に判別してビット操作命令を
         出力していましたが、V1.04.00ではユーザーが制御できるようにしました。
    (2) 内部エラーの改善
         ビルド時に内部エラーが発生する問題を改善しました。

V1.02.00 → V1.03.00 への変更点 (2016/7/21)

1. 最適化強化
    主に以下のような最適化を実装することにより、生成コードの性能を改善しました。
    (1) 異なるローカルスコープ内 auto 配列の領域を統合する最適化(スタックサイズの削減)
         生存期間が重ならないブロック({})に属するauto 配列のスタック領域を統合するようにしました。
    (2) 定数伝播最適化の強化
         ループ内で定数だとわかる計算を省略しました。
    (3) 帰納変数最適化の改善
         冗長なループ帰納変数の更新コードを生成しないようにしました。
    (4) 不要コード削除最適化の改善
         使われることのないコードの削除処理を強化しました。

2. MISRA-C:2012ルールによるソース・チェック機能の拡充【professional版のみ】
    MISRA-C:2012 ルールによりソース・チェックを行う-misra2012 オプションの引数に、以下の番号を指定できるようにしました。
      2.6 2.7
      9.2 9.3
      12.1 12.3 12.4
      14.4
      15.1 15.2 15.3 15.4 15.5 15.6 15.7
      16.1 16.2 16.3 16.4 16.5 16.6 16.7
      17.1 17.7
      18.4 18.5
      19.2
      20.1 20.2 20.3 20.4 20.5 20.6 20.7 20.8 20.9 20.10 20.11 20.12 20.13 20.14

3. 動的メモリ管理関数のセキュリティ強化【professional版のみ】
    ヒープ・メモリ領域の解放時に、不正操作を検出する機能を追加しました。
    本機能は専用の標準ライブラリをリンクすることにより使用可能です。
    professional 版のライセンスが登録されていない場合はE0562310 エラーになります。
    専用の標準ライブラリは以下のように動作します。
    (1) calloc、malloc、realloc 関数内で、ヒープ・メモリ領域内にユーザー用に割り当てる領域の他に、
         不正操作を検出するための領域としてその外側の前後各2 バイトを余分に割り当てます。
    (2) free、realloc 関数内で、(a)~(c)のいずれかに該当していないかを判定します。
        (a) 引数が(1)で割り当てたポインタでない
        (b) 引数が既に開放済みのポインタである
        (c) (1)で余分に割り当てた不正操作を検出するための領域が書き換わっている
    (3) (2)の判定に該当した場合は不正な操作があったものとして__heap_chk_fail 関数を呼び出します。
         __heap_chk_fail 関数はユーザーが定義する必要があります。
         ヒープ・メモリ領域の不正操作検出時に実行する処理を記述してください。
         本機能を使用することにより、容易にセキュリティ対策(メモリ二重解放の問題やバッファ・オーバーフローの防止等)が可能となります。

4. オプション-Opipelineの追加
    パイプライン最適化オプション-Opipeline を追加しました。

5 .ビット操作組み込み関数の追加
    ビットを操作する組み込み関数__set1、__clr1、__not1 を追加しました。

6. 注意事項の改修
    以下の 5 件の注意事項を解除しました。
    - 条件アセンブル制御命令後に外部ラベルを定義した場合の注意事項 (CCRL#006)
    - パッキングした構造体、共用体のメンバを初期化子に指定した場合の注意事項 (CCRL#007)
    - 命令オペレーション一覧にない命令オペランドを記述した場合の注意事項 (CCRL#008)
    - 割り込みハンドラ内でレジスタを上書きするコードを出力する注意事項 (CCRL#009)
    - 最適化の適用範囲に関する注意事項 (CCRL#010)

7. その他変更・改善
    主に以下のような変更・改善を行いました。
    (a) デバッグ情報の改善
        デバッグ時に C ソース、アセンブリソースが正しく表示できない場合がありましたが、これを改善しました。
    (b) 内部エラーの改善
        ビルド時に内部エラーが発生する場合がありましたが、これを改善しました。
    

V1.01.00 → V1.02.00 への変更点 (2015/10/20)

1. 最適化強化
    生成コードの性能を改善しました。

2. オプションの追加【コンパイラ】
    以下のオプションを追加しました。
    (1) -g_line
        最適化時にソース・デバッグ用の情報を強化します。
    (2) -stack_protector【Professional版のみ】
        8バイトを超える構造体、共用体または配列をローカル変数に持つ関数に対してスタック破壊を検出するコードを生成します。
    (3) -stack_protector_all【Professional版のみ】
        すべての関数に対してスタック破壊を検出するコードを生成します。
    (4) -misra2012【Professional版のみ】
        MISRA-C:2012ルールによるソース・チェックを行います。
    (5) -Osame_code
        コンパイル単位の同一セクション内に存在する複数の同一命令列を統合し、関数化します。

3. #pragma指令の追加【コンパイラ】
    以下の#pragma指令を追加しました。
    (1) #pragma stack_protector【Professional版のみ】
        指定した関数に対して、スタック破壊を検出するコードを生成します。
    (2) #pragma no_stack_protector【Professional版のみ】
        指定した関数に対して、スタック破壊を検出するコードを生成しません。

4. オプションの追加【リンカ】
    以下のオプションを追加しました。
    (1) -SYmbol_forbid
        未参照シンボル削除の抑止シンボルを指定します。

5. -Optimizeオプションの拡張【リンカ】
    -Optimizeオプションのパラメータにsymbol_delete、speed、safeを追加しました。
    (1) symbol_delete
        一度も参照のない変数/関数を削除します。コンパイル時に必ずentryオプションを指定してください。
    (2) speed
        オブジェクトスピード低下を招く危険性のある最適化以外を実行します。
    (3) safe
        変数や関数の属性によって制限される可能性のある最適化以外を実行します。

6. -Binaryオプションの制限【リンカ】
    -Binaryオプションに、制限を追加しました。
    [制限]
      本オプションで指定したバイナリ・ファイルは、0 ~ 0x0FFFF番地にしか配置できません。
      0x10000 番地以降にバイナリ・ファイルを配置する場合は、下記のようなアセンブラソースを作成してください。
        .SECTION BIN_SEC, TEXTF
        $BINCLUDE(tp.bin)

7. CRC演算機能の拡張【リンカ】
    -CRcオプションの演算方法に、従来の16-CCITT-MSB-LITTLE-4、16-CCITT-LSB、SENT-MSBに加え、
    CCITT、16-CCITT-MSB、16-CCITT-MSB-LITTLE-2、16、32-ETHERNETを指定できるようになりました。
    (1) CCITT
        CRC-16-CCITTでMSB First、初期値0xFFFF、XOR反転による演算結果を得ることができます。
    (2) 16-CCITT-MSB
        CRC-16-CCITTでMSB Firstによる演算結果を得ることができます。
    (3) 16-CCITT-MSB-LITTLE-2
        入力をLITTLEエンディアン2バイト単位としCRC-16-CCITTでMSB Firstによる演算結果を得ることができます。
    (4) 16
        CRC-16でLSB Firstによる演算結果を得ることができます。
    (5) 32-ETHERNET
        CRC-32-ETHERNETによる演算結果を得ることができます。
        演算結果は初期値0xFFFFFFFFで、XOR反転およびビットリバースされています。

8. 関数の追加【ライブラリ】
    以下の標準ライブラリ関数を追加しました。
    (1) calloc
        ゼロ初期化したメモリを割り当てます。
    (2) free
        メモリを解放します。
    (3) malloc
        メモリを割り当てます。
    (4) realloc
        メモリを再割り当てします

9. スタートアップの変更【スタートアップ】
    ミラー空間がないデバイス用のスタートアップから、const属性の記述を削除しました。

10. 注意事項の解除
    以下の6件の注意事項を解除しました。
    (1) K&R形式の関数定義(浮動小数点型の仮引数)
    (2) K&R形式の関数定義(nearポインタの仮引数)
    (3) スタックに退避した引数の値を上書きするコードを出力する注意事項
    (4) memcmp関数、_COM_memcmp_ff関数、strcmp関数、_COM_strcmp_ff関数の戻り値が不正となる注意事項
    (5) strtoul関数、_COM_strtoul_ff関数の戻り値が不正となる注意事項
    (6) 予約語__sectop、__secend、演算子startof、sizeofでデフォルトではないセクション名を使用した場合の注意事項

11. 注意事項の追加
    以下の1件の注意事項を追加しました。
    (1) bsearch、qsortのK&R形式の比較関数定義
    [参照]
        CC-RLコンパイラ ユーザーズマニュアル(ドキュメント番号:R20UT3123JJ0102)
            11.2.6 bsearch、qsort のK&R 形式の比較関数定義

12. 注意事項の変更
    以下の1件の注意事項を変更しました。
    (1) 分離演算子
    [参照]
        CC-RLコンパイラ ユーザーズマニュアル(ドキュメント番号:R20UT3123JJ0102)
            11.3.5 分離演算子