abc プロジェクト
14.8.14. GetValAddValue メンバ関数説明

メンバ関数名 GetValAddValue
定義ファイル名TuneRegion.cpp
定義行 3880
所属名 TTuneRegion
アクセス属性 private
宣言形式 int GetValAddValue ( int RefValIdx , DWORD UseDoValBits , int DoValIdx , int * Count )
概要 通常変数に、Unroll中の行で加算する値(Idx)を計算して返す。
どのDo変数に依存しているかによって決定される。

・有効なDoが何かは、DoValIdxとUseDoValBitsで決定されている。
UseDoValBitsは、kkの繰り返し回数(複数行数)の決定に使用される
・変数がどのDo変数に対して束縛(複数化)されているかは、UseValBits。
・もし、束縛を受けていない変数のDoが有効中の場合は、
その部分の増加はSkip(繰り返し参照)対象となる

複数行数の計算に使用されながら、束縛には、有効でない変数Bit部分の変化が
マスクされる形になるが、
Bitが詰まったデータなので、計算する必要あり。
各bitでのどのIdxを示すかを求めてから、該当UseValBitsでのIdxを求める。
戻り値
パラメタ説明 RefValIdx 参照変数インデックス
UseDoValBits 使用DO変数Bits
DoValIdx DO変数インデックス
Count 各変数のカウント配列
機能説明
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::OutputUnroll_DoBlock TuneRegion.cpp 2845
2 TTuneRegion::OutputUnroll_Line TuneRegion.cpp 2718

関数論理チャート

        |  +--------------------------------------------------------------------------------------------+ 
  3880  +--+ int TTuneRegion::GetValAddValue(int RefValIdx,DWORD UseDoValBits,int DoValIdx,int *Count)  | 
  3881     | {                                                                                          | 
           +--+-----------------------------------------------------------------------------------------+ 
  3882        +--- int AddValue = 0;
  3883        +--- int i,Total;
  3884        +--- int IdxTbl[32];
  3885        |    
  3886        +--- //
  3887        |    // kk が 各Bitに対して、どのIdxを持つかを計算する。 
  3888        |    //                                                         
  3889        +--- Total = RefValIdx;
              |  +------------------------------------+ 
  3890        +--+ for(i = DoValIdx ; i >= 0 ; i--){  | 
              |  +--+---------------------------------+ 
              |     |  +--------------------------------------+ 
  3891        |     +--+ if((UseDoValBits & (1 << i)) != 0){  | 
              |     |  +--+-----------------------------------+ 
  3892        |     |     +--- IdxTbl[i] = Total % Count[i];
  3893        |     |     +--- Total /= Count[i];
              |     |   +-+---+ 
  3894        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
  3895        |   |  }  | 
              |   +-----+ 
  3896        +--- //
  3897        |    // 有効BitのIdxだけを集めた Idx(from kk) を再構築  
  3898        |    //                                                 
              |  +----------------------------------+ 
  3899        +--+ for(i = 0 ; i < DoValIdx ; i++){ | 
              |  +--+-------------------------------+ 
              |     |  +--------------------------------------+ 
  3900        |     +--+ if((UseDoValBits & (1 << i)) != 0){  | 
              |     |  +--+-----------------------------------+ 
  3901        |     |     +--- AddValue *= Count[i];
  3902        |     |     +--- AddValue += IdxTbl[i];
              |     |   +-+---+ 
  3903        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
  3904        |   |  }  | 
              |   +-----+ 
              |  +------------------+ 
  3905        +--+ return AddValue; | 
              |  +------------------+ 
            +-+---+ 
  3906      |  }  | 
            +-----+