⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coptions.c

📁 Open Watcom 的 C 编译器源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
static void Set_ZU()
{
    CompFlags.zu_switch_used = 1;
    TargetSwitches |= FLOATING_SS;
}

#if _CPU == 386
static void Set_ZZ()
{
    CompFlags.use_stdcall_at_number = 0;
}
#endif

#if _CPU == 8086
static void ChkSmartWindows()
{
    if( tolower(*OptScanPtr) == 's' ) {        /* 22-mar-94 */
        TargetSwitches |= SMART_WINDOWS;
        ++OptScanPtr;
    }
    EnsureEndOfSwitch();
}

static void SetCheapWindows()
{
    _SetConstTarg( "cheap_windows" );
    ChkSmartWindows();
}
#endif

static void SetWindows()
{
    _SetConstTarg( "windows" );
#if _CPU == 8086
    ChkSmartWindows();
#endif
}
#endif

static void SetGenerateMakeAutoDepend()
{
    CompFlags.generate_auto_depend = 1;
    CMemFree( DependFileName );
    DependFileName = GetAFileName();
    if( !DependFileName[0] )
    {
        CMemFree( DependFileName );
        DependFileName = NULL;
    }
}

static void SetAutoDependTarget()
{
   // auto set depend yes...
    CompFlags.generate_auto_depend = 1;
    CMemFree( DependTarget );
    DependTarget = GetAFileName();
}

static void SetAutoDependSrcDepend()
{
    CompFlags.generate_auto_depend = 1;
    CMemFree( SrcDepName );
    SrcDepName = GetAFileName();
}

static void SetAutoDependForeSlash()
{
    DependForceSlash = '/';
}

static void SetAutoDependBackSlash()
{
    DependForceSlash = '\\';
}

static void Set_PL()           { CompFlags.cpp_line_wanted = 1; }
static void Set_PC()
{
    CompFlags.keep_comments = 1;
    CompFlags.comments_wanted = 1;
}
static void Set_PW()
{
    if( OptValue != 0 && OptValue < 20 ) OptValue = 20;
    if( OptValue > 10000 ) OptValue = 10000;
    SetCppWidth( OptValue );
}
static void Set_PreProcChar()  { PreProcChar = *OptScanPtr++; }

static void Set_OA()           { GenSwitches |= RELAX_ALIAS; }
static void Set_OB()           { GenSwitches |= BRANCH_PREDICTION; }
static void Set_OD()           { GenSwitches |= NO_OPTIMIZATION; }
static void Set_OE()
{
    Inline_Threshold = OptValue;
    Toggles |= TOGGLE_INLINE;
}
#if _CPU == 8086 || _CPU == 386
static void Set_OC()           { TargetSwitches |= NO_CALL_RET_TRANSFORM; }
static void Set_OF()
{
    TargetSwitches |= NEED_STACK_FRAME;
    if( OptValue != 0 )  DefaultInfo.class |= GENERATE_STACK_FRAME;
}
static void Set_OM()           { TargetSwitches |= I_MATH_INLINE; }
static void Set_OP()           { CompFlags.op_switch_used = 1; } // force floats to memory
#endif
static void Set_OH()           { GenSwitches |= SUPER_OPTIMAL; }
static void Set_OK()           { GenSwitches |= FLOW_REG_SAVES; }
static void Set_OI()           { CompFlags.inline_functions = 1; }
static void Set_OL()           { GenSwitches |= LOOP_OPTIMIZATION; }
static void Set_OL_plus()      { GenSwitches |= LOOP_OPTIMIZATION | LOOP_UNROLLING; }
static void Set_ON()           { GenSwitches |= FP_UNSTABLE_OPTIMIZATION; }
static void Set_OO()           { GenSwitches &= ~MEMORY_LOW_FAILS; }
static void Set_OR()           { GenSwitches |= INS_SCHEDULING; }
static void Set_OS()           { GenSwitches &= ~NO_OPTIMIZATION; OptSize = 100; }
static void Set_OT()           { GenSwitches &= ~NO_OPTIMIZATION; OptSize = 0; }
static void Set_OU()           { CompFlags.unique_functions = 1; }
static void Set_OX()
{
    Toggles &= ~TOGGLE_CHECK_STACK;
    GenSwitches &= ~NO_OPTIMIZATION;
    GenSwitches |= LOOP_OPTIMIZATION | INS_SCHEDULING | BRANCH_PREDICTION;
    CompFlags.inline_functions = 1;
    OptValue = 20; // Otherwise we effectively disable inlining!
    Set_OE();
#if _CPU == 8086 || _CPU == 386
    TargetSwitches |= I_MATH_INLINE;
#endif
}
static void Set_OZ()           { GenSwitches |= NULL_DEREF_OK; }

// '=' indicates optional '='
// '#' indicates a decimal numeric value
// '$' indicates identifier
// '@' indicates filename
// '*' indicates additional characters will be scanned by option routine
// if a capital letter appears in the option, then input must match exactly
// otherwise all input characters are changed to lower case before matching

static struct option const Optimization_Options[] = {
    { "a",      0,              Set_OA },
    { "b",      0,              Set_OB },
    { "d",      0,              Set_OD },
    { "e=#",    20,             Set_OE },
#if _CPU == 8086 || _CPU == 386
    { "c",      0,              Set_OC },
    { "f+",     1,              Set_OF },
    { "f",      0,              Set_OF },
    { "m",      0,              Set_OM },
    { "p",      0,              Set_OP },
#endif
    { "h",      0,              Set_OH },
    { "i",      0,              Set_OI },
    { "k",      0,              Set_OK },
    { "l+",     0,              Set_OL_plus },
    { "l",      0,              Set_OL },
    { "n",      0,              Set_ON },
    { "o",      0,              Set_OO },
    { "r",      0,              Set_OR },
    { "s",      0,              Set_OS },
    { "t",      0,              Set_OT },
    { "u",      0,              Set_OU },
    { "x",      0,              Set_OX },
    { "z",      0,              Set_OZ },
    { 0,        0,              0 },
};

static struct option const Preprocess_Options[] = {
    { "c",      0,              Set_PC },
    { "l",      0,              Set_PL },
    { "w=#",    0,              Set_PW },
    { "=",      0,              Set_PreProcChar },
    { "#",      0,              Set_PreProcChar },
    { 0,        0,              0 },
};

static void SetOptimization();
static void SetPreprocessOptions();
static struct option const CFE_Options[] = {
    { "o*",     0,              SetOptimization },
    { "i=@",    0,              SetInclude },
    { "zq",     0,              Set_ZQ },
#if _CPU == 8086
    { "0",      SW_CPU0,        SetCPU },
    { "1",      SW_CPU1,        SetCPU },
    { "2",      SW_CPU2,        SetCPU },
    { "3",      SW_CPU3,        SetCPU },
    { "4",      SW_CPU4,        SetCPU },
    { "5",      SW_CPU5,        SetCPU },
    { "6",      SW_CPU6,        SetCPU },
#endif
#if _CPU == 386
    { "6r",     SW_CPU6,        SetCPU_xR },
    { "6s",     SW_CPU6,        SetCPU_xS },
    { "6",      SW_CPU6,        SetCPU },
    { "5r",     SW_CPU5,        SetCPU_xR },
    { "5s",     SW_CPU5,        SetCPU_xS },
    { "5",      SW_CPU5,        SetCPU },
    { "4r",     SW_CPU4,        SetCPU_xR },
    { "4s",     SW_CPU4,        SetCPU_xS },
    { "4",      SW_CPU4,        SetCPU },
    { "3r",     SW_CPU3,        SetCPU_xR },
    { "3s",     SW_CPU3,        SetCPU_xS },
    { "3",      SW_CPU3,        SetCPU },
#endif
    { "aa",     0,              Set_AA },
    // more specific commands first ... otherwise the
    // short command sets us up for failure...
    { "adt=@",  0,              SetAutoDependTarget },
    { "adbs",   0,              SetAutoDependBackSlash },
    { "add=@",  0,              SetAutoDependSrcDepend },
    { "adfs",   0,              SetAutoDependForeSlash },
    { "ad=@",   0,              SetGenerateMakeAutoDepend },
    { "ai",     0,              Set_AI },
    { "aq",     0,              Set_AQ },
#if _MACHINE == _ALPHA
    { "as",     0,              Set_AS },
#endif
    { "d0*",    0,              Set_D0 },
    { "d1*",    1,              Set_D1 },
    { "d2*",    2,              Set_D2 },
    { "d3*",    3,              Set_D3 },
    { "d9*",    9,              Set_D9 },
    { "d+*",    0,              SetExtendedDefines },
    { "db",     0,              SetBrowserInfo },
    { "d*",     0,              DefineMacro },
    { "en",     0,              Set_EN },
    { "ep=#",   0,              Set_EP },
    { "ee",     0,              Set_EE },
    { "ef",     0,              Set_EF },
    { "ei",     0,              Set_EI },
    { "em",     0,              Set_EM },
#if _CPU == 8086 || _CPU == 386
    { "ec",     0,              Set_EC },
    { "et",     0,              Set_ET },
    { "eq",     0,              Set_EQ },
    { "etp",    0,              Set_ETP },
    { "esp",    0,              Set_ESP },
#endif
#if _CPU == 386
    { "ez",     0,              Set_EZ },
#endif
    { "e=#",    0,              SetErrorLimit },
#if _CPU == 8086 || _CPU == 386
    { "hw",     SW_DF_WATCOM,   Set_DbgFmt },
#endif
    { "hda",    SW_DF_DWARF_A,  Set_DbgFmt },
    { "hdg",    SW_DF_DWARF_G,  Set_DbgFmt },
    { "hd",     SW_DF_DWARF,    Set_DbgFmt },
    { "hc",     SW_DF_CV,       Set_DbgFmt },
#if _CPU == 8086 || _CPU == 386
    { "g=$",    0,              SetGroup },
#endif
    { "lc",     0,              SetAPILogging },
#ifndef NDEBUG
#ifdef ASM_OUTPUT
    { "la",     0,              SetAsmListing },
#endif
#ifdef OWL_LOGGING
    { "lo",     0,              SetOwlLogging },
#endif
#endif
#if _CPU == 8086 || _CPU == 386
    { "ms",     SW_MS,          SetMemoryModel },
    { "mm",     SW_MM,          SetMemoryModel },
    { "mc",     SW_MC,          SetMemoryModel },
    { "ml",     SW_ML,          SetMemoryModel },
#endif
#if _CPU == 8086
    { "mh",     SW_MH,          SetMemoryModel },
#endif
#if _CPU == 386
    { "mf",     SW_MF,          SetMemoryModel },
#endif
#if _CPU == 8086 || _CPU == 386
    { "nc=$",   0,              SetCodeClass },
    { "nd=$",   0,              SetDataSegName },
    { "nt=$",   0,              SetTextSegName },
#endif
    { "nm=$",   0,              SetModuleName },
    { "p*",     0,              SetPreprocessOptions },
    { "rod=@",  0,              SetReadOnlyDir },
#if _CPU == 8086 || _CPU == 386
    { "re",     0,              Set_RE },
    { "ri",     0,              Set_RI },
    { "r",      0,              Set_R },
    { "sg",     0,              Set_SG },
    { "st",     0,              Set_ST },
#endif
#if _MACHINE == _ALPHA
    { "si",     0,              Set_SI },
#endif
    { "s",      0,              Set_S },
    { "bd",     0,              Set_BD },
    { "bc",     0,              Set_BC },
    { "bg",     0,              Set_BG },
    { "bm",     0,              Set_BM },
#if _CPU != 8086
    { "br",     0,              Set_BR },
#endif
    { "bw",     0,              Set_BW },
    { "bt=$",   0,              Set_BT },
    { "fhq=@",  0,              Set_FHQ },
    { "fh=@",   0,              Set_FH },
    { "fi=@",   0,              Set_FI },
    { "fld",    0,              Set_FLD },
    { "fo=@",   0,              Set_FO },
    { "fr=@",   0,              Set_FR },
#if _CPU == 8086 || _CPU == 386
    { "fp2",    SW_FPU0,        SetFPU },
    { "fp3",    SW_FPU3,        SetFPU },
    { "fp5",    SW_FPU5,        SetFPU },
    { "fp6",    SW_FPU6,        SetFPU },
    { "fpr",    0,              Set_FPR },
    { "fpi87",  0,              Set_FPI87 },
    { "fpi",    0,              Set_Emu },
    { "fpc",    0,              Set_FPC },
    { "fpd",    0,              Set_FPD },
#endif
    { "j",      0,              SetCharType },
    { "tp=$",   0,              Set_TP },
    { "u$",     0,              Set_U },
    { "v",      0,              Set_V },
    { "wcd=#",  0,              Set_WCD },
    { "wce=#",  0,              Set_WCE },
    { "we",     0,              Set_WE },
    { "wo",     0,              Set_WO },
    { "wx",     0,              Set_WX },
    { "w=#",    0,              SetWarningLevel },
#if _CPU == 386
    { "xgv",    0,              Set_XGV },
#endif
    { "xbsa",   0,              Set_XBSA },
#if _MACHINE == _ALPHA
    { "xd",     0,              Set_XD },
#endif
    { "za99",   0,              Set_ZA99 },
    { "zA",     0,              SetStrictANSI },
    { "za",     0,              Set_ZA },
#if _CPU == 8086 || _CPU == 386
    { "zc",     0,              Set_ZC },
    { "zdf",    0,              Set_ZDF },
    { "zdp",    0,              Set_ZDP },
    { "zdl",    0,              Set_ZDL },
    { "zff",    0,              Set_ZFF },
    { "zfp",    0,              Set_ZFP },
    { "zgf",    0,              Set_ZGF },
    { "zgp",    0,              Set_ZGP },
#endif
    { "ze",     0,              Set_ZE },
    { "zg",     0,              Set_ZG },
    { "zi",     0,              Set_ZI },
    { "zk0u",   0,              Set_ZK0U },
    { "zk0",    0,              Set_ZK0 },
    { "zk1",    0,              Set_ZK1 },
    { "zk2",    0,              Set_ZK2 },
    { "zk3",    0,              Set_ZK3 },
    { "zkl",    0,              Set_ZKL },
    { "zku=#",  0,              Set_ZKU },
    { "zk",     0,              Set_ZK },
    { "zld",    0,              Set_ZLD },
    { "zlf",    0,              Set_ZLF },
    { "zls",    0,              Set_ZLS },
    { "zl",     0,              Set_ZL },
    { "zm",     0,              Set_ZM },
    { "zpw",    0,              Set_ZPW },
    { "zp=#",   1,              SetPackAmount },
#if _MACHINE == _ALPHA
    { "zps",    0,              SetStructPack },
#endif
#if _CPU == 8086 || _CPU == 386
    { "zro",    0,              Set_ZRO },
#endif
#if _CPU == 386
    { "zri",    0,              Set_ZRI },
#endif
    { "zs",     0,              Set_ZS },
    { "zt=#",   256,            SetDataThreshHold },
#if _CPU == 8086 || _CPU == 386
    { "zu",     0,              Set_ZU },
#endif
    { "zev",    0,              Set_ZEV },
#if _CPU == 8086
    { "zW*",    0,              SetCheapWindows },
    { "zw*",    0,              SetWindows },
#endif
#if _CPU == 386
    { "zw",     0,              SetWindows },
    { "zz",     0,              Set_ZZ },
#endif
    { 0,        0,              0 },
};

static char *ProcessOption( struct option const *op_table, char *p, char *option_start )
{
    int         i;
    int         j;
    char        *opt;
    char        c;

    for( i = 0; ; i++ ) {
        opt = op_table[i].option;
        if( opt == NULL ) break;
        c = tolower( *p );
        if( c == *opt ) {
            OptValue = op_table[i].value;
            j = 1;
            for(;;) {
                ++opt;
                if( *opt == '\0' || *opt == '*' ) {
                    if( *opt == '\0' ) {
                        if( p - option_start == 1 ) {
                            // make sure end of option
                            if( !OptionDelimiter( p[j] ) ) break;
                        }
                    }
                    OptScanPtr = p + j;
                    op_table[i].function();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -