abc プロジェクト
14.8.20. OutputExecCode メンバ関数説明

メンバ関数名 OutputExecCode
定義ファイル名TuneRegion.cpp
定義行 2253
所属名 TTuneRegion
アクセス属性 public
宣言形式 void OutputExecCode ( FILE * fp )
概要 ABCLib_GGGFFF(...) のswich()付きの実行コードを生成する。
戻り値
パラメタ説明 fp 出力先ファイルポインタ
機能説明
備考

呼出し元関数一覧表
名称 定義ファイル名 定義行
1 TPass5::Exec pass5.cpp 131

呼出し先関数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::GetDefStr TuneRegion.cpp 2198
2 TTuneRegion::OutputSelectCaseExecCode TuneRegion.cpp 2374
3 TTuneRegion::OutputUnrollExecCode TuneRegion.cpp 2411
4 TMainF::printNoLog main.cpp 244
5 TTuneRegion::RestoreValBits TuneRegion.cpp 1048
6 TTuneRegion::SepLongStr TuneRegion.cpp 4274
7 c_str

8 fprintf

9 IntToStr

10 printf

参照外部変数一覧表
名称 定義ファイル名 定義行
1 MainF main.cpp 26

参照メンバ変数一覧表
名称 定義ファイル名 定義行
1 TTuneRegion::ArgValList TuneRegion.h 140
2 TTuneRegion::CaseCount TuneRegion.h 141
3 TTuneRegion::FuncName TuneRegion.h 126
4 TTuneRegion::TokenEndPos TuneRegion.h 123
5 TTuneRegion::TokenList TuneRegion.h 120
6 TTuneRegion::TokenStartPos TuneRegion.h 122
7 TTuneRegion::TuneKind TuneRegion.h 130

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

関数論理チャート

        |  +--------------------------------------------+ 
  2253  +--+ void TTuneRegion::OutputExecCode(FILE *fp) | 
  2254     | {                                          | 
           +--+-----------------------------------------+ 
  2255        +--- AnsiString s,s2;
  2256        +--- int i,j;
  2257        +--- TValData *ValData;
  2258        +--- TToken *Token;
  2259        +--- int DefPosS;
  2260        |    
  2261        +--- RestoreValBits(TokenStartPos,TokenEndPos);
  2262        +--- s = "      subroutine "+FuncName + "(";
              |  +--------------------------------------------+ 
  2263        +--+ for(i = 0 ; i < ArgValList->Count ; i++){  | 
              |  +--+-----------------------------------------+ 
              |     |  +------------------------------------+ 
  2264        |     +--+ if(ArgValList->Strings[i] == ""){  | 
              |     |  +--+---------------------------------+ 
              |     |     |  +------------+ 
  2265        |     |     +--+ continue;  | 
              |     |     |  +------------+ 
              |     |   +-+---+ 
  2266        |     |   |  }  | 
              |     |   +-----+ 
  2267        |     +--- ValData = (TValData *)ArgValList->Objects[i];
  2268        |     +--- s += ValData->Str + ", ";
              |   +-+---+ 
  2269        |   |  }  | 
              |   +-----+ 
  2270        +--- s += "iusw1)";
  2271        +--- fprintf(fp,"%s",SepLongStr(s).c_str());
  2272        +--- fprintf(fp,"\n");
  2273        +--- //
  2274        |    // 使用される引数の定義を出力する。          
  2275        |    // DefPosS,E,ArrayDefPosS,Eを使用する。      
  2276        |    // DefPosSが同じ変数は、1つにまとめること。 
  2277        |    //                                           
  2278        +--- DefPosS = -1;
  2279        +--- s = "";
              |  +--------------------------------------------+ 
  2280        +--+ for(i = 0 ; i < ArgValList->Count ; i++){  | 
              |  +--+-----------------------------------------+ 
              |     |  +------------------------------------+ 
  2281        |     +--+ if(ArgValList->Strings[i] == ""){  | 
              |     |  +--+---------------------------------+ 
              |     |     |  +------------+ 
  2282        |     |     +--+ continue;  | 
              |     |     |  +------------+ 
              |     |   +-+---+ 
  2283        |     |   |  }  | 
              |     |   +-----+ 
  2284        |     +--- ValData = (TValData *)ArgValList->Objects[i];
              |     |  +--------------------------------------------------------------------+ 
  2285        |     +--+ if((DefPosS == -1)||(ValData->DefPosS != DefPosS)){ // 違う定義行  | 
              |     |  +--+-----------------------------------------------------------------+ 
              |     |     |  +--------------+ 
  2286        |     |     +--+ if(s != ""){ | 
              |     |     |  +--+-----------+ 
  2287        |     |     |     +--- fprintf(fp,"%s\n",s.c_str());
  2288        |     |     |     +--- s = "";
              |     |     |   +-+---+ 
  2289        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2290        |     |     +--- s = GetDefStr(ValData);
              |     |     |  +--------------+ 
  2291        |     |     +--+ if(s == ""){ | 
              |     |     |  +--+-----------+ 
              |     |     |     |  +------------+ 
  2292        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  2293        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2294        |     |     +--- DefPosS = ValData->DefPosS;
              |     |   +-+---+ 
  2295        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------+ 
  2295        |     |   |  else{  | 
              |     |   +-+-------+ 
  2296        |     |     +--- s += ",";
              |     |   +-+---+ 
  2297        |     |   |  }  | 
              |     |   +-----+ 
  2298        |     +--- s += " " + ValData->Str;
              |     |  +--------------------------------------------------------------------+ 
  2299        |     +--+ for(j = ValData->ArrayDefPosS ; j < ValData->ArrayDefPosE ; j++){  | 
              |     |  +--+-----------------------------------------------------------------+ 
  2300        |     |     +--- Token = (TToken *)TokenList->Items[j];
  2301        |     |     +--- s += Token->OrgStr;
              |     |   +-+---+ 
  2302        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
  2303        |   |  }  | 
              |   +-----+ 
              |  +--------------+ 
  2304        +--+ if(s != ""){ | 
              |  +--+-----------+ 
  2305        |     +--- fprintf(fp,"%s\n",s.c_str());
  2306        |     +--- s = "";
              |   +-+---+ 
  2307        |   |  }  | 
              |   +-----+ 
  2308        +--- fprintf(fp,"      integer iusw1\n");
  2309        +--- fprintf(fp,"\n");
  2310        +--- fprintf(fp,"      select case(iusw1)\n");
  2311        |    
              |  +------------------------------------+ 
  2312        +--+ for(i = 1 ; i <= CaseCount ; i++){ | 
              |  +--+---------------------------------+ 
              |     |  +--------------------+ 
  2313        |     +--+ if((i % 10) == 0){ | 
              |     |  +--+-----------------+ 
  2314        |     |     +--- MainF->printNoLog("Output Code "+IntToStr(i)+" / "+IntToStr(CaseCount));
              |     |     |  +------------------------+ 
  2315        |     |     +--+ if(MainF->CloseReqF){  | 
              |     |     |  +--+---------------------+ 
              |     |     |     |  +----------+ 
  2316        |     |     |     +--+ return;  | 
              |     |     |     |  +----------+ 
              |     |     |   +-+---+ 
  2317        |     |     |   |  }  | 
              |     |     |   +-----+ 
              |     |   +-+---+ 
  2318        |     |   |  }  | 
              |     |   +-----+ 
  2319        |     +--- fprintf(fp,"        case(%d)\n",i);
  2320        |     +--- s = "";
              |     |  +--------------------------------------------+ 
  2321        |     +--+ for(j = 0 ; j < ArgValList->Count ; j++){  | 
              |     |  +--+-----------------------------------------+ 
              |     |     |  +------------------------------------+ 
  2322        |     |     +--+ if(ArgValList->Strings[j] == ""){  | 
              |     |     |  +--+---------------------------------+ 
              |     |     |     |  +------------+ 
  2323        |     |     |     +--+ continue;  | 
              |     |     |     |  +------------+ 
              |     |     |   +-+---+ 
  2324        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2325        |     |     +--- ValData = (TValData *)ArgValList->Objects[j];
              |     |     |  +--------------+ 
  2326        |     |     +--+ if(s != ""){ | 
              |     |     |  +--+-----------+ 
  2327        |     |     |     +--- s += ", ";
              |     |     |   +-+---+ 
  2328        |     |     |   |  }  | 
              |     |     |   +-----+ 
  2329        |     |     +--- s += ValData->Str;
              |     |   +-+---+ 
  2330        |     |   |  }  | 
              |     |   +-----+ 
              |     |  +----------------------------------------------------------------+ 
  2331        |     +--+ if(TuneKind == tkUnroll){ // UnRoll時は、サブルーチン集となる  | 
              |     |  +--+-------------------------------------------------------------+ 
  2332        |     |     +--- s2.printf("           call %s_%d(",FuncName,i);
  2333        |     |     +--- s = s2 + s + ")";
  2334        |     |     +--- s = SepLongStr(s);
  2335        |     |     +--- fprintf(fp,"%s\n",s.c_str());
              |     |   +-+---+ 
  2336        |     |   |  }  | 
              |     |   +-+---+ 
              |     |   +-+-------+ 
  2336        |     |   |  else{  | 
              |     |   +-+-------+ 
  2337        |     |     +--- // if(TuneKind == tkSelect){ // 当面 Unroll以外は、Selectで処理
  2338        |     |     |    // Select時は、ソースコード(NestしたRegionがあれば置換する)    
  2339        |     |     |    // さらに、先に別のネストがある可能性もあるので注意              
  2340        |     |     +--- OutputSelectCaseExecCode(fp,i);
              |     |   +-+---+ 
  2341        |     |   |  }  | 
              |     |   +-----+ 
              |   +-+---+ 
  2342        |   |  }  | 
              |   +-----+ 
  2343        +--- fprintf(fp,"      end select\n");
  2344        +--- fprintf(fp,"\n");
  2345        +--- fprintf(fp,"      return\n");
  2346        +--- fprintf(fp,"      end\n");
  2347        +--- fprintf(fp,"\n");
  2348        +--- fprintf(fp,"\n");
  2349        |    
              |  +----------------------------------------------------------------+ 
  2350        +--+ if(TuneKind == tkUnroll){ // UnRoll時は、サブルーチン集となる  | 
              |  +--+-------------------------------------------------------------+ 
  2351        |     +--- OutputUnrollExecCode(fp);
              |   +-+---+ 
  2352        |   |  }  | 
              |   +-----+ 
            +-+---+ 
  2353      |  }  | 
            +-----+