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

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

?? cmath2.c

?? Open Watcom 的 C 編譯器源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
    while( typ->decl_type == TYPE_TYPEDEF )  typ = typ->object;
    if( typ->decl_type == TYPE_POINTER ) {
        return( PointerClass( savtyp ) );
    }
    return( PTR_NOT );               // indicate not a pointer type
}



#define Convert(opnd,opnd_type,result_type)     opnd

//  a <= x <=  b   i.e range of x is between a and b
enum   rel_op {
    REL_EQ,    // x == c
    REL_LT,    // x < c
    REL_LE,    // x <= c
    REL_SIZE
};
enum  case_range {
    CASE_LOW,         // c < a
    CASE_LOW_EQ,      // c == a
    CASE_HIGH,        // c > b
    CASE_HIGH_EQ,     // c == b
    CASE_SIZE
};

typedef enum{
    CMP_VOID    = 0,
    CMP_FALSE   = 1,
    CMP_TRUE    = 2,
}cmp_result;

static char const Meaningless[REL_SIZE][CASE_SIZE] = {
//    c < a      c == a     c >b       c==b
    { CMP_FALSE, CMP_VOID , CMP_FALSE, CMP_VOID },  // x == c
    { CMP_FALSE, CMP_FALSE, CMP_TRUE , CMP_VOID },  // x < c
    { CMP_FALSE, CMP_VOID , CMP_TRUE , CMP_TRUE },  // x <= c
};

#define NumSign( a )   ((a)&0x80)
#define NumBits( a )   ((a)&0x7f)
#define MAXSIZE        (sizeof( long )*8)
static char NumSize( int op_type ){
// return 0 not a num, else number of bits | 0x80 if signed
    char size;

    size = 0;
    switch( op_type ) {
    case TYPE_CHAR:
        size = 0x80;
    case TYPE_UCHAR:
        size |= 8;
        break;
    case TYPE_SHORT:
        size = 0x80;
    case TYPE_USHORT:
        size |= 16;
        break;
    case TYPE_LONG:
        size = 0x80;
    case TYPE_ULONG:
    case TYPE_POINTER:
        size |= 32;
        break;
    case TYPE_INT:
    case TYPE_FIELD:
        size = 0x80;
    case TYPE_UINT:
    case TYPE_UFIELD:
#if TARGET_INT == 2
        size |= 16;
#else
        size |= 32;
#endif
        break;
    }
    return( size );
}

static cmp_result IsMeaninglessCompare( long val, int op1_type, int op2_type, int opr )
{
    long                high;
    long                low;
    enum rel_op         rel;
    enum case_range     range;
    cmp_result          ret;
    int                 result_size;
    char                op1_size;
    char                rev_ret;

    op1_size = NumSize( op1_type );
    if( op1_size == 0 ){
        return( CMP_VOID );
    }
    result_size = NumSize( BinResult[ op1_type ][ op2_type ] );
    if( result_size == 0 ){
        return( CMP_VOID );
    }
    rev_ret = 0;
    switch( opr ){ // mapped rel ops to equivalent cases
    case T_NE:
        rev_ret = 1;
    case T_EQ:
        rel = REL_EQ;
        break;
    case T_GE:
        rev_ret = 1;
    case T_LT:
        rel = REL_LT;
        break;
    case T_GT:
        rev_ret = 1;
    case T_LE:
        rel = REL_LE;
        break;
    }
    if( NumSign(op1_size ) && NumSign(op1_size ) != NumSign(result_size) ){
        if( NumBits( op1_size) < NumBits( result_size ) ){
         // signed promoted to bigger unsigned num gets signed extended
        //  could have two ranges unsigned
            return( CMP_VOID ); //TODO: could check == & !=
        }else if( NumBits( op1_size) == NumBits( result_size ) ){
          // signed promoted to unsigned use unsigned range
          op1_size &= 0x7f;
        }
    }
    if( NumSign( result_size ) == 0 && NumBits( result_size ) == 16 ){
        val &= 0xffff; // num is truncated when compared
    }
    if( NumSign( op1_size ) ){
        low = (long)(0x80000000) >> MAXSIZE-NumBits( op1_size );
        high = ~low;
    }else{
        low = 0;
        high = 0xfffffffful >> MAXSIZE-NumBits( op1_size );
    }
    if( val == low ){
        range = CASE_LOW_EQ;
    }else if( val == high ){
        range = CASE_HIGH_EQ;
    }else if( NumBits( op1_size ) < MAXSIZE ){ // can't be outside range and
        if( val < low ){                       // don't have to do unsigned compare
            range = CASE_LOW;
        }else if( val > high ){
            range = CASE_HIGH;
        }else{
            range = CASE_SIZE;
        }
    }else{
        range = CASE_SIZE;
    }
    if( range != CASE_SIZE ){
        ret = Meaningless[rel][range];
        if( ret != CMP_VOID && rev_ret ){
            if( ret == CMP_FALSE ){
                ret = CMP_TRUE;
            }else{
                ret = CMP_FALSE;
            }
        }
    }else{
        ret = CMP_VOID;
    }
    return( ret );
}

static int CommRelOp( int opr ){
// map opr to commuted oprand equivelent
    switch( opr ){
    case T_NE:  // a != b => b != a
    case T_EQ:
        break;
    case T_GE: // a >= b => b <= a
        opr = T_LE;
        break;
    case T_LT:
        opr = T_GT;
        break;
    case T_GT:
        opr = T_LT;
        break;
    case T_LE:
        opr = T_GE;
        break;
    }
    return( opr );
}

bool IsZero(  TREEPTR tree ){
    bool ret;
    if( tree->op.opr == OPR_PUSHINT && tree->op.long_value == 0 ){
        ret = TRUE;
    }else{
        ret = FALSE;
    }
    return( ret );
}

static TREEPTR BaseConv( TYPEPTR typ1, TREEPTR op2  )
{
    TYPEPTR typ2;
    type_modifiers  typ1_flags, typ2_flags;

    typ2 =  op2->expr_type;
    typ1 = SkipTypeFluff( typ1 ); // skip typedefs go into enums base
    typ2 = SkipTypeFluff( typ2 );
    if( typ1->decl_type == TYPE_POINTER && typ2->decl_type == TYPE_POINTER ){
        typ1_flags = typ1->u.p.decl_flags;
        typ2_flags = typ2->u.p.decl_flags;
        if( ( typ1_flags & FLAG_FAR) && (typ2_flags & FLAG_BASED) ){
            op2 = BasedPtrNode( typ2, op2 );
        }
    }
    return( op2 );
}

static bool IsInt( DATA_TYPE op )
    /*
     * what's target compatible between default int as ret type
     * and a later declaration
     */
{
    bool        ret;

    switch( op ) {
    case TYPE_CHAR:
    case TYPE_UCHAR:
    case TYPE_SHORT:
    case TYPE_USHORT:
    case TYPE_INT:
    case TYPE_LONG:
    case TYPE_LONG64:
    case TYPE_ULONG64:
        ret = TRUE;
        break;
    default:
       ret = FALSE;
    }
    return( ret );
}
TREEPTR RelOp( TREEPTR op1, TOKEN opr, TREEPTR op2 )
{
    TYPEPTR         typ1;
    TYPEPTR         typ2;
    TYPEPTR         cmp_type;
    DATA_TYPE       op1_type, op2_type, result_type;
    TREEPTR         tree;
    cmp_result      cmp_cc;

    FoldExprTree( op1 );   // Needed for meaning less compare
    FoldExprTree( op2 );
    op1 = RValue( op1 );
    op2 = RValue( op2 );
    if( op1->op.opr == OPR_ERROR ) {
        FreeExprTree( op2 );
        return( op1 );
    }
    if( op2->op.opr == OPR_ERROR ) {
        FreeExprTree( op1 );
        return( op2 );
    }
    typ1 = TypeOf( op1 );
    typ2 = TypeOf( op2 );
    if( typ1->decl_type == TYPE_POINTER && typ2->decl_type == TYPE_POINTER  ){
        op2 = BaseConv( typ1, op2 );
        op1 = BaseConv( typ2, op1 );
        typ1 = TypeOf( op1 );
        typ2 = TypeOf( op2 );
    }
    op1_type = DataTypeOf( typ1->decl_type );
    op2_type = DataTypeOf( typ2->decl_type );
    cmp_type = typ1;
    result_type = op1_type;

    /* check for meaningless comparison:  04-feb-91 */
    //TODO this would be a better check maybe in foldtree
    if( !CompFlags.pre_processing ) {            /* 07-feb-89 */
        cmp_cc = CMP_VOID;
        if( op2->op.opr == OPR_PUSHINT ) {
            cmp_cc = IsMeaninglessCompare( op2->op.long_value, op1_type, op2_type, opr );
        }else if( op1->op.opr == OPR_PUSHINT ) {
            cmp_cc = IsMeaninglessCompare( op1->op.long_value, op2_type, op1_type, CommRelOp( opr ) );
        }
        if( cmp_cc != CMP_VOID ){
            int res = cmp_cc == CMP_TRUE;
            CWarn2( WARN_COMPARE_ALWAYS, ERR_COMPARE_ALWAYS, res );
        }
    }
    if( op1_type == TYPE_VOID  ||  op2_type == TYPE_VOID ) {
        ;           /* do nothing, since error has already been given */
    } else if( op1_type == TYPE_POINTER  &&  op2_type == TYPE_POINTER ) {
         CompatiblePtrType( typ1, typ2 );
    } else if( (op1_type == TYPE_POINTER  && IsInt( op2_type ) ) ||
               (op2_type == TYPE_POINTER  && IsInt( op1_type ) ) ){
        /* ok to compare pointer with constant 0 */
        if( opr != T_EQ  &&  opr != T_NE ){
            CWarn1( WARN_POINTER_TYPE_MISMATCH,
                    ERR_POINTER_TYPE_MISMATCH );
        }else if( !( IsZero( op1  )||IsZero( op2) ) ){
            CWarn1( WARN_POINTER_TYPE_MISMATCH,
                    NON_ZERO_CONST );
        }
        if( op2_type == TYPE_POINTER ) {
            cmp_type = typ2;
        }
    } else if( op1_type == TYPE_STRUCT ||
               op1_type == TYPE_UNION  ||
               op2_type == TYPE_STRUCT ||
               op2_type == TYPE_UNION ) {
            CErr1( ERR_INVALID_RELOP_FOR_STRUCT_OR_UNION );
            result_type = ERR;
    } else {
        result_type = BinResult[ op1_type ][ op2_type ];
        if( result_type == ERR ) {                      /* 12-sep-89 */
            CErr1( ERR_TYPE_MISMATCH );
        } else {
            cmp_type = GetType( result_type );
        }
#if 0
        op1 = Convert( op1, op1_type, result_type );
        op2 = Convert( op2, op2_type, result_type );
#endif
    }
    tree = ExprNode( op1, OPR_CMP, op2 );
    if( result_type == ERR ) {
        tree = ErrorNode( tree );
    } else {
        switch( opr ) {
        case T_EQ:      opr = CC_EQ;    break;
        case T_NE:      opr = CC_NE;    break;
        case T_LT:      opr = CC_LT;    break;
        case T_LE:      opr = CC_LE;    break;
        case T_GT:      opr = CC_GT;    break;
        case T_GE:      opr = CC_GE;    break;
        }
        tree->op.cc = opr;
        tree->op.compare_type = cmp_type;
        tree->expr_type = GetType( TYPE_INT );
    }
    return( tree );
}


TREEPTR FlowOp( TREEPTR op1, int opr, TREEPTR op2 )
{
    TREEPTR     tree;

    if( op1->op.opr == OPR_ERROR ) {
        FreeExprTree( op2 );
        return( op1 );
    }
    if( op2->op.opr == OPR_ERROR ) {
        FreeExprTree( op1 );
        return( op2 );
    }
    if( op1->op.opr == OPR_PUSHINT ) {
        if( opr == OPR_OR_OR ) {
            if( op1->op.long_value == 0 ) {
                FreeExprNode( op1 );
                return( op2 );
            }
        } else {        // OPR_AND_AND

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级成人在线视频| 亚洲五码中文字幕| 欧美一区二区三区在线观看| 色婷婷精品大视频在线蜜桃视频| 国产乱人伦偷精品视频免下载| 日本vs亚洲vs韩国一区三区| 午夜影院久久久| 日本欧美肥老太交大片| 美女精品自拍一二三四| 美女视频免费一区| 九九久久精品视频| 国产一区二区看久久| 国产久卡久卡久卡久卡视频精品| 黄网站免费久久| 国产·精品毛片| 99re这里只有精品6| 91亚洲精品乱码久久久久久蜜桃| 91丨porny丨最新| 色综合久久久久综合体| 欧美性欧美巨大黑白大战| 在线视频你懂得一区二区三区| 欧美性xxxxxx少妇| 在线播放日韩导航| 精品少妇一区二区三区视频免付费| 欧美α欧美αv大片| 久久久国际精品| 亚洲天堂久久久久久久| 亚洲一级二级三级在线免费观看| 日韩黄色免费网站| 国产麻豆一精品一av一免费 | 亚洲精品伦理在线| 午夜精品福利视频网站 | 精品国产一区二区三区忘忧草| 日韩三级电影网址| 欧美国产精品劲爆| 亚洲综合激情小说| 紧缚捆绑精品一区二区| 成人涩涩免费视频| 日本伦理一区二区| 欧美精品一区二区在线播放| 1000部国产精品成人观看| av综合在线播放| 久久国产精品72免费观看| 久久99精品久久只有精品| 不卡电影一区二区三区| 欧美久久久久久蜜桃| 3d动漫精品啪啪| 91免费版在线看| 1024成人网色www| 欧美日韩视频专区在线播放| 亚洲国产欧美日韩另类综合| 欧美日韩视频在线一区二区| 视频一区二区中文字幕| 欧美精品一区二区三区蜜臀| 懂色av中文字幕一区二区三区| 国产精品久久毛片| 欧美日韩综合一区| 免费精品视频在线| 欧美韩国日本不卡| 色综合久久精品| 午夜久久电影网| 精品999在线播放| 91丨九色丨国产丨porny| 亚洲午夜av在线| 欧美α欧美αv大片| 不卡的电视剧免费网站有什么| 亚洲曰韩产成在线| 欧美精品一区二区三区四区| 99精品国产视频| 日韩黄色一级片| 国产精品全国免费观看高清| 91福利精品视频| 国产一区二区三区视频在线播放| 国产精品白丝在线| 欧美一二区视频| 99精品一区二区| 久久99精品国产| 一区二区三区免费观看| 亚洲精品一区二区三区福利| 色婷婷精品久久二区二区蜜臀av| 美女视频黄 久久| 亚洲伦在线观看| 2014亚洲片线观看视频免费| 欧美综合色免费| www.视频一区| 激情综合色综合久久综合| 亚洲欧美日韩国产综合| 久久青草欧美一区二区三区| 欧美在线观看一二区| 高潮精品一区videoshd| 日韩精品国产精品| 伊人夜夜躁av伊人久久| 亚洲精品一区在线观看| 欧美狂野另类xxxxoooo| 99久久精品免费观看| 国产精品一区在线观看你懂的| 天天综合日日夜夜精品| 亚洲欧美视频一区| 中文字幕电影一区| 日韩一区二区电影网| 欧美日韩视频专区在线播放| 91色.com| 91美女在线观看| 成人免费观看视频| 国产精品一区二区在线观看网站| 午夜久久久久久| 午夜精品久久久久影视| 亚洲欧美区自拍先锋| 国产精品乱码一区二区三区软件 | 国产麻豆精品95视频| 美女久久久精品| 视频在线观看国产精品| 亚洲国产成人av网| 亚洲另类中文字| 中文字幕五月欧美| 中文一区二区完整视频在线观看 | 欧美日本一区二区| 91成人看片片| 97aⅴ精品视频一二三区| 不卡av在线网| av亚洲精华国产精华| 福利一区在线观看| 国产成+人+日韩+欧美+亚洲| 国产露脸91国语对白| 国产91综合网| 粉嫩av亚洲一区二区图片| 国产精品亚洲视频| 成人三级伦理片| 波多野结衣亚洲| 91丨porny丨户外露出| www.亚洲激情.com| 91国偷自产一区二区使用方法| 91麻豆swag| 欧美日韩高清一区二区| 欧美日韩不卡视频| 日韩精品最新网址| 久久久精品国产免大香伊 | 日韩视频免费观看高清完整版| 欧美一区日韩一区| 久久久久久久久伊人| 日韩一区欧美小说| 亚洲国产aⅴ天堂久久| 蜜臀av一区二区在线观看| 国产一区不卡在线| 成人听书哪个软件好| 欧美丝袜丝交足nylons| 欧美一区二区三区视频| 久久综合久色欧美综合狠狠| 国产欧美日韩综合精品一区二区 | 欧美精品一区二区三区在线| 国产精品污www在线观看| 亚洲免费在线观看| 午夜电影网一区| 激情深爱一区二区| av电影一区二区| 欧美日本在线视频| 国产日产精品1区| 一区二区欧美在线观看| 麻豆国产精品一区二区三区| 国产69精品一区二区亚洲孕妇 | 成人永久aaa| 欧美日韩国产综合一区二区| 久久人人爽爽爽人久久久| 一区二区三区精品在线观看| 久久国产精品一区二区| 成人av第一页| 欧美精品日韩综合在线| 国产欧美一区二区三区鸳鸯浴| 亚洲成av人综合在线观看| 国产成人免费视频网站高清观看视频| 色综合久久久久网| 国产欧美一区二区精品久导航| 午夜激情综合网| 99视频国产精品| 久久久综合网站| 亚洲成人动漫在线观看| 9l国产精品久久久久麻豆| 欧美一个色资源| 一区二区三区在线观看视频| 国产精品中文字幕欧美| 欧美乱熟臀69xxxxxx| 1024国产精品| 国产精品影视在线观看| 91麻豆精品国产综合久久久久久| 中文字幕高清一区| 国产乱码一区二区三区| 欧美一级高清大全免费观看| 伊人开心综合网| a4yy欧美一区二区三区| 久久精品亚洲精品国产欧美kt∨ | 91一区二区三区在线观看| 欧美日韩三级在线| 亚洲色图欧美偷拍| av中文字幕亚洲| 久久久精品tv| 久久99九九99精品| 欧美mv日韩mv国产网站app| 日韩高清在线不卡| 欧美久久久久中文字幕| 亚洲不卡av一区二区三区|