mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-14 08:46:08 +02:00
* fix compilation of ARM compiler for LLVM
git-svn-id: branches/debug_eh@41210 -
This commit is contained in:
parent
7aa6a2ec81
commit
9d07e4948f
@ -513,11 +513,11 @@ endif
|
||||
endif
|
||||
override LOCALOPT+=-d$(CPC_TARGET) -dGDB -dBROWSERLOG
|
||||
ifdef LLVM
|
||||
ifeq ($(findstring $(PPC_TARGET),x86_64 aarch64),)
|
||||
$(error The $(PPC_TARGET) architecture is not (yet) support by the FPC/LLVM code generator)
|
||||
ifeq ($(findstring $(PPC_TARGET),x86_64 aarch64 arm),)
|
||||
$(error The $(PPC_TARGET) architecture is not (yet) supported by the FPC/LLVM code generator)
|
||||
endif
|
||||
ifeq ($(findstring $(OS_TARGET),darwin iphonesim linux),)
|
||||
$(error The $(PPC_TARGET) target OS is not (yet) support by the FPC/LLVM code generator)
|
||||
$(error The $(PPC_TARGET) target OS is not (yet) supported by the FPC/LLVM code generator)
|
||||
endif
|
||||
override LOCALOPT+=-dllvm -Fullvm
|
||||
endif
|
||||
|
@ -261,12 +261,12 @@ override LOCALOPT+=-d$(CPC_TARGET) -dGDB -dBROWSERLOG
|
||||
|
||||
#include LLVM define/directory if requested
|
||||
ifdef LLVM
|
||||
ifeq ($(findstring $(PPC_TARGET),x86_64 aarch64),)
|
||||
$(error The $(PPC_TARGET) architecture is not (yet) support by the FPC/LLVM code generator)
|
||||
ifeq ($(findstring $(PPC_TARGET),x86_64 aarch64 arm),)
|
||||
$(error The $(PPC_TARGET) architecture is not (yet) supported by the FPC/LLVM code generator)
|
||||
endif
|
||||
|
||||
ifeq ($(findstring $(OS_TARGET),darwin iphonesim linux),)
|
||||
$(error The $(PPC_TARGET) target OS is not (yet) support by the FPC/LLVM code generator)
|
||||
$(error The $(PPC_TARGET) target OS is not (yet) supported by the FPC/LLVM code generator)
|
||||
endif
|
||||
|
||||
override LOCALOPT+=-dllvm -Fullvm
|
||||
|
@ -198,7 +198,7 @@ uses
|
||||
roundingmode : troundingmode;
|
||||
procedure loadshifterop(opidx:longint;const so:tshifterop);
|
||||
procedure loadregset(opidx:longint; regsetregtype: tregistertype; regsetsubregtype: tsubregister; const s:tcpuregisterset; ausermode: boolean=false);
|
||||
procedure loadconditioncode(opidx:longint;const cond:tasmcond);
|
||||
procedure loadconditioncode(opidx:longint;const acond:tasmcond);
|
||||
procedure loadmodeflags(opidx:longint;const flags:tcpumodeflags);
|
||||
procedure loadspecialreg(opidx:longint;const areg:tregister; const aflags:tspecialregflags);
|
||||
procedure loadrealconst(opidx:longint;const _value:bestreal);
|
||||
@ -386,14 +386,14 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure taicpu.loadconditioncode(opidx:longint;const cond:tasmcond);
|
||||
procedure taicpu.loadconditioncode(opidx:longint;const acond:tasmcond);
|
||||
begin
|
||||
allocate_oper(opidx+1);
|
||||
with oper[opidx]^ do
|
||||
begin
|
||||
if typ<>top_conditioncode then
|
||||
clearop(opidx);
|
||||
cc:=cond;
|
||||
cc:=acond;
|
||||
typ:=top_conditioncode;
|
||||
end;
|
||||
end;
|
||||
|
@ -71,6 +71,21 @@ Type
|
||||
fpu_vfpv4
|
||||
);
|
||||
|
||||
Const
|
||||
fputypestrllvm : array[tfputype] of string[13] = ('',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'fpu=vfpv2',
|
||||
'fpu=vfpv3',
|
||||
'fpu=vfpv3-d16',
|
||||
'fpu=vfpv4-s16',
|
||||
'fpu=vfpv4'
|
||||
);
|
||||
|
||||
Type
|
||||
tcontrollertype =
|
||||
(ct_none,
|
||||
|
||||
|
@ -30,10 +30,14 @@ unit cpunode;
|
||||
uses
|
||||
{ generic nodes }
|
||||
ncgbas,ncgld,ncgflw,ncgcnv,ncgmem,ncgcon,ncgcal,ncgset,ncginl,ncgopt,ncgmat,ncgobjc,
|
||||
{ symtable }
|
||||
symcpu,
|
||||
aasmdef,
|
||||
{ to be able to only parts of the generic code,
|
||||
the processor specific nodes must be included
|
||||
after the generic one (FK)
|
||||
}
|
||||
{$ifndef llvm}
|
||||
narmadd,
|
||||
narmcal,
|
||||
narmmat,
|
||||
@ -42,10 +46,10 @@ unit cpunode;
|
||||
narmcnv,
|
||||
narmcon,
|
||||
narmset,
|
||||
narmmem,
|
||||
{ symtable }
|
||||
symcpu,
|
||||
aasmdef
|
||||
narmmem
|
||||
{$else}
|
||||
llvmnode
|
||||
{$endif}
|
||||
;
|
||||
|
||||
|
||||
|
@ -318,6 +318,8 @@
|
||||
}
|
||||
{$ifdef llvm}
|
||||
{$undef SUPPORT_MMX}
|
||||
{$undef cpuneedsmulhelper}
|
||||
{$undef cpuneedsdivhelper}
|
||||
{$define cpuhighleveltarget}
|
||||
{$define cpucg64shiftsupport}
|
||||
{$define symansistr}
|
||||
|
@ -1584,7 +1584,7 @@ implementation
|
||||
idtxt : 'LLVM-LLC';
|
||||
asmbin : 'llc';
|
||||
asmcmd: '$OPT -o $OBJ $ASM';
|
||||
supported_targets : [system_x86_64_linux,system_x86_64_darwin,system_aarch64_linux];
|
||||
supported_targets : [system_x86_64_linux,system_x86_64_darwin,system_aarch64_linux,system_arm_linux];
|
||||
flags : [af_smartlink_sections];
|
||||
labelprefix : 'L';
|
||||
comment : '; ';
|
||||
@ -1598,7 +1598,7 @@ implementation
|
||||
idtxt : 'LLVM-CLANG';
|
||||
asmbin : 'clang';
|
||||
asmcmd: '$OPT -c -o $OBJ $ASM';
|
||||
supported_targets : [system_x86_64_linux,system_x86_64_darwin,system_aarch64_linux];
|
||||
supported_targets : [system_x86_64_linux,system_x86_64_darwin,system_aarch64_linux,system_arm_linux];
|
||||
flags : [af_smartlink_sections];
|
||||
labelprefix : 'L';
|
||||
comment : '; ';
|
||||
|
@ -111,6 +111,7 @@ implementation
|
||||
systems;
|
||||
|
||||
{$j-}
|
||||
{$ifndef arm}
|
||||
const
|
||||
llvmsystemcpu: array[tsystemcpu] of ansistring =
|
||||
('unknown',
|
||||
@ -135,6 +136,7 @@ implementation
|
||||
'riscv32',
|
||||
'riscv64'
|
||||
);
|
||||
{$endif}
|
||||
|
||||
function llvm_target_name: ansistring;
|
||||
begin
|
||||
@ -154,7 +156,7 @@ implementation
|
||||
llvm_target_name:=llvm_target_name+'-ios'+iPhoneOSVersionMin;
|
||||
end
|
||||
else if target_info.system in (systems_linux+systems_android) then
|
||||
llvm_target_name:=llvm_target_name+'-unknown-linux-gnu'
|
||||
llvm_target_name:=llvm_target_name+'-unknown-linux'
|
||||
else if target_info.system in systems_windows then
|
||||
begin
|
||||
{ WinCE isn't supported (yet) by llvm, but if/when added this is
|
||||
@ -191,7 +193,10 @@ implementation
|
||||
llvm_target_name:=llvm_target_name+'-android' }
|
||||
else
|
||||
llvm_target_name:=llvm_target_name+'-gnueabi';
|
||||
{$endif FPC_ARM_HF}
|
||||
{$else}
|
||||
if target_info.system in systems_linux then
|
||||
llvm_target_name:=llvm_target_name+'-gnu';
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -4386,7 +4386,7 @@ begin
|
||||
end;
|
||||
{$endif defined(i386) or defined(x86_64)}
|
||||
|
||||
{$if defined(arm)}
|
||||
{$if defined(arm) and not defined(llvm)}
|
||||
{ it is determined during system unit compilation if clz is used for bsf or not,
|
||||
this is not perfect but the current implementation bsf/bsr does not allow another
|
||||
solution }
|
||||
|
@ -597,6 +597,9 @@ unit i_linux;
|
||||
{$ifdef tls_threadvars}
|
||||
tf_section_threadvars,
|
||||
{$endif tls_threadvars}
|
||||
{$ifdef llvm}
|
||||
tf_use_psabieh,
|
||||
{$endif llvm}
|
||||
tf_smartlink_sections,tf_pic_uses_got,
|
||||
tf_has_winlike_resources];
|
||||
cpu : cpu_arm;
|
||||
|
Loading…
Reference in New Issue
Block a user