superh risc engine c/c++ compiler simulator...

61
平成14年8月6日 日立ソフトウェアエンジニアリング株式会社 〒231-0015 横浜市中区尾上町6丁目81番地 (045)681-2111 (大代表) SuperH RISC engine C/C++ Compiler Simulato Windows ® V7.1.00 ソフトウェア添付資料 HSK-04037

Upload: others

Post on 24-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

平成14年8月6日

日立ソフトウェアエンジニアリング株式会社

〒231-0015 横浜市中区尾上町6丁目81番地

TEL (045)681-2111(大代表)

SuperH RISC engine

C/C++ Compiler Simulator Package

Windows®版V7.1.00

ソフトウェア添付資料

HSK-04037

Page 2: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

はじめに

今回納入致しますSuperH RISC engine C/C++ Compiler Simulator Package について説明致します。

目     次

1.記録媒体 ------------------------------------------ 1

2.インストール方法 ---------------------------------- 1

3.使用上の注意事項 ---------------------------------- 3

4.ソフトウェアマニュアル ----------------------------- 3

5.メモリ所要量及びディスク占有量 -------------------- 3

6.アップデート内容 ----------------------------------- 4

7.一時的制限事項 ------------------------------------- 4

8.マニュアル正誤表 ----------------------------------- 4

9.テクニカルサポート --------------------------------- 4

付録1-1 V7.0Bアップデート内容

付録1-2 V7.0.01アップデート内容

付録1-3 V7.0.02アップデート内容

付録1-4 V7.0.03アップデート内容

付録1-5 V7.1.00アップデート内容

付録2-1 ご使用上の注意事項

付録2-2 SH7055使用上の注意事項

付録2-3 SuperH RISC engine シミュレータ・デバッガ 制限事項

All Rights Reserved, Copyright (C) 1992,2001,

Hitachi, Ltd.,

Hitachi Software Engineering Co., Ltd.,

Hitachi ULSI Systems Co., Ltd.

Page 3: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 1 -

1.記録媒体

本パッケージはCD-ROM 1枚で提供します。

本CD-ROMにより、日立統合開発環境と、関連マニュアルを参照するためのソフトウェア

(Acrobat® Reader)をインストールすることができます。

AdobeおよびAcrobat® Readerはアドビシステムズ社の商標です。

2.インストール方法

2.1 インストール

 以下の手順でインストールを実行します。インストールは、実行中のアプリケーションをあらかじ

め終了させてから実行してください。なお、HEW Ver.2.1(以下 HEW2.1)は、HEW Ver.1.xとは別ディ

レクトリにインストールしてください。また、HEW Ver.1.0xで作成したプロジェクトはそのまま使え

ません。HEW Ver.1.0xで作成したプロジェクトを使う場合は、HEW1.1x用に変換(HEW1.1xでオープン

してセーブ)してからHEW2.1で使ってください。

2.1.1 統合開発環境のインストール

(1) 統合開発環境のCD-ROMをCD-ROMドライブに挿入します。(以下、仮にDドライブとします)

(2) Windows®スタートメニューの[ファイル名を指定して実行...]をクリックします。

(3) CD-ROMのルートディレクトリにあるSETUP.EXEを[ファイル名を指定して実行]ダイアログボッ

クスで指定し(例D:¥setup.exe)、[OK]をクリックします。

(4) 画面に表示されるインストールの指示に従います。

統合開発環境のインストールの注意事項:

(1) 統合開発環境は半角英数字と半角下線のみからなるディレクトリパスにインストールしてく

ださい。特に、全角文字や空白のないディレクトリパスを使用してください。

(2) HEW2.1をHitachi Integration Managerまたは、Hitachi Embedded Workshopと同じディレクト

リにインストールしないでください。

(3) Hitachi Embedded Workshop及びSuperH RISC engineシミュレータ・デバッガは各PCの

ドライブにインストールしてください。複数部数のライセンスをご購入の場合、ツールチェイ

ン、ライブラリアンインタフェース、オンラインマニュアルはネットワークドライブにインス

トール可能です。他のPCでインストールしたツールチェイン、ライブラリアンインタフェース

を自分のPCに登録する方法はHitachi EmbeddedWorkshop2.0ユーザーズマニュアル4章「ツー

ル管理」を参照してください。

(4) HEWをインストールした直後に[Hitachi Embedded Workshop 2]がWindows® スタートメニュー

の[プログラム]の中に表示されない場合はWindows®を再起動してください。

(5) インストール中にインストーラが異常終了した場合、コンピュータを再起動してから再度イン

ストールしてください。

2.1.2 Acrobat® Readerのインストール

(1) 統合開発環境のCD-ROMをCD-ROMドライブに挿入します。(以下、仮にDドライブとします)

(2) Windows®スタートメニューの[ファイル名を指定して実行...]をクリックします。

(3) CD-ROMの[PDF_Read¥Japanese]ディレクトリにあるAr505jpn.exe (日本語版)または

[PDF_Read¥English] ディレクトリにあるAr505eng.exe (英語版)を[ファイル名を指定して実

行] ダイアログボックスで指定し(例D:¥PDF_Read¥Japanese¥Ar505jpn.exe)、[OK]をクリックし

Page 4: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 2 -

ます。

(4) 画面に表示されるインストールの指示に従います。

2.2 プログラムの削除

インストールしたプログラムは以下の手順で削除します。削除は、実行中のアプリケーションをあ

らかじめ終了させてから実行してください。

2.2.1 統合開発環境の削除

(1)Windows®スタートメニューの[設定]の中にある[コントロールパネル]をクリックします。

(2) [アプリケーションの追加と削除]アイコンをダブルクリックします。

(3) [セットアップと削除]タブから[Hitachi Embedded Workshop Ver2.0]をクリックし、

 [追加 と削除]ボタンをクリックします。

(4) 画面に表示される指示に従います。

2.2.2 Acrobat® Readerの削除

(1)Windows®スタートメニューの[設定]の中にある[コントロールパネル]をクリックします。

(2) [アプリケーションの追加と削除]アイコンをダブルクリックします。

(3) [セットアップと削除]タブから[Adobe Acrobat 5.0]をクリックし、[追加と削除]ボタンをク

リックします。

(4) 画面に表示される指示に従います。

2.3 プログラムの起動または終了

2.3.1 統合開発環境の起動と終了

・ 起動:Windows®スタートメニューの[プログラム]の中にある[Hitachi Embedded Workshop 2]メ

ニュー内の[Hitachi Embedded Workshop 2]をクリックします。

・ 終了:HEWの[File]メニューの[Exit]をクリックします。

2.3.2 オンラインマニュアルおよび添付資料の参照

・ オンラインマニュアルをインストールした場合

Windows®スタートメニューの[プログラム]の中にある[Hitachi Embedded Workshop 2]メニュー

内のPDFファイルOnline Manuals [SuperH] –English(xx xx)(英語版)または

Online Manuals [SuperH] –Japanese(xx xx)(日本語版)をクリックします。(xx xxは、年月

のキーワードを表示しています)

(例 Online Manuals [SuperH] -Japanese(01 10))

・ オンラインマニュアルをインストールしていない場合

(1) 統合開発環境のCD-ROMをCD-ROMドライブに挿入します。(ここでは、仮にDドライブとしま

す)

(2) Windows®スタートメニューの[ファイル名を指定して実行...]をクリックします。

(3) CD-ROMの[Manuals]ディレクトリにある,jSH_xxxx.PDF(日本語版)またはeSH_xxxx.PDF(英

語版)(xxxxは、年月のキーワードを表示しています)を[ファイル名を指定して実行]ダイ

アログボックスで指定し(例D:¥Manuals¥jSH_0110.PDF)、[OK]をクリックします。

Page 5: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 3 -

3.使用上の注意事項

必要な機器構成は以下の通りです。

・ ホストコンピュータ:IBM PC互換機、PC-9800シリーズ機

(CPU:日本語Windows®98、Windows®Me、WindowsNT®4.0、Windows®2000またはWindows®XPが動作

するもの)

・ OS:日本語Windows®98、Windows®Me、WindowsNT®4.0、Windows®2000またはWindows®XP

・ ディスプレイ:SVGA以上

・ I/O装置:CD-ROMドライブ

・ その他:マウス等のポインティングデバイス

IBM PCは、米国IBM社により管理されている計算機の名称です。

PC-9800シリーズは、日本電気(株)により管理されている計算機の名称です。

Windows®、Windows®98、Windows®Me、WindowsNT®、Windows®2000およびWindows®XPは、米国マイクロソフト社により管

理されているオペレーティングシステムの名称です。

4.ソフトウェアマニュアル

マニュアルはCD-ROMに添付しているオンラインマニュアルを参照ください。

別途、製本マニュアル(MS001-001-70)を販売しております。

詳細については、SHCコンパイラホームページ(http://www.hitachi-sk.co.jp/Products/SH-C/Home

Page.html)をご覧ください。

5.メモリ所要量及びディスク占有量

・ メモリ容量:最低64MB、128MB以上を推奨

・ ディスク容量:統合開発環境:空き容量100MB以上(フルインストールに必要な容量)

Acrobat® Reader:空き容量10MB以上

Page 6: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 4 -

6.アップデート内容 以下の付録を参照ください。 「付録1-1 V7.0B アップデート内容」  「付録1-2 V7.0.01アップデート内容」(Windows®版)  「付録1-2 V7.0.02アップデート内容」(SPARC版/HP版)  「付録1-3 V7.0.02アップデート内容」(Windows®版)  「付録1-3 V7.0.03アップデート内容」(SPARC版/HP版)  「付録1-4 V7.0.03アップデート内容」(Windows®版)  「付録1-4 V7.0.04アップデート内容」(SPARC版/HP版)  「付録1-5 V7.1.00アップデート内容」

7.一時的制限事項

以下の付録を参照ください。

「付録2-1 ご使用上の注意事項」

「付録2-2 SH7055使用上の注意事項」

「付録2-3 SuperH RISC engine シミュレータ・デバッガ 制限事項」

8.マニュアル正誤表

CD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。

「SuperH RISC engine C/C++コンパイラ、アセンブラ、最適化リンケージエディタユーザーズマニュアル正誤表」

「SuperH RISC engine シミュレータ・デバッガユーザーズマニュアル正誤表」(Windows®版)

「Hitachi Embedded Workshop 2.0 HEW Builder ユーザーズマニュアル正誤表」(Windows®版)

「Hitachi Embedded Workshop 2 更新資料(V2.0->V2.1)」(Windows®版)

9.テクニカルサポート

弊社テクニカルサポートのご利用方法について説明いたします。

 弊社テクニカルサポートはFAXおよびフリーダイヤルにてご利用いただくことができます。FAX

は次のページ以降に添付してあるサポート依頼書をコピーしてご利用ください。送付いただいた依頼事

項について、後ほど弊社担当より回答をさしあげます。 【受付時間】 受付日 : 月曜日 ~ 金曜日 (ただし祝日を除く) 受付時間: 10:00 ~ 17:00 【問合せ先】 第4産業システム部 第1グループ SHC/C++コンパイラ テクニカルサポート係 FAX 045-681-2401 フリーダイヤル 0120-78-7750 もしくは 第3品質保証部 第2品質保証課 SHC/C++コンパイラ テクニカルサポート係 FAX 045-451-5158

 なお、E-mailによるお問い合わせの受け付け、ホームページによる情報の提供も行っておりま

す。ご利用ください。

【E-mailによるお問い合わせ】

FAXの場合と同様に必要事項を明記の上、下記アドレスへお問い合わせください。

[email protected]

【SHCコンパイラホームページ】

下記アドレスにてSHC/C++コンパイラに関する情報提供を行っております。

http://www.hitachi-sk.co.jp/Products/SH-C/HomePage.html

Page 7: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 5 -

サポート依頼書製品型名 P- (リリース媒体のラベルに表示されている:P-xxxx-xxxxxx)

バージョン

製番 (使用許諾契約書に表示されている番号)

使用機種名

使用OS バージョン

(フ リ ガ ナ)

御登録社

 (者)名

所属部名

FAX番号 電話番号     (内線     )

弊社記入欄(記入しないでください。)

受付番号  分 類 担 当 者

Page 8: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 6 -

 現 象 (入力ソース、指定オプション、コンパイル結果、実行結果を詳細に記述)

-以上-

Page 9: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 1 -

付録1-1

Ver.7.0Bのアップデート内容

各ツールのバージョンは、下表の通りです。

は変更ツールを示しています。

表 1 ツールバージョン一覧

Windows®版 SPARC版/HP版

HEW 2.0

シミュレータ 8.00 4.0

C/C++コンパイラ 7.0B 7.0B

標準ライブラリ構築ツール 2.0 2.0

アセンブラ 5.1 5.1

フォーマットコンバータ 1.0C 1.0C

最適化リンケージエディタ 7.1 7.1

Page 10: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 2 -

1. Hitachi Embedded Workshop (Ver. 1.2 -> Ver. 2.0) (Windows®版)

1.1 シミュレータデバッガの統合

HEW Ver.2.0では、プロジェクトの作成からソース編集、ビルド、デバックまで一つの

  開発環境で実施可能になりました。

  また、プロジェクト作成時に、デバッガの選択やデバッガ起動時に必要なオプションの

  設定も可能になりました。

1.2 ツールチェインオプション設定の簡素化

  HEW Ver.2.0では、ツールチェインオプションの設定が容易になりました。

  (1)今までコンパイラ、アセンブラ、最適化リンカなどツール個別に設定していた

   オプションを、単一のダイアログで設定できます。これにより、各ツール間での

   オプション整合性が保たれます。

  (2)単一ダイアログ上で、複数のプロジェクトやコンフィグレーションに対する

   オプション設定が可能です。

  (3)今まで個別に設定していたCコンパイラにより出力されたアセンブリソースの

   オプションも、通常のアセンブリソースと一緒にオプション設定できます。

  (4)最適化リンカで設定するセクションアドレス(最適化リンカオプション)に合わせ、

   シミュレータデバッガのメモリリソースの設定が可能です。

  (5)メモリリソース設定の際、CPUのハードウェアマップを参照できます。

1.3 MAP最適化カスタムフェーズ

  Cコンパイラで最適化リンケージエディタが出力した外部シンボル割り付け情報を活用

  した最適化を実行するためのカスタムフェーズを提供します。詳しくは、「Hitachi 

  Embedded Workshop 2.0リリースノート」を参照してください。

1.4 複数プロジェクト、複数コンフィグレーションのビルド

  HEW2.0では、ワークスペース内の全プロジェクトからコンフィグレーションを選択して、

一括してビルド実行が可能になりました。

1.5 プロジェクトの複製

  HEW2.0では、使用中のプロジェクトをカスタムプロジェクトとして保存して、新規にプロジェクト

を作成する時に利用できるようになりました。

1.6 リセットプログラム、およびスタック設定プログラムのC言語対応

プロジェクトジェネレータは、リセットプログラムとスタック設定プログラムをC言語記述で生成

するようになりました。

1.7 プロジェクトデータの追加他

HEW Ver.2.0では、新たに以下のプロジェクト生成を追加しました。

SH7053F, SH7054F, SH7706, SH7709S, SH7727, SH7729R

また、SH7709、SH7709A、SH7729のI/O定義ファイルの記述誤りを変更しました。

Page 11: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 3 -

2. SuperH RISC engineシミュレータ・デバッガ (Ver. 7.11 -> Ver. 8.00)

2.1 HEWとの一体化

HEWにデバッグインタフェース機能を持たせました。

  これにより、HEW上でコーディングからデバッグまで行えるようになりました。

2.2 ブレーク機能でイベントをサポート

ブレーク条件成立時の動作(イベント)として下記を設定可能

   ・プログラム停止、

   ・ファイルからメモリへのデータリード

   ・メモリからファイルへのデータライト

   ・割り込み動作

2.3 IMAGE、WAVE表示機能サポート

メモリ内容を画像(IMAGE)および波形(WAVE)で表示する機能を追加しました。

2.4 カバレッジ機能サポート

  アセンブラ命令レベルでの、命令実行回数、分岐条件の成立/不成立情報を取得します。

2.5 プロファイル機能強化

  メモリ種別(内蔵メモリ、外部メモリ等)ごとのメモリアクセス回数表示を追加しました。

3 コンパイラ (Ver.6.0A -> Ver.7.0B)

3.1 オプションの追加・変更

 以下のオプションを追加しました。

(1) map=<ファイル名>

     外部変数アクセス最適化を行う。

(2) gbr={auto|user}

     GBR相対アクセス命令、論理演算をコンパイラが自動生成する。

(3) shift={inline|runtime}

     シフト演算をインライン展開/実行時ルーチン呼び出しで行う。

(4) blockcopy={inline|runtime}

     転送コードをインライン展開/実行時ルーチン呼び出しで行う。

(5) latin1

     latin1コードをサポート。

 以下のオプションについて内容変更しました。

(6) division=cpu={inline|runtime}

     除算をインライン展開/実行時ルーチン呼び出しで行う。

(7) inline=<数値>

     コードが<数値>%増加するまでインライン展開を行う。

(8) show=tab={4|8}

Page 12: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 4 -

     タブのカラム数を指定。

(9) nomessage[=<番号>[,...]]

     informationレベルのメッセージ出力の制御。

 またnestinlineオプションは廃止し、コンパイラが自動的に判断してインライン展開を行います。

3.2 #pragma拡張子の追加・変更

 以下の#pragma拡張子を追加しました。

(1) #pragma entry

     エントリ関数の指定。

(2) #pragma stacksize

     スタックサイズの指定。

 また、以下の#pragma拡張子について内容変更しました。

(3) #pragma interrupt

     (sp=symbol+定数)をサポート。

(4) #pragma gbr_base/#pragma gbr_base1

     gbr=auto指定時は無効となる。

3.3 セクションアドレス演算子のサポート

 以下のセクションアドレス演算子をサポートしました。

(1) _ _sectop("<セクション名>")

     <セクション名>の先頭アドレスを参照。

(2) _ _secend("<セクション名>")

     <セクション名>の末尾+1アドレスを参照。

3.4 組込み関数の追加

 以下の組込み関数を追加しました。

(1) 64bit乗算

     dmuls_h, dmuls_l, dmulu_h, dmulu_l

  (2) SWAP命令、エンディアン変換

     swapb, swapw, end_cnvl

(3) LDTLB/NOP命令

     ldtlb, nop

3.5 アドレスキャストのエラー緩和

外部変数初期化時のアドレス初期化に対するキャスト式のエラーを緩和しました。

3.6 malloc確保サイズ、入出力ファイル数の可変化

変数_sbrk_sizeでmalloc確保サイズを、変数_nfilesで入出力ファイル数を指定できる

 ようになりました。

Page 13: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 5 -

4 標準ライブラリ構築ツール (Ver.1.0A -> Ver2.0)

4.1 リエントラントライブラリサポート

 reentオプションを指定すると、リエントラントライブラリを生成します。

4.2 簡易I/Oサポート

nofloatオプションを指定すると、浮動小数点変換をサポートしない、サイズの小さい

 I/Oルーチンを生成します。

5 アセンブラ (Ver.5.0B -> Ver5.1)

5.1 マクロ展開不正

マクロ定義に0x5cを含む文字(漢字の「能」等)がある場合、マクロ展開時にエラー620

 (UNDEFINED PREPROCESSOR VARIABLE)が発生する問題点を解決しました。

.MACRO M_SVC_JUMP

XOR R0,R0 ; 機能コードFETCH  <-"能"を含んでいる

MOV.B @_OP_SYS_PRM,R0 ;

AND #H'07F,R0 ; bit 7(機能種別) mask

.ENDM

;

M_SVC_JUMP ; マクロ展開

【発生条件】

 下記条件を満たす時、発生します。

 (1) マクロ定義内(コメントも含む)に、下記に示す文字(記号、カタカナ、ロシア文字、

   アラビア数字、漢字)が存在する。

 <記号> :―

 <カタカナ> :ソ

 <ロシア文字> :Ы

 <アラビア数字>:Ⅸ

 <漢字> :噂,浬,欺,圭,構,蚕,十,申,曾,箪,貼,能,表,暴,予,禄,兔,喀,媾,彌,拿,杤,歃

5.2 マクロ展開時リストコメント不正

PC版でoutcode=eucを指定し、マクロ本体内のコメントが日本語で終わっている場合、

 リスト上のマクロ展開部分のコメントが不正となる問題点を解決しました。

ソース リスト

.MACRO MM 1 .MACRO MM

NOP ;機能symbol 2 NOP ;機能symbol

NOP ;機能 3 NOP ;機能

.ENDM 4 .ENDM

MM 5 MM

Page 14: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 6 -

~ M NOP ;機能symbol

M NOP ;機能symbol←正しくはsymbol不要

5.3 ローカルラベル、.ASSIGN 定義シンボル使用時の制限事項解除

ローカルラベルまたは.ASSIGNシンボルを使用時に、相対値となる命令のリロケーションが不正と

 なる問題点を解決しました。

.IMPORT isym

MOV.L #(isym-?lab),R0 ;?labの情報が不正

?lab: ;.ASSIGNで$定義しても同様の不正

 

【発生条件】

 下記条件をいずれかを満たす時、発生します。

 (1) .ASSIGNラベル、ローカルラベルへのJMP/JSR分岐を記述。

(2) .ASSIGNラベル、ローカルラベルと外部シンボル(定義/参照)との式を記述。

6 フォーマットコンバータ (Ver.1.0B -> Ver.1.0C)

6.1 アセンブリセクション切り替え後の行情報不正

 アセンブリファイル中にセクション切り替えがあるオブジェクトファイルの場合、セクション

切り替え後の行情報が不正になる問題点を解決しました。

6.2 セクションのアライン不正

ELF/DWARF2ファイルをELF/DWARF1またはSYSROFに変換する時、不正に2003エラーを出力する

 問題点を解決しました。

6.3 デバッグ情報なしオブジェクト内シンボルの割り付けアドレス不正

アブソリュートファイルにデバッグ情報の有り/無しのオブジェクトが混在する場合、デバッグ

 情報がないオブジェクトに存在するシンボルアドレスが不正になる問題点を解決しました。

6.4 キャッシュ最適化されたアブソリュートファイル変換不正

optlnkでキャッシュ最適化が行われた場合、アプリケーションエラーとなる問題点を

 解決しました。

7 最適化リンケージエディタ (Ver.7.0A -> Ver7.1)

7.1 オプションの追加

 以下のオプションを追加しました。

(1) map[=<ファイル名>]

     コンパイラで外部変数アクセス最適化を行うためのファイルを出力。

Page 15: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 7 -

(2) compress/nocompress

     デバッグ情報の圧縮有無を指定する。

7.2 Internal error解決

 以下のInternal errorとなる問題点を解決しました。

 (1703) "File:oc_updat.cpp Line:5496 /This lDisp is Limit Over" /"oc_update_jsrdsp()"

 (1704) "File:oc_updat.cpp Line:6129 /This lDisp is Limit Over" /"oc_update_movdsp()"

 (3061) "File:dw_arng.cpp Line:209 /Cannot find relocation table" /"DWArangeList::createAr

ange()"

 (3081) "File:dw_loc.cpp Line:191 /Illegal address size" /"createLocation()"

 (8090) "File:in_devtb.cpp Line:9177 /Unexpected table end(add,sub,mov...etc..)" /"in_last

code_chk_SH"

 (8833) "File : ca_updat.cpp Line : 3163 /The contents of the OFFINF_SH->LITRINF table ar

e not literal

     data." /"ca_update_Add_Literal _Operation"

 (8870) "File:oc_updat.cpp Line:10251 /Position is NULL" /"OBF_AT"

 (8874) "File:oc_serch.cpp Line:2583 /Position is NULL" /"SUB_AT"

7.3 ライブラリ作成時エラー

  UNIX版ライブラリ構築ツールを用いて、標準ライブラリ作成時にHLNK_DIRが指定されている時、

 「L3310 (F) Cannot open temporary file」のエラーメッセージが表示されライブラリが作成できな

い問題点を解決しました。

7.4 絶対アドレスセクション同士のリンク時不正

 

絶対アドレスセクションの後ろに同名でサイズ0の絶対アドレスセクションをリンクすると、オブ

ジェクト不正となる問題点を解決しました。

7.5 goptimizeによる実行不正

 

goptimizeオプション指定無しの関数(アセンブリ関数を含む)と指定有りの関数からgoptimizeオプ

ション指定有りの関数呼び出し関係がある時、実行不正になる問題点を解決しました。

7.6 シンボル分岐幅不正

 

下記発生条件を同時に満たす時、共通コードの最適化で作成したシンボルへの分岐幅が不正になる

問題点を解決しました。

【発生条件】

 (1) 入力オブジェクトは、goptimizeオプション指定有り。

 (2) romオプションでコードセクションを指定。

 (3) リンク時、optimizeオプション指定あり。

Page 16: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 8 -

7.7 不当シンボル削除

下記条件を同時に満たす時、不当にシンボル削除を行う問題点を解決しました。

【発生条件】

 (1) goptimizeオプション無しオブジェクトからgoptimizeオプション有りオブジェクトを参照する

コードが存在する。

 (2) ENTRY指定有り。

 (3) 未参照変数/関数削除最適化(optimize=symbol_delete指定時)を行う。

7.8 退避/回復レジスタ不正

同一Cソース内のある関数から次に定義されている関数を呼び出した場合、レジスタ退避/回復コード

 最適化を不正に行う問題点を解決しました。

7.9 リテラルプール値不正

レジスタ退避/回復コードの最適化で下記条件を同時に満たす時、リテラルプールの値が不正になる

 問題点を解決しました。

【発生条件】

 (1) 該当関数のレジスタ退避/回復コードが最適化される。

 (2) 該当関数には、レジスタ退避/回復領域をまたぐスタックアクセスが存在する。

 (3) スタック渡し引数があり、そのSPオフセットが2byteである。

Page 17: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 1 -

付録1-2

Ver.7.0.01のアップデート内容(Windows®版)

Ver.7.0.02のアップデート内容(SPARC版/HP版)

各ツールのバージョンは、下表の通りです。

は変更ツールを示しています。

表 1 ツールバージョン一覧

Windows®版 SPARC版/HP版

HEW 2.0        

シミュレータ 8.0.01 4.11

C/C++コンパイラ 7.0.03 7.0.03

標準ライブラリ構築ツール 2.0 2.0

アセンブラ 5.1 5.1

フォーマットコンバータ 1.0C 1.0C

最適化リンケージエディタ 7.1.02 7.1.02

Page 18: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 2 -

1. Hitachi Embedded Workshop(Ver. 2.0 Windows®版)

1.1 プロジェクトジェネレータ生成データの修正

  以下のCPUのI/O定義ファイル(iodefine.h)を修正しました。

  SH7046, SH7047, SH7049, SH7148 : st_dtc DTCSR 定義

  SH7055F: st_bsc RAMER, st_aut10 TIOR 定義

  SH7065 : st_pg DR, st_pfc PFIORL 定義

  SH7604 : st_frt OCR 定義

  SH7702, SH7707, SH7708, SH7708R, SH7709 : st_bsc PCR 定義

  SH7750 : PWM1,2のアドレス定義

  また、以下のCPUシリーズのリセットプログラム(resetprg.c)のVBR設定記述を修正しました。

  SH-1, SH-2, SH2-DSP, SH-2E

1.2 コンパイラDefineオプション削除不正の対策

  [Options- "toolchain name"]で設定可能なコンパイラDefineオプションの中で、"Value"未設定の

  定義が削除できなかった問題を対策しました。

1.3 コンパイラでアセンブリソース出力時のオプション引継ぎ不正の対策

  [Options- "toolchain name"]でコンパイラでアセンブリソースを出力し、出力したアセンブリソ

  ースに対しオプションを設定しても、ビルド時アセンブラオプションが正しく設定されない問題を

  対策しました。

2. SuperH RISC engineシミュレータ・デバッガ (Ver. 8.00 -> Ver. 8.0.01 Windows®版)

2.1 Watch/Localウィンドウ

  下記不具合を修正しました。

  ロードモジュール(.ABS)のサイズが大きいと(ファイルサイズ約64Kバイト以上)、Watchウィン

  ドウの変数が"Not available now."と表示される場合があります。

  また、関数内で定義した変数(ローカル変数)がLocalsウィンドウに表示されない場合があります。

Page 19: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 3 -

3. SuperH RISC engineシミュレータ・デバッガ

(Ver. 4.00 -> Ver. 4.11 SPARC版/HP版)

3.1 SH-4Rサポート

 SH-4R(SH7750R)シミュレータをサポートしました。

SH-4Rの16KB、2WAYキャッシュをサポートしています。

3.2 倍精度浮動小数点演算の不具合修正

 下記不具合を修正しました。

SH-4シミュレータでは、倍精度浮動小数点演算の結果が不正になります。

倍精度浮動小数点演算を行なう場合、SH-4 BSCシミュレータをご使用ください。

なお、単精度浮動小数点演算は正常な結果となります。

4 コンパイラ (Ver. 7.0B -> Ver. 7.0.03)

4.1 符号拡張/ゼロ拡張不正

  【内容】

   関数内に結果が同じ整数型の部分式が存在する場合、その結果の下位2バイトまたは1バイトを不

   正に符号拡張/ゼロ拡張する場合がある不具合を修正しました。

   short sub(long);

   short a,b,c,d;

   void f()

   {

    if (d) {

     b = sub((long)a * (long)b * (long)c / 0x4000);

      /* ^^^^^^^^^^^^^^^^^ */

    } else {

     b = sub((long)a * (long)b * / 0x80);

      /* ^^^^^^^^^^^^^^^^^ */

    }

   }

  【発生条件】

   以下条件をすべて満たす時、発生します。

   (1) 関数内に結果が同じである共通な部分式がある(上記例の^^^^^)。

   (2) その部分式の変数の値が2バイトまたは1バイト以下であることが保証できる(上記例ではsh

     ort型の変数を型変換しているので、値としてはshort型の範囲内であることが保証できる)

4.2 レジスタ破壊不正

  【内容】

Page 20: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 4 -

   optimize=1指定時、使用中のレジスタを不正に破壊する場合がある不具合を解決しました。

  【発生条件】

   以下条件をすべて満たす時、発生します。

   (1) optimize=1を指定する。

   (2) 関数内に分岐先(ループ文、return文も含む)が同一になる複数の基本ブロック(分岐、ラベ

     ルのない命令列)が存在する。

   (3) (2)の複数基本ブロックの中に同じ変数への代入文がある。

4.3 1ビットフィールドメンバ定数代入不正

  【内容】

   同じ構造体の1ビットフィールドメンバへの定数代入文が連続し、かつ同じビットフィールドメ

   ンバへの代入文が複数存在する時、インターナルエラー もしくはオブジェクト不正になる場合

   がある不具合を解決しました。

   struct {

    unsigned char b1:1;

    unsigned char b2:1;

   } ST;

   /* インターナルエラー */

   void f() {

    ST.b1=1;

    ST.b2=0;

    ST.b2=0;

   }

   /* オブジェクト不正 */

   void g() {

    ST.b1=1;

    ST.b2=1;

    ST.b2=0;

   }

  【発生条件】

   下記条件を全て満たす時、発生します。

   (1) 同じ構造体の1ビットフィールドメンバへの定数代入文が連続している。

   (2) 同じビットフィールドメンバに同じ値を代入している(インターナルエラー)、 もしくはビ

     ットフィールドメンバに0以外の定数を代入し、直後に同じビットフィールドメンバに0を代

     入している。

4.4 レジスタ退避・回復不正

  【内容】

Page 21: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 5 -

   割り込み関数内で、R0,R1,R3が使用されているにも関わらず退避・回復されない場合がある不具

   合を解決しました。

  【発生条件】

   下記条件を全て満たす時、発生します。

   (1) 当該関数が割り込み関数である。

   (2) 当該関数内で関数呼び出しがない(実行時ルーチンを含む)。

   (3) 当該関数内に以下のいずれかを含む。

    ・switch文

    ・#pragma inline_asm指定関数(サイズが255以上もしくは指定なし)の呼び出し

    ・関数内分岐が8bitで届かない場合

4.5 R0レジスタの不正破壊

  【内容】

   optimize=1指定時に使用中のレジスタR0を不正に破壊してしまうことがある不具合を解決しま

   した。

  【発生条件】

   下記条件を全て満たす時、発生する可能性があります。

   (1) optimize=1を指定する。

   (2) スタック渡しの仮引数が存在する。

4.6 switch文条件式中の構造体メンバ参照不正

  【内容】

   switch文の条件式にネストした構造体のメンバ参照を記述した場合、メンバへのオフセットが不

   正となる場合がある不具合を解決しました。

  【発生条件】

   下記条件を全て満たす時、発生する可能性があります。

   (1) ネストした構造体のメンバ参照がある。

   (2) そのメンバの参照を、'.'ではなく、(&member)->という形で行っている。

   (3) その構造体参照式が、switch文の条件式にある

4.7 デバッグ情報不正

  【内容】

   構造体メンバが関数へのポインタで、その関数の型がプロトタイプ形式で宣言されている場合に、

   デバッグ情報が不正になる不具合を解決しました。

  【発生条件】

   下記条件を全て満たす時、発生します。

   (1) C言語で記述されている。

   (2) 関数型へのポインタである構造体または共用体のメンバが存在する。

Page 22: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 6 -

4.8 インターナルエラー

  【内容】

   以下の場合、インターナルエラーが発生する不具合を解決しました。

   (1) ファイル名(パスを含む)に空白を含む場合。

   (2) mapオプションでファイル名(パスを含む)に日本語を指定した場合。

5 最適化リンケージエディタ(Ver. 7.1 -> Ver. 7.1.02)

5.1 rename指定時のデバッグ情報不正

  【内容】

   -form=relocate 指定時に-rename を指定すると、当該セクション内シンボルのデバッグ情報が

   削除される不具合を解決しました。

  【発生条件】

   下記条件を全て満たす時、発生します。

   (1) -form=relocateを指定している。

   (2) -renameを指定している。

5.2 const、リテラルデータ最適化不正

  【内容】

   -optimize=string_unifyを指定すると不正にシンボルの統合最適化を実施する不具合を解決し

   ました。

  【発生条件】

   下記条件を全て満たす時、発生する可能性があります。

   (1) Cソースファイルを-goptimizeオプション指定でコンパイルする。

   (2) 最適化リンカで、-optimize=string_unifyを指定する。

5.3 キャッシュ最適化指定時内部エラー

  【内容】

   -optimizeオプションと-cacheオプションを同時に指定すると内部エラーが発生する不具合を解

   決しました。

Page 23: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 1 -

付録1-3

Ver.7.0.02のアップデート内容(Windows®版)

Ver.7.0.03のアップデート内容(SPARC版/HP版)

各ツールのバージョンは、下表の通りです。

は変更ツールを示しています。

表 1 ツールバージョン一覧

Windows®版 SPARC版/HP版

HEW 2.0        

シミュレータ 8.0.01 4.11

C/C++コンパイラ 7.0.04 7.0.04

標準ライブラリ構築ツール 2.0 2.0

アセンブラ 5.1 5.1

フォーマットコンバータ 1.0C 1.0C

最適化リンケージエディタ 7.1.04 7.1.04

Page 24: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 2 -

1. Hitachi Embedded Workshop(Ver. 2.0 Windows®版)

1.1 HIMプロジェクトの変換不正

  Cコンパイラフェーズを含まないHIMプロジェクトをHEW2.0用に変換した時、CコンパイラのCPUタブ

  上のデフォルトオプションを正しく設定できない問題を対策しました。

1.2 Denormalizeアセンブラオプションのビルド時設定不正

  ワークスペースが、アセンブラオプションDenormalize"=ON"と"=OFF"の両プロジェクトを持つ場合、

  Denormalize"=ON"のプロジェクトをビルド(アセンブル)時、Denormalize"=ON"を設定しない問題

  を対策しました。

1.3 プロジェクトジェネレータ生成データの修正

  以下のCPUのI/O定義ファイル(iodefine.h)を修正しました。

  SH7708 : st_sci 定義

  SH7709S : st_scif, st_irda 定義他

1.4 Runtime Libraryのスタックサイズ表示不正

  ユーティリティツールの一つ、スタック解析ツールでRuntime Libraryのスタックサイズを正しく

  表示できない問題を対策しました。

2 コンパイラ(Ver. 7.0.03 -> Ver. 7.0.04)

2.1 副作用のある式を含むif文の不正削除

  if文の削除最適化で、副作用のある条件式が削除される場合がある不具合を解決しました。

  <例>

   extern int sub();

   main() {

     int i=0;

     if(sub()) {  /* if文内の関数sub()の呼び出しが不正に削除されます */

       i=10;  /* ローカル変数iはこの後どこでも使用されないので */

     }  /* 最適化によりi=10が削除されます */

   }

  【発生条件】

  以下の条件をすべて満たす場合、発生することがあります。

  (1) optimize=1を指定する。

  (2) if文のthen節、else節とも空文である(最適化により空文になる場合を含む)。

2.2 スタックアクセス不正

  スタックに対するロード・ストアが不正になる場合がある不具合を解決しました。

Page 25: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 3 -

  <例>

        :

    MOV      R15,R2

    ADD      #72,R2

    MOV      #104,R0 ; H'00000068

    MOV.L     R2,@(R0,R15) <- (SP+72)にデータを保存

    MOV      R15,R3

    ADD      #92,R3 <- 正しくは#72

    MOV.L     @R3,R6 <- (SP+92)からデータ取り出し NG

    MOV.L     L37+60,R4 ; L52

    BSR      _func

    MOV      #52,R5 ; H'00000034

        :

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) スタックへのアクセスがある。

   (2) 1関数の最適化対象範囲が複数に分割されている

     (分割される条件は、サイズ、変数、関数呼び出しの数等に起因します)。

2.3 #pragma interrupt関数のレジスタ退避・回復不正

  #pragma interrupt関数から#pragma inline_asm指定関数を呼び出し時、#pragma inline_asm 関数

  内で使用したレジスタが破壊されることがある不具合を解決しました。

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) #pragma interrupt関数から#pragma inline_asm指定関数の呼び出しがある

   (2) 当該#pragma interrupt関数内に他の関数呼び出しがない

2.4 MACレジスタ退避・回復不正

  macsave=1オプション指定時、#pragma regsave指定関数でMACレジスタが退避・回復されない不具

  合を解決しました。

  【発生条件】

   以下の条件をすべて満たす場合、発生します。

   (1) macsave=1を指定する。

   (2) #pragma regsaveを指定する。

2.5 2重ループ内式のオブジェクト不正

  2重ループのある式でspeedオプションまたはloopオプションを指定すると、コード不正になる場合

  がある不具合を解決しました。

Page 26: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 4 -

  <例>

      :

   for(...)

     for(...)

       x = x + i; /* xの値が不正になることがある */

      :

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) speedオプションまたはloopオプションを指定する。

   (3) 2重ループがあり、ループの内側にx=x+a;のように左辺と同じ変数を右辺で使用している。

2.6 拡張命令の削除不正

  不要なロード・ストア命令削除または複数ロード命令削除で不正にEXTS命令を削除してしまう場合

  がある不具合を解決しました。

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) 代入先(または複数ロード命令の2回目以降)サイズ < 参照元サイズ <= 4byteである。

2.7 switch文展開不正

  switch文がテーブル方式展開される場合、遅延スロットにケーステーブルのリテラルデータが入り、

  コード不正になる場合がある不具合を解決しました。

   <例>

        SHLL    R6

        MOVA L204,R0

        MOV.W @(R0,R6),R0

        BRAF R0

        NOP

     L203:

        .RES.W 1

        .DATA.L _fl

        .DATA.L _f2

        .DATA.L _f3

        .DATA.L _f4

   .DATA.L _f5

   .DATA.L _f6

     L204:

  .DATA.W L143-L203

   .DATA.W L143-L203

Page 27: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 5 -

   BRA L180

   .DATA.W L143-L203 ←遅延スロットに入る

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) switch文があり、分岐方式がテーブル展開である。

2.8 定数演算不正

  定数演算でコード不正になる場合がある不具合を確認しました。

  <例>

   void f() {

sl = 0x80000001l;

  :

    if (*scp16==(char)(0x80000001L)) /* 0x80000001を1byteに型変換した結果(1)と比較 */

: /* すべきところ、0x80000001と比較 */

   }

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) 同一関数内に、サイズの異なる部分的に等しい定数式がある。

2.9 ポインタ指示先への設定不正

  ポインタの指示先への値の設定が正しく行われない場合がある不具合を解決しました。

  <例>

   int *gp;

   void g(int *p) {

   gp = p;

   }

   int f(int *q) {

   static int i, *p = &i;

   g(p); /* gpがiを指すように設定される */

   :

   i = 1;

   *gp = 2; /* *gpとiが同一である可能性があることが認識できていない */

   :

   return i; /* i = 1が定数伝播され、2ではなく1が返される */

   }

  【発生条件】

Page 28: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 6 -

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) 静的変数及び外部変数の初期値にアドレス参照式を指定、または&演算子を用いない配列の

   アドレス参照がある

2.10 #pragma interrupt関数のFPSCR退避・回復不正

  #pragma interrupt指定関数でFPSCRが退避・回復されない不具合を解決しました。

  【発生条件】

   以下の条件をすべて満たす場合、発生します。

   (1) cpu=sh2e/sh4を指定する。

   (2) #pragma interrupt関数内に関数呼び出しがない。

   (3) #pragma interrupt関数内にオペランドにFPSCRのあるコードが無い。

   (4) #pragma interrupt関数内にFPU演算(FABS,FSQRT,FNEG,FCNVDS,FCNVSD,FLOAT,FTRC,FADD,FS

     UB,FMUL,FDIV,FCMP/EQ,FCMP/GT,FMAC)がある。

2.11 組込み関数の移動不正

  以下の組み込み関数を跨いで命令が移動することがある不具合を解決しました。

  set_cr, get_cr, set_imask, get_imask, set_vbr, get_vbr, trapa, trapa_svc, prefetch

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) 以下の組み込み関数を使用。

    set_cr, get_cr, set_imask, get_imask, set_vbr, get_vbr, trapa, trapa_svc, prefetch

2.12 乗算結果の拡張命令削除不正

   乗算結果を1/2byteに代入時、不正に拡張命令が削除される場合がある不具合を解決しました。

  <例>

   unsigned short eus=32768,eus2=32769;

   void func () {

   unsigned short aus;

   aus= (eus--) * (eus2--); /* 乗算結果のゼロ拡張が不正に削除 */

   if (aus!=(unsigned short)((1+eus)*(1+eus2))){

   : /* (1+eus)*(1+eus2)の結果はゼロ拡張される */

     }

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) 乗算結果を1byteまたは2byteに代入する。

Page 29: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 7 -

2.13 volatileへのキャスト不正

  volatileへのポインタに型変換を指定時、ループ内の式のvolatile指定が無効になる場合がある不

  具合を解決しました。

  <例>

   #define ADDRESS1 0xf0000000

   #define ADDRESS2 0xf0000004

   #define BIT0 0x0001

   void shc_test(void) {

   unsigned short dataW,read_val;

   read_val = *((unsigned short*)ADDRESS1);

   while(1) {

   /* volatileが無効になりループ外に移動 */

   dataW = *((volatile unsigned short*)ADDRESS2);

        if(dataW & BIT0) {

/* volatileが無効になりループ外に移動 */

   *((volatile unsigned short*)ADDRESS2) &= ~BIT0;

   break;

   }

   }

   }

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) 指示先がvolatileであるポインタキャストが存在する。

   (3) そのポインタの間接参照式がループ内で使用されている。

2.14 GBR相対論理演算化不正

  外部変数の複合論理演算指定時に、コード不正になる場合がある不具合を解決しました。

  <例>

   unsigned char guc1=255;

   void func001() {

   if (guc1 & 254){ /* guc1をロード(A) */

   guc1 &= 253; /* AND.B #253,@(R0,GBR) メモリ上のguc1を書き換え */

   }

      if (guc1==253) ok(1); /* guc1を再ロードせず、(A)をそのまま使用 */

    else ng(1);

    }

  【発生条件】

Page 30: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 8 -

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定している。

   (2) gbr=autoを指定している、またはgbr=user指定時#pragma global_base/#pragma global_ba

     se1を使用している。

   (3) 外部変数を複合論理演算式(&=, |=, ^=)で使用している。

   (4) 複合論理演算式を「op.B #xx,@(R0,GBR)」(op:AND/OR/XOR)でコード生成している。

2.15 #pragma global_register指定時の拡張命令削除不正

  1/2byte変数を#pragma global_register指定すると、不正にEXTS/EXTU命令が削除される場合が

  ある不具合を解決しました。

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) (unsigned) char/short型変数を#pragma global_registerに指定している。

2.16 構造体・共用体配列メンバを含む構造体・共用体使用時のオブジェクト不正

   構造体・共用体に構造体・共用体配列メンバがある場合にオブジェクト不正になる場合がある不

   具合を解決しました。

  <例>

   void func() {

   struct tag {

   union {

   short u11;

   char u12[2];

   } u1[2];

   } st= {{{0x1234},{0x5678}}};

   char ans1;

   ans1=st.u1[1].u12[1]; /* st.u1[1].u12[1]設定前にans1をコピー(A) */

   printf("%x¥n",ans1); /* (A)のans1をそのまま使用 */

     if(ans1 == 0x78) /* (A)のans1をそのまま使用 */

:

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) 構造体・共用体に構造体・共用体配列メンバが存在する。

   (3) 上記の領域を配列メンバとそれ以外の直接参照式(構造体全体を表す式や共用体の別メン 

     バ)の両方で参照している。

Page 31: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 9 -

2.17 goptimize指定時のoptlnk最適化不正

  goptimize指定時に、レジスタ退避・回復コードが遅延スロットに移動した場合、optlnkで不正に

  退避・回復コードを削除する場合がある不具合を解決しました。

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) goptimizeを指定する。

   (3) optlnkでoptimize=registerを指定する。

   (4) 遅延スロットにレジスタ退避・回復コードがある (MOV.L @R15+,Rn/MOV.L Rn,@-R15など)。

2.18 組込み関数nopの遅延スロット移動抑止

  組込み関数nopを引用した場合、不当に遅延スロットにNOP命令を移動し指定位置に設定できない不

  具合を解決しました。

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) 組込み関数nopを使用する。

2.19 符号付き整数型定数値のキャスト不正

  定数値をcharまたはshort型に明示的型変換指定をした場合、コード不正になる場合がある不具合

  を解決しました。

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) 定数値を符号付きのchar, short型に型変換している。

   (3) その定数値は型変換後、負の値となる。

2.20 副作用のある実引数の演算不正

  関数パラメタにvolatile変数に対する後置++/--式を記述した時、呼び出し関数内で当該変数が後

  置++/--前の値になる場合がある不具合を解決しました。

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) optimize=1を指定する。

   (2) 関数のパラメタがvolatileで変数である。

   (3) 当該パラメタが副作用(後置++/--)式である。

Page 32: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 10 -

2.21 rtnext指定時の返却値の符号/ゼロ拡張不正

  rtnextオプション指定時、1/2byteのリターン値が不正になる場合がある不具合を解決しました。

  <例>

   int a;

   unsigned char func(){

   return a; /* aの上位3byteは不定値が返る */

   }

  【発生条件】

   以下の条件をすべて満たす場合、発生することがあります。

   (1) rtnextを指定している。

   (2) 関数のリターン値が1byteまたは2byteである。

   (3) 関数の原型宣言を行っていない。

2.22 無名ビットフィールドデータ配置不正

  endian=little指定時、構造体メンバに無名ビットフィールドがあるとデータ配置が不正となる場

  合がある不具合を解決しました。

  【発生条件】

   以下の(1)-(4)もしくは(5)-(8)の条件をすべて満たす場合、発生することがあります。

   (1) endian=littleを指定する。

   (2) 構造体メンバにビット幅が8以上の無名ビットフィールドがある。

   (3) その無名ビットフィールドは構造体先頭ではない。

   (4) 構造体変数の定義で初期値が設定されている。

   (5) endian=littleを指定する。

   (6) 構造体に配列メンバがあり、その次がビットフィールドメンバである。

   (7) 配列メンバとビットフィールドメンバの間に境界調整のギャップが入る。

   (8) 構造体変数の定義で初期値が設定されている。

2.23 volatile指定変数参照削除の抑止

  volatile宣言された変数について以下のような式を記述した場合、変数の参照を保証するように変

  更しました。

  a &= 0;

2.24 デバッグ情報不正

  ローカル配列、構造体・共用体(スタックに領域を確保した時)のデバッグ情報が出力されなかった

  不具合を解決しました。

2.25 インターナルエラー

  以下の場合、インターナルエラーが発生することがある不具合を解決しました。

Page 33: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 11 -

  (1) code=machinecode指定時に、コンパイル実行するドライブのルートディレクトリにファイルを

  生成する権限がない場合(PC版のみ)

  (2) 無限ループがあり関数出口に到達する制御フローのないプログラムをコンパイルした場合。

3. 最適化リンケージエディタ(Ver. 7.1.02 -> Ver. 7.1.04)

3.1 compressオプション指定時のデバッグ情報不正

  compressオプション指定によりデバッグ情報を圧縮した際、型情報の参照先が不正となる不具合を

  解決しました。

3.2 外部変数アクセス最適化に関するアドレスチェック

  コンパイラのmapオプション指定(外部変数アクセス最適化)時のシンボルアドレスについて、リン

  ク時にmapオプションを指定したときのみチェックしていたのを、常にアドレスチェックを行うよ

  うに修正しました。

3.3 binaryファイル入力指定時のセクション属性不正

  下記条件全てを満たした際に、セクションの属性が不正となる不具合を解決しました。

  (1) objectファイルとbinaryファイルを入力

  (2) objectファイル内でサイズ0のセクションを定義

  (3) binaryオプションでサイズ0のセクションを指定

  (4) ファイルの入力指定順:(2)のobjectファイル -> (3)のbinaryファイル

3.4 relocateファイル生成時の異常終了

  下記条件全てを満たした際に異常終了する不具合を解決しました。

  (1) 入力objectファイルの先頭:-goptimizeオプション指定ありのファイル入力objectファイルの

    2番目以降の入力:goptimizeオプション指定なしのファイルもしくはアセンブラ出力ファイル

  (2) 出力形式にrelocateファイルを指定

  (3) profileオプション指定あり

  (4) 最適化指定あり

3.5 未参照シンボル削除とレジスタ最適化実施時の内部エラー(1703)

  下記条件全てを満たした際に内部エラーが生じる不具合を解決しました。

  (1) goptimizeオプション指定ありのobjectファイルを入力

  (2) (1)のobjectファイル内に分岐幅が境界(-4096または4094)のBSR、またはBRA命令が存在

  (3) 未参照シンボル削除最適化、およびレジスタ最適化を指定

3.6 複数関数が同一リテラルを指す場合のリテラル参照不正

  下記条件全てを満たした際に参照するリテラルの値が不正となる不具合を解決しました。

  (1) goptimizeオプション指定ありのobjectファイルを入力

  (2) (1)のobjectファイル内で、複数関数が同一リテラルを参照

  (3) レジスタ退避/回復コード最適化を指定

Page 34: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 1 -

付録1-4

Ver.7.0.03のアップデート内容(Windows®版)

各ツールのバージョンは、下表の通りです。

は変更ツールを示しています。

表 1 ツールバージョン一覧

Windows®版

HEW 2.1

シミュレータ 8.1.00

C/C++コンパイラ 7.0.06

標準ライブラリ構築ツール 2.0

アセンブラ 5.1

フォーマットコンバータ 1.0.04

最適化リンケージエディタ 7.1.05

Page 35: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 2 -

1. Hitachi Embedded Workshop(Ver. 2.0 -> Ver. 2.1 Windows®版)

1.1 MAP最適化カスタムフェーズ

本パッケージより、カスタムフェーズを使用しないでツールチェインのオプション設定だけでMAP

最適化を実行可能になりました。「1.6 MAP最適化対応の自動ビルド」を参照してください。

1.2 プロジェクトのロードとアンロード

ワークスペース内で複数のプロジェクトを利用している場合、ワークスペースオープン時は

  カレントプロジェクトのみロードされ参照可能になります。

  他のプロジェクトを参照する場合は、ワークスペースウィンドウ上で該当する

  プロジェクトを選択し、マウス右ボタンでポップアップメニューの[Load Project]

  を指定することで参照可能になります。

また、参照不要となったプロジェクトは、同様の操作でポップアップメニュー[Unload Project]

を指定することで、HEW上の管理から一時的に開放されます。(メモリの節約になります)

1.3 ワークスペースウィンドウ Navigationタブ設定

ワークスペースウィンドウのNavigationタブ上でポップアップメニュー

(マウス右ボタンをクリック)の[Configure view...]を選択すると、

Navigationタブ上で表示する情報を設定することができます。

初期設定では、"ANSI C Functions"と"C Defines"を表示します。

1.4 印刷時のヘッダ、フッダ設定

[File - Page Setup...]メニューで、印刷時のヘッダ、フッダの設定が可能になりました。

1.5 カスタムプレースフォルダの設定

[Tools - Customize]メニューのPlaceholderタブで、ユーザ固有のプレース

ホルダの設定が可能になりました。HEW全体で使用する場合は、

"Application wide custom placeholders:"に、また、ワークスペース個別に

使用する場合は、"Workspace wide custom placeholders:"に設定してください。

1.6 MAP最適化対応の自動ビルド

HEW2.0では、Cコンパイラで最適化リンケージエディタが出力した外部シンボル

割り付け情報を活用した最適化を実行するためにカスタムフェーズを提供していましたが、

HEW2.1では、オプション設定だけで最適化ビルドが実行可能になりました。

ツールチェインオプションダイアログのC/C++タブでOptimizeとして"Include

map file"を指定しすると、最適化リンケージエディタ実行後、自動的に、

再度Cコンパイラからのビルド処理を実行します。

1.7 プロジェクトジェネレータ生成データの追加、修正

新たに以下のCPUのプロジェクト生成を追加しました。

    SH7055SF, SH7058F, SH7290

また、以下のCPUのI/O定義ファイル(iodefine.h)を修正しました。

    SH7727

Page 36: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 3 -

2. SuperH RISC engineシミュレータ・デバッガ

(Ver. 8.0.01 -> Ver. 8.1.00 Windows®版)

2.1 セッションサポート

ターゲット固有の情報はセッションに保存します。

1つのコンフィギュレーションに複数のセッションを持つことが可能です。

2.2 コマンドバッチファイルの実行順序を指定可能に

コマンドバッチファイルを自動実行する順番を指定できます。

実行するタイミングは、ターゲット接続時、ユーザプログラムロード前、後から選択できます。

2.3 Sourceウィンドウの強化

Sourceウィンドウ上に対応するアドレスとカバレッジ情報を表示します。

また、表示/非表示も選択できます。

Cソースレベルでカバレッジ情報を表示することが可能になります。

2.4 カバレッジ機能強化

  カバレッジ情報のセーブ/ロードをサポートします。過去のカバレッジ方法とのマージが可能

になります。

2.5 Watch機能の強化

Watch情報のリアルタイム表示をサポートします。プログラム実行中にリアルタイムに情報を

更新します。また、Watch情報のファイルへのセーブをサポートします。

2.6 Trace機能の強化

Trace取得情報の統計解析機能をサポートします。

解析する項目を指定することにより、どういった情報が何回取得されたかを表示することが

可能になります。

2.7 Triggerウィンドウサポート

Triggerウィンドウをサポートしました。これにより、任意のタイミングで擬似割り込みを

発生することが可能になります。

2.8 SH3-DSP(core)シミュレータサポート

SH3-DSP(core)シミュレータをサポートしました。ASIC向けSH3-DSPのデバッグが可能になります。

Page 37: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 4 -

3. コンパイラ(Ver. 7.0.04 -> Ver. 7.0.06)

3.1 オプションの追加

以下のオプションを追加しました。

(1) global_volatile={0|1}

外部変数のvolatile化

(2) opt_range={all|noloop|noblock}

外部変数最適化範囲指定

(3) del_vacant_loop={0|1}

空ループ削除

(4) max_unroll=<数値>

ループ最大展開数の指定

(5) infinite_loop={0|1}

無限ループ前の式削除

(6) global_alloc={0|1}

外部変数のレジスタ割り付け

(7) struct_alloc={0|1}

構造体/共用体メンバのレジスタ割り付け

(8) const_var_propagate={0|1}

const定数伝播

(9) const_load={inline|literal}

定数ロードの命令展開

(10) schedule={0|1}

命令並べ替え

詳細については「SuperH ROSC engine C/C++コンパイラVer.7.0.06 添付資料」を参照ください。

3.2 R0レジスタの不正破壊

スタック渡しのパラメタがあるとき、R0を不正に書き換える場合がある不具合を対策しました。

<例>

short func1(short a0, int *a1, int a2, short a3, short a4, short a5, short a6,

int a7, int a8, int a9);

void func0(short a0, int *a1, int a2, short a3, short a4, short a5, short a6) {

:

r1=func1(0,a1,0,0,0,0,0,0,0,0);

if((r1>0)&&(r1!=1)) {

func1(a0,a1,0,a3,a4,a5,a6,0,0,0);

}

:

}

:

MOV.L R0,@(32,R15); -> R0を@(32,R15)に退避

Page 38: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 5 -

MOV R8,R5

MOV #66,R0 ; -> R0を破壊

MOV.W @(R0,R15),R3

MOV R9,R6

MOV #70,R0 ; -> R0を破壊

MOV.W @(R0,R15),R1

MOV R0,R4 ; ->MOV.L @(32,R15),R4をMOV R0,R4に置換えコード不正

MOV.L R3,@(4,R15)

MOV.L R1,@(8,R15)

MOV.L R9,@(12,R15)

MOV.L R9,@(16,R15)

BSR _func1

MOV.L R9,@(20,R15)

:

【発生条件】

以下の条件をすべて満たす場合、発生することがあります。

(1) optimize=1を指定している。

(2) 当該関数にスタック渡しのパラメタが存在する。

3.3 BRA命令飛び先不正

無条件分岐を含むプログラムにおいて、分岐をBRA命令で行いかつ飛び先までの距離が4094バイトの

時、飛び先が不正になるコードを生成する場合がある不具合を対策しました。

【発生条件】

以下の条件をすべて満たす場合、発生することがあります。

(1) code=machinecodeを指定している。またはcodeオプションを指定していない。

(2) BRA命令から飛び先までの距離が4094バイトである。

3.4 PRレジスタ退避・回復命令の不当削除

以下Cソースをspeedオプションでコンパイル時、不当にPRレジスタの退避・回復命令を削除し、

実行時無限ループする場合がある不具合を解決しました。

<例>

int x;

extern void f1();

extern void f2();

void f() {

if (x == 2){

f1(); // then節が関数呼び出しで終わっている

}

f2(); // 関数の最後の処理が関数呼び出し

return;

}

Page 39: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 6 -

_f:

MOV.L L14,R6 ; _x

MOV.L @R6,R0

CMP/EQ #2,R0

BT L11

L12:

MOV.L L14+4,R2 ; _f2

JMP @R2 ; 関数の最後が関数呼び出しのため、JMP命令に

NOP ; 変換し、RTS を削除

L11:

MOV.L L14+8,R2 ; _f1

JSR @R2 ; ここに関数呼び出し命令があるにも関わらず

NOP ; PRレジスタの退避回復が行われていない

BRA L12

NOP

【発生条件】

以下の条件をすべて満たす場合、発生することがあります。

(1) speedオプションを指定している。

(2) 関数の最後の処理が関数呼び出しである。

(3) (2)の関数呼び出しの直前にif-then節があり、then節の最後が関数呼び出しである。

(4) (2)の関数呼び出しがインライン展開されない。

3.5 Tビットの不当参照

以下のケースにおいて、不当に条件分岐を行う場合がある不具合を解決しました。

(1) 以下Cプログラムをコンパイルした場合

<例>

#include <machine.h>

extern void f();

int a;

void func() {

int b;

b = (a == 0); // 比較結果を変数に格納(A)

f(); // 関数呼び出しまたは組み込み関数set_cr()

if (b) { // (A)の変数を0/1比較

a=1;

}

}

_func:

STS.L PR,@-R15

MOV.L L13,R6 ; _a

Page 40: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 7 -

MOV.L @R6,R2

TST R2,R2 ; 比較結果をTビットに格納

MOV.L L13+4,R2 ; _f

JSR @R2 ; 関数呼び出し先でTビットが

NOP ; 破壊される可能性あり

BF L12 ; Tビットを参照し分岐

MOV.L L13,R6 ; _a

MOV #1,R2

MOV.L R2,@R6

L12:

LDS.L @R15+,PR

RTS

NOP

(2) C++プログラムで、関数内のローカルブロック内で宣言されたデストラクタ呼び出しの

あるクラスを記述した場合

【発生条件】

以下の(1)~(3)または(4)~(5)の条件をすべて満たす場合、発生することがあります。

(1) optimize=1を指定する。

(2) Cプログラムで比較結果を変数に格納している。

(3) (2)の変数を関数呼び出しまたは組み込み関数set_cr()使用後に0/1比較している。

 または

(4) optimize=1を指定する。

(5) C++プログラムで関数内のローカルブロック内で宣言されたデストラクタ呼び出しのある

クラスを記述している。

3.6 定数値の不当共通化

以下Cソースをoptimize=1でコンパイル時、定数値を不当に共通化し、参照時の値が実際と

異なる場合がある不具合を解決しました。

<例>

#define a (*(volatile unsigned short *)0x400)

#define b (*(volatile unsigned short *)0x4000)

#define c (*(volatile unsigned short *)0x402)

int d;

void func() {

a = 0x8000; /* (A) */

b = 0x8000; /* (A') */

d = c + 0x8000; /* (B) */

}

_func:

Page 41: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 8 -

MOV.W L15,R6 ; H'8000 R6に0xFFFF8000を設定

MOV #4,R5

MOV #64,R2

SHLL8 R5

SHLL8 R2

MOV.W R6,@R5 ; (A) aに0x8000を設定

MOV.W R6,@R2 ; (A') bに0x8000を設定

MOV.W @(2,R5),R0

EXTU.W R0,R2

ADD R6,R2 ; R2にc+0xFFFF8000の結果を設定

MOV R2,R6

MOV.L L15+4,R2 ; _d

RTS

MOV.L R6,@R2 ; (B) dにc+0xFFFF8000の結果を格納しNG

【発生条件】

以下の条件をすべて満たす場合、発生します。

(1) optimize=1を指定する。

(2) 関数内で128~255もしくは32768~65535の範囲の同じ定数値を複数回使用している。

(3) (2)の定数値が無符号で、異なるサイズで使用される。

上記例では(A)(A')では2バイト、(B)では4バイト

3.7 リテラルプール出力位置不正

align16オプションを指定してコンパイルした場合、リテラルプールの参照が届かなくなる

場合がある不具合を解決しました。

(1) code=machinecodeを指定した場合

goptimizeオプションを指定時はリンク時内部エラー、指定しない場合はオブジェクト

不正になる場合がある。

(2) code=asmcodeを指定した場合

アセンブル時エラーになる場合がある。

<例>

:

MOV.L L154+2,R2 ; L158 リテラル(A)を参照(1)

MOV.L R2,@R15

MOV.L L154+6,R2 ; _printf リテラル(B)を参照(2)

JSR @R2

NOP

:

.ALIGN 16

L86:

ADD #1,R2

BRA L153 ; 無条件分岐を生成しリテラルを出力

MOV.L R2,@R4

Page 42: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 9 -

L154:

.RES.W 1

.DATA.L L158 ; (A) (1)からdispが届かない位置にリテラル出力

.DATA.L _printf ; (B) (2)からdispが届かない位置にリテラル出力

.ALIGN 16

L153:

:

【発生条件】

以下の条件をすべて満たす場合、発生することがあります。

(1) align16オプションを指定する。

(2) 無条件分岐命令を生成してリテラルプールを出力する。

3.8 遅延スロットへの不当命令移動

 optimize=1を指定してコンパイルした場合、不当に遅延スロットに命令を移動し、レジスタを

破壊する場合がある不具合を解決しました。

<移動前>

:

SHLL R2

MOV R2,R0

MOVA L88,R0

BRA L144

NOP

:

<移動後>

:

SHLL R2

; 遅延スロットに移動

MOVA L88,R0 ; R0に値を設定

BRA L144

MOV R2,R0 ; MOVAで設定したR0を破壊

:

【発生条件】

以下の条件を満たす場合、発生することがあります。

(1) 同一レジスタに値を設定するコードが連続する。

3.9 GBR相対論理演算生成時のoffset不正

 optimize=1を指定してコンパイルし、かつ1バイト構造体メンバの論理演算をGBR相対で

行うコードを生成した場合、そのoffset値が不正になる場合がある不具合を解決しました。

<例>

struct {

int a;

Page 43: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 10 -

unsigned char b;

} ST;

char c;

void f() {

ST.b |= 1;

c &= 1;

}

_f:

STC GBR,@-R15

MOV #0,R0 ; H'00000000

LDC R0,GBR

MOV.L L11+2,R0 ; H'00000008+_ST <- 実際は(ST+4)

OR.B #1,@(R0,GBR)

MOV.L L11+6,R0 ; _c

AND.B #1,@(R0,GBR)

RTS

LDC @R15+,GBR

【発生条件】

以下の条件をすべて満たす場合、発生することがあります。

(1) optimize=1を指定する。

(2) gbr=userを指定しかつ#pragma gbr_base/gbr_base1を使用している、またはgbr=autoを

指定しかつmapオプションを指定していない。

(3) サイズが1のメンバを含むグローバル構造体が存在する。

(4) サイズ1の構造体メンバは構造体先頭でない。

(5) (3)のメンバが関数内で論理演算で使用されている。

(6) (3)のメンバは論理演算以外では使用されていない。

(7) 関数内に論理演算のみで使用される外部変数が(3)以外に存在する。

3.10 SWAP命令直後の不当ゼロ拡張

optimize=1を指定してコンパイルした場合、組み込み関数swapb、swapw、end_cnvlの結果

代入先にポインタを指定すると、不当にゼロ拡張を行う場合がある不具合を解決しました。

<例>

#include <machine.h>

unsigned short *a,*b;

void func() {

*b=swapb(*a);

}

_func:

MOV.L L13+2,R2 ; _a

MOV.L L13+6,R5 ; _b

Page 44: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 11 -

MOV.L @R2,R6

MOV.W @R6,R2

SWAP.B R2,R6

MOV.L @R5,R2

EXTU.B R6,R6 ; SWAP結果を不正にゼロ拡張

RTS

MOV.W R6,@R2

【発生条件】

以下の条件をすべて満たす場合、発生することがあります。

(1) optimize=1を指定する。

(2) 組み込み関数swapb、swapw、end_cnvlを使用している。

(3) (2)の組み込み関数の結果代入先がポインタである。

3.11 ビットフィールドデータ出力不正

 無名ビットフィールドを含む構造体に初期値を設定した場合、その初期値が不正になる場合がある

不具合を解決しました。

<例>

struct st {

short a:4;

short b;

short :12; // 無名ビットフィールド

short c:4;

} ST={1,1,3};

_ST:

.DATA.W H'1000

.DATA.W H'0001

.DATAB.B 1,0 ; 正しくは

.DATA.W H'0300 ; .DATA.W H'0003

【発生条件】

 以下の条件をすべて満たす場合、発生することがあります。

(1) 構造体の中にビットフィールド、無名ビットフィールド、ビットフィールドでない

メンバが混在し、以下の順番で定義されている。

struct A{

:

ビットフィールド

:

ビットフィールドでないメンバ

無名ビットフィールド // (A)

ビットフィールド // (B)

:

Page 45: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 12 -

};

(2) (A)(B)のメンバの型サイズが2バイト以上である。

(3) (A)の無名ビットフィールドのサイズが8ビット以上である。

(4) (A)(B)のビットフィールドのサイズの合計が以下の通りである。

(a) (A)(B)の型サイズがともに2バイトの場合 :16ビット以下

(b) (A)(B)の型サイズがともに4バイトの場合 :32ビット以下

(5) 構造体の変数が定義時に初期値設定されている。

3.12 ループ展開不正

speedオプションまたはloopオプション指定時、ループ展開最適化でループ判定式を不当に置きかえ

る場合がある不具合を解決しました。

<例>

int a[100];

void main(int n) {

int i;

for (i=0; i<n; i++) {

a[i] = 0;

}

}

_main:

MOV R4,R7

ADD #-1,R4 ; R4が0x80000000の場合、アンダフローとなり

; R4は0x7FFFFFFFとなる

MOV R4,R6

CMP/PL R4 ; 比較結果が実際の結果と逆になる

MOV #0,R4

BF L12

ADD #-1,R6

:

【発生条件】

 以下の条件をすべて満たす場合、発生することがあります。

(1) speedオプションまたはloopオプションを指定している。

(2) 関数内でループ文を使用している。

(3) ループ上限値が以下の通りである。

(a) 制御変数がインクリメントされていくループの場合(i += step)

ループ上限値が0x80000000~0x80000000+step-1の範囲である。

(b) 制御変数がデクリメントされていくループの場合(i -= step)

ループ上限値が0x7FFFFFFF~0x7FFFFFFF-step+1の範囲である。

上限値が変数の場合、変数に(a)または(b)を満たす値が設定されている場合に動作不正になる。

3.13 構造体、配列引数の不当参照

Page 46: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 13 -

 関数の引数に構造体/共用体または配列を使用した場合、そのメンバや配列要素を参照する時に、

不正なアドレスを参照する場合がある不具合を対策しました。

<例>

typedef struct{

int A[10];

double B;

char F[20];

} ST;

extern ST f(ST a,ST b);

ST S;

extern int X;

void func(ST a,ST b) {

ST t;

if (a.B!=f(S,t).B){

X++;

}

if (a.B!=b.B){

X++;

}

}

:

L12:

MOV R15,R2

MOV.W L15+2,R0 ; H'014C

ADD R0,R2

MOV R15,R0

MOV.W L15+4,R0 ; H'0190 R0を不正に破壊

ADD R0,R0

MOV.L @R2,R4

MOV.L @(4,R2),R7

MOV R0,R2

MOV.L @R2,R6 ; b.Bでない場所をアクセス

:

【発生条件】

 以下の条件をすべて満たす場合、発生することがあります。

(1) 引数が構造体/共用体または配列である関数が存在する。

(2) 該当関数内で引数の構造体/共用体メンバまたは配列要素を参照している。

3.14 JMP命令の不当削除

 speedオプションを指定してコンパイルした場合、JMP命令を不当に削除する場合がある不具合を

対策しました。

Page 47: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 14 -

<例>

void f(){

int i,j=0;

for (i=0; i<10; i++)

if (j%2) j++;

sub();

}

void sub() {

:

}

_f:

:

L20:

ADD #-1,R5

TST R5,R5

BF L11

MOV.L L23,R2 ; _sub 以下3命令が削除される

JMP @R2 ; |

NOP ; V

L18:

MOV R6,R0

AND #1,R0

BRA L16

MOV R0,R2

L13:

MOV R6,R0

AND #1,R0

BRA L14

MOV R0,R2

_sub:

:

【発生条件】

 以下の条件をすべて満たす場合、発生することがあります。

(1) speedオプションを指定する。

(2) 該当関数の最後の処理が関数呼び出しである。

(3) (2)の関数呼び出しがインライン展開されない。

(4) (2)の関数呼び出し先が該当関数の直下にある。

(5) 該当関数内でループ文や条件文を使用している。

3.15 ループ判定式不正

 以下Cソースをoptimize=1でコンパイル時、ループ判定式を不当に置きかえる場合がある不具合を

Page 48: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 15 -

対策しました。

<例>

void f1() {

int i;

for (i=-1; i<INT_MAX; i++) {

a[i] = 0;

}

}

_f1:

MOV.L L13,R2 ; _a

MOV #-4,R6 ; H'FFFFFFFC

MOV R6,R5

MOV #0,R4 ; H'00000000

ADD #-4,R2

L11:

ADD #4,R6

MOV.L R4,@R2

CMP/GE R5,R6 ; H'FFFFFFFCと比較

ADD #4,R2

BF L11

RTS

NOP

【発生条件】

 以下の条件をすべて満たす場合、発生することがあります。

(1) optimize=1を指定している。

(2) 関数内でループ文を使用している。

(3) ループ上限値 - ループ下限値がオーバフローする。

例えば、for (i=-1; i < 0x7FFFFFFF; i++)

4. フォーマットコンバータ(Ver. 1.0C -> Ver. 1.0.04)

4.1 圧縮フォルダ内のファイルの入力

圧縮フォルダ内のファイルを入力しようとした場合、ファイルを認識できない(G3002エラー)

不具合を解決しました。

Page 49: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 16 -

5. 最適化リンケージエディタ(Ver. 7.1.04 -> Ver. 7.1.05)

5.1 -outputオプションでアドレス範囲指定時の内部エラー(7041)

outputオプションを指定した際、アドレス範囲で出力指定した場合に内部エラー(7041)

となる場合がある不具合を解決しました。

5.2 最適化抑止指定時の不当な最適化

下記条件を全て満たした際に、最適化抑止範囲が有効にならない不具合を解決しました。

(1) goptimizeオプション指定ありのファイルを入力

(2) optlnkで最適化を指定

(3) absolute_forbidオプションを指定

(4) 最適化抑止範囲を二つ以上記述(二つ目以降の指定が無効となる)

5.3 relocateファイル生成時のObject不正

下記条件を全て満たした際に不正なObjectコードが生成される不具合を解決しました。

(1) 入力にrelocateファイルを指定

(2) 出力にrelocateファイルを指定

(3) delete,もしくはrenameオプションを指定

5.4 map最適化使用時の不当なエラー(L2410)出力

map最適化指定時、オーバーレイを使用している場合に不当なエラーが出力される

不具合を解決しました。

5.5 レジスタ退避/回復コード最適化指定時のインターナルエラー(1703)

 レジスタ退避/回復コード最適化を指定時に、インターナルエラー(1703)となる場合がある

不具合を解決しました。

Page 50: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 1 -

付録1-5

Ver.7.1.00のアップデート内容

各ツールのバージョンは、下表の通りです。

は変更ツールを示しています。

表 1 ツールバージョン一覧

Windows®版 SPARC版/HP版

HEW 2.1        

シミュレータ 8.1.00 4.2.00

C/C++コンパイラ 7.1.00 7.1.00

標準ライブラリ構築ツール 2.0(01) 2.0(01)

アセンブラ 5.1 5.1

フォーマットコンバータ 1.0.04 1.0.04

最適化リンケージエディタ 7.1.06 7.1.06

スタック解析ツール 1.3.00 1.3.00

Page 51: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 2 -

1. Hitachi Embedded Workshop(Ver. 2.1 Windows®版)

1.1 プロジェクトジェネレータ生成データの修正

以下のCPUのI/O定義ファイル(iodefine.h)を修正しました。

SH7622 : st_scif0 定義

2 コンパイラ(Ver. 7.0.06 -> Ver. 7.1.00)

2.1 スタックアクセス不正

レジスタ渡しパラメタのアドレスを参照すると、スタック上のデータを不正に

上書きする場合がある不具合を解決しました。

<例>

extern void er();

extern char f2(char *a);

void f(char a) {

char c;

a++; // レジスタ渡しパラメタに代入

do {

c=f2(&a); // レジスタ渡しパラメタのアドレスを参照

if (c) er();

else return;

} while(c);

}

_f:

MOV.L R13,@-R15

MOV.L R14,@-R15

STS.L PR,@-R15

ADD #-4,R15

MOV R4,R0

ADD #1,R0

MOV.B R0,@(3,R15) ; ※

MOV.L R4,@R15 ; ※で設定したaの値を上書き

MOV.L L14+2,R13 ; _f2

:

【発生条件】

以下の条件をすべて満たす場合、発生することがあります。

(1) optimize=1を指定している。

(2) レジスタ渡しパラメタが存在する。

(3) 当該パラメタが関数内でアドレス参照される。

(4) 当該パラメタのアドレス参照より前に、当該パラメタへの代入がある。

(5) スケジューリング最適化により、レジスタパラメタのスタックへのコピー命令が

Page 52: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 3 -

当該パラメタへの代入命令より前に移動される。

2.2 #pragma global_register指定レジスタの代入削除不正

#pragma global_register指定したレジスタの代入を不正に削除する場合がある不具合を解決しまし

た。

【発生条件】

以下の条件をすべて満たす場合、発生することがあります。

(1) #pragma global_registerを指定している。

(2) optimize=1 を指定している。

(3) (1)で指定した変数が複合代入式などで1つの式で定義・使用される。

<例>

#pragma global_register (a=R14)

a += b; // もしくはa=a+b;

2.3 32bitビットフィールド比較不正

32bitビットフィールドを0と比較した場合、比較前に不正な0とのAND が生成され、判定結果が常に

真(または偽)となる場合がある不具合を解決しました。

<例>

struct ST {

unsigned int b: 32;

};

void f(struct ST *x) {

if (x->b) {

:

}

}

:

MOV.L @R4,R0

AND #0,R0 ; <- 0とANDをとる

TST R0,R0 ; 必ず真となる

BF L12 ; L12への分岐は起きない

:

【発生条件】

以下の条件をすべて満たす場合、発生することがあります。

(1) 構造体に32bitビットフィールドメンバが存在する。

(2) 当該メンバと0の比較(==もしくは!=)を行っている。

Page 53: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 4 -

2.4 trapa_svc使用時のスタック移動不正

pic=1を指定してコンパイルした場合、組み込み関数trapa_svcを使用している関数の

アドレスロード時に、不当にスタック移動命令を出力する場合がある不具合を解決しました。

<例>

#include <machine.h>

extern char *b(void (*yyy)(char));

void y(char c) {

trapa_svc(160, 10, c);

}

char *a(void) {

return b(y);

}

_a:

MOV.L L14,R4 ; _y-L12

MOVA L12,R0

ADD R0,R4

L12:

MOV.L @R15+,R0; <-不要なスタック移動命令

MOV.L L14+4,R2; _b-L13

MOVA L13,R0

ADD R0,R2

L13:

JMP @R2

MOV.L @R15+,R0; <-不要なスタック移動命令

【発生条件】

以下の条件をすべて満たす場合、発生することがあります。

(1) cpu=sh1以外を指定している。

(2) pic=1を指定している。

(3) 組み込み関数trapa_svcを使用している。

(4) trapa_svcを使用している関数のアドレスロード位置が、trapa_svcの呼び出し位置より後

に出現する。

2.5 R0-R7へのコピー命令の不当移動

最適化により、R0-R7へのコピー命令もしくは拡張命令が関数呼び出しを超えて不正に移動し、

CMP/EQ(TST)の結果が不正となる場合がある不具合を解決しました。

<例>

MOV.L @R4,R2

Page 54: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 5 -

MOV R5,R14

MOV #1,R5 ; H'00000001

ADD #24,R2

MOV.L @R2,R6

EXTU.W R14,R1 ; R1の定義がJSRを越えて移動

MOV.L @(8,R2),R7

JSR @R7 ; 呼び出し先でR1を破壊する場合あり

ADD R6,R4

MOV #4,R2 ; H'00000004

CMP/EQ R2,R1 ; 破壊されたR1の値を使って比較

EXTU.W R0,R0

BF L16

【発生条件】

以下の条件をすべて満たす場合、発生することがあります。

(1) optimize=1を指定している。

(2) 関数内に条件分岐と、関数呼び出しがある。

(3) 以下最適化を実施。

<最適化前>

MOV R0, Rn ; またはEXTU R0,Rn

MOV Rx, R0 ; またはEXTU Rx,R0

TST #imm, R0 ; またはCMP/EQ #imm,R0

MOV Rn, R0 ; または EXTU Rn,R0

<最適化後>

MOV Rx, Rm ; またはEXTU Rx,Rm

MOV #imm, Ry

TST Ry, Rm; またはCMP/EQ Ry,Rm

(4) (3)の最適化で、RmレジスタがR0-R7で当該関数で他に使用されていない。

(5) (3)の最適化で生成したMOV Rx,Rm(または EXTU)命令が他の最適化により、関数呼び出しを

超えて移動される。 

3. 標準ライブラリ構築ツール(Ver.2.0 -> Ver.2.0(1))

3.1 reallocメモリ確保サイズ

reallocをしていると、まだメモリが十分に余っているはずなのにmallocで確保できなくなる

場合がある問題を解決しました。

Page 55: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

- 6 -

4. 最適化リンケージエディタ(Ver. 7.1.05 -> Ver. 7.1.06)

4.1 最適化指定時の内部エラー

最適化指定時に、内部エラー(1703,1704)が発生する場合がある不具合を解決しました。

4.2 outputオプション指定時の内部エラー

outputオプションにおいて、出力範囲をアドレスで指定した場合に内部エラー

(7707)となる場合がある不具合を解決しました。

4.3 HEX,BIN,Stype出力の内部エラー

C++にてソースを記述した場合、出力形式がHEX,BIN,Stypeの場合に内部エラー

(3304)となる場合がある不具合を解決しました。

4.4 mapオプション指定時の内部エラー

mapオプションを指定した際に内部エラー(8093)となる場合がある不具を解決しました。

4.5 レジスタ退避/回復最適化指定時のObject不正

レジスタ退避/回復コード最適化を指定した際、下記条件のいずれかを満たす場合、

不正なObjectコードが出力される場合がある不具合を修正しました。

(1) ファイル内の最後の関数にリテラルが存在しない。

(2) レジスタ回復コード列の直後に分岐先が存在する。

(3) 最適化対象関数にSUBC命令が含まれており、そのSUBC命令自体がレジスタ番号の

  変換対象である。

5. スタック解析ツール(Ver. 1.2.00 -> Ver. 1.3.00)

5.1 データマージ機能追加

ユーティリティツールの一つ、スタック解析ツールにデータマージ機能を追加しました。

これにより、既に作成済のアセンブリプログラム等のスタックデータと最適化リンケージエディタ

が生成したスタック情報ファイルのデータを合成できるようになりました。

Page 56: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

P0700CAS7-NB020725

1/2

ご使用上の注意事項

同封しておりますクロスソフトウェアには、下記に示します注意事項がございます。

ご留意いただきますようお願い申し上げます。

1.CPU による制限事項

同梱しておりますクロスソフトウェアは、使用する CPU により一部機能に制限事項がござ

います。

下記をご参照の上、ご使用下さい。

 (1)ソフトウェアのバージョン

C コンパイラ Ver.7.1.00

アセンブラ     Ver.5.1

シミュレータ・デバッガ Ver.8.1.00(Windows®版)

Ver.4.2.00(UNIX 版)

(2)制限事項

表 1 CPU別制限事項

CPU コア DSP ライブラリ

サポート

CPU

シミュレーショ

キャッシュ

シミュレーション

SH-1 - ○ -

SH-2 - ○ ×

SH2-DSP ○ ○*1 ○*1

SH-2E - ○ ×

SH-3 - ○ ○

SH3-DSP ○ ○ ○

SH-4 - ○ ○

○:対応、×:非対応

*1:UNIX版は SH7065をサポートしていません。

付録 2-1

Page 57: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

P0700CAS7-NB020725

2/2

2.C++ ソースレベルデバッガについての注意

同梱のシミュレータデバッガにつきましては、 C++ 言語のソースレベルデバッグ可能です。

別売のエミュレータにつきましては、C++ 言語のソースレベルデバッグは、デバイス、エミ

ュレータの組み合わせによってサポートされていない場合があります。

弊社製エミュレータ(MY-ICE)の対応状況につきましては、弊社営業へお問い合わせくだ

さい。

(株)日立製作所製エミュレータにつきましては、2002 年 7 月現在の対応状況の可否を下

記に示します。

また、3rdParty 製エミュレータに関する C++ 言語サポートの可否は、各エミュレータメ

ーカにお問い合わせください。

表 2 (株)日立製作所製エミュレータの C++ ソースレベルデバッグ可否状況

ホスト E7000 E8000 E8000S E6000 E20 E10A

EWS ○ △*1 -*2 -*2 -*2 -*2

PC ×*3 ○ ○ ○ ○ ○

*1:SH7410 及び SH7612 のみ EWS 対応しております。

*2:同梱ソフトで EWS をサポートしておりません。

*3:PC 版 E7000 で C++ のサポート予定はありません。

                                                   以上

Page 58: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

1/1

付録 2-2

P0700CAS7-HN1

SH7055 使用上の注意事項

 SH7055 には FPU フェッチサイクル-DMAC/AUD バスサイクルの競合時に FPU が誤動作する

不具合があります。SH7055 をご使用の場合は、次の手順に従って開発してください。

1.C/C++プログラム

 オプション"-patch=7055"を指定してコンパイルしてください。

 HEW(日立統合開発環境)をご使用の場合は、コンパイラオプションダイアログボックスの

other->[Miscellaneous options:][Avoid illegal SH7055 instructions]をチェックしてください。

2.アセンブリプログラム

「3.不具合内容の詳細」に従ってプログラムを作成してください。

3.不具合内容の詳細

(「SH-2E SH7055F-ZTAT ハードウェアマニュアル 3.6 使用上の注意」より抜粋)

(1)FPUを使用(FPU命令もしくはFPUに関するCPU命令を使用)する場合

(a)BT、BF命令を使用せず、かわりにBT/S、BF/S命令を使用してください。

(b)TRAP命令、割り込み/例外処理の分岐先を4n番地に配置してください。その際、4n番地と

4n+2番地にFPU命令もしくはFPUに関するCPU命令を配置しないでください。

(2)FPUを使用(FPU命令もしくはFPUに関するCPU命令を使用)しない場合

 パワーオンリセット後、DMACもしくはAUDのバスサイクルが発生するまでにFPUをモ

ジュールスタンバイ状態にしてください。

 具体的には、モジュールスタンバイコントロールレジスタのビット1 に1を書いてください。

 この操作は、消費電流を低減させる上でも有効です。

 FPUがモジュールスタンバイ状態になると、以後のFPU命令およびFPUに関するCPU命令は

不当命令として例外処理されます。

以上

Page 59: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

P0700WSD8-RE020530

1/3

SuperHTM RISC engine シミュレータ・デバッガ 制限事項

この度お買い上げ戴いた SuperHTM RISC engine シミュレータ・デバッガには、以下に示す制限事項

がありますのでご注意ください。

1.ウィンドウおよびダイアログボックス

1.1 スクロール

インテリジェントマウスで上スクロールができない場合があります。

この場合は、ウィンドウ上のスクロールボタンを使用してください。

1.2 Memory ウィンドウ

1.2.1 MEMORY_EDIT コマンド

文字を一重引用符(‘)で囲っても ASCII 文字列をデータとして入力できません。

文字列をデータとして入力する場合は対応する数値を入力してください。

1.2.2 スクロール

ワードサイズでの表示時にスクロールにより表示が乱れる場合があります。

この場合は、リフレッシュを実行してください。

1.2.3 In-Place エディット機能

UNICODE フォーマットでの表示時に In-Place エディット機能が正常に動作しない場合があります。

1.3 I/O ウィンドウ

I/O レジスタ内容を編集するための Edit ダイアログボックスを開くと Current Value および New Value

に不正な値を表示する場合があります。その状態で OK を選択すると I/O レジスタ内容が不正となります。

Edit ダイアログボックスで不正な値を表示した場合は、Cancel を選択するか正しい値を入力後に OK を

選択してください。

1.4 Debug Settings...ダイアログボックス

1.4.1 Connect up to target on debug go

Option タブの”Connect up to target on debug go”チェックボックスの設定にかかわらず Debug Settings

完了時にターゲットを接続します。

1.4.2 Command batch file load timing

(1) Option タブの"Command batch file load timing"で"At target connection"を選択したコマンドファイ

ル中に INITIALIZE コマンドを指定した場合、Command Line ウィンドウで INITIALIZE コマンド

を実行しないでください。初期化する場合は、[Debug -> Initialize]を選択してください。

付録 2-3

Page 60: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

P0700WSD8-RE020530

2/3

(2) Option タブの"Command batch file load timing"で"At target connection"を選択したコマンドファイ

ルに以下のコマンドは指定しないでください。

(a) OPEN_WORKSPACE コマンド

(b) CHANGE_PROJECT コマンド

(c) CHANGE_CONFIGURATION コマンド

(3) Option タブの"Command batch file load timing"で"Before download of modules"または"After

download modules"を選択したコマンドファイルに以下のコマンドは指定しないでください。

(a) OPEN_WORKSPACE コマンド

(b) CHANGE_PROJECT コマンド

(c) CHANGE_CONFIGURATION コマンド

(d) GO コマンド

(e) GO_RESET コマンド

(f) GO_TILL コマンド

(g) STEP コマンド

(h) STEP_OUT コマンド

(i) STEP_OVER コマンド

1.4.3 Command Line Batch Processing

Option タブの Command Line Batch Processing ではプレースフォルダのうち"File directory"および

"Command directory"を使用できません。また、相対パス形式でコマンドファイルを指定すると正しくファ

イルにアクセスできない場合があります。

プレースフォルダを適用できないコマンドファイルは絶対パス形式で指定してください。

2.式

2.1 シンボル

式のシンボルに C++プログラムの関数名は指定できません。

2.2 演算子

下記単項演算子を含む式を評価できない場合があります。

!,~,+,-

Page 61: SuperH RISC engine C/C++ Compiler Simulator …csps.hitachi-solutions.co.jp/sh-c/files/shc_win_7100_doc.pdfCD-ROMの「MANUAL_ERRATA」ディレクトリにあるPDFファイルを参照ください。「SuperH

P0700WSD8-RE020530

3/3

3.その他

3.1 MAC.L 命令での演算結果不正

3.1.1 現象

 MAC.L 命令での飽和演算時,実機と演算結果が異なる場合があります。

3.1.2 発生条件

 MAC.L 命令での飽和演算時,MAC レジスタの初期値が H'FFFF800000000000 (最小値 )から

H'00007FFFFFFFFFFF (最大値)の範囲を越えている場合。

3.1.3 回避策

 MAC.L 命令での飽和演算時は,かならず MAC レジスタの初期値を H'FFFF800000000000(最小値)か

ら H'00007FFFFFFFFFFF(最大値)の範囲内として演算を開始してください。

4.マニュアルおよびヘルプ

4.1 HEW チュートリアル

Hitachi Embedded Workshop 2 チュートリアル(HS6400EWIW2SJH)の表示内容と、実際の実行結果

は、使用される HEW、コンパイラ、最適化リンケージエディタのバージョンにより、異なる場合があり

ます。注意してご使用いただくようお願いいたします。

特に、スタック領域、実行命令数、実行サイクル数、トレース情報、メモリ内容については、異なる場合

がありますので、ご注意ください。

4.2 ヘルプ

英語版 Windows でヘルプ使用時に、以下のようなメッセージボックスが表示される場合があります。

Download ボタンを押して、”Japanese Text Display Support”をダウンロードするか、Never download

any of these componebts.チェックボックスをチェックしてから Cancel ボタンを押してくださ

い。”Japanese Text Display Support” をダウンロードしなくても、ヘルプの表示には影響ありません。

以上