+ cpu unit for arm (linux only so far)

git-svn-id: trunk@33184 -
This commit is contained in:
florian 2016-03-06 13:33:20 +00:00
parent d13246cea4
commit 84bb46a35d
4 changed files with 101 additions and 7 deletions

1
.gitattributes vendored
View File

@ -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
View 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.

View File

@ -363,6 +363,7 @@ override FPCOPT+=-Ur
endif
ifeq ($(ARCH),arm)
override LOADERS+=ucprt0
CPU_UNITS=cpu
endif
SYSTEMUNIT=system
ifdef RELEASE

View File

@ -93,6 +93,7 @@ endif
ifeq ($(ARCH),arm)
override LOADERS+=ucprt0
CPU_UNITS=cpu
endif
SYSTEMUNIT=system