fpc/compiler/i386/cpuswtch.pas
peter b10e754536 * alignmentinfo record added
* -Oa argument supports more alignment settings that can be specified
    per type: PROC,LOOP,VARMIN,VARMAX,CONSTMIN,CONSTMAX,RECORDMIN
    RECORDMAX,LOCALMIN,LOCALMAX. It is possible to set the mimimum
    required alignment and the maximum usefull alignment. The final
    alignment will be choosen per variable size dependent on these
    settings
2001-07-01 20:16:15 +00:00

185 lines
6.2 KiB
ObjectPascal

{
$Id$
Copyright (c) 1998-2000 by Florian Klaempfl, Pierre Muller
interprets the commandline options which are i386 specific
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
****************************************************************************
}
unit cpuswtch;
{$i defines.inc}
interface
uses
options;
type
toption386=class(toption)
procedure interpret_proc_specific_options(const opt:string);override;
end;
implementation
uses
cutils,globtype,systems,globals;
procedure toption386.interpret_proc_specific_options(const opt:string);
var
j : longint;
More : string;
begin
More:=Upper(copy(opt,3,length(opt)-2));
case opt[2] of
'O' : Begin
j := 3;
While (j <= Length(Opt)) Do
Begin
case opt[j] of
'-' :
begin
initglobalswitches:=initglobalswitches-[cs_optimize,cs_fastoptimize,cs_slowoptimize,cs_littlesize,
cs_regalloc,cs_uncertainopts];
FillChar(ParaAlignment,sizeof(ParaAlignment),0);
end;
'a' :
begin
UpdateAlignmentStr(Copy(Opt,j+1,255),ParaAlignment);
j:=length(Opt);
end;
'g' : initglobalswitches:=initglobalswitches+[cs_littlesize];
'G' : initglobalswitches:=initglobalswitches-[cs_littlesize];
'r' :
begin
initglobalswitches:=initglobalswitches+[cs_regalloc];
Simplify_ppu:=false;
end;
'u' : initglobalswitches:=initglobalswitches+[cs_uncertainopts];
'1' : initglobalswitches:=initglobalswitches-[cs_fastoptimize,cs_slowoptimize]+[cs_optimize];
'2' : initglobalswitches:=initglobalswitches-[cs_slowoptimize]+[cs_optimize,cs_fastoptimize];
'3' : initglobalswitches:=initglobalswitches+[cs_optimize,cs_fastoptimize,cs_slowoptimize];
'p' :
Begin
If j < Length(Opt) Then
Begin
Case opt[j+1] Of
'1': initoptprocessor := Class386;
'2': initoptprocessor := ClassP5;
'3': initoptprocessor := ClassP6
Else IllegalPara(Opt)
End;
Inc(j);
End
Else IllegalPara(opt)
End;
{$ifdef USECMOV}
's' :
Begin
If j < Length(Opt) Then
Begin
Case opt[j+1] Of
'3': initspecificoptprocessor:=ClassP6
Else IllegalPara(Opt)
End;
Inc(j);
End
Else IllegalPara(opt)
End
{$endif USECMOV}
else IllegalPara(opt);
End;
Inc(j)
end;
end;
'R' : begin
if More='ATT' then
initasmmode:=asmmode_i386_att
else
if More='INTEL' then
initasmmode:=asmmode_i386_intel
else
if More='DIRECT' then
initasmmode:=asmmode_i386_direct
else
IllegalPara(opt);
end;
else
IllegalPara(opt);
end;
end;
initialization
coption:=toption386;
end.
{
$Log$
Revision 1.4 2001-07-01 20:16:20 peter
* alignmentinfo record added
* -Oa argument supports more alignment settings that can be specified
per type: PROC,LOOP,VARMIN,VARMAX,CONSTMIN,CONSTMAX,RECORDMIN
RECORDMAX,LOCALMIN,LOCALMAX. It is possible to set the mimimum
required alignment and the maximum usefull alignment. The final
alignment will be choosen per variable size dependent on these
settings
Revision 1.3 2001/05/12 12:11:31 peter
* simplify_ppu is now the default, a recompile of the compiler now
only compiles pp.pas
Revision 1.2 2000/12/23 19:46:49 peter
* object to class conversion
* more verbosity for -vt and -vd
* -i options can be put after eachother so the Makefiles only need
to call fpc once for all info (will be twice as the first one will
be to check the version if fpc supports multiple info)
Revision 1.1 2000/11/30 22:42:50 florian
* renamed
Revision 1.1 2000/11/30 22:21:56 florian
* moved to i386
Revision 1.6 2000/10/24 10:40:53 jonas
+ register renaming ("fixes" bug1088)
* changed command line options meanings for optimizer:
O2 now means peepholopts, CSE and register renaming in 1 pass
O3 is the same, but repeated until no further optimizations are
possible or until 5 passes have been done (to avoid endless loops)
* changed aopt386 so it does this looping
* added some procedures from csopt386 to the interface because they're
used by rropt386 as well
* some changes to csopt386 and daopt386 so that newly added instructions
by the CSE get optimizer info (they were simply skipped previously),
this fixes some bugs
Revision 1.5 2000/09/24 15:06:20 peter
* use defines.inc
Revision 1.4 2000/08/27 16:11:51 peter
* moved some util functions from globals,cobjects to cutils
* splitted files into finput,fmodule
Revision 1.3 2000/07/27 13:03:36 jonas
* release alignopts
Revision 1.2 2000/07/13 11:32:44 michael
+ removed logs
}