SuperHファミリ用C/C++コンパイラパッケージ
特 長
機器組込み向けプログラムの開発環境として、最適化C/C++コンパイラ、アセンブラ、最適化リンケージエディタなどのTool chainを提供しています。詳細は下記をご覧下さい。
*NEW は、SuperH RISC engine C/C++コンパイラパッケージVer.9からの新機能になります。
C/C++ コンパイラ
- SH-1からSH-4の全CPUに対するオブジェクト生成が可能
- ANSI仕様C/C++言語に準拠
- スーパーコンピュータ向け最新の最適化処理を適用
- リンク情報を利用した再コンパイル時最適化(外部変数アクセス最適化等)
- モジュール内外部変数アクセス最適化
- 最適化内容の詳細
- SuperH RISC engine用拡張言語機能
- 組み込み関数
- セクションアドレス演算子
- #pragma拡張子サポート
- コンパイルリスト表示改善
- ELF/DWARF2フォーマットサポート
- Embedded C++仕様のクラスライブラリ
- DSP命令により最適化されたDSPライブラリ
- 固定小数点数の内部表現に関する各種制限値を定義したヘッダファイルfixed.hを追加
- DSP-C言語をサポート
- long long、unsigned long long型をサポート
- switch文の数を2048個に拡張
- DSPライブラリの固定小数点型サポート
- 繰り返し文、選択文の組み合わせによるネストを4096レベルに拡張
- 共用体のビットフィールド指定をサポート
| オプション追加・変更 |
| オプション | 説明 |
| STRIct_ansi | 以下の処理をANSI準拠で行います。 (1)unsigned int と long 型演算 (2)浮動小数演算の結合則 |
| ABS20 ABS28 | 指定したセクションに属するラベルアドレスもしくは実行時ルーチンを配置するメモリ空間を指定する。 ( SH-2A,SH2A-FPU) |
| SMap | コンパイル対象ファイル内で定義された外部変数に対し、外部変数アクセス最適化を行う。 |
| ENAble_register | register記憶クラスを指定した変数を優先的にレジスタ割付する。 |
| CPu = { SH1| SH2| SH2E| SH2A| SH2AFPU| SH3| SH4| SH2DSP| SH3DSP| SH4A| SH4ALDSP| } | SH-1のオブジェクトを生成 SH-2のオブジェクトを生成 SH-2Eのオブジェクトを生成 SH-2Aのオブジェクトを生成 SH2A-FPUのオブジェクトを生成 SH-3のオブジェクトを生成 SH-4のオブジェクトを生成 SH2-DSPのオブジェクトを生成 SH3-DSPのオブジェクトを生成 SH-4Aのオブジェクトを生成 SH4AL-DSPのオブジェクトを生成 |
| TBR | 関数呼び出しをTBR相対で行う。 ( SH-2A,SH2A-FPU) |
| optimize=debug_only | ローカル変数の情報を常に参照できるようにする。 |
| simple_float_conv | 符号なし整数型と浮動小数点型の間の型変換に対して、変換対象の値の範囲チェックを省略したコードを生成。 |
| stuff_gbr | #pragma gbr_baseまたは#pragma gbr_base1で宣言した変数をサイズに応じたセクションに配置。 |
| align4 | 分岐先アドレスを4バイト整合。 |
| cpp_noinline | C++でinline指定子付きの関数及びメンバ関数のインライン展開を抑止。 |
| CONST_VOLATILE = {DATA|CONST} | const volatile属性変数を、初期化データ領域と定数領域のどちらに割り付けるかの選択が可能。 |
| alias | ANSI規格に基づいたポインタ指示先の型を考慮した最適化が可能。 NEW |
| nouse_div_inst | SH-2AコアのDIVSおよびDIVU命令の出力抑止が可能。 NEW |
| float_order | 浮動小数点演算式の演算順序変更の最適化が可能。 NEW |
| #pragma拡張子追加・変更 |
| #pragma | 説明 |
| address | 外部変数のアドレスを絶対アドレスで指定する。 |
| abs20 abs28 | #pragma abs20|28 で宣言した変数または関数の配置メモリ空間を指定する。 ( SH-2A,SH2A-FPU) |
| tbr | 関数呼び出しをTBR相対で行う。( SH-2A,SH2A-FPU) |
| section | 1ファイルあたりに指定できるセクション数を2045個に拡張。 |
| align4 | 分岐先アドレスを4バイト整合。 |
| 組み込み関数追加 |
| 組込み関数 | 説明 |
| int movt(void) | SRレジスタのTビットの値を参照。 |
| void clrt(void) | SRレジスタのTビットをクリア。 |
| void sett(void) | SRレジスタのTビットをセット。 |
| unsigned long xtrct(unsigned long data1,unsigned long data2) | data1とdata2を連結した64ビットの内容から中央の32ビットを切り出す。 |
| long addc(long data1, long data2) | 2つのデータとTビットを加算しキャリーをTビットに反映する。 |
| int ovf_addc(long data1, long data2) | 2つのデータとTビットを加算しキャリーを参照する。 |
| long addv(long data1, long data2) | 2つのデータを加算しキャリーをTビットに反映する。 |
| int ovf_addv(long data1, long data2) | 2つのデータを加算しキャリーを参照する。 |
| long subc(long data1, long data2) | data1からdata2とTビットを減算し ボローをTビットに反映する。 |
| long unf_subc(long data1, long data2) | data1からdata2とTビットを減算し ボローを参照する。 |
| long subv(long data1, long data2) | data1からdata2を減算しボローをTビットに反映する。 |
| long unf_subv(long data1, long data2) | data1からdata2を減算しボローを参照する。 |
| long negc(long data) | oからdataとTビットを減算しボローをTビットに反映する。 |
| unsigned long div1(unsigned long data1, unsigned long data2) | data1/data2 の1ステップ除算を行い結果をTビットに反映する。 |
| int div0s(long data1, long data2) | data1/data2 の符号付き除算の初期設定を行い、Tビットを参照する。 |
| void div0u(void) | 符号なし除算の初期設定を行う。 |
| unsigned long rotl(unsigned long data) | データを1ビット左方向にローテートする。オペランドの外へ出たビットをTビットに反映する。 |
| unsigned long rotr(unsigned long data) | データを1ビット右方向にローテートする。オペランドの外へ出たビットをTビットに反映する。 |
| unsigned long rotcl(unsigned long data) | データを1ビット左方向にTビットを含めてローテートする。 オペランドの外へ出たビットをTビットに反映する。 |
| unsigned long rotcr(unsigned long data) | データを1ビット右方向にTビットを含めてローテートする。 オペランドの外へ出たビットをTビットに反映する。 |
| unsigned long shlr(unsigned long data) | データを論理的に1ビット右シフトする。 オペランドの外へ出たビットをTビットに反映する。 |
| long shar(long data) | データを算術的に1ビット右シフトする。 オペランドの外へ出たビットをTビットに反映する。 |
| long clipsb(long data) | データが-128~127の範囲の場合はその値を、範囲外の場合は上限値もしくは下限値を設定する。 (SH-2A,SH2A-FPU) |
| long clipsw(long data) | データが-32768~32767の範囲の場合はその値を、範囲外の場合は上限値もしくは下限値を設定する。 (SH-2A,SH2A-FPU) |
| unsigned long clipub(unsigned long data) | データが0~255の範囲の場合はその値を範囲外の場合は上限値を設定する。 (SH-2A,SH2A-FPU) |
| unsigned long clipuw(unsigned long data) | データが0~65535の範囲の場合はその値を範囲外の場合は上限値を設定する。 (SH-2A,SH2A-FPU) |
| void set_tbr(void * data) | TBRにdataを設定する。 (SH-2A,SH2A-FPU) |
| void * get_tbr(void) | TBRの値を参照する。 (SH-2A,SH2A-FPU) |
| void bset(unsigned char *data1, unsigned char data2) | メモリ上の指定ビットに1を設定する。 (SH-2A,SH2A-FPU) |
| void bclr(unsigned char *data1, unsigned char data2) | メモリ上の指定ビットに0を設定する。 (SH-2A,SH2A-FPU) |
| void bcopy(unsigned char *data1, unsigned char data2, unsigned char *data3, unsigned char data4) | メモリ上のあるビットの値を別のビットにコピーする。 (SH-2A,SH2A-FPU) |
| void bnotcopy(unsigned char *data1, unsigned char data2, unsigned char *data3, unsigned char data4) | メモリ上のあるビットの値を別のビットに反転してコピーする。 (SH-2A,SH2A-FPU) |
アセンブラ
- DSPを含むSH-1からSH-4の全CPUに対する命令サポート
- 倍精度浮動小数点定数の記述可能
- ファイルインクルード機能
- 条件付アセンブリ機能
- マクロ機能
- ELF/DWARF2フォーマットサポート
- 浮動小数点の式処理(四則演算)機能
- .STACK制御命令にてスタック使用量を定義可能
- .DEFINE制御命令の制限値を無制限に拡張
| オプション追加・変更 |
| オプション | 説明 |
| CPu = { SH1| SH2| SH2E| SH2A| SH2AFPU| SH3| SH4| SH2DSP| SH3DSP| SH4A| SH4ALDSP| } | SH-1のオブジェクトを生成 SH-2のオブジェクトを生成 SH-2Eのオブジェクトを生成 SH-2Aのオブジェクトを生成 SH2A-FPUのオブジェクトを生成 SH-3のオブジェクトを生成 SH-4のオブジェクトを生成 SH2-DSPのオブジェクトを生成 SH3-DSPのオブジェクトを生成 SH-4Aのオブジェクトを生成 SH4AL-DSPのオブジェクトを生成 |
最適化リンケージエディタ
- デバッグ情報の圧縮機能
- モジュール間最適化機能
- 複数ロードモジュール選択
- リロケータブルELF形式
- アブソリュートELF形式
- Sタイプ形式
- HEX形式
- バイナリ形式
- ELF/DWARF2フォーマットサポート
- ライブラリファイルの作成、編集が可能
- リストファイル出力による解析
- シンボル参照回数の出力
- シンボル参照情報(クロスリファレンス情報)の出力
- セクションアドレス重複時のエラーレベル変更
- binaryオプション入力セクションへの境界調整数指定
| オプション追加・変更 |
| オプション | 説明 |
| MSg_unused | 参照されない定義シンボルを通知する。 |
| ps_check | 32bitの仮想アドレス空間をサポートするマイコンにおいて、物理空間上でのオブジェクトの重なりを検出する。 |
| byte_count | インテルHEX形式ファイルのデータレコードの最大バイト数を変更する。 |
| space=random | 空きエリアへ乱数を充填することができる。 充填可能ファイル形式
|
| memory=low | ライブラリファイル作成時にも使用可能に。 |
| RTs_file | 特定エミュレータ向けの情報ファイルを出力。 |
| CRc | リンク時に指定範囲のCRC(Cyclic Redundancy Check)演算を行い、計算結果を指示したアドレスのメモリに埋め込み。 |
| cpu=stride | リンクオプションcpuのアドレス範囲の情報を元に、セクションを自動的に分割して割り付けることが可能。 |
| contiguous_section | セクションを分割して割り付けるときに、分割したくないセクション(ROM-RAM転送するセクション)を指定することにより、配置可能な別メモリ領域に割り付けが可能。 |
| show=all | showオプションのサブオプションにallを追加。全てのリスト内容の出力を有効にします。 |
| binary | リロケータブルファイル出力時、バイナリファイルを入力ファイルに指定可能。 |
| padding | セクションのサイズをアライメントの倍数にすることが可能。 NEW |
標準ライブラリ構築ツール
- プロジェクトごとに標準ライブラリを生成することで、標準ライブラリのカスタマイズが可能
- リエントラントライブラリのサポート
- malloc確保サイズ単位の可変化(RAM容量の節約が可能)
- openファイル数可変化(RAM容量の節約が可能)
- 簡易I/Oのサポート(浮動小数点をサポートしない、サイズの小さい関数を生成)
フォーマットコンバータ
- 旧フォーマットからELFフォーマットへの変換
- ELFフォーマットから旧フォーマットへの変換
Japan 日本語

![マイコン内蔵周辺I/Oドライバ本体と設定関数が、簡単なGUI操作で自動生成できます。[Peripheral Driver Generator]](/media/products/tools/pdg_logo_enter.jpg)


