* fix compilation of ARM compiler for LLVM

git-svn-id: branches/debug_eh@41210 -
This commit is contained in:
Jonas Maebe 2019-02-03 21:09:54 +00:00
parent 7aa6a2ec81
commit 9d07e4948f
10 changed files with 47 additions and 18 deletions

View File

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

View File

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

View File

@ -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;

View File

@ -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,

View File

@ -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}
;

View File

@ -318,6 +318,8 @@
}
{$ifdef llvm}
{$undef SUPPORT_MMX}
{$undef cpuneedsmulhelper}
{$undef cpuneedsdivhelper}
{$define cpuhighleveltarget}
{$define cpucg64shiftsupport}
{$define symansistr}

View File

@ -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 : '; ';

View File

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

View File

@ -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 }

View File

@ -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;