+ basics for sparc64 support, we continue to use the name "sparc" for sparc32, both sparc are identified by sparcgen (dirs, defines etc.)

git-svn-id: trunk@36374 -
This commit is contained in:
florian 2017-05-30 21:17:17 +00:00
parent a5b3576577
commit 188ec0f0c7
8 changed files with 232 additions and 11 deletions

2
.gitattributes vendored
View File

@ -638,6 +638,7 @@ compiler/ppcmipsel.lpi svneol=native#text/plain
compiler/ppcppc.lpi svneol=native#text/plain
compiler/ppcppc64.lpi svneol=native#text/plain
compiler/ppcsparc.lpi svneol=native#text/plain
compiler/ppcsparc64.lpi svneol=native#text/plain
compiler/ppheap.pas svneol=native#text/plain
compiler/ppu.pas svneol=native#text/plain
compiler/ppx86_64.lpi svneol=native#text/plain
@ -694,6 +695,7 @@ compiler/sparc/rspsup.inc svneol=native#text/plain
compiler/sparc/spreg.dat svneol=native#text/plain
compiler/sparc/strinst.inc svneol=native#text/plain
compiler/sparc/symcpu.pas svneol=native#text/plain
compiler/sparc64/cpuinfo.pas svneol=native#text/plain
compiler/switches.pas svneol=native#text/plain
compiler/symbase.pas svneol=native#text/plain
compiler/symconst.pas svneol=native#text/plain

View File

@ -32,7 +32,7 @@ fpcdir=..
unexport FPC_VERSION FPC_COMPILERINFO
# Which platforms are ready for inclusion in the cycle
CYCLETARGETS=i386 powerpc sparc arm x86_64 powerpc64 m68k armeb mipsel mips avr jvm i8086 aarch64
CYCLETARGETS=i386 powerpc sparc arm x86_64 powerpc64 m68k armeb mipsel mips avr jvm i8086 aarch64 sparc64
# All supported targets used for clean
ALLTARGETS=$(CYCLETARGETS)
@ -47,6 +47,9 @@ endif
ifdef SPARC
PPC_TARGET=sparc
endif
ifdef SPARC64
PPC_TARGET=sparc64
endif
ifdef M68K
PPC_TARGET=m68k
endif
@ -182,6 +185,9 @@ endif
ifeq ($(CPC_TARGET),sparc)
CPUSUF=sparc
endif
ifeq ($(CPC_TARGET),sparc64)
CPUSUF=sparc64
endif
ifeq ($(CPC_TARGET),x86_64)
CPUSUF=x64
endif
@ -281,7 +287,12 @@ endif
# Sparc specific
ifeq ($(PPC_TARGET),sparc)
override LOCALOPT+=
override LOCALOPT+=-Fusparcgen
endif
# Sparc specific
ifeq ($(PPC_TARGET),sparc64)
override LOCALOPT+=-Fusparcgen
endif
# ARM specific
@ -411,7 +422,7 @@ endif
# CPU targets
#####################################################################
PPC_TARGETS=i386 m68k powerpc sparc arm armeb x86_64 powerpc64 mips mipsel avr jvm i8086 aarch64
PPC_TARGETS=i386 m68k powerpc sparc arm armeb x86_64 powerpc64 mips mipsel avr jvm i8086 aarch64 sparc64
INSTALL_TARGETS=$(addsuffix _exe_install,$(sort $(CYCLETARGETS) $(PPC_TARGETS)))
SYMLINKINSTALL_TARGETS=$(addsuffix _symlink_install,$(sort $(CYCLETARGETS) $(PPC_TARGETS)))
@ -773,7 +784,7 @@ ifeq ($(OS_SOURCE),win64)
EXCLUDE_80BIT_TARGETS=1
endif
ifneq ($(findstring $(CPU_SOURCE),aarch64 arm avr jvm m68k mips mipsel powerpc powerpc64 sparc),)
ifneq ($(findstring $(CPU_SOURCE),aarch64 arm avr jvm m68k mips mipsel powerpc powerpc64 sparc sparc64),)
EXCLUDE_80BIT_TARGETS=1
endif

View File

@ -102,8 +102,20 @@
{$define cputargethasfixedstack}
{$define cpurefshaveindexreg}
{$define SUPPORT_SAFECALL}
{$define sparcgen}
{$endif sparc}
{$ifdef sparc64}
{$define cpu64bit}
{$define cpu64bitaddr}
{$define cpu64bitalu}
{$define cpuflags}
{$define cputargethasfixedstack}
{$define cpurefshaveindexreg}
{$define SUPPORT_SAFECALL}
{$define sparcgen}
{$endif sparc64}
{$ifdef powerpc}
{$define cpu32bit}
{$define cpu32bitaddr}

View File

@ -449,6 +449,12 @@ interface
asmcputype : cpu_none;
fputype : fpu_hard;
{$endif sparc}
{$ifdef sparc64}
cputype : cpu_SPARC_V9;
optimizecputype : cpu_SPARC_V9;
asmcputype : cpu_none;
fputype : fpu_hard;
{$endif sparc64}
{$ifdef arm}
cputype : cpu_armv4;
optimizecputype : cpu_armv4;

View File

@ -30,6 +30,7 @@ program pp;
x86_64 generate a compiler for the AMD x86-64 architecture
M68K generate a compiler for the M68000
SPARC generate a compiler for SPARC
SPARC64 generate a compiler for SPARC64
POWERPC generate a compiler for the PowerPC
POWERPC64 generate a compiler for the PowerPC64 architecture
DEBUG version with debug code is generated
@ -104,6 +105,12 @@ program pp;
{$endif CPUDEFINED}
{$define CPUDEFINED}
{$endif SPARC}
{$ifdef SPARC64}
{$ifdef CPUDEFINED}
{$fatal ONLY one of the switches for the CPU type must be defined}
{$endif CPUDEFINED}
{$define CPUDEFINED}
{$endif SPARC64}
{$ifdef ARM}
{$ifdef CPUDEFINED}
{$fatal ONLY one of the switches for the CPU type must be defined}

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="9"/>
<Version Value="10"/>
<PathDelim Value="\"/>
<General>
<Flags>
@ -32,12 +32,10 @@
<Unit0>
<Filename Value="pp.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="pp"/>
</Unit0>
<Unit1>
<Filename Value="sparc\aasmcpu.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="aasmcpu"/>
</Unit1>
</Units>
</ProjectOptions>
@ -48,8 +46,8 @@
<Filename Value="sparc\pp"/>
</Target>
<SearchPaths>
<IncludeFiles Value="sparc"/>
<OtherUnitFiles Value="sparc;systems"/>
<IncludeFiles Value="sparc;sparcgen"/>
<OtherUnitFiles Value="sparc;sparcgen;systems"/>
<UnitOutputDirectory Value="sparc\lazbuild"/>
</SearchPaths>
<Parsing>
@ -70,7 +68,6 @@
<StopAfterErrCount Value="50"/>
</ConfigFile>
<CustomOptions Value="-dsparc"/>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
</CONFIG>

73
compiler/ppcsparc64.lpi Normal file
View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="10"/>
<PathDelim Value="\"/>
<General>
<Flags>
<MainUnitHasUsesSectionForAllUnits Value="False"/>
<MainUnitHasCreateFormStatements Value="False"/>
<MainUnitHasTitleStatement Value="False"/>
<LRSInOutputDirectory Value="False"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
<Title Value="ppcsparc64"/>
</General>
<BuildModes Count="1">
<Item1 Name="default" Default="True"/>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<Units Count="2">
<Unit0>
<Filename Value="pp.pas"/>
<IsPartOfProject Value="True"/>
</Unit0>
<Unit1>
<Filename Value="sparc64\aasmcpu.pas"/>
<IsPartOfProject Value="True"/>
</Unit1>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="sparc64\pp"/>
</Target>
<SearchPaths>
<IncludeFiles Value="sparc64;sparcgen"/>
<OtherUnitFiles Value="sparc64;sparcgen;systems"/>
<UnitOutputDirectory Value="sparc64\lazbuild"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<CStyleOperator Value="False"/>
<AllowLabel Value="False"/>
<CPPInline Value="False"/>
<UseAnsiStrings Value="False"/>
</SyntaxOptions>
</Parsing>
<Other>
<Verbosity>
<ShowWarn Value="False"/>
<ShowNotes Value="False"/>
<ShowHints Value="False"/>
</Verbosity>
<ConfigFile>
<StopAfterErrCount Value="50"/>
</ConfigFile>
<CustomOptions Value="-dsparc64"/>
</Other>
</CompilerOptions>
</CONFIG>

View File

@ -0,0 +1,113 @@
{
Copyright (c) 1998-2002 by Florian Klaempfl
Basic Processor information for the SPARC64
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 cpuinfo;
{$i fpcdefs.inc}
interface
uses
globtype;
type
bestreal = double;
{$if FPC_FULLVERSION>20700}
bestrealrec = TDoubleRec;
{$endif FPC_FULLVERSION>20700}
ts32real = single;
ts64real = double;
ts80real = extended;
ts128real = type extended;
ts64comp = type extended;
pbestreal=^bestreal;
{ possible supported processors for this target }
tcputype=(cpu_none,
cpu_SPARC_V9
);
tfputype =(fpu_none,
fpu_soft,
fpu_hard
);
tcontrollertype =(ct_none
);
tcontrollerdatatype = record
controllertypestr, controllerunitstr: string[20];
cputype: tcputype; fputype: tfputype;
flashbase, flashsize, srambase, sramsize, eeprombase, eepromsize, bootbase, bootsize: dword;
end;
Const
{ Is there support for dealing with multiple microcontrollers available }
{ for this platform? }
ControllerSupport = true;
{ We know that there are fields after sramsize
but we don't care about this warning }
{$PUSH}
{$WARN 3177 OFF}
embedded_controllers : array [tcontrollertype] of tcontrollerdatatype =
(
(controllertypestr:''; controllerunitstr:''; cputype:cpu_none; fputype:fpu_none; flashbase:0; flashsize:0; srambase:0; sramsize:0));
{$POP}
{ calling conventions supported by the code generator }
supported_calling_conventions : tproccalloptions = [
pocall_internproc,
pocall_stdcall,
pocall_safecall,
pocall_cdecl,
pocall_cppdecl
];
cputypestr : array[tcputype] of string[10] = ('',
'SPARCV9'
);
fputypestr : array[tfputype] of string[6] = ('',
'SOFT',
'HARD'
);
{ Supported optimizations, only used for information }
supported_optimizerswitches = genericlevel1optimizerswitches+
genericlevel2optimizerswitches+
genericlevel3optimizerswitches-
{ no need to write info about those }
[cs_opt_level1,cs_opt_level2,cs_opt_level3]+
[cs_opt_regvar,cs_opt_loopunroll,
cs_opt_tailrecursion,cs_opt_nodecse,
cs_opt_reorder_fields,cs_opt_fastmath];
level1optimizerswitches = genericlevel1optimizerswitches;
level2optimizerswitches = genericlevel2optimizerswitches + level1optimizerswitches +
[cs_opt_regvar,cs_opt_tailrecursion,cs_opt_nodecse];
level3optimizerswitches = genericlevel3optimizerswitches + level2optimizerswitches + [{,cs_opt_loopunroll}];
level4optimizerswitches = genericlevel4optimizerswitches + level3optimizerswitches + [];
implementation
end.