void PragmaInit( void ) /*********************/ { int cpu; int fpu; pragmaAuxInfoInit(); AsmFuncNum = 0; switch( GET_CPU( ProcRevision ) ) { 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; #if _CPU == 8086 default: cpu = 0; break; #else default: cpu = 3; break; #endif } switch( GET_FPU_LEVEL( ProcRevision ) ) { case FPU_NONE: fpu = 0; break; case FPU_87: fpu = 1; break; // case FPU_287: fpu = 2; break; case FPU_387: fpu = 3; break; case FPU_586: fpu = 3; break; case FPU_686: fpu = 3; break; #if _CPU == 8086 default: fpu = 1; break; #else default: fpu = 3; break; #endif } #if _CPU == 8086 AsmInit( 0, cpu, fpu, GET_FPU_EMU( ProcRevision ) ); #else AsmInit( 1, cpu, fpu, FALSE ); #endif }
static void assemblerInit( // INITIALIZATION OF ASSEMBLER INITFINI* defn ) // - definition { int cpu; int fpu; defn = defn; 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; #if _CPU == 8086 default: cpu = 0; break; #else default: cpu = 3; break; #endif } switch( GET_FPU_LEVEL( CpuSwitches ) ) { case FPU_NONE: fpu = 0; break; case FPU_87: fpu = 1; break; // case FPU_287: fpu = 2; break; case FPU_387: fpu = 3; break; case FPU_586: fpu = 3; break; case FPU_686: fpu = 3; break; #if _CPU == 8086 default: fpu = 1; break; #else default: fpu = 3; break; #endif } #if _CPU == 8086 AsmInit( 0, cpu, fpu, GET_FPU_EMU( CpuSwitches ) ); #else AsmInit( 1, cpu, fpu, FALSE ); #endif }
static void miscAnalysis( OPT_STORAGE *data ) { #if _CPU == 8086 if( data->bd || data->zu ) { if( TargetSwitches & SMART_WINDOWS ) { CErr1( ERR_ZWS_MUST_HAVE_SS_DS_SAME ); } } #endif if( GET_CPU( CpuSwitches ) < CPU_386 ) { /* issue warning message if /zf[f|p] or /zg[f|p] spec'd? */ TargetSwitches &= ~( FLOATING_FS | FLOATING_GS ); } if( ! CompFlags.save_restore_segregs ) { if( TargetSwitches & FLOATING_DS ) { HW_CTurnOff( WatcallInfo.save, HW_DS ); } if( TargetSwitches & FLOATING_ES ) { HW_CTurnOff( WatcallInfo.save, HW_ES ); } if( TargetSwitches & FLOATING_FS ) { HW_CTurnOff( WatcallInfo.save, HW_FS ); } if( TargetSwitches & FLOATING_GS ) { HW_CTurnOff( WatcallInfo.save, HW_GS ); } } if( GET_FPU( CpuSwitches ) > FPU_NONE ) { PreDefineStringMacro( "__FPI__" ); } #if _CPU == 386 if( ! CompFlags.register_conventions ) { SetAuxStackConventions(); } #endif if( data->zx ) { HW_CTurnOff( WatcallInfo.save, HW_FLTS ); } }
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 ); PreDefineStringMacro( buff ); }
static void macroDefs( void ) { if( TargetSwitches & I_MATH_INLINE ) { DefSwitchMacro( "OM" ); } switch( TargetSwitches & (BIG_DATA|BIG_CODE|CHEAP_POINTER|FLAT_MODEL) ) { case CHEAP_POINTER: DefSwitchMacro( "MS" ); break; case BIG_CODE|CHEAP_POINTER: DefSwitchMacro( "MM" ); break; case BIG_DATA|CHEAP_POINTER: DefSwitchMacro( "MC" ); break; case BIG_CODE|BIG_DATA|CHEAP_POINTER: DefSwitchMacro( "ML" ); break; case BIG_CODE|BIG_DATA: DefSwitchMacro( "MH" ); break; case FLAT_MODEL|CHEAP_POINTER: DefSwitchMacro( "MF" ); break; } if( TargetSwitches & FLOATING_FS ) { DefSwitchMacro( "ZFF" ); } else { DefSwitchMacro( "ZFP" ); } if( TargetSwitches & FLOATING_GS ) { DefSwitchMacro( "ZGF" ); } else { DefSwitchMacro( "ZGP" ); } if( TargetSwitches & FLOATING_DS ) { DefSwitchMacro( "ZDF" ); } else { DefSwitchMacro( "ZDP" ); } if( TargetSwitches & FLOATING_SS ) { DefSwitchMacro( "ZU" ); } if( TargetSwitches & INDEXED_GLOBALS ) { DefSwitchMacro( "XGV" ); } if( TargetSwitches & WINDOWS ) { DefSwitchMacro( "ZW" ); } if( TargetSwitches & SMART_WINDOWS ) { DefSwitchMacro( "ZWS" ); } if( TargetSwitches & NO_CALL_RET_TRANSFORM ) { DefSwitchMacro( "OC" ); } if( TargetSwitches & NEED_STACK_FRAME ) { DefSwitchMacro( "OF" ); } if( GenSwitches & NO_OPTIMIZATION ) { DefSwitchMacro( "OD" ); } if( GenSwitches & RELAX_ALIAS ) { DefSwitchMacro( "OA" ); } if( GenSwitches & BRANCH_PREDICTION ) { DefSwitchMacro( "OB" ); } if( GenSwitches & LOOP_OPTIMIZATION ) { DefSwitchMacro( "OL" ); } if( GenSwitches & INS_SCHEDULING ) { DefSwitchMacro( "OR" ); } if( GenSwitches & FPU_ROUNDING_INLINE ) { DefSwitchMacro( "ZRI" ); } if( GenSwitches & FPU_ROUNDING_OMIT ) { DefSwitchMacro( "ZRO" ); } if( TargetSwitches & GEN_FWAIT_386 ) { DefSwitchMacro( "ZFW" ); } if( CompFlags.signed_char ) { DefSwitchMacro( "J" ); } if( CompFlags.use_pcheaders ) { DefSwitchMacro( "FH" ); } if( CompFlags.no_pch_warnings ) { DefSwitchMacro( "FHQ" ); } if( CompFlags.inline_intrinsics ) { DefSwitchMacro( "OI" ); } if( CompFlags.zu_switch_used ) { DefSwitchMacro( "ZU" ); } if( CompFlags.unique_functions ) { DefSwitchMacro( "OU" ); } #if _CPU == 386 if( CompFlags.register_conventions ) { DefSwitchMacro( "3R" ); } else { DefSwitchMacro( "3S" ); } #endif if( CompFlags.emit_names ) { DefSwitchMacro( "EN" ); } if( CompFlags.save_restore_segregs ) { DefSwitchMacro( "R" ); } if( CompFlags.zc_switch_used ) { DefSwitchMacro( "ZC" ); } if( CompFlags.use_unicode ) { DefSwitchMacro( "ZK" ); } if( CompFlags.sg_switch_used ) { DefSwitchMacro( "SG" ); } if( CompFlags.st_switch_used ) { DefSwitchMacro( "ST" ); } if( CompFlags.bm_switch_used ) { PreDefineStringMacro( "_MT" ); DefSwitchMacro( "BM" ); } if( CompFlags.bd_switch_used ) { DefSwitchMacro( "BD" ); } if( CompFlags.br_switch_used ) { PreDefineStringMacro( "_DLL" ); DefSwitchMacro( "BR" ); } if( CompFlags.bw_switch_used ) { DefSwitchMacro( "BW" ); } if( CompFlags.zm_switch_used ) { DefSwitchMacro( "ZM" ); } if( CompFlags.ep_switch_used ) { DefSwitchMacro( "EP" ); } if( CompFlags.ee_switch_used ) { DefSwitchMacro( "EE" ); } switch( CompInfo.dt_method_speced ) { case DTM_DIRECT : DefSwitchMacro( "XDT" ); DefSwitchMacro( "XD" ); break; case DTM_DIRECT_SMALL : DefSwitchMacro( "XDS" ); break; case DTM_TABLE : DefSwitchMacro( "XS" ); break; case DTM_DIRECT_TABLE : DefSwitchMacro( "XST" ); break; case DTM_TABLE_SMALL : DefSwitchMacro( "XSS" ); break; DbgDefault( "macroDefs -- invalid exception switch" ); } switch( GET_CPU( CpuSwitches ) ) { case CPU_86: DefSwitchMacro( "0" ); break; case CPU_186: DefSwitchMacro( "1" ); break; case CPU_286: DefSwitchMacro( "2" ); break; case CPU_386: DefSwitchMacro( "3" ); break; case CPU_486: DefSwitchMacro( "4" ); break; case CPU_586: DefSwitchMacro( "5" ); break; case CPU_686: DefSwitchMacro( "6" ); break; } switch( GET_FPU_LEVEL( CpuSwitches ) ) { case FPU_NONE: CompFlags.op_switch_used = 0; 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( CompFlags.op_switch_used ) { DefSwitchMacro( "OP" ); } PreDefineStringMacro( "_INTEGRAL_MAX_BITS=64" ); #if _CPU == 386 PreDefineStringMacro( "_STDCALL_SUPPORTED" ); #endif if( CompFlags.oldmacros_enabled ) { #if _CPU == 8086 if( TargetSwitches & WINDOWS ) { PreDefineStringMacro( "SOMLINK=__cdecl" ); PreDefineStringMacro( "SOMDLINK=__far" ); } #else PreDefineStringMacro( "SOMLINK=_Syscall" ); PreDefineStringMacro( "SOMDLINK=_Syscall" ); #endif } }