cpuswtch.pas 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. {
  2. $Id$
  3. Copyright (c) 1998-2000 by Florian Klaempfl, Pierre Muller
  4. interprets the commandline options which are i386 specific
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program; if not, write to the Free Software
  15. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16. ****************************************************************************
  17. }
  18. unit cpuswtch;
  19. {$i fpcdefs.inc}
  20. interface
  21. uses
  22. options;
  23. type
  24. toption386=class(toption)
  25. procedure interpret_proc_specific_options(const opt:string);override;
  26. end;
  27. implementation
  28. uses
  29. cutils,globtype,systems,globals;
  30. procedure toption386.interpret_proc_specific_options(const opt:string);
  31. var
  32. j : longint;
  33. More : string;
  34. begin
  35. More:=Upper(copy(opt,3,length(opt)-2));
  36. case opt[2] of
  37. 'O' : Begin
  38. j := 3;
  39. While (j <= Length(Opt)) Do
  40. Begin
  41. case opt[j] of
  42. '-' :
  43. begin
  44. initglobalswitches:=initglobalswitches-[cs_optimize,cs_fastoptimize,cs_slowoptimize,cs_littlesize,
  45. cs_regalloc,cs_uncertainopts];
  46. FillChar(ParaAlignment,sizeof(ParaAlignment),0);
  47. end;
  48. 'a' :
  49. begin
  50. UpdateAlignmentStr(Copy(Opt,j+1,255),ParaAlignment);
  51. j:=length(Opt);
  52. end;
  53. 'g' : initglobalswitches:=initglobalswitches+[cs_littlesize];
  54. 'G' : initglobalswitches:=initglobalswitches-[cs_littlesize];
  55. 'r' :
  56. begin
  57. initglobalswitches:=initglobalswitches+[cs_regalloc];
  58. Simplify_ppu:=false;
  59. end;
  60. 'u' : initglobalswitches:=initglobalswitches+[cs_uncertainopts];
  61. '1' : initglobalswitches:=initglobalswitches-[cs_fastoptimize,cs_slowoptimize]+[cs_optimize];
  62. '2' : initglobalswitches:=initglobalswitches-[cs_slowoptimize]+[cs_optimize,cs_fastoptimize];
  63. '3' : initglobalswitches:=initglobalswitches+[cs_optimize,cs_fastoptimize,cs_slowoptimize];
  64. 'p' :
  65. Begin
  66. If j < Length(Opt) Then
  67. Begin
  68. Case opt[j+1] Of
  69. '1': initoptprocessor := Class386;
  70. '2': initoptprocessor := ClassP5;
  71. '3': initoptprocessor := ClassP6
  72. Else IllegalPara(Opt)
  73. End;
  74. Inc(j);
  75. End
  76. Else IllegalPara(opt)
  77. End;
  78. {$ifdef USECMOV}
  79. 's' :
  80. Begin
  81. If j < Length(Opt) Then
  82. Begin
  83. Case opt[j+1] Of
  84. '3': initspecificoptprocessor:=ClassP6
  85. Else IllegalPara(Opt)
  86. End;
  87. Inc(j);
  88. End
  89. Else IllegalPara(opt)
  90. End
  91. {$endif USECMOV}
  92. else IllegalPara(opt);
  93. End;
  94. Inc(j)
  95. end;
  96. end;
  97. 'R' : begin
  98. if More='ATT' then
  99. initasmmode:=asmmode_i386_att
  100. else
  101. if More='INTEL' then
  102. initasmmode:=asmmode_i386_intel
  103. else
  104. if More='DIRECT' then
  105. initasmmode:=asmmode_i386_direct
  106. else
  107. IllegalPara(opt);
  108. end;
  109. else
  110. IllegalPara(opt);
  111. end;
  112. end;
  113. initialization
  114. coption:=toption386;
  115. end.
  116. {
  117. $Log$
  118. Revision 1.6 2002-05-16 19:46:50 carl
  119. + defines.inc -> fpcdefs.inc to avoid conflicts if compiling by hand
  120. + try to fix temp allocation (still in ifdef)
  121. + generic constructor calls
  122. + start of tassembler / tmodulebase class cleanup
  123. Revision 1.4 2001/07/01 20:16:20 peter
  124. * alignmentinfo record added
  125. * -Oa argument supports more alignment settings that can be specified
  126. per type: PROC,LOOP,VARMIN,VARMAX,CONSTMIN,CONSTMAX,RECORDMIN
  127. RECORDMAX,LOCALMIN,LOCALMAX. It is possible to set the mimimum
  128. required alignment and the maximum usefull alignment. The final
  129. alignment will be choosen per variable size dependent on these
  130. settings
  131. Revision 1.3 2001/05/12 12:11:31 peter
  132. * simplify_ppu is now the default, a recompile of the compiler now
  133. only compiles pp.pas
  134. Revision 1.2 2000/12/23 19:46:49 peter
  135. * object to class conversion
  136. * more verbosity for -vt and -vd
  137. * -i options can be put after eachother so the Makefiles only need
  138. to call fpc once for all info (will be twice as the first one will
  139. be to check the version if fpc supports multiple info)
  140. Revision 1.1 2000/11/30 22:42:50 florian
  141. * renamed
  142. Revision 1.1 2000/11/30 22:21:56 florian
  143. * moved to i386
  144. Revision 1.6 2000/10/24 10:40:53 jonas
  145. + register renaming ("fixes" bug1088)
  146. * changed command line options meanings for optimizer:
  147. O2 now means peepholopts, CSE and register renaming in 1 pass
  148. O3 is the same, but repeated until no further optimizations are
  149. possible or until 5 passes have been done (to avoid endless loops)
  150. * changed aopt386 so it does this looping
  151. * added some procedures from csopt386 to the interface because they're
  152. used by rropt386 as well
  153. * some changes to csopt386 and daopt386 so that newly added instructions
  154. by the CSE get optimizer info (they were simply skipped previously),
  155. this fixes some bugs
  156. Revision 1.5 2000/09/24 15:06:20 peter
  157. * use defines.inc
  158. Revision 1.4 2000/08/27 16:11:51 peter
  159. * moved some util functions from globals,cobjects to cutils
  160. * splitted files into finput,fmodule
  161. Revision 1.3 2000/07/27 13:03:36 jonas
  162. * release alignopts
  163. Revision 1.2 2000/07/13 11:32:44 michael
  164. + removed logs
  165. }