--- /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
++}