From 5a6ce7e6498a0c97786ab1a136d7e1a536312182 Mon Sep 17 00:00:00 2001 From: Jiri Malak Date: Sat, 16 Dec 2023 17:18:02 +0100 Subject: [PATCH] cleanup C and C++ compilers code do more transparent definition of CPU and FPU related data, single consolitdated definition use new message number for run-time libraries build --- bld/cc/c/coptions.c | 124 ++++++++++--------- bld/cc/gml/options.gml | 4 +- bld/cg/intel/h/cgx86swi.h | 4 +- bld/clib/flags.mif | 2 +- bld/f77/f77lib/flags.mif | 2 +- bld/f77/wfc/c/fcgmain.c | 27 +++-- bld/mathlib/flags.mif | 4 +- bld/plusplus/c/cginfo.c | 4 +- bld/plusplus/c/cmdlnx86.c | 228 +++++++++++++++++------------------ bld/plusplus/gml/options.gml | 3 +- 10 files changed, 203 insertions(+), 199 deletions(-) diff --git a/bld/cc/c/coptions.c b/bld/cc/c/coptions.c index ac59073fe1..dd0bdf11f1 100644 --- a/bld/cc/c/coptions.c +++ b/bld/cc/c/coptions.c @@ -238,6 +238,8 @@ static void SetCharacterEncoding( void ) CompFlags.use_double_byte = true; SetDBChar( -1 ); /* set double-byte char type to default */ break; + default: + break; } } @@ -400,16 +402,6 @@ static void SetFinalTargetSystem( void ) /* fall through */ case TS_NETWARE: PreDefine_Macro( "__NETWARE_386__" ); - /* - * If using NetWare, set Stack87 unless the target - * is NetWare 5 or higher. - */ - if( TargetSystem == TS_NETWARE ) { - Stack87 = 4; - } - if( SwData.mem == SW_M_DEF ) { - SwData.mem = SW_MS; - } /* * NETWARE uses stack based calling conventions * by default - silly people. @@ -473,25 +465,25 @@ static void SetGenSwitches( void ) /* * setup CPU, if not specified then use default CPU */ + if( SwData.cpu == SW_CPU_DEF ) { #if _CPU == 8086 - if( SwData.cpu == SW_CPU_DEF ) SwData.cpu = SW_CPU0; #else - if( SwData.cpu == SW_CPU_DEF ) SwData.cpu = SW_CPU6; #endif + } SET_CPU( ProcRevision, SwData.cpu - SW_CPU0 + CPU_86 ); /* * setup FPU, if not specified then use default FPU */ + if( SwData.fpu == SW_FPU_DEF ) { #if _CPU == 8086 - if( SwData.fpu == SW_FPU_DEF ) SwData.fpu = SW_FPU0; #else - if( SwData.fpu == SW_FPU_DEF ) SwData.fpu = SW_FPU3; #endif + } switch( SwData.fpu ) { case SW_FPU0: SET_FPU_LEVEL( ProcRevision, FPU_87 ); @@ -512,34 +504,48 @@ static void SetGenSwitches( void ) case SW_FPT_DEF: case SW_FPT_EMU: #if _CPU == 386 - if( TargetSystem == TS_WINDOWS ) { - SwData.fpt = SW_FPT_INLINE; - SET_FPU_INLINE( ProcRevision ); + if( TargetSystem != TS_WINDOWS ) { + #endif + SET_FPU_EMU( ProcRevision ); break; + #if _CPU == 386 } + /* fall through */ #endif - SwData.fpt = SW_FPT_EMU; - SET_FPU_EMU( ProcRevision ); - break; case SW_FPT_INLINE: SET_FPU_INLINE( ProcRevision ); break; case SW_FPT_CALLS: - SET_FPU( ProcRevision, FPU_NONE ); + SET_FPU_FPC( ProcRevision ); + CompFlags.op_switch_used = false; break; } + /* + * If using NetWare, set Stack87 unless the target + * is NetWare 5 or higher. + */ + if( TargetSystem == TS_NETWARE ) { + Stack87 = 4; + } + + #if _CPU == 386 + TargetSwitches |= CGSW_X86_USE_32; + #endif /* * setup memory model, if not specified then use default model */ + if( SwData.mem == SW_M_DEF ) { #if _CPU == 8086 - if( SwData.mem == SW_M_DEF ) SwData.mem = SW_MS; #else - if( SwData.mem == SW_M_DEF ) - SwData.mem = SW_MF; - TargetSwitches |= CGSW_X86_USE_32; + if( TargetSystem == TS_NETWARE ) { + SwData.mem = SW_MS; + } else { + SwData.mem = SW_MF; + } #endif + } switch( SwData.mem ) { case SW_MF: TargetSwitches |= CGSW_X86_FLAT_MODEL | CGSW_X86_CHEAP_POINTER; @@ -575,6 +581,10 @@ static void SetGenSwitches( void ) if( !SwData.peg_gs_on ) TargetSwitches |= CGSW_X86_FLOATING_GS; #endif + + /* + * DWARF is the default + */ switch( SwData.dbg_fmt ) { case SW_DF_WATCOM: /* @@ -585,9 +595,6 @@ static void SetGenSwitches( void ) GenSwitches |= CGSW_GEN_DBG_CV; break; case SW_DF_DEF: - /* - * DWARF is the default - */ case SW_DF_DWARF: GenSwitches |= CGSW_GEN_DBG_DF; break; @@ -599,11 +606,13 @@ static void SetGenSwitches( void ) GenSwitches |= CGSW_GEN_DBG_DF | CGSW_GEN_DBG_PREDEF; SymDFAbbr = SpcSymbol( "__DFABBREV", GetType( TYP_USHORT ), SC_NONE ); break; + default: + break; } } #if _INTEL_CPU -static void PreDefine_UMIX86Macro( void ) +static void PreDefine_UMIX86_Macro( void ) { unsigned cpu; char buff[32]; @@ -839,7 +848,7 @@ static void MacroDefs( void ) DefSwitchMacro( "EC" ); } #if _INTEL_CPU - PreDefine_UMIX86Macro(); + PreDefine_UMIX86_Macro(); switch( GET_CPU( ProcRevision ) ) { case CPU_86: DefSwitchMacro( "0" ); @@ -862,26 +871,10 @@ static void MacroDefs( void ) case CPU_686: DefSwitchMacro( "6" ); break; - } - switch( SwData.fpt ) { - case SW_FPT_CALLS: - CompFlags.op_switch_used = false; - DefSwitchMacro( "FPC" ); - break; - case SW_FPT_EMU: - DefSwitchMacro( "FPI" ); - Define_Macro( "__FPI__" ); - break; - case SW_FPT_INLINE: - DefSwitchMacro( "FPI87" ); - Define_Macro( "__FPI__" ); - break; default: break; } switch( GET_FPU_LEVEL( ProcRevision ) ) { - case FPU_NONE: - break; case FPU_87: DefSwitchMacro( "FP2" ); break; @@ -894,7 +887,20 @@ static void MacroDefs( void ) case FPU_686: DefSwitchMacro( "FP6" ); break; + default: + break; } + if( GET_FPU_FPC( ProcRevision ) ) { + DefSwitchMacro( "FPC" ); + } else { + if( GET_FPU_EMU( ProcRevision ) ) { + DefSwitchMacro( "FPI" ); + } else { + DefSwitchMacro( "FPI87" ); + } + Define_Macro( "__FPI__" ); + } + if( SwData.nd_used ) { DefSwitchMacro( "ND" ); } @@ -2301,15 +2307,16 @@ static void Define_Memory_Model( void ) strcpy( CLIB_Name, "1clibdl?" ); } } - if( GET_FPU_EMU( ProcRevision ) ) { - strcpy( MATHLIB_Name, "7math87?" ); - EmuLib_Name = "8emu87"; - } else if( GET_FPU_LEVEL( ProcRevision ) == FPU_NONE ) { + if( GET_FPU_FPC( ProcRevision ) ) { strcpy( MATHLIB_Name, "5math?" ); EmuLib_Name = NULL; } else { strcpy( MATHLIB_Name, "7math87?" ); - EmuLib_Name = "8noemu87"; + if( GET_FPU_EMU( ProcRevision ) ) { + EmuLib_Name = "8emu87"; + } else { + EmuLib_Name = "8noemu87"; + } } *strchr( CLIB_Name, '?' ) = lib_model; *strchr( MATHLIB_Name, '?' ) = lib_model; @@ -2322,14 +2329,7 @@ static void Define_Memory_Model( void ) } else { strcpy( CLIB_Name, "1clib3?" ); /* There is only 1 CLIB now! */ } - if( GET_FPU_EMU( ProcRevision ) ) { - if( CompFlags.br_switch_used ) { - strcpy( MATHLIB_Name, "7mt7?dll" ); - } else { - strcpy( MATHLIB_Name, "7math387?" ); - } - EmuLib_Name = "8emu387"; - } else if( GET_FPU_LEVEL( ProcRevision ) == FPU_NONE ) { + if( GET_FPU_FPC( ProcRevision ) ) { if( CompFlags.br_switch_used ) { strcpy( MATHLIB_Name, "5mth?dll" ); } else { @@ -2342,7 +2342,11 @@ static void Define_Memory_Model( void ) } else { strcpy( MATHLIB_Name, "7math387?" ); } - EmuLib_Name = "8noemu387"; + if( GET_FPU_EMU( ProcRevision ) ) { + EmuLib_Name = "8emu387"; + } else { + EmuLib_Name = "8noemu387"; + } } *strchr( CLIB_Name, '?' ) = lib_model; *strchr( MATHLIB_Name, '?' ) = lib_model; diff --git a/bld/cc/gml/options.gml b/bld/cc/gml/options.gml index a0085a8c5e..579d1f1c93 100644 --- a/bld/cc/gml/options.gml +++ b/bld/cc/gml/options.gml @@ -1328,12 +1328,14 @@ :jusage. 無メッセージモードで動作します(エラーメッセージのみ表示されます) :option. zro -:target. any +:target. i86 386 +:enumerate. fp_rounding :usage. omit floating point rounding calls (non ANSI) :jusage. :option. zri :target. i86 386 +:enumerate. fp_rounding :usage. inline floating point rounding calls :jusage. diff --git a/bld/cg/intel/h/cgx86swi.h b/bld/cg/intel/h/cgx86swi.h index d7a33824f4..77cbe2bcdf 100644 --- a/bld/cg/intel/h/cgx86swi.h +++ b/bld/cg/intel/h/cgx86swi.h @@ -2,7 +2,7 @@ * * Open Watcom Project * -* Copyright (c) 2002-2022 The Open Watcom Contributors. All Rights Reserved. +* Copyright (c) 2002-2023 The Open Watcom Contributors. All Rights Reserved. * Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. * * ======================================================================== @@ -84,5 +84,7 @@ typedef enum { #define SET_FPU_LEVEL( r, v ) SET_FPU( r, (v) | ( GET_FPU( r ) & FPU_EMU ) ) #define SET_FPU_EMU( r ) SET_FPU( r, GET_FPU( r ) | FPU_EMU ) #define SET_FPU_INLINE( r ) SET_FPU( r, GET_FPU( r ) & ~FPU_EMU ) +#define SET_FPU_FPC( r ) SET_FPU( r, FPU_NONE ) #define GET_FPU_EMU( r ) ( ( GET_FPU( r ) & FPU_EMU ) != FPU_NONE ) +#define GET_FPU_FPC( r ) ( GET_FPU( r ) == FPU_NONE ) diff --git a/bld/clib/flags.mif b/bld/clib/flags.mif index 6905bb7c93..0df2e6027f 100644 --- a/bld/clib/flags.mif +++ b/bld/clib/flags.mif @@ -37,7 +37,7 @@ clib_cpp_flags += $(clib_cpp_flags_$(system)) $(clib_cpp_flags_$(system)_$(proce ########################## # C COMPILER SETINGS ###### -sw_c_common = $(watcom_common_cflags)-we-j-za99-zl-x-xx-zam-wpx +sw_c_common = $(watcom_common_cflags)-we-j-zastd=c99-zl-x-xx-zam-wpx !ifneq debug 0 !else sw_c_common += -s diff --git a/bld/f77/f77lib/flags.mif b/bld/f77/f77lib/flags.mif index 78d33fa0c0..6e66549993 100644 --- a/bld/f77/f77lib/flags.mif +++ b/bld/f77/f77lib/flags.mif @@ -22,7 +22,7 @@ f77lib_cpp_flags += $(f77lib_cpp_$(system)) $(f77lib_cpp_$(system)_$(processor)) ########################## # C COMPILER SETINGS ###### -sw_c_common = $(watcom_common_cflags)-j-za99-we-zl-x-xx-zam-wpx +sw_c_common = $(watcom_common_cflags)-j-zastd=c99-we-zl-x-xx-zam-wpx !ifneq debug 0 !else sw_c_common += -s diff --git a/bld/f77/wfc/c/fcgmain.c b/bld/f77/wfc/c/fcgmain.c index 8641c71e60..79d79e6ea0 100644 --- a/bld/f77/wfc/c/fcgmain.c +++ b/bld/f77/wfc/c/fcgmain.c @@ -2,7 +2,7 @@ * * Open Watcom Project * -* Copyright (c) 2002-2022 The Open Watcom Contributors. All Rights Reserved. +* Copyright (c) 2002-2023 The Open Watcom Contributors. All Rights Reserved. * Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. * * ======================================================================== @@ -297,16 +297,6 @@ static void CGStart( void ) SET_CPU( cpu, CPU_686 ); } - // set floating-point model - - SET_FPU( cpu, FPU_NONE ); // floating-point calls - if( CPUOpts & CPUOPT_FPI ) { - SET_FPU_EMU( cpu ); - } - if( CPUOpts & CPUOPT_FPI87 ) { - SET_FPU_INLINE( cpu ); - } - // Set Floating-point level if( CPUOpts & CPUOPT_FP287 ) { @@ -326,6 +316,19 @@ static void CGStart( void ) #endif } + // set floating-point model + + if( CPUOpts & (CPUOPT_FPI | CPUOPT_FPI87) ) { + if( CPUOpts & CPUOPT_FPI ) { + SET_FPU_EMU( cpu ); + } + if( CPUOpts & CPUOPT_FPI87 ) { + SET_FPU_INLINE( cpu ); + } + } else { + SET_FPU_FPC( cpu ); // floating-point calls + } + if( CPUOpts & CPUOPT_FPD ) { cg_target_opts |= CGSW_X86_P5_DIVIDE_CHECK; } @@ -366,7 +369,7 @@ static void CGStart( void ) } } #if _INTEL_CPU - if( GET_FPU( cpu ) > FPU_NONE ) { + if( !GET_FPU_FPC( cpu ) ) { CGFlags |= CG_FP_MODEL_80x87; } #endif diff --git a/bld/mathlib/flags.mif b/bld/mathlib/flags.mif index 5c80bf6c85..651cd97143 100644 --- a/bld/mathlib/flags.mif +++ b/bld/mathlib/flags.mif @@ -1,7 +1,7 @@ !ifneq debug 0 -sw_c_common = $(watcom_common_cflags)-j-za99-we-x-xx-zam-oax-zl-wpx +sw_c_common = $(watcom_common_cflags)-j-zastd=c99-we-x-xx-zam-oax-zl-wpx !else -sw_c_common = $(watcom_common_cflags)-j-za99-we-x-xx-zam-s-oax-zl-wpx +sw_c_common = $(watcom_common_cflags)-j-zastd=c99-we-x-xx-zam-s-oax-zl-wpx !endif !ifdef __UNIX__ sw_c_common += -fo=.obj diff --git a/bld/plusplus/c/cginfo.c b/bld/plusplus/c/cginfo.c index 3037ac9ce1..20c6076b35 100644 --- a/bld/plusplus/c/cginfo.c +++ b/bld/plusplus/c/cginfo.c @@ -489,7 +489,7 @@ static const inline_funcs *InlineLookup( NAME name ) { const inline_funcs *ifunc; - if( GET_FPU( CpuSwitches ) > FPU_NONE ) { + if( !GET_FPU_FPC( CpuSwitches ) ) { ifunc = _8087_Functions; while( ifunc->name ) { if( strcmp( ifunc->name, NameStr( name ) ) == 0 ) @@ -1106,7 +1106,7 @@ static void addDefaultImports( void ) CgInfoAddImport( "__init_387_emulator" ); #endif } - if( GET_FPU( CpuSwitches ) > FPU_NONE ) { + if( !GET_FPU_FPC( CpuSwitches ) ) { if( Stack87 == 4 ) { CgInfoAddImport( "__old_8087" ); } else { diff --git a/bld/plusplus/c/cmdlnx86.c b/bld/plusplus/c/cmdlnx86.c index 3e41873fc5..8ef8d95685 100644 --- a/bld/plusplus/c/cmdlnx86.c +++ b/bld/plusplus/c/cmdlnx86.c @@ -77,10 +77,6 @@ void CmdSysInit( void ) { GenSwitches = DEF_CGSW_GEN_SWITCHES | DEF_CGSW_GEN_SWITCHES_ALL; TargetSwitches = DEF_CGSW_X86_SWITCHES; - SET_CPU( CpuSwitches, DEFAULT_CPU ); - SET_FPU( CpuSwitches, DEFAULT_FPU ); - SET_FPU_EMU( CpuSwitches ); - Stack87 = 8; CodeClassName = NULL; TextSegName = CMemStrDup( "" ); DataSegName = CMemStrDup( "" ); @@ -139,22 +135,16 @@ static void defineM_IX86Macro( void ) unsigned cpu; char buff[32]; - strcpy( buff, "_M_IX86=" ); -#if _CPU == 8086 - cpu = 0; -#else - cpu = 3; -#endif switch( GET_CPU( CpuSwitches ) ) { case CPU_86: cpu = 0; break; - case CPU_186: cpu = 1; break; - case CPU_286: cpu = 2; break; - case CPU_386: cpu = 3; break; - case CPU_486: cpu = 4; break; - case CPU_586: cpu = 5; break; - case CPU_686: cpu = 6; break; - } - ConcatBase10( buff, cpu * 100 ); + case CPU_186: cpu = 100; break; + case CPU_286: cpu = 200; break; + case CPU_386: cpu = 300; break; + case CPU_486: cpu = 400; break; + case CPU_586: cpu = 500; break; + case CPU_686: cpu = 600; break; + } + sprintf( buff, "_M_IX86=%u", cpu ); PreDefineStringMacro( buff ); } @@ -621,15 +611,16 @@ static void setMemoryModel( OPT_STORAGE *data ) strcpy( WCPPLIB_Name, "4plib?" ); } } - if( GET_FPU_EMU( CpuSwitches ) ) { - strcpy( MATHLIB_Name, "7math87?" ); - EmuLib_Name = "8emu87"; - } else if( GET_FPU_LEVEL( CpuSwitches ) == FPU_NONE ) { + if( GET_FPU_FPC( CpuSwitches ) ) { strcpy( MATHLIB_Name, "5math?" ); EmuLib_Name = NULL; } else { strcpy( MATHLIB_Name, "7math87?" ); - EmuLib_Name = "8noemu87"; + if( GET_FPU_EMU( CpuSwitches ) ) { + EmuLib_Name = "8emu87"; + } else { + EmuLib_Name = "8noemu87"; + } } #else target_win = ( TargetSystem == TS_WINDOWS ); @@ -688,14 +679,7 @@ static void setMemoryModel( OPT_STORAGE *data ) strcpy( WCPPLIB_Name, "4plib3?" ); } } - if( GET_FPU_EMU( CpuSwitches ) ) { - if( data->br ) { - strcpy( MATHLIB_Name, "7mt7?dll" ); - } else { - strcpy( MATHLIB_Name, "7math387?" ); - } - EmuLib_Name = "8emu387"; - } else if( GET_FPU_LEVEL( CpuSwitches ) == FPU_NONE ) { + if( GET_FPU_FPC( CpuSwitches ) ) { if( data->br ) { strcpy( MATHLIB_Name, "5mth?dll" ); } else { @@ -708,7 +692,11 @@ static void setMemoryModel( OPT_STORAGE *data ) } else { strcpy( MATHLIB_Name, "7math387?" ); } - EmuLib_Name = "8noemu387"; + if( GET_FPU_EMU( CpuSwitches ) ) { + EmuLib_Name = "8emu387"; + } else { + EmuLib_Name = "8noemu387"; + } } *strchr( CDLL_Name, '?' ) = lib_model; *strchr( WCPPDLL_Name, '?' ) = lib_model; @@ -724,6 +712,7 @@ static void setIntelArchitecture( OPT_STORAGE *data ) { #if _CPU == 8086 switch( data->arch_i86 ) { + case OPT_ENUM_arch_i86_default: case OPT_ENUM_arch_i86__0: SET_CPU( CpuSwitches, CPU_86 ); break; @@ -776,6 +765,7 @@ static void setIntelArchitecture( OPT_STORAGE *data ) CompFlags.register_conventions = false; SET_CPU( CpuSwitches, CPU_686 ); break; + case OPT_ENUM_arch_386_default: case OPT_ENUM_arch_386__6r: CompFlags.register_conventions = true; SET_CPU( CpuSwitches, CPU_686 ); @@ -786,7 +776,81 @@ static void setIntelArchitecture( OPT_STORAGE *data ) CompFlags.register_conventions = false; } #endif - defineM_IX86Macro(); + + switch( data->intel_fpu_level ) { + case OPT_ENUM_intel_fpu_level_fp6: + SET_FPU_LEVEL( CpuSwitches, FPU_686 ); + break; + case OPT_ENUM_intel_fpu_level_fp5: + SET_FPU_LEVEL( CpuSwitches, FPU_586 ); + break; +#if _CPU == 386 + case OPT_ENUM_intel_fpu_level_default: +#endif + case OPT_ENUM_intel_fpu_level_fp3: + SET_FPU_LEVEL( CpuSwitches, FPU_387 ); + break; +#if _CPU == 8086 + case OPT_ENUM_intel_fpu_level_default: +#endif + case OPT_ENUM_intel_fpu_level_fp2: + SET_FPU_LEVEL( CpuSwitches, FPU_87 ); + break; + } + switch( data->intel_fpu_model ) { + case OPT_ENUM_intel_fpu_model_default: + case OPT_ENUM_intel_fpu_model_fpi: +#if _CPU == 386 + if( TargetSystem != TS_WINDOWS ) { +#endif + SET_FPU_EMU( CpuSwitches ); + break; +#if _CPU == 386 + } + /* fall through */ +#endif + case OPT_ENUM_intel_fpu_model_fpi87: + SET_FPU_INLINE( CpuSwitches ); + break; + case OPT_ENUM_intel_fpu_model_fpc: + SET_FPU_FPC( CpuSwitches ); + CompFlags.op_switch_used = false; + break; + } + + if( data->fpd ) { + TargetSwitches |= CGSW_X86_P5_DIVIDE_CHECK; + } + /* + * If using NetWare, set Stack87 unless the target + * is NetWare 5 or higher. + */ + if( data->fpr ) { + Stack87 = 4; + } else if( TargetSystem == TS_NETWARE ) { + Stack87 = 4; + } else { + Stack87 = 8; + } + if( data->_87d ) { + if( data->_87d_value > 0 ) { + Stack87 = data->_87d_value; + } + } + + if( data->zfw ) { + TargetSwitches |= CGSW_X86_GEN_FWAIT_386; + } + switch( data->fp_rounding ) { + case OPT_ENUM_fp_rounding_zri: + GenSwitches |= CGSW_GEN_FPU_ROUNDING_INLINE; + break; + case OPT_ENUM_fp_rounding_zro: + GenSwitches |= CGSW_GEN_FPU_ROUNDING_OMIT; + break; + default: + break; + } } static void defineFSRegistration( void ) @@ -803,15 +867,6 @@ static void defineFSRegistration( void ) #endif } -static void defEmu( void ) -{ - if( GET_FPU_EMU( CpuSwitches ) ) { - DefSwitchMacro( "FPI" ); - } else { - DefSwitchMacro( "FPI87" ); - } -} - static void macroDefs( void ) { if( GenSwitches & CGSW_GEN_I_MATH_INLINE ) { @@ -1002,28 +1057,33 @@ static void macroDefs( void ) DefSwitchMacro( "6" ); break; } + + defineM_IX86Macro(); + switch( GET_FPU_LEVEL( CpuSwitches ) ) { - case FPU_NONE: - CompFlags.op_switch_used = false; - DefSwitchMacro( "FPC" ); - break; case FPU_87: DefSwitchMacro( "FP287" ); - defEmu(); break; case FPU_387: DefSwitchMacro( "FP387" ); - defEmu(); break; case FPU_586: DefSwitchMacro( "FP5" ); - defEmu(); break; case FPU_686: DefSwitchMacro( "FP6" ); - defEmu(); break; } + if( GET_FPU_FPC( CpuSwitches ) ) { + DefSwitchMacro( "FPC" ); + } else { + if( GET_FPU_EMU( CpuSwitches ) ) { + DefSwitchMacro( "FPI" ); + } else { + DefSwitchMacro( "FPI87" ); + } + PreDefineStringMacro( "__FPI__" ); + } if( CompFlags.op_switch_used ) { DefSwitchMacro( "OP" ); } @@ -1069,9 +1129,6 @@ static void miscAnalysis( OPT_STORAGE *data ) HW_CTurnOff( WatcallInfo.save, HW_GS ); } } - if( GET_FPU( CpuSwitches ) > FPU_NONE ) { - PreDefineStringMacro( "__FPI__" ); - } #if _CPU == 386 if( !CompFlags.register_conventions ) { SetAuxStackConventions(); @@ -1111,78 +1168,13 @@ void CmdSysAnalyse( OPT_STORAGE *data ) break; } - if( data->zfw ) { - TargetSwitches |= CGSW_X86_GEN_FWAIT_386; - } - if( data->zro - && data->zri ) { -// DbgDefault( "invalid fp rounding flags - ignored" ); - data->zro = data->zri = 0; - } else if( data->zri ) { - GenSwitches |= CGSW_GEN_FPU_ROUNDING_INLINE; - } else if( data->zro ) { - GenSwitches |= CGSW_GEN_FPU_ROUNDING_OMIT; - } - setIntelArchitecture( data ); - switch( data->intel_fpu_model ) { - case OPT_ENUM_intel_fpu_model_fpi: - SET_FPU_EMU( CpuSwitches ); - break; -#ifdef OPT_ENUM_intel_fpu_model__7 - case OPT_ENUM_intel_fpu__7: - /* fall through */ -#endif - case OPT_ENUM_intel_fpu_model_fpi87: - SET_FPU_INLINE( CpuSwitches ); - break; - case OPT_ENUM_intel_fpu_model_fpc: - SET_FPU( CpuSwitches, FPU_NONE ); - break; - case OPT_ENUM_intel_fpu_model__87d: - if( data->_87d_value ) { - Stack87 = data->_87d_value; - } - break; - } -#if _CPU == 386 - if( TargetSystem == TS_WINDOWS ) { - SET_FPU_INLINE( CpuSwitches ); - } -#endif - - switch( data->intel_fpu_level ) { - case OPT_ENUM_intel_fpu_level_fp6: - SET_FPU_LEVEL( CpuSwitches, FPU_686 ); - break; - case OPT_ENUM_intel_fpu_level_fp5: - SET_FPU_LEVEL( CpuSwitches, FPU_586 ); - break; - case OPT_ENUM_intel_fpu_level_fp3: - SET_FPU_LEVEL( CpuSwitches, FPU_387 ); - break; - case OPT_ENUM_intel_fpu_level_fp2: - SET_FPU_LEVEL( CpuSwitches, FPU_87 ); - break; - } /* * depends on architecture and fpu being set */ setMemoryModel( data ); - if( data->fpd ) { - TargetSwitches |= CGSW_X86_P5_DIVIDE_CHECK; - } - /* - * If using NetWare, set Stack87 unless the target - * is NetWare 5 or higher. - */ - if( data->fpr ) { - Stack87 = 4; - } else if( TargetSystem == TS_NETWARE ) { - Stack87 = 4; - } if( data->g ) { SetStringOption( &GenCodeGroup, &(data->g_value) ); } diff --git a/bld/plusplus/gml/options.gml b/bld/plusplus/gml/options.gml index f2360be0f7..8bd698dd56 100644 --- a/bld/plusplus/gml/options.gml +++ b/bld/plusplus/gml/options.gml @@ -630,7 +630,6 @@ :option. 87d :target. i86 386 :number. CmdX86CheckStack87 0 -:enumerate. intel_fpu_model :internal. :usage. inline 80x87 instructions with specified depth :jusage. 指定した深さのインライン80x87命令 @@ -1410,11 +1409,13 @@ :option. zro :target. any +:enumerate. fp_rounding :usage. omit floating point rounding calls (non ANSI) :jusage. omit floating point rounding calls (non ANSI) :option. zri :target. i86 386 +:enumerate. fp_rounding :usage. inline floating point rounding calls :jusage. inline floating point rounding calls