diff --git a/.gitattributes b/.gitattributes index 0559499167..875dbcf025 100644 --- a/.gitattributes +++ b/.gitattributes @@ -228,6 +228,9 @@ compiler/i386/ra386att.pas svneol=native#text/plain compiler/i386/ra386int.pas svneol=native#text/plain compiler/i386/rgcpu.pas svneol=native#text/plain compiler/i386/rropt386.pas svneol=native#text/plain +compiler/i8086/aoptcpu.pas svneol=native#text/plain +compiler/i8086/aoptcpub.pas svneol=native#text/plain +compiler/i8086/aoptcpud.pas svneol=native#text/plain compiler/i8086/cgcpu.pas svneol=native#text/plain compiler/i8086/cpubase.inc svneol=native#text/plain compiler/i8086/cpuinfo.pas svneol=native#text/plain diff --git a/compiler/Makefile b/compiler/Makefile index ee6e26e8ec..b1b8c8c673 100644 --- a/compiler/Makefile +++ b/compiler/Makefile @@ -509,7 +509,7 @@ ifeq ($(PPC_TARGET),jvm) override LOCALOPT+=-Fujvm -dNOOPT endif ifeq ($(PPC_TARGET),i8086) -override LOCALOPT+=-Fux86 -dNOOPT +override LOCALOPT+=-Fux86 endif OPTWPOCOLLECT=-OWdevirtcalls,optvmts -FW$(BASEDIR)/pp1.wpo OPTWPOPERFORM=-Owdevirtcalls,optvmts -Fw$(BASEDIR)/pp1.wpo diff --git a/compiler/Makefile.fpc b/compiler/Makefile.fpc index f1fcd68563..ba2c4ba7e3 100644 --- a/compiler/Makefile.fpc +++ b/compiler/Makefile.fpc @@ -287,7 +287,7 @@ endif # i8086 specific ifeq ($(PPC_TARGET),i8086) -override LOCALOPT+=-Fux86 -dNOOPT +override LOCALOPT+=-Fux86 endif OPTWPOCOLLECT=-OWdevirtcalls,optvmts -FW$(BASEDIR)/pp1.wpo diff --git a/compiler/i8086/aoptcpu.pas b/compiler/i8086/aoptcpu.pas new file mode 100644 index 0000000000..cb656af36e --- /dev/null +++ b/compiler/i8086/aoptcpu.pas @@ -0,0 +1,41 @@ +{ + Copyright (c) 1998-2004 by Jonas Maebe + + This unit calls the optimization procedures to optimize the assembler + code for sparc + + 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 aoptcpu; + +{$i fpcdefs.inc} + + Interface + + uses + cpubase, aoptobj, aoptcpub, aopt; + + Type + TCpuAsmOptimizer = class(TAsmOptimizer) + End; + + Implementation + +begin + casmoptimizer:=TCpuAsmOptimizer; +end. diff --git a/compiler/i8086/aoptcpub.pas b/compiler/i8086/aoptcpub.pas new file mode 100644 index 0000000000..8a0ce21bfb --- /dev/null +++ b/compiler/i8086/aoptcpub.pas @@ -0,0 +1,113 @@ + { + Copyright (c) 1998-2004 by Jonas Maebe, member of the Free Pascal + Development Team + + This unit contains several types and constants necessary for the + optimizer to work on the sparc architecture + + 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 aoptcpub; { Assembler OPTimizer CPU specific Base } + +{$i fpcdefs.inc} + +{ enable the following define if memory references can have a scaled index } +{ define RefsHaveScale} + +{ enable the following define if memory references can have a segment } +{ override } +{ define RefsHaveSegment} + +Interface + +Uses + cpubase,aasmcpu,AOptBase; + +Type + +{ type of a normal instruction } + TInstr = Taicpu; + PInstr = ^TInstr; + +{ ************************************************************************* } +{ **************************** TCondRegs ********************************** } +{ ************************************************************************* } +{ Info about the conditional registers } + TCondRegs = Object + Constructor Init; + Destructor Done; + End; + +{ ************************************************************************* } +{ **************************** TAoptBaseCpu ******************************* } +{ ************************************************************************* } + + TAoptBaseCpu = class(TAoptBase) + End; + + +{ ************************************************************************* } +{ ******************************* Constants ******************************* } +{ ************************************************************************* } +Const + +{ the maximum number of things (registers, memory, ...) a single instruction } +{ changes } + + MaxCh = 3; + +{ the maximum number of operands an instruction has } + + MaxOps = 3; + +{Oper index of operand that contains the source (reference) with a load } +{instruction } + + LoadSrc = 0; + +{Oper index of operand that contains the destination (register) with a load } +{instruction } + + LoadDst = 1; + +{Oper index of operand that contains the source (register) with a store } +{instruction } + + StoreSrc = 0; + +{Oper index of operand that contains the destination (reference) with a load } +{instruction } + + StoreDst = 1; + + aopt_uncondjmp = A_JMP; + aopt_condjmp = A_Jcc; + +Implementation + +{ ************************************************************************* } +{ **************************** TCondRegs ********************************** } +{ ************************************************************************* } +Constructor TCondRegs.init; +Begin +End; + +Destructor TCondRegs.Done; {$ifdef inl} inline; {$endif inl} +Begin +End; + +End. diff --git a/compiler/i8086/aoptcpud.pas b/compiler/i8086/aoptcpud.pas new file mode 100644 index 0000000000..cb8c5d319f --- /dev/null +++ b/compiler/i8086/aoptcpud.pas @@ -0,0 +1,36 @@ +{ + Copyright (c) 1998-2004 by Jonas Maebe, member of the Free Pascal + Development Team + + 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 aoptcpud; + +{$i fpcdefs.inc} + + interface + + uses + aoptda; + + type + TAOptDFACpu = class(TAOptDFA) + end; + + implementation + +end. diff --git a/compiler/ppc8086.lpi b/compiler/ppc8086.lpi index a477c57793..3a3c7993e5 100644 --- a/compiler/ppc8086.lpi +++ b/compiler/ppc8086.lpi @@ -143,7 +143,7 @@ - +