abc プロジェクト
14.8.3. CalNewRefValIdx メンバ関数説明

メンバ関数名 CalNewRefValIdx
定義ファイル名TuneRegion.cpp
定義行 3726
所属名 TTuneRegion
アクセス属性 public
宣言形式 int CalNewRefValIdx ( int RefValIdx , DWORD UseDoRefValBits , int AndRefValIdx , DWORD AndUseDoRefValBits , int * Count )
概要 新たに分割が発生する場合のNewRefValIdxを求める。
戻り値 新たに求めた RefValIdx
パラメタ説明 RefValIdx 現在の変数Idx
UseDoRefValBits DOのUnRoll対象となっているかのBits
AndRefValIdx 今回変化させるIdx
AndUseDoRefValBits 今回変化させ変数の対象Bits
Count 各変数のカウント数の配列
機能説明
備考

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

関数論理チャート

        |  +------------------------------------------------------------------------+ 
  3726  +--+ int TTuneRegion::CalNewRefValIdx(int RefValIdx,DWORD UseDoRefValBits,  | 
  3727     |             int AndRefValIdx,DWORD AndUseDoRefValBits,int *Count)      | 
  3728     | {                                                                      | 
           +--+---------------------------------------------------------------------+ 
  3729        +--- int i,Total,NewRefValIdx;
  3730        +--- int cc[32];
  3731        +--- DWORD Bits;
  3732        |    
  3733        +--- // RefValIdxでの各変数Idxの計算
  3734        +--- Bits = UseDoRefValBits;
              |  +------------------------------+ 
  3735        +--+ for(i = 31 ; i >= 0 ; i--){  | 
              |  +--+---------------------------+ 
              |     |  +------------------------------+ 
  3736        |     +--+ if((Bits & (1 << i)) != 0){  | 
              |     |  +--+---------------------------+ 
  3737        |     |     +--- cc[i] = RefValIdx % Count[i];
  3738        |     |     +--- RefValIdx /= Count[i];
              |     |   +-+---+ 
  3739        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
  3740        |   |  }  | 
              |   +-----+ 
  3741        +--- // AndRefValIdxでの各変数Idxの計算
  3742        +--- Bits = AndUseDoRefValBits;
              |  +------------------------------+ 
  3743        +--+ for(i = 31 ; i >= 0 ; i--){  | 
              |  +--+---------------------------+ 
              |     |  +------------------------------+ 
  3744        |     +--+ if((Bits & (1 << i)) != 0){  | 
              |     |  +--+---------------------------+ 
  3745        |     |     +--- cc[i] = AndRefValIdx % Count[i];
  3746        |     |     +--- AndRefValIdx /= Count[i];
              |     |   +-+---+ 
  3747        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
  3748        |   |  }  | 
              |   +-----+ 
  3749        +--- // NewRefValIdxの生成
  3750        +--- Bits = UseDoRefValBits | AndUseDoRefValBits;
  3751        +--- Total = 1;
  3752        +--- NewRefValIdx = 0;
              |  +------------------------------+ 
  3753        +--+ for(i = 31 ; i >= 0 ; i--){  | 
              |  +--+---------------------------+ 
              |     |  +------------------------------+ 
  3754        |     +--+ if((Bits & (1 << i)) != 0){  | 
              |     |  +--+---------------------------+ 
  3755        |     |     +--- NewRefValIdx += cc[i] * Total;
  3756        |     |     +--- Total *= Count[i];
              |     |   +-+---+ 
  3757        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
  3758        |   |  }  | 
              |   +-----+ 
              |  +----------------------+ 
  3759        +--+ return NewRefValIdx; | 
              |  +----------------------+ 
            +-+---+ 
  3760      |  }  | 
            +-----+