mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-22 23:11:43 +02:00
+ cpu unit for arm (linux only so far)
git-svn-id: trunk@33184 -
This commit is contained in:
parent
d13246cea4
commit
84bb46a35d
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -8206,6 +8206,7 @@ rtl/android/mipsel/prt0.as svneol=native#text/plain
|
||||
rtl/android/sysandroid.inc svneol=native#text/plain
|
||||
rtl/arm/arm.inc svneol=native#text/plain
|
||||
rtl/arm/armdefines.inc svneol=native#text/plain
|
||||
rtl/arm/cpu.pp svneol=native#text/pascal
|
||||
rtl/arm/divide.inc svneol=native#text/plain
|
||||
rtl/arm/int64p.inc svneol=native#text/plain
|
||||
rtl/arm/makefile.cpu svneol=native#text/plain
|
||||
|
91
rtl/arm/cpu.pp
Normal file
91
rtl/arm/cpu.pp
Normal file
@ -0,0 +1,91 @@
|
||||
{
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 2016 by the Free Pascal development team
|
||||
|
||||
This unit contains some routines to get informations about the
|
||||
processor
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
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.
|
||||
|
||||
**********************************************************************}
|
||||
{$mode objfpc}
|
||||
unit cpu;
|
||||
|
||||
interface
|
||||
|
||||
function VFPv4Support : Boolean;
|
||||
|
||||
implementation
|
||||
|
||||
var
|
||||
has_vfpv4_support,
|
||||
gothwcaps : boolean;
|
||||
hwcaps : dword;
|
||||
|
||||
const
|
||||
AT_NULL = 0;
|
||||
AT_HWCAPS = 16;
|
||||
|
||||
type
|
||||
TAuxiliaryValue = DWord;
|
||||
|
||||
TInternalUnion = record
|
||||
a_val: DWord; //* Integer value */
|
||||
{* We use to have pointer elements added here. We cannot do that,
|
||||
though, since it does not work when using 32-bit definitions
|
||||
on 64-bit platforms and vice versa. *}
|
||||
end;
|
||||
|
||||
Elf32_auxv_t = record
|
||||
a_type: DWord; //* Entry type */
|
||||
a_un: TInternalUnion;
|
||||
end;
|
||||
TElf32AuxiliaryVector = Elf32_auxv_t;
|
||||
PElf32AuxiliaryVector = ^TElf32AuxiliaryVector;
|
||||
|
||||
var
|
||||
psysinfo: LongWord = 0;
|
||||
|
||||
procedure InitHWCaps;
|
||||
var
|
||||
ep: PPChar;
|
||||
auxv: PElf32AuxiliaryVector;
|
||||
begin
|
||||
psysinfo := 0;
|
||||
ep := envp;
|
||||
while ep^ <> nil do
|
||||
Inc(ep);
|
||||
|
||||
Inc(ep);
|
||||
|
||||
auxv := PElf32AuxiliaryVector(ep);
|
||||
|
||||
while auxv^.a_type <> AT_NULL do
|
||||
begin
|
||||
if auxv^.a_type = AT_HWCAPS then
|
||||
begin
|
||||
hwcaps := auxv^.a_un.a_val;
|
||||
gothwcaps := true;
|
||||
Break;
|
||||
end;
|
||||
Inc(auxv);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function VFPv4Support : Boolean;
|
||||
begin
|
||||
Result:=has_vfpv4_support;
|
||||
end;
|
||||
|
||||
begin
|
||||
gothwcaps:=false;
|
||||
InitHWCaps;
|
||||
has_vfpv4_support:=gothwcaps and ((hwcaps and (1 shl 16))<>0);
|
||||
end.
|
||||
|
@ -363,6 +363,7 @@ override FPCOPT+=-Ur
|
||||
endif
|
||||
ifeq ($(ARCH),arm)
|
||||
override LOADERS+=ucprt0
|
||||
CPU_UNITS=cpu
|
||||
endif
|
||||
SYSTEMUNIT=system
|
||||
ifdef RELEASE
|
||||
@ -3673,7 +3674,7 @@ ports$(PPUEXT) : $(UNIXINC)/ports.pp unix$(PPUEXT) objpas$(PPUEXT)
|
||||
$(COMPILER) $(UNIXINC)/ports.pp
|
||||
dl$(PPUEXT) : $(UNIXINC)/dl.pp $(SYSTEMUNIT)$(PPUEXT) unixtype$(PPUEXT) ctypes$(PPUEXT)
|
||||
$(COMPILER) $(UNIXINC)/dl.pp
|
||||
dynlibs$(PPUEXT) : $(INC)/dynlibs.pas $(UNIXINC)/dynlibs.inc dl$(PPUEXT) objpas$(PPUEXT) rtlconsts$(PPUEXT) sysutils$(PPUEXT)
|
||||
dynlibs$(PPUEXT) : $(INC)/dynlibs.pas $(UNIXINC)/dynlibs.inc dl$(PPUEXT) objpas$(PPUEXT) rtlconsts$(PPUEXT) sysutils$(PPUEXT)
|
||||
$(COMPILER) $(INC)/dynlibs.pas
|
||||
initc$(PPUEXT) : $(UNIXINC)/initc.pp ctypes$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
|
||||
$(COMPILER) $(UNIXINC)/initc.pp
|
||||
@ -3693,11 +3694,11 @@ sysutils$(PPUEXT) : $(UNIXINC)/sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.in
|
||||
linux$(PPUEXT)
|
||||
$(COMPILER) -Fi$(OBJPASDIR)/sysutils $(UNIXINC)/sysutils.pp
|
||||
classes$(PPUEXT) : $(UNIXINC)/classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \
|
||||
sysutils$(PPUEXT) typinfo$(PPUEXT) rtlconsts$(PPUEXT) fgl$(PPUEXT) types$(PPUEXT) unix$(PPUEXT)
|
||||
sysutils$(PPUEXT) typinfo$(PPUEXT) rtlconsts$(PPUEXT) fgl$(PPUEXT) types$(PPUEXT) unix$(PPUEXT)
|
||||
$(COMPILER) -Fi$(OBJPASDIR)/classes $(UNIXINC)/classes.pp
|
||||
typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT) sysutils$(PPUEXT) rtlconsts$(PPUEXT)
|
||||
$(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp
|
||||
character$(PPUEXT): sysutils$(PPUEXT) $(OBJPASDIR)/character.pas objpas$(PPUEXT) rtlconsts$(PPUEXT)
|
||||
character$(PPUEXT): sysutils$(PPUEXT) $(OBJPASDIR)/character.pas objpas$(PPUEXT) rtlconsts$(PPUEXT)
|
||||
$(COMPILER) $(OBJPASDIR)/character.pas
|
||||
math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
|
||||
$(COMPILER) $(OBJPASDIR)/math.pp
|
||||
|
@ -20,7 +20,7 @@ units=$(SYSTEMUNIT) fpintres $(SYSINIT_UNITS) \
|
||||
implicitunits=exeinfo \
|
||||
cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258 \
|
||||
cp437 cp646 cp850 cp856 cp866 cp874 cp8859_1 cp8859_5 cp8859_2 cp852 \
|
||||
unicodedata unicodenumtable
|
||||
unicodedata unicodenumtable
|
||||
|
||||
rsts=math typinfo sysconst rtlconsts
|
||||
|
||||
@ -93,6 +93,7 @@ endif
|
||||
|
||||
ifeq ($(ARCH),arm)
|
||||
override LOADERS+=ucprt0
|
||||
CPU_UNITS=cpu
|
||||
endif
|
||||
|
||||
SYSTEMUNIT=system
|
||||
@ -288,7 +289,7 @@ ports$(PPUEXT) : $(UNIXINC)/ports.pp unix$(PPUEXT) objpas$(PPUEXT)
|
||||
dl$(PPUEXT) : $(UNIXINC)/dl.pp $(SYSTEMUNIT)$(PPUEXT) unixtype$(PPUEXT) ctypes$(PPUEXT)
|
||||
$(COMPILER) $(UNIXINC)/dl.pp
|
||||
|
||||
dynlibs$(PPUEXT) : $(INC)/dynlibs.pas $(UNIXINC)/dynlibs.inc dl$(PPUEXT) objpas$(PPUEXT) rtlconsts$(PPUEXT) sysutils$(PPUEXT)
|
||||
dynlibs$(PPUEXT) : $(INC)/dynlibs.pas $(UNIXINC)/dynlibs.inc dl$(PPUEXT) objpas$(PPUEXT) rtlconsts$(PPUEXT) sysutils$(PPUEXT)
|
||||
$(COMPILER) $(INC)/dynlibs.pas
|
||||
|
||||
initc$(PPUEXT) : $(UNIXINC)/initc.pp ctypes$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
|
||||
@ -324,14 +325,14 @@ sysutils$(PPUEXT) : $(UNIXINC)/sysutils.pp $(wildcard $(OBJPASDIR)/sysutils/*.in
|
||||
$(COMPILER) -Fi$(OBJPASDIR)/sysutils $(UNIXINC)/sysutils.pp
|
||||
|
||||
classes$(PPUEXT) : $(UNIXINC)/classes.pp $(wildcard $(OBJPASDIR)/classes/*.inc) \
|
||||
sysutils$(PPUEXT) typinfo$(PPUEXT) rtlconsts$(PPUEXT) fgl$(PPUEXT) types$(PPUEXT) unix$(PPUEXT)
|
||||
sysutils$(PPUEXT) typinfo$(PPUEXT) rtlconsts$(PPUEXT) fgl$(PPUEXT) types$(PPUEXT) unix$(PPUEXT)
|
||||
$(COMPILER) -Fi$(OBJPASDIR)/classes $(UNIXINC)/classes.pp
|
||||
|
||||
typinfo$(PPUEXT): $(OBJPASDIR)/typinfo.pp objpas$(PPUEXT) sysutils$(PPUEXT) rtlconsts$(PPUEXT)
|
||||
$(COMPILER) -Sg $(OBJPASDIR)/typinfo.pp
|
||||
|
||||
# let it depend on buildcollations to prevent simultaneous building of unicodedata
|
||||
character$(PPUEXT): sysutils$(PPUEXT) $(OBJPASDIR)/character.pas objpas$(PPUEXT) rtlconsts$(PPUEXT)
|
||||
character$(PPUEXT): sysutils$(PPUEXT) $(OBJPASDIR)/character.pas objpas$(PPUEXT) rtlconsts$(PPUEXT)
|
||||
$(COMPILER) $(OBJPASDIR)/character.pas
|
||||
|
||||
math$(PPUEXT): $(OBJPASDIR)/math.pp objpas$(PPUEXT) sysutils$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
|
||||
|
Loading…
Reference in New Issue
Block a user