+++ /dev/null
-Index: compiler/popt386.pas
-===================================================================
-RCS file: /FPC/CVS/fpc/compiler/Attic/popt386.pas,v
-retrieving revision 1.1.2.7
-retrieving revision 1.1.2.9
-diff -u -r1.1.2.7 -r1.1.2.9
---- compiler/popt386.pas 2000/12/05 09:55:09 1.1.2.7
-+++ compiler/popt386.pas 2001/01/10 10:27:55 1.1.2.9
-@@ -1,5 +1,5 @@
- {
-- $Id$
-+ $Id$
- Copyright (c) 1998-2000 by Florian Klaempfl and Jonas Maebe
-
- This unit contains the peephole optimizer.
-@@ -1510,16 +1510,16 @@
- If (AktOptProcessor < ClassP6) And
- GetNextInstruction(p, hp1) And
- (hp1^.typ = ait_instruction) And
-- (paicpu(hp1)^.opcode = A_JMP) Then
-+ (paicpu(hp1)^.opcode = A_JMP) And
-+ (paicpu(hp1)^.oper[0].typ = top_symbol) Then
- Begin
-- Inc(paicpu(hp1)^.oper[0].sym^.refs);
- hp2 := New(Paicpu,op_sym(A_PUSH,S_L,paicpu(hp1)^.oper[0].sym));
- InsertLLItem(AsmL, p^.previous, p, hp2);
- Paicpu(p)^.opcode := A_JMP;
-+ Paicpu(p)^.is_jmp := true;
- AsmL^.Remove(hp1);
- Dispose(hp1, Done)
- End;
--
- {$ifdef USECMOV}
- A_Jcc:
- if (aktspecificoptprocessor=ClassP6) then
-@@ -1760,6 +1760,12 @@
-
- {
- $Log$
-+ Revision 1.1.2.9 2001/01/10 10:27:55 jonas
-+ * really fixed problems with -Op2 opts
-+
-+ Revision 1.1.2.8 2001/01/07 15:46:36 jonas
-+ * fixed bug in call/jmp optimization with -Op1 and -Op2
-+
- Revision 1.1.2.7 2000/12/05 09:55:09 jonas
- - removed all newoptimizations stuff since it will never be active under
- 1.0.x anyway
-Index: compiler/cpuasm.pas
-===================================================================
-RCS file: /FPC/CVS/fpc/compiler/Attic/cpuasm.pas,v
-retrieving revision 1.1.2.2
-retrieving revision 1.1.2.5
-diff -u -r1.1.2.2 -r1.1.2.5
---- compiler/cpuasm.pas 2000/10/15 10:51:15 1.1.2.2
-+++ compiler/cpuasm.pas 2001/01/13 15:03:26 1.1.2.5
-@@ -1,5 +1,5 @@
- {
-- $Id$
-+ $Id$
- Copyright (c) 1998-2000 by Florian Klaempfl and Peter Vreman
-
- Contains the assembler object for the i386
-@@ -117,11 +117,13 @@
- procedure CheckNonCommutativeOpcodes;
- private
- segprefix : tregister;
-+ swapped : boolean;
- procedure init(op : tasmop;_size : topsize); { this need to be called by all constructor }
- {$ifndef NOAG386BIN}
- public
- { the next will reset all instructions that can change in pass 2 }
- procedure ResetPass2;
-+ function CheckIfValid:boolean;
- function Pass1(offset:longint):longint;virtual;
- procedure Pass2;virtual;
- private
-@@ -318,6 +320,7 @@
- begin
- typ:=ait_instruction;
- is_jmp:=false;
-+ swapped:=false;
- segprefix:=R_NO;
- opcode:=op;
- opsize:=_size;
-@@ -552,14 +555,15 @@
- var
- i : longint;
- begin
--{$ifndef nojmpfix}
-- if is_jmp then
-- dec(PasmLabel(oper[0].sym)^.refs)
-- else
--{$endif nojmpfix}
-- for i:=1 to ops do
-- if (oper[i-1].typ=top_ref) then
-- dispose(oper[i-1].ref);
-+ case oper[0].typ of
-+ top_ref:
-+ dispose(oper[0].ref);
-+ top_symbol:
-+ dec(Pasmsymbol(oper[0].sym)^.refs);
-+ end;
-+ for i:=2 to ops do
-+ if (oper[i-1].typ=top_ref) then
-+ dispose(oper[i-1].ref);
- inherited done;
- end;
-
-@@ -662,6 +666,8 @@
- var
- p : TOper;
- begin
-+ if Swapped then
-+ exit;
- { Fix the operands which are in AT&T style and we need them in Intel style }
- case ops of
- 2 : begin
-@@ -677,6 +683,7 @@
- oper[2]:=p;
- end;
- end;
-+ Swapped:=true;
- end;
-
- { This check must be done with the operand in ATT order
-@@ -932,20 +939,15 @@
- end;
-
-
--function taicpu.Pass1(offset:longint):longint;
-+function taicpu.CheckIfValid:boolean;
- var
- m,i : longint;
- begin
-- Pass1:=0;
--{ Save the old offset and set the new offset }
-- InsOffset:=Offset;
-+ CheckIfValid:=false;
- { Things which may only be done once, not when a second pass is done to
- optimize }
- if Insentry=nil then
- begin
-- { Check if error last time then InsSize=-1 }
-- if InsSize=-1 then
-- exit;
- { We need intel style operands }
- SwapOperands;
- { create the .ot fields }
-@@ -955,16 +957,9 @@
- end
- else
- begin
--{$ifdef PASS2FLAG}
-- { we are here in a second pass, check if the instruction can be optimized }
-- if (InsEntry^.flags and IF_PASS2)=0 then
-- begin
-- Pass1:=InsSize;
-- exit;
-- end;
-- { update the .ot fields, some top_const can be updated }
-- create_ot;
--{$endif}
-+ { we've already an insentry so it's valid }
-+ CheckIfValid:=true;
-+ exit;
- end;
- { Lookup opcode in the table }
- InsSize:=-1;
-@@ -987,8 +982,7 @@
- InsSize:=calcsize(insentry);
- if (segprefix<>R_NO) then
- inc(InsSize);
-- Pass1:=InsSize;
-- LastInsOffset:=InsOffset;
-+ CheckIfValid:=true;
- exit;
- end;
- inc(i);
-@@ -999,6 +993,45 @@
- { No instruction found, set insentry to nil and inssize to -1 }
- insentry:=nil;
- inssize:=-1;
-+end;
-+
-+
-+
-+function taicpu.Pass1(offset:longint):longint;
-+begin
-+ Pass1:=0;
-+{ Save the old offset and set the new offset }
-+ InsOffset:=Offset;
-+{ Things which may only be done once, not when a second pass is done to
-+ optimize }
-+ if Insentry=nil then
-+ begin
-+ { Check if error last time then InsSize=-1 }
-+ if InsSize=-1 then
-+ exit;
-+ { set the file postion }
-+ aktfilepos:=fileinfo;
-+ end
-+ else
-+ begin
-+{$ifdef PASS2FLAG}
-+ { we are here in a second pass, check if the instruction can be optimized }
-+ if (InsEntry^.flags and IF_PASS2)=0 then
-+ begin
-+ Pass1:=InsSize;
-+ exit;
-+ end;
-+ { update the .ot fields, some top_const can be updated }
-+ create_ot;
-+{$endif}
-+ end;
-+{ Check if it's a valid instruction }
-+ if CheckIfValid then
-+ begin
-+ LastInsOffset:=InsOffset;
-+ Pass1:=InsSize;
-+ exit;
-+ end;
- LastInsOffset:=-1;
- end;
-
-@@ -1677,6 +1710,12 @@
- end.
- {
- $Log$
-+ Revision 1.1.2.5 2001/01/13 15:03:26 jonas
-+ * fixed bug in taicpu.done regardin top_symbols
-+
-+ Revision 1.1.2.4 2001/01/12 19:18:02 peter
-+ * check for valid asm instructions
-+
- Revision 1.1.2.2 2000/10/15 10:51:15 florian
- * fixed xmm register access
-
-@@ -1743,4 +1782,4 @@
- Revision 1.17 1999/08/01 23:55:53 michael
- * Moved taitempalloc
-
--}
-\ No newline at end of file
-+}
+++ /dev/null
-#
-# Example ppc386.cfg for Free Pascal Compiler Version 0.99.12
-#
-
-# ----------------------
-# Defines (preprocessor)
-# ----------------------
-
-#
-# nested #IFNDEF, #IFDEF, #ENDIF, #ELSE, #DEFINE, #UNDEF are allowed
-#
-# -d is the same as #DEFINE
-# -u is the same as #UNDEF
-#
-
-# When not m68k is defined at the commandline, define i386
-#IFNDEF m68k
- #DEFINE i386
-#ENDIF
-
-#
-# Some examples (for switches see below, and the -? helppages)
-#
-# Try compiling with the -dRELEASE or -dDEBUG on the commandline
-#
-
-# For a release compile with optimizes and strip debuginfo
-#IFDEF RELEASE
- -OG2p2
- -Xs
- #WRITE Compiling Release Version
-#ENDIF
-
-# For a debug version compile with debuginfo and all codegeneration checks on
-#IFDEF DEBUG
- -g
- -Crtoi
- #WRITE Compiling Debug Version
-#ENDIF
-
-# ----------------
-# Parsing switches
-# ----------------
-
-# All assembler blocks are intel styled by default
-#-Rintel
-
-# All assembler blocks are AT&T styled by default
-#-Ratt
-
-# Semantic checking
-# -S2 switch some Delphi 2 extension on
-# -Sc supports operators like C (*=,+=,/= and -=)
-# -Sg allows LABEL and GOTO
-# -Si support C++ stlyed INLINE
-# -Sm support macros like C (global)
-# -So tries to be TP/BP 7.0 compatible
-# -Ss constructor name must be init (destructor must be done)
-# -St allows static keyword in objects
-
-# Allow goto, inline, C-operators, C-vars
--Sgic
-
-# ---------------
-# Code generation
-# ---------------
-
-# Uncomment the next line if you always want static/dynamic units by default
-# (can be overruled with -CD, -CS at the commandline)
-#-CS
-#-CD
-
-# Set the default heapsize to 8Mb
-#-Ch8000000
-
-# Set default codegeneration checks (iocheck, overflow, range, stack)
-#-Ci
-#-Co
-#-Cr
-#-Ct
-
-# Optimizer switches
-# -Og generate smaller code
-# -OG generate faster code (default)
-# -Or keep certain variables in registers (still BUGGY!!!)
-# -Ou enable uncertain optimizations (see docs)
-# -O1 level 1 optimizations (quick optimizations)
-# -O2 level 2 optimizations (-O1 + slower optimizations)
-# -O3 level 3 optimizations (same as -O2u)
-# -Op target processor
-# -Op1 set target processor to 386/486
-# -Op2 set target processor to Pentium/PentiumMMX (tm)
-# -Op3 set target processor to PPro/PII/c6x86/K6 (tm)
-
-# Optimize always for Size and Pentium
--OG2p2
-
-
-# -----------------------
-# Set Filenames and Paths
-# -----------------------
-
-# Slashes are also allowed under dos
-
-# path to the messagefile, not necessary anymore but can be used to override
-# the default language
-#-Fr$1/msg/errore.msg
-#-Fr$1/msg/errorn.msg
-
-# searchpath for includefiles
-#-Fi/pp/inc;/pp/rtl/inc
-
-# searchpath for units and other system dependent things
-#IFDEF Go32V1
- #IFDEF FPC_LINK_STATIC
- -Fu$1/rtl/go32v1/static
- -Fu$1/units/go32v1/static
- #ENDIF
- -Fu$1/rtl/go32v1
- -Fu$1/units/go32v1
-#ENDIF
-#IFDEF Go32V2
- #IFDEF FPC_LINK_STATIC
- -Fu$1/rtl/go32v2/static
- -Fu$1/units/go32v2/static
- #ENDIF
- -Fu$1/rtl/go32v2
- -Fu$1/units/go32v2
-#ENDIF
-#IFDEF Win32
- #IFDEF FPC_LINK_STATIC
- -Fu$1/rtl/win32/static
- -Fu$1/units/win32/static
- #ENDIF
- -Fu$1/rtl/win32
- -Fu$1/units/win32
-#ENDIF
-#IFDEF OS2
- #IFDEF FPC_LINK_STATIC
- -Fu$1/rtl/os2/static
- -Fu$1/units/os2/static
- #ENDIF
- -Fu$1/rtl/os2
- -Fu$1/units/os2
-#ENDIF
-#IFDEF Linux
- # For statically, smartlinked units
- #IFDEF FPC_LINK_STATIC
- -Fu$1/rtl/linux/static
- -Fu$1/units/linux/static
- #ENDIF
- # For Dynamically linked units
- #IFDEF FPC_LINK_DYNAMIC
- -Fu$1/rtl/linux/shared
- -Fu$1/units/linux/shared
- #ENDIF
- -Fu$1/rtl/linux
- -Fu$1/units/linux
- #-Fu~/pp/units;~/pp/rtl/linux
- #-Fu/usr/lib/fpc/0.99.12/units;/usr/lib/fpc/0.99.12/rtl
-#ENDIF
-
-# searchpath for libraries
--Fl$GCCDIR
-#-Fl/pp/lib
-#-Fl/lib;/usr/lib
-
-
-# -------------
-# Linking
-# -------------
-
-# generate always debugging information for GDB (slows down the compiling
-# process)
-#-g
-
-# always pass an option to the linker
-#-k-s
-
-# Always strip debuginfo from the executable
--Xs
-
-
-# -------------
-# Miscellaneous
-# -------------
-
-# Write always a nice FPC logo ;)
--l
-
-# Verbosity
-# e : Show errors (default) d : Show debug info
-# w : Show warnings u : Show used files
-# n : Show notes t : Show tried files
-# h : Show hints m : Show defined macros
-# i : Show general info p : Show compiled procedures
-# l : Show linenumbers c : Show conditionals
-# a : Show everything 0 : Show nothing (except errors)
-
-# Display Info, Warnings, Notes and Hints
--veiwn
-
-# If you don't want so much verbosity use
-#-vw
-
-#
-# That's all folks
-#