mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 04:59:25 +02:00
+ 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:
parent
a5b3576577
commit
188ec0f0c7
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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}
|
||||
|
@ -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;
|
||||
|
@ -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}
|
||||
|
@ -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
73
compiler/ppcsparc64.lpi
Normal 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>
|
113
compiler/sparc64/cpuinfo.pas
Normal file
113
compiler/sparc64/cpuinfo.pas
Normal 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.
|
Loading…
Reference in New Issue
Block a user