本文へジャンプ

Hitachi

株式会社 日立超LSIシステムズ

制限事項の対策

制限事項の対策

制限事項の対策

制限事項の対策

仕様変更/改善

  1. volatile変数へのアクセス
    volatile変数アクセスに関する制約を改善しました。
    (a) 連続したvolatile変数アクセス
     void main(void)
      {
          *((volatile unsigned char*)0xfffff000);      /* (1) */
          *((volatile unsigned short*)0xfffff004);     /* (2) */
          *((volatile unsigned short*)0xfffff004) = 1; /* (3) */
          /* (1)、(2)、(3)の順序で参照することを保証  */
      }
     
     
    (b) volatileポインタへのキャストを介した構造体メンバ参照
      struct st_tmu2 {
          unsigned int TCOR;
          unsigned int TCNT;
      };
      #define TMU2 (*(volatile struct st_tmu2 *)0xFFD80020)
      void time_wait (unsigned long time)
      {
          volatile unsigned long tcnt;
          unsigned long tcnt_copy, time_cnt;
     
          time_cnt = time;
          tcnt_copy = tcnt = TMU2.TCNT;
          while ((tcnt_copy - tcnt) < time_cnt){
              tcnt = TMU2.TCNT;
              /* ループの中で毎回代入を行うことを保証 */
          }
      }

  2. __sectop,__secend指定時セクション属性の変更
    __sectop、__secend指定時セクション名の頭文字が、'P'の時は属性をCODEとするように変更し、リンク時にL1323が出力されないようにしました。

制限事項の対策

  1. コンパイラ Ver.7.0.06制限事項の対策
  2. reallocメモリ確保サイズ(標準ライブラリ構築ツール)
    reallocをしていると、まだメモリが十分に余っているはずなのにmallocで確保できなくなる場合がある問題を解決しました。

スタック解析ツールにデータマージ機能追加

ユーティリティツールの一つ、スタック解析ツールにデータマージ機能を追加しました。これにより、既に作成済のアセンブリプログラム等のスタックデータと最適化リンケージエディタが生成したスタック情報ファイルのデータを合成できるようになりました。

オプションの追加

追加オプション一覧
オプション 機能
global_volatile={0|1} 外部変数のvolatile化
opt_range={all|noloop|noblock} 外部変数最適化範囲指定
del_vacant_loop={0|1} 空ループ削除
max_unroll=<数値> ループ最大展開数の指定
infinite_loop={0|1} 無限ループ前の式削除
global_alloc={0|1} 外部変数のレジスタ割り付け
struct_alloc={0|1} 構造体/共用体メンバのレジスタ割り付け
const_var_propagate={0|1} const定数伝播
const_load={inline|literal} 定数ロードの命令展開
schedule={0|1} 命令並べ替え

制限事項の対策

制限事項の対策

  1. コンパイラ Ver.7.0.03制限事項の対策
  2. HIMプロジェクトの変換不正
    Cコンパイラフェーズを含まないHIMプロジェクトをHitachi Embedded Workshop2.0用に変換した時、CコンパイラのCPUタブ上のデフォルトオプションを正しく設定できない問題を対策しました。
  3. Denormalizeアセンブラオプションのビルド時設定不正
    ワークスペースが、アセンブラオプションDenormalize"=ON"と"=OFF"の両プロジェクトを持つ場合、Denormalize"=ON"のプロジェクトをビルド時、Denormalize"=ON"を設定しない問題を対策しました。
  4. Runtime Libraryのスタックサイズ表示不正
    スタック解析ツールでRuntime Libraryのスタックサイズを正しく表示できない問題を対策しました。

制限事項の対策

  1. コンパイラ Ver.7.0B制限事項の対策
  2. Defineオプション削除不正
    Windows版 CコンパイラのDefineオプションで、"Value"未設定のマクロ名を設定すると、それが削除不能となる問題を対策しました。
  3. アセンブリソース出力時のオプション引継ぎ不正
    アセンブリソース出力を指定時、出力したアセンブリソースに対するオプション設定が無効となる問題を対策しました。

オプションの追加、改善

キャプションを入れてください。
オプション 機能
追加 map=<ファイル名> 外部変数アクセス最適化を行う
gbr={auto|user} GBR相対アクセス命令、論理演算をコンパイラが自動生成する
shift={inline|runtime} シフト演算をインライン展開/実行時ルーチン呼び出しで行う
blockcopy={inline|runtime} 転送コードをインライン展開/実行時ルーチン呼び出しで行う
latin1 latin1コードをサポート
改善 division=cpu={inline|runtime} 除算をインライン展開/実行時ルーチン呼び出しで行う
inline=<数値> コードが<数値>%増加するまでインライン展開を行う
show=tab={4|8} タブのカラム数を指定
nomessage[=<番号>[,...]] informationレベルのメッセージ出力の制御
廃止 nestinline コンパイラが自動的に判断してインライン展開を行う

#pragma拡張子の追加・改善

キャプションを入れてください。
#pragma拡張子 機能
追加 #pragma entry エントリ関数の指定
#pragma stacksize スタックサイズの指定
改善 #pragma interrupt (sp=symbol+定数)をサポート
#pragma gbr_base,
#pragma gbr_base1
gbr=auto指定時は無効となる

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

セクションの先頭アドレス、最終アドレスを参照する演算子(_ _sectop、_ _secend)をサポートしました。

組込み関数の追加

キャプションを入れてください。
機能 組込み関数
追加 64bit乗算 dmuls_h, dmuls_l, dmulu_h, dmulu_l
SWAP命令、エンディアン変換 swapb, swapw, end_cnvl
LDTLB/NOP命令 ldtlb, nop

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

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

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

変数_sbrk_sizeでmalloc確保サイズを、変数_nfilesで入出力ファイル数を指定できるようになりました。

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

  • リエントラントライブラリサポート
    reentオプションを指定すると、リエントラントライブラリを生成します。
  • 簡易I/Oサポート
    nofloatオプションを指定すると、浮動小数点変換をサポートしない、サイズの小さいI/Oルーチンを生成します。