diff options
Diffstat (limited to 'compiler/i386/cpuswtch.pas')
-rw-r--r-- | compiler/i386/cpuswtch.pas | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/compiler/i386/cpuswtch.pas b/compiler/i386/cpuswtch.pas new file mode 100644 index 0000000000..5893bbe508 --- /dev/null +++ b/compiler/i386/cpuswtch.pas @@ -0,0 +1,115 @@ +{ + Copyright (c) 1998-2002 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 fpcdefs.inc} + +interface + +uses + options; + +type + toption386=class(toption) + procedure interpret_proc_specific_options(const opt:string);override; + end; + +implementation + +uses + cutils,globtype,systems,globals,cpuinfo; + +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_regvars,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_regvars]; + 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 := ClassPentium; + '3': initoptprocessor := ClassPentium2; + '4': initoptprocessor := ClassPentium4; + Else IllegalPara(Opt) + End; + Inc(j); + End + Else IllegalPara(opt) + End; + 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='STANDARD') or (More='DEFAULT') then + initasmmode:=asmmode_standard + else + IllegalPara(opt); + end; + else + IllegalPara(opt); + end; +end; + + +initialization + coption:=toption386; +end. |