+ made the $W switch control the FarProcsPushOddBP target switch in the i8086

compiler (BP7 compatibility) instead of controlling stack frame elimination
  (which isn't supported by the compiler on i8086 anyway, due to i8086's lack
  of support for stack relative addressing)

git-svn-id: trunk@31834 -
This commit is contained in:
nickysn 2015-09-26 15:41:44 +00:00
parent e0aa6bf85f
commit ae533e4c77

View File

@ -42,7 +42,7 @@ procedure flushpendingswitchesstate;
implementation implementation
uses uses
systems,cpuinfo, systems,cpuinfo,
globals,verbose,comphook, globals,verbose,comphook,dirparse,
fmodule; fmodule;
{**************************************************************************** {****************************************************************************
@ -50,7 +50,7 @@ uses
****************************************************************************} ****************************************************************************}
type type
TSwitchType=(ignoredsw,localsw,modulesw,globalsw,illegalsw,unsupportedsw,alignsw,optimizersw,packenumsw,pentiumfdivsw); TSwitchType=(ignoredsw,localsw,modulesw,globalsw,illegalsw,unsupportedsw,alignsw,optimizersw,packenumsw,pentiumfdivsw,targetsw);
SwitchRec=record SwitchRec=record
typesw : TSwitchType; typesw : TSwitchType;
setsw : byte; setsw : byte;
@ -85,7 +85,11 @@ const
{T} (typesw:localsw; setsw:ord(cs_typed_addresses)), {T} (typesw:localsw; setsw:ord(cs_typed_addresses)),
{U} (typesw:pentiumfdivsw; setsw:ord(cs_localnone)), {U} (typesw:pentiumfdivsw; setsw:ord(cs_localnone)),
{V} (typesw:localsw; setsw:ord(cs_strict_var_strings)), {V} (typesw:localsw; setsw:ord(cs_strict_var_strings)),
{$ifdef i8086}
{W} (typesw:targetsw; setsw:ord(ts_x86_far_procs_push_odd_bp)),
{$else i8086}
{W} (typesw:localsw; setsw:ord(cs_generate_stackframes)), {W} (typesw:localsw; setsw:ord(cs_generate_stackframes)),
{$endif i8086}
{X} (typesw:modulesw; setsw:ord(cs_extsyntax)), {X} (typesw:modulesw; setsw:ord(cs_extsyntax)),
{Y} (typesw:unsupportedsw; setsw:ord(cs_localnone)), {Y} (typesw:unsupportedsw; setsw:ord(cs_localnone)),
{Z} (typesw:packenumsw; setsw:ord(cs_localnone)) {Z} (typesw:packenumsw; setsw:ord(cs_localnone))
@ -119,7 +123,11 @@ const
{T} (typesw:localsw; setsw:ord(cs_typed_addresses)), {T} (typesw:localsw; setsw:ord(cs_typed_addresses)),
{U} (typesw:illegalsw; setsw:ord(cs_localnone)), {U} (typesw:illegalsw; setsw:ord(cs_localnone)),
{V} (typesw:localsw; setsw:ord(cs_strict_var_strings)), {V} (typesw:localsw; setsw:ord(cs_strict_var_strings)),
{$ifdef i8086}
{W} (typesw:targetsw; setsw:ord(ts_x86_far_procs_push_odd_bp)),
{$else i8086}
{W} (typesw:localsw; setsw:ord(cs_generate_stackframes)), {W} (typesw:localsw; setsw:ord(cs_generate_stackframes)),
{$endif i8086}
{X} (typesw:modulesw; setsw:ord(cs_extsyntax)), {X} (typesw:modulesw; setsw:ord(cs_extsyntax)),
{Y} (typesw:unsupportedsw; setsw:ord(cs_localnone)), {Y} (typesw:unsupportedsw; setsw:ord(cs_localnone)),
{Z} (typesw:localsw; setsw:ord(cs_externally_visible)) {Z} (typesw:localsw; setsw:ord(cs_externally_visible))
@ -222,6 +230,8 @@ begin
if state='+' then if state='+' then
Message1(scan_w_unsupported_switch,'$'+switch); Message1(scan_w_unsupported_switch,'$'+switch);
end; end;
targetsw:
UpdateTargetSwitchStr(TargetSwitchStr[ttargetswitch(setsw)].name+state,current_settings.targetswitches,current_module.in_global);
end; end;
end; end;
end; end;