abc プロジェクト
14.8.27. OutputUnroll_Line メンバ関数説明

メンバ関数名 OutputUnroll_Line
定義ファイル名TuneRegion.cpp
定義行 2718
所属名 TTuneRegion
アクセス属性 public
宣言形式 int OutputUnroll_Line ( FILE * fp , int TokPos , DWORD UseDoRefValBits , int RefValIdx )
概要 多重化したコードを1行出力する。
UseDoRefValBitsとRefValIdxによるDo参照変数部分の置換を行った行を出力する。
RefValIdxは、Countに対しての番号となる。(呼び出し側から指定される)
ここから、別の解析を呼ぶことはない。
最後のトークン(通常はtid_LineEnd)の位置を返す。
戻り値
パラメタ説明 fp 出力先ファイルポインタ
TokPos トークン位置
UseDoRefValBits 使用中DO参照変数Bits
RefValIdx 参照変数インデックス
機能説明
備考

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

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::ChangeFromOrgStr TuneRegion.cpp 3781
2 TTuneRegion::GetBitIdx TuneRegion.cpp 3660
3 TTuneRegion::GetDoValAddValue TuneRegion.cpp 3828
4 TTuneRegion::GetNewValName TuneRegion.cpp 3563
5 TTuneRegion::GetNewValName TuneRegion.cpp 3617
6 TTuneRegion::GetValAddValue TuneRegion.cpp 3880
7 TTuneRegion::SepLongStr TuneRegion.cpp 4274
8 c_str

9 fprintf

10 IntToStr

11 Pos

参照メンバ変数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::ArgValList TuneRegion.h 140
2 TTuneRegion::DoValIdx TuneRegion.h 103
3 TTuneRegion::DoValName TuneRegion.h 102
4 TTuneRegion::OffsetStr TuneRegion.h 146
5 TTuneRegion::TokenEndPos TuneRegion.h 123
6 TTuneRegion::TokenList TuneRegion.h 120
7 TTuneRegion::UnrollCount TuneRegion.h 96
8 TTuneRegion::UnRollDoRefValBits TuneRegion.h 94

参照先一覧表
名称 種別 定義ファイル名 定義行
1 TToken クラス pass1.h 216
2 TValData クラス pass2.h 42

関数論理チャート

        |  +----------------------------------------------------------------------------------------------+ 
  2718  +--+ int TTuneRegion::OutputUnroll_Line(FILE *fp,int TokPos,DWORD UseDoRefValBits,int RefValIdx)  | 
  2719     | {                                                                                            | 
           +--+-------------------------------------------------------------------------------------------+ 
  2720        +--- AnsiString s;
  2721        +--- int Idx;
  2722        +--- int AddValue;   // 変数への加算数
  2723        +--- TValData *ValData;
  2724        +--- TToken *Token,*TokenB,*TokenF;
  2725        +--- int j;
  2726        +--- AnsiString OprCheckStr = "(),";
  2727        +--- AnsiString NewValName;
  2728        |    
  2729        +--- s = "";
              |  +----------------------------------------------------------------+ 
  2730        +--+ if(UseDoRefValBits == 0){ // UnRollなしの場合は、そのまま出力  | 
              |  +--+-------------------------------------------------------------+ 
              |     |  +------------------------------------------+ 
  2731        |     +--+ for( ; TokPos < TokenEndPos ; TokPos++){ | 
              |     |  +--+---------------------------------------+ 
  2732        |     |     +--- Token = (TToken *)TokenList->Items[TokPos];
  2733        |     |     +--- s += Token->OrgStr;
              |     |     |  +----------------------------------+ 
  2734        |     |     +--+ if(Token->TokId == tid_LineEnd){ | 
              |     |     |  +--+-------------------------------+ 
              |     |     |     |  +--------+ 
  2735        |     |     |     +--+ break; | 
              |     |     |     |  +--------+ 
              |     |     |   +-+---+ 
  2736        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  2737        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +--------------------------------+ 
  2738        |     +--+ if((s != "")&&(s[1] == ' ')){  | 
              |     |  +--+-----------------------------+ 
  2739        |     |     +--- s = OffsetStr + s;
              |     |   +-+---+ 
  2740        |     |   |  }  | 
              |     |   +-----+ 
  2741        |     +--- s = SepLongStr(s);
  2742        |     +--- fprintf(fp,"%s",s.c_str());
              |     |  +----------------+ 
  2743        |     +--+ return TokPos; | 
              |     |  +----------------+ 
              |   +-+---+ 
  2744        |   |  }  | 
              |   +-----+ 
  2745        +--- //
  2746        |    // DO依存変数または、Do変数を含んだ式!  
  2747        |    // 変数部分の置換を行う                  
  2748        |    //                                       
              |  +----------------------------------------------------------------+ 
  2749        +--+ for(j = TokPos ; j < TokenEndPos ; j++){ // 行の先頭から、最後 | 
              |  +--+-------------------------------------------------------------+ 
  2750        |     +--- Token = (TToken *)TokenList->Items[j];
              |     |  +----------------------------------+ 
  2751        |     +--+ if(Token->TokId == tid_LineEnd){ | 
              |     |  +--+-------------------------------+ 
  2752        |     |     +--- TokPos = j;
              |     |     |  +--------+ 
  2753        |     |     +--+ break; | 
              |     |     |  +--------+ 
              |     |   +-+---+ 
  2754        |     |   |  }  | 
              |     |   +-----+ 
  2755        |     +--- ValData = (TValData *)Token->ValData;
              |     |  +----------------------+ 
  2756        |     +--+ if(ValData != NULL){ | 
              |     |  +--+-------------------+ 
              |     |     |  +------------------------------+ 
  2757        |     |     +--+ if(ValData->DoValBits != 0){ | 
              |     |     |  +--+---------------------------+ 
  2758        |     |     |     +--- //
  2759        |     |     |     |    // DO変数の置き換え                                  
  2760        |     |     |     |    // 前後が オペレータでなければ、()を付けない。       
  2761        |     |     |     |    // 加算する値は、UnrollCount[] と kk によって決まる  
  2762        |     |     |     |    //                                                   
  2763        |     |     |     +--- Idx = GetBitIdx(ValData->DoValBits);
  2764        |     |     |     +--- TokenB = (TToken *)TokenList->Items[j-1];
  2765        |     |     |     +--- TokenF = (TToken *)TokenList->Items[j+1];
  2766        |     |     |     |    
  2767        |     |     |     +--- //      fprintf(fp,"AddValue %s[RefValIdx=%d:DoValBits %04X] DoValIdx = %d UnRollBits = %04X \n",ValData->Str.c_str(),
  2768        |     |     |     |    //          RefValIdx,ValData->DoValBits,DoValIdx,UnRollDoRefValBits);                                                 
  2769        |     |     |     |                                                                                                                           
  2770        |     |     |     +--- AddValue = GetDoValAddValue(RefValIdx,
  2771        |     |     |     |                    ValData->DoValBits & UnRollDoRefValBits, 
  2772        |     |     |     |                    DoValIdx,UnrollCount);                   
              |     |     |     |  +--------------------+ 
  2773        |     |     |     +--+ if(AddValue == 0){ | 
              |     |     |     |  +--+-----------------+ 
  2774        |     |     |     |     +--- s += ChangeFromOrgStr(Token->OrgStr,"");
  2775        |     |     |     |     +--- s += DoValName[Idx];
              |     |     |     |   +-+---+ 
  2776        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+-----------------------------------------------+ 
  2776        |     |     |     |   |  else if((OprCheckStr.Pos(TokenB->Str) != 0)&&  | 
  2777        |     |     |     |   |         (OprCheckStr.Pos(TokenF->Str) != 0)){   | 
              |     |     |     |   +-+-----------------------------------------------+ 
  2778        |     |     |     |     +--- s += ChangeFromOrgStr(Token->OrgStr,"");
  2779        |     |     |     |     +--- s += DoValName[Idx] + "+" + IntToStr(AddValue);
              |     |     |     |   +-+---+ 
  2780        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+-------+ 
  2780        |     |     |     |   |  else{  | 
              |     |     |     |   +-+-------+ 
  2781        |     |     |     |     +--- s += ChangeFromOrgStr(Token->OrgStr,"");
  2782        |     |     |     |     +--- s += "("+DoValName[Idx] + "+"+ IntToStr(AddValue)+")";
              |     |     |     |   +-+---+ 
  2783        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
              |     |     |   +-+---+ 
  2784        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------------------------------------------------------------+ 
  2784        |     |     |   |  else if(((ValData->RefDoValBits & UnRollDoRefValBits) != 0)  | 
  2785        |     |     |   |             &&(ValData->ArrayLevel == 0)){                    | 
              |     |     |   +-+-------------------------------------------------------------+ 
  2786        |     |     |     +--- //
  2787        |     |     |     |    // Do依存変数の置き換え                                
  2788        |     |     |     |    // ・配列は、対象外とする。(Doの変数が含まれると想定)  
  2789        |     |     |     |    // ・Do依存変数のAddValueを求める(Idx)                
  2790        |     |     |     |    //                                                     
  2791        |     |     |     +--- AddValue = GetValAddValue(RefValIdx,
  2792        |     |     |     |                    ValData->RefDoValBits & UnRollDoRefValBits,  
  2793        |     |     |     |                    DoValIdx,UnrollCount);                       
              |     |     |     |  +--------------------+ 
  2794        |     |     |     +--+ if(AddValue == 0){ | 
              |     |     |     |  +--+-----------------+ 
  2795        |     |     |     |     +--- NewValName = ValData->Str;
              |     |     |     |   +-+---+ 
  2796        |     |     |     |   |  }  | 
              |     |     |     |   +-+---+ 
              |     |     |     |   +-+-------+ 
  2796        |     |     |     |   |  else{  | 
              |     |     |     |   +-+-------+ 
  2797        |     |     |     |     +--- NewValName = GetNewValName(ValData->Str,AddValue+1,ArgValList);
              |     |     |     |   +-+---+ 
  2798        |     |     |     |   |  }  | 
              |     |     |     |   +-----+ 
  2799        |     |     |     +--- s += ChangeFromOrgStr(Token->OrgStr,NewValName);
              |     |     |   +-+---+ 
  2800        |     |     |   |  }  | 
              |     |     |   +-+---+ 
              |     |     |   +-+-------+ 
  2800        |     |     |   |  else{  | 
              |     |     |   +-+-------+ 
  2801        |     |     |     +--- s += Token->OrgStr;
              |     |     |   +-+---+ 
  2802        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  2803        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------+ 
  2803        |     |   |  else{  | 
              |     |   +-+-------+ 
  2804        |     |     +--- s += Token->OrgStr;
              |     |   +-+---+ 
  2805        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
  2806        |   |  }  | 
              |   +-----+ 
              |  +--------------------------------+ 
  2807        +--+ if((s != "")&&(s[1] == ' ')){  | 
              |  +--+-----------------------------+ 
  2808        |     +--- s = OffsetStr + s;
              |   +-+---+ 
  2809        |   |  }  | 
              |   +-----+ 
  2810        +--- s = SepLongStr(s);
  2811        +--- fprintf(fp,"%s\n",s.c_str());
              |  +----------------+ 
  2812        +--+ return TokPos; | 
              |  +----------------+ 
            +-+---+ 
  2813      |  }  | 
            +-----+