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 | } | +-----+