亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? compile.c

?? nVidia開發的圖形語言 Cg
?? C
?? 第 1 頁 / 共 5 頁
字號:
} // DeconstructMatricesExpr

/*
 * DeconstructMatricesStmt()
 *
 */

stmt *DeconstructMatricesStmt(stmt *fStmt, void *arg1, int arg2)
{
    MData *mdata;

    mdata = (MData *) arg1;
    mdata->statements.first = mdata->statements.last = NULL;
    PostApplyToExpressionsLocal(DeconstructMatricesExpr, fStmt, arg1, arg2);
    if (mdata->statements.first) {
        mdata->statements.last->commonst.next = fStmt;
        fStmt = mdata->statements.first;
    }
    return fStmt;
} // DeconstructMatricesStmt

/*
 * DeconstructMatrices()
 *
 */

stmt *DeconstructMatrices(Scope *fscope, stmt *fStmt)
{
    MData mdata;

    InternalError(Cg->pLastSourceLoc, ERROR___NO_MATRIX_DECONSTRUCTION);
    mdata.scope = fscope;
    mdata.numtemps = 0;
    fStmt = PreApplyToStatements(DeconstructMatricesStmt, fStmt, &mdata, 0);
    return fStmt;
} // DeconstructMatrices

///////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////// Flatten Struct Assignments ////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////

/*
 * AssignStructMembers() - Assign individual memebers of one struct to another.
 *
 */

static void AssignStructMembers(StmtList *fStatements, int fop, Type *fType, expr *varExpr,
                                expr *valExpr, expr *condExpr, int VectorCond)
{
    expr *lExpr, *mExpr, *rExpr;
    int base, len, len2;
    Symbol *lSymb;
    Type *lType;
    stmt *lStmt;

    lSymb = fType->str.members->symbols;
    while (lSymb) {
        len = len2 = 0;
        lType = lSymb->type;
        if (IsScalar(lType) || IsVector(lType, &len) || IsMatrix(lType, &len, &len2)) {
            base = GetBase(lType);
            lExpr = DupExpr(varExpr);
            mExpr = GenMember(lSymb);
            lExpr = GenMemberSelector(lExpr, mExpr);
            rExpr = DupExpr(valExpr);
            mExpr = GenMember(lSymb);
            rExpr = GenMemberSelector(rExpr, mExpr);
            if (condExpr != NULL) {
                if (len2 > 0) {
                    lExpr = GenCondGenAssign(lExpr, rExpr, condExpr);
                } else if (len > 0) {
                    if (VectorCond) {
                        lExpr = GenCondSVAssign(lExpr, rExpr, condExpr, base, len);
                    } else {
                        lExpr = GenCondVAssign(lExpr, rExpr, condExpr, base, len);
                    }
                } else {
                    lExpr = GenCondSAssign(lExpr, rExpr, condExpr, base);
                }
                lStmt = (stmt *) NewExprStmt(Cg->pLastSourceLoc, lExpr);
            } else {
                if (len2 > 0) {
                    lExpr = GenMAssign(lExpr, rExpr, base, len, len2);
                } else if (len > 0) {
                    lExpr = GenVAssign(lExpr, rExpr, base, len);
                } else {
                    lExpr = GenSAssign(lExpr, rExpr, base);
                }
                lStmt = (stmt *) NewExprStmt(Cg->pLastSourceLoc, lExpr);
            }
            AppendStatements(fStatements, lStmt);
        } else {
            switch (GetCategory(lType)) {
            case TYPE_CATEGORY_STRUCT:
                lExpr = DupExpr(varExpr);
                mExpr = GenMember(lSymb);
                lExpr = GenMemberSelector(lExpr, mExpr);
                rExpr = DupExpr(valExpr);
                mExpr = GenMember(lSymb);
                rExpr = GenMemberSelector(rExpr, mExpr);
                AssignStructMembers(fStatements, fop, lType, lExpr, rExpr, condExpr, VectorCond);
                break;
            case TYPE_CATEGORY_ARRAY:
                // XYZZY Not Done Yet XYZZY //
                break;
            default:
                break;
            }
        }
        lSymb = lSymb->next;
    }
} // AssignStructMembers

/*
 * FlattenStructAssignment() - Convert struct assignments into multiple assignments of members.
 *
 */

stmt *FlattenStructAssignment(stmt *fStmt, void *arg1, int flevel)
{
    stmt *rStmt;
    expr *eExpr, *lExpr, *rExpr, *cExpr;
    int lop, lsubop;
    StmtList lStatements;
    Type *lType;

    if (fStmt) {
        switch (fStmt->commonst.kind) {
        case EXPR_STMT:
            eExpr = fStmt->exprst.exp;
            if (IsAssignSVOp(eExpr)) {
                lType = eExpr->bin.type;
                if (IsStruct(lType)) {
                    if (IsAssignCondSVOp(eExpr)) {
                        lop = eExpr->tri.op;
                        lExpr = eExpr->tri.arg1;
                        cExpr = eExpr->tri.arg2;
                        rExpr = eExpr->tri.arg3;
                        if (IsScalar(cExpr->common.type)) {
                            AssignStructMembers(&lStatements, lop, lType, lExpr, rExpr, cExpr, 0);
                        } else {
                            AssignStructMembers(&lStatements, lop, lType, lExpr, rExpr, cExpr, 1);
                        }
                        rStmt = lStatements.first;
                    } else {
                        lop = eExpr->bin.op;
                        lExpr = eExpr->bin.left;
                        rExpr = eExpr->bin.right;
                        lsubop = eExpr->bin.subop;
                        lStatements.first = NULL;
                        lStatements.last = NULL;
                        AssignStructMembers(&lStatements, lop, lType, lExpr, rExpr, NULL, 0);
                        rStmt = lStatements.first;
                    }
                } else {
                    rStmt = fStmt;
                }
            } else {
                rStmt = fStmt;
            }
            break;
        default:
            rStmt = fStmt;
            break;
        }
    } else {
        rStmt = fStmt;
    }
    return rStmt;
} // FlattenStructAssignment

/*
 * FlattenStructAssignments() - Convert struct assignments into multiple member assignments.
 *  
 */

static stmt *FlattenStructAssignments(Scope *fScope, stmt *fStmt)
{
    stmt *lStmt;

    lStmt = PreApplyToStatements(FlattenStructAssignment, fStmt, NULL, 0);
    return lStmt;
} // FlattenStructAssignments


///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////// Flatten If Statements ///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////

/*
 * FlattenIfStatementsStmt() - Convert if statements into conditional assignments.
 *
 *     if (A > B)
 *         C = D;
 *     else
 *         E = F;
 *
 * becomes:
 *
 *     $if1 = A > B;
 *     C@@($if1) = D;
 *     E@@(!$if1) = F;
 *
 * and:
 *
 *     if (A > B)
 *         if (C > D)
 *             E = F;
 *         else
 *             G = H;
 *     else
 *         if (J > K)
 *             L = M;
 *         else
 *             N = P;
 *
 * becomes:
 *
 *     $if1 = A > B;
 *     $ife2 = C > D;
 *     $if2 = $if1 && $ife2;
 *     E@@($if2) = F;
 *     $if2 = $if1 && !$ife2;
 *     G@@($if2) = H;
 *     $ife2 = J > K;
 *     $if2 = !$if1 && $ife2;
 *     L@@($if2) = M;
 *     $if2 = !$if1 && !$ife2;
 *     N@@($if2) = P;
 *
 * Existing conditional assignments:
 *
 *     A@@XZ = B;
 *     C@@(D) = E;
 *
 * become:
 *
 *     A@@({ $if1, 0, $if1, 0 }) = B;
 *     C@@($if1@xyzw && D) = E;     or:        C@@($if1 && D) = E;
 *
 * Issues:
 *
 *   1) "out" parameters to function calls: not a problem if function calls
 *      have been previously inlined.
 *   2) Assumes "chained" assignments have already been split into simple assignments.
 *   3) Assumes all large asignments (structs, matrices, vectors > 4) have been eliminated.
 *
 */

typedef struct FlattenIf_Rec {
    Scope *funScope;
    Symbol *ifSymbTotal;  // Current combined if value: "$if2" for level 2, NULL for level 0.
    Symbol *ifSymbParent; // Enclosing if's combined value: "$if1" for level 2, NULL for level <= 1.
    Symbol *ifSymbLocal;  // Current level's simple if value:  "$ife2" for level 2
} FlattenIf;

static stmt *FlattenIfStatementsStmt(stmt *fStmt, void *arg1, int flevel)
{
#define IF_ROOT "$if"
#define IF_ROOT_E "$iflocal"

    stmt *rStmt, *lStmt, *nStmt;
    expr *eExpr, *lExpr, *rExpr, *ifvar, *nExpr, *mExpr, *tExpr;
    int level, lop, lsubop, nop, nsubop, vname, mask, len, base, ii;
    FlattenIf *lFlatten;
    Symbol *lSymbTotal, *lSymbLocal, *ifSymbTotalSave, *ifSymbParentSave;
    StmtList lStatements;
    Type *lType;

    if (fStmt) {
        lFlatten = (FlattenIf *) arg1;
        level = flevel >= 0 ? flevel : -flevel;
        switch (fStmt->commonst.kind) {
        case IF_STMT:
            
            // Find $if1 variable(s) for this level:

            vname = GetNumberedAtom(IF_ROOT, level + 1, 1, '\0');
            lSymbTotal = LookUpSymbol(lFlatten->funScope, vname);
            if (!lSymbTotal) {
                lSymbTotal = DefineVar(&fStmt->commonst.loc, lFlatten->funScope, vname, BooleanType);
            }
            if (level > 0) {
                vname = GetNumberedAtom(IF_ROOT_E, level + 1, 1, '\0');
                lSymbLocal = LookUpSymbol(lFlatten->funScope, vname);
                if (!lSymbLocal) {
                    lSymbLocal = DefineVar(&fStmt->commonst.loc, lFlatten->funScope, vname, BooleanType);
                }
            } else {
                lSymbLocal = lSymbTotal;
            }

            // Create assignment statement for local expression:

            lStatements.first = NULL;
            lStatements.last = NULL;
            lExpr = GenSymb(lSymbLocal);
            lExpr = GenBoolAssign(lExpr, fStmt->ifst.cond);
            lStmt = (stmt *) NewExprStmt(&fStmt->commonst.loc, lExpr);
            AppendStatements(&lStatements, lStmt);

            ifSymbTotalSave = lFlatten->ifSymbTotal;
            ifSymbParentSave = lFlatten->ifSymbParent;
            lFlatten->ifSymbParent = lFlatten->ifSymbLocal;
            lFlatten->ifSymbLocal = lSymbLocal;
            lFlatten->ifSymbTotal = lSymbTotal;

            // Compute effective Boolean expression if necessary:

            if (level > 0) {
                lExpr = GenSymb(lFlatten->ifSymbParent);
                if (flevel == -1) {
                    // Top level if's don't create a negated value:
                    lExpr = GenBoolNot(lExpr);
                }
                rExpr = GenSymb(lSymbLocal);
                rExpr = GenBoolAnd(lExpr, rExpr);
                lExpr = GenSymb(lFlatten->ifSymbTotal);
                lExpr = GenBoolAssign(lExpr, rExpr);
                lStmt = (stmt *) NewExprStmt(&fStmt->commonst.loc, lExpr);
                AppendStatements(&lStatements, lStmt);
            }

            // Walk sub-statements and transform assignments into conditional assignments:

            lStmt = fStmt->ifst.thenstmt;
            fStmt->ifst.thenstmt = NULL;
            while (lStmt) {
                nStmt = lStmt->commonst.next;
                lStmt->commonst.next = NULL;
                lStmt = FlattenIfStatementsStmt(lStmt, arg1, level + 1);
                AppendStatements(&lStatements, lStmt);
                lStmt = nStmt;
            }
            if (fStmt->ifst.elsestmt) {

                // Compute effective Boolean expression if necessary:

                if (level > 0) {
                    lExpr = GenSymb(lFlatten->ifSymbParent);
                    if (flevel == -1)
                        lExpr = GenBoolNot(lExpr);
                    rExpr = GenSymb(lSymbLocal);
                    rExpr = GenBoolNot(rExpr);
                    rExpr = GenBoolAnd(lExpr, rExpr);
                    lExpr = GenSymb(lFlatten->ifSymbTotal);
                    lExpr = GenBoolAssign(lExpr, rExpr);
                    lStmt = (stmt *) NewExprStmt(&fStmt->commonst.loc, lExpr);
                    AppendStatements(&lStatements, lStmt);
                }
                lStmt = fStmt->ifst.elsestmt;
                fStmt->ifst.elsestmt = NULL;
                while (lStmt) {
                    nStmt = lStmt->commonst.next;
                    lStmt->commonst.next = NULL;
                    lStmt = FlattenIfStatementsStmt(lStmt, arg1, -(level + 1));
                    AppendStatements(&lStatements, lStmt);
                    lStmt = nStmt;
                }
            }
            lFlatten->ifSymbTotal = ifSymbTotalSave;
            lFlatten->ifSymbLocal = lFlatten->ifSymbParent;
            lFlatten->ifSymbParent = ifSymbParentSave;
            rStmt = lStatements.first;
            break;
        case EXPR_STMT:
            if (level > 0) {
                eExpr = fStmt->exprst.exp;
                if (IsAssignSVOp(eExpr)) {
                    lExpr = eExpr->bin.left;
                    rExpr = eExpr->bin.right;
                    lop = eExpr->bin.op;
                    lsubop = eExpr->bin.subop;
                    lType = eExpr->bin.type;
                    ifvar = GenSymb(lFlatten->ifSymbTotal);
                    if (flevel == -1)
                        ifvar = GenBoolNot(ifvar);
                    if (lop == ASSIGN_MASKED_KV_OP) {
                        mask = SUBOP_GET_MASK(lsubop);
                        len = SUBOP_GET_S(lsubop);
                        base = SUBOP_GET_T(lsubop);
                        // Create vector of $if/FALSE values:
                        mExpr = NULL;
                        for (ii = 0; ii < len; ii++) {
                            if (mask & 1) {
                                tExpr = GenSymb(lFlatten->ifSymbTotal);
                            } else {
                                tExpr = GenBoolConst(0);
                            }
                            mExpr = GenExprList(mExpr, tExpr, BooleanType);
                            mask >>= 1;
                        }
                        ifvar = (expr *) NewUnopSubNode(VECTOR_V_OP, SUBOP_V(len, TYPE_BASE_BOOLEAN), mExpr);
                        ifvar->un.type = GetStandardType(TYPE_BASE_BOOLEAN, len, 0);
                        nop = ASSIGN_COND_V_OP;
                        nsubop = SUBOP_V(len, base);
                    } else {
                        // Normal assign.  Convert it to simple conditional assignment:
                        switch (lop) {
                        case ASSIGN_OP:
                            nop = ASSIGN_COND_OP;
                            nsubop = lsubop;
                            break;
                        case ASSIGN_V_OP:
                            nop = ASSIGN_COND_SV_OP;
                            nsubop = lsubop;
                            break;
                        case ASSIGN_GEN_OP:
                            nop = ASSIGN_COND_GEN_OP;
                            nsubop = lsubop;
                            break;
                        default:
                            assert(0);
                            break;
                        }
                    }
                    nExpr = (expr *) NewTriopSubNode(nop, nsubop, lExpr, ifvar, rExpr);
                

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99视频有精品| 中文字幕欧美激情| 久久久久久亚洲综合影院红桃| 久久久国产综合精品女国产盗摄| 国产精品久久久久久久久久久免费看 | 久久久久久久综合狠狠综合| 国产欧美综合在线| 亚洲国产一区二区三区青草影视| 麻豆精品国产91久久久久久| 成人精品小蝌蚪| 在线不卡中文字幕播放| 国产欧美精品在线观看| 亚洲一区二区成人在线观看| 九九**精品视频免费播放| 91亚洲永久精品| 日韩一区二区三区高清免费看看| 欧美韩国日本综合| 日韩福利电影在线观看| 粉嫩aⅴ一区二区三区四区| 欧美日韩精品一区二区三区| 国产欧美日韩精品一区| 视频一区二区不卡| 不卡av在线网| 欧美v亚洲v综合ⅴ国产v| 国产精品国产精品国产专区不蜜| 日本中文在线一区| 色老综合老女人久久久| 亚洲欧美日韩一区二区三区在线观看| 日韩电影一二三区| 一本色道亚洲精品aⅴ| 精品国产一区二区三区四区四| 久久99国产精品麻豆| 欧美日韩免费观看一区二区三区 | 亚洲女同一区二区| 成人一区二区三区视频在线观看 | 中文字幕巨乱亚洲| 日韩av中文在线观看| av电影天堂一区二区在线观看| 欧美日韩在线播| 国产亚洲短视频| 人人精品人人爱| 在线看日本不卡| 亚洲国产精品成人久久综合一区 | 欧美精品一区二区三区一线天视频| 欧美一卡2卡3卡4卡| 欧美激情在线观看视频免费| 国产精品日产欧美久久久久| 久久狠狠亚洲综合| 欧美久久久久久久久| 亚洲伦在线观看| 高清免费成人av| 国产午夜亚洲精品理论片色戒| 免费在线视频一区| 精品视频一区 二区 三区| 亚洲男女一区二区三区| 成人黄色免费短视频| 久久九九影视网| 国产精品亚洲一区二区三区在线 | 午夜国产精品影院在线观看| a在线欧美一区| 中文字幕av不卡| 高清成人免费视频| 久久精品视频一区二区| 久久99精品视频| 日韩女优av电影在线观看| 免费人成在线不卡| 欧美一区三区二区| 日本欧美肥老太交大片| 欧美二区乱c少妇| 五月激情综合色| 在线免费观看成人短视频| 一区二区激情小说| 欧美午夜不卡视频| 午夜视频在线观看一区二区三区| 欧美视频在线观看一区| 亚洲综合视频在线观看| 欧美日韩中文另类| 日韩精品乱码av一区二区| 欧美丰满一区二区免费视频| 天天做天天摸天天爽国产一区| 欧美人动与zoxxxx乱| 日韩极品在线观看| 日韩视频中午一区| 韩国女主播成人在线观看| 精品国产乱码久久久久久闺蜜| 极品少妇xxxx精品少妇偷拍| 久久久久九九视频| 99免费精品在线| 一区二区三区影院| 欧美性猛交xxxx黑人交| 日本强好片久久久久久aaa| 日韩一级二级三级| 国产一区二区三区免费播放| 中国av一区二区三区| 91麻豆国产香蕉久久精品| 国产精品自产自拍| 国产精品成人免费精品自在线观看| 99这里都是精品| 性做久久久久久久免费看| 日韩一区二区精品| 国产美女娇喘av呻吟久久| 亚洲欧洲99久久| 欧美日韩视频第一区| 久久精品国产一区二区| 国产无遮挡一区二区三区毛片日本| 成人永久免费视频| 亚洲综合丝袜美腿| 精品成a人在线观看| 99re这里只有精品首页| 午夜精品久久久久久久| 精品欧美乱码久久久久久1区2区| 成人毛片老司机大片| 亚洲一区在线观看免费观看电影高清| 日韩一区二区三区电影| 成人av在线影院| 日韩不卡一区二区| 国产精品美女www爽爽爽| 欧美三区免费完整视频在线观看| 青青草国产精品97视觉盛宴| 国产精品入口麻豆原神| 欧美色精品在线视频| 国产成人精品一区二区三区四区| 一区二区三区在线观看网站| 91精品国产综合久久香蕉的特点| 国产精品亚洲成人| 亚洲成人中文在线| 国产三级三级三级精品8ⅰ区| 欧美色综合久久| 国产成人一区二区精品非洲| 亚洲综合激情网| 久久久99精品免费观看不卡| 精品视频一区三区九区| 盗摄精品av一区二区三区| 日日夜夜精品免费视频| 中文子幕无线码一区tr| 日韩一区二区三免费高清| 91麻豆.com| 国产一区二区三区四区五区美女| 亚洲制服丝袜在线| 国产精品色一区二区三区| 欧美日韩国产欧美日美国产精品| 国产a视频精品免费观看| 日韩影院精彩在线| 亚洲视频 欧洲视频| 精品精品国产高清一毛片一天堂| 一本大道av伊人久久综合| 国产东北露脸精品视频| 视频在线观看91| 亚洲人123区| 国产精品网友自拍| 精品少妇一区二区三区 | 免费久久精品视频| 亚洲精品乱码久久久久久| 日本一区二区视频在线| 日韩一级高清毛片| 欧美精品18+| 欧美亚洲综合网| 91日韩在线专区| 成人免费毛片嘿嘿连载视频| 麻豆91精品视频| 奇米综合一区二区三区精品视频| 亚洲美女屁股眼交3| 亚洲欧美综合网| 国产精品美女久久久久aⅴ| 国产情人综合久久777777| 久久综合999| 亚洲自拍与偷拍| 综合网在线视频| 欧美极品美女视频| 日本一区二区不卡视频| 久久九九全国免费| 国产日韩精品视频一区| 久久一夜天堂av一区二区三区| 538prom精品视频线放| 欧美日韩国产综合一区二区| 欧美在线视频全部完| 日本高清成人免费播放| 色吧成人激情小说| 色婷婷av一区二区| 91在线porny国产在线看| av日韩在线网站| 99精品黄色片免费大全| 99在线热播精品免费| av中文字幕不卡| 91在线免费视频观看| 一本高清dvd不卡在线观看| 91行情网站电视在线观看高清版| 91网站最新地址| 日本高清不卡一区| 欧美日韩高清一区二区三区| 欧美精品在线观看播放| 7777精品伊人久久久大香线蕉超级流畅 | 精品欧美黑人一区二区三区| 日韩精品一区二区三区在线播放| 日韩免费观看高清完整版在线观看| 日韩欧美中文一区| 久久一区二区视频| 中文av字幕一区| 亚洲精品视频在线观看免费 | 日韩一二三区视频|