Commit Graph

219 Commits

Author SHA1 Message Date
florian
e1e8986462 * patch by J. Gareth Moreton, issue #36271, part 3: support for the other architectures
git-svn-id: trunk@43441 -
2019-11-10 16:11:40 +00:00
florian
688c7d439f o AArch64:
* properly initialize FPU
    * FMOV cannot throw an FPU exception

git-svn-id: trunk@43167 -
2019-10-11 21:55:48 +00:00
Jonas Maebe
4deb62ad87 * fix for "ldr label" support in AArch64 assembler reader (r42988)
git-svn-id: trunk@43016 -
2019-09-15 17:26:25 +00:00
svenbarth
61642ffaa4 * Aarch64 asm reader: explicitely set the refaddr for local labels
git-svn-id: trunk@42989 -
2019-09-13 20:38:25 +00:00
svenbarth
ef154fb454 * Aarch64 asm reader: LDR instruction allows labels as well
git-svn-id: trunk@42988 -
2019-09-13 20:38:22 +00:00
florian
fa2e751f9f + AArch64: implementation of taarch64casenode.genlinearlist
git-svn-id: trunk@42973 -
2019-09-10 18:46:56 +00:00
florian
58eef0a5aa + AAarch64: TCpuAsmOptimizer.OptPass1Shift makes use of RemoveSuperfluousMove
git-svn-id: trunk@42971 -
2019-09-09 20:59:55 +00:00
florian
ce9e1a3419 + AArch64: FoldShiftProcess fixed
git-svn-id: trunk@42963 -
2019-09-08 20:53:43 +00:00
florian
c3c3e99c64 + AArch64: implemented TCpuAsmOptimizer.OptPass1Data
git-svn-id: trunk@42962 -
2019-09-08 20:53:43 +00:00
florian
bc473508ff * AArch64: several issues with taicpu.spilling_get_operation_type fixed
git-svn-id: trunk@42961 -
2019-09-08 20:53:42 +00:00
florian
cc49d256ea + AArch64: CMPB.E/NE2CBNZ/CBZ optimization
git-svn-id: trunk@42960 -
2019-09-08 20:53:41 +00:00
florian
0c6f7321bf + AArch64: FoldShiftProcess optimization
git-svn-id: trunk@42924 -
2019-09-05 20:15:56 +00:00
florian
a019536cd5 * avoid that -0.0 is handled by the eor optimization
git-svn-id: trunk@42921 -
2019-09-04 20:45:24 +00:00
florian
8ffb72ddd0 * another missing part of r42916 ...
git-svn-id: trunk@42919 -
2019-09-04 16:36:54 +00:00
florian
69786ffe73 somehow committing went wrong, second part of last commit:
+ AArch64: support for vX.8b/vX.16b register names
+ support for more than 256 registers in the register dat files
- removed totherregisterset
+ AArch64: use vmov to load immediates if possible
+ AArch64: use eor to clear mm registers

git-svn-id: trunk@42917 -
2019-09-03 21:07:33 +00:00
florian
078595be4c + support for software floating point exception handling on AArch64 (-CE)
git-svn-id: trunk@42891 -
2019-09-01 17:26:11 +00:00
florian
9c00a8b616 + FMA support for aaarch64
git-svn-id: trunk@42885 -
2019-08-31 19:37:17 +00:00
Jonas Maebe
3fee990218 * on Mach-O, PECOFF and ELF platforms, write local symbols as hidden/
private_extern (or plain global in case of PECOFF, as the effect is
    the same there): visible across object files, but they become local
    when linked into a binary/library. This enables cross-unit inlining
    of functions accessig implementation-only symbols.

git-svn-id: trunk@42340 -
2019-07-07 21:33:43 +00:00
pierre
828a248287 Systematically include fpcdefs.inc at sart of all units used by compiler
git-svn-id: trunk@42322 -
2019-07-03 13:35:05 +00:00
Jonas Maebe
a0e35fd1bc * synchronised with trunk till r42118
git-svn-id: branches/debug_eh@42119 -
2019-05-25 13:19:06 +00:00
Jonas Maebe
77658b925b * disable regular array -> dynamic array type coversion support unless
{$modeswitch arraytodynarray} is active (mantis #35576)
   o changed compiler to compile without this modeswitch
   o added the modeswitch to a test that depends on it

git-svn-id: trunk@42118 -
2019-05-25 12:31:32 +00:00
Jonas Maebe
1b6425176b * synchronised with trunk till r42049
git-svn-id: branches/debug_eh@42050 -
2019-05-12 18:44:05 +00:00
Jonas Maebe
281b3ad276 * fix case completeness and unreachable code warnings in compiler that would
be introduced by the next commit

git-svn-id: trunk@42046 -
2019-05-12 14:29:03 +00:00
Jonas Maebe
dc2cbf8018 * synchronised with trunk till r41725
git-svn-id: branches/debug_eh@41726 -
2019-03-17 15:25:31 +00:00
Jonas Maebe
d34e0b091b * fixed aarch64 shifterop parsing in inline assembly
git-svn-id: trunk@41650 -
2019-03-09 16:11:31 +00:00
Jonas Maebe
a079e5fa80 * synchronised with trunk till r41449
git-svn-id: branches/debug_eh@41450 -
2019-02-24 20:01:53 +00:00
Jonas Maebe
07bd4ba517 * let all the case code generation work with tconstexprint instead of aint,
so it also works for 32 bit targets and a high level code generator
    (where aint is still 32 bit, but 64 bit operations are not decomposed)

git-svn-id: trunk@41441 -
2019-02-24 19:58:37 +00:00
Jonas Maebe
ac883969a9 * synchronised with trunk till r41423
git-svn-id: branches/debug_eh@41424 -
2019-02-23 17:08:03 +00:00
Jonas Maebe
8b9e90dc7a * keep track of whether a routine has a C-style variadic parameter in the
procoptions even when it's through an array-of-const parameter
  * always call create_varargs_paraloc_info() instead of create_paraloc_info()
    in the former case, even when no varargs parameters are specified (because
    on some platforms even some non-variadic parameters need to be passed
    differently, such as on ARM with gnueabihf)

git-svn-id: trunk@41420 -
2019-02-23 15:42:45 +00:00
Jonas Maebe
1a559f5c60 * move the homogenous float aggregate determination function to a common
unit for ARM and AArch64

git-svn-id: trunk@41419 -
2019-02-23 15:42:39 +00:00
yury
382d5060a0 * aarch64: According to ARM64 ABI, function's arguments and the result are not required to be sign/zero extended to a full register size. Obey this rule for all targets except iOS where sign/zero extension is required.
git-svn-id: trunk@41412 -
2019-02-22 17:59:54 +00:00
Jonas Maebe
f26ac9026e * enable LLVM support Linux/AArch64
o also put the regular function result before the partfpstruct parameter

git-svn-id: branches/debug_eh@40577 -
2018-12-16 20:46:44 +00:00
Jonas Maebe
b41cd1eb6a * synchronised with trunk till r40575
git-svn-id: branches/debug_eh@40576 -
2018-12-16 20:45:55 +00:00
Jonas Maebe
ac8411f3cf * pass dynamic array parameters of cdecl routines by value on AArch64
(like on onther platforms)
   o it was passed by reference as a side effect of the fact arrays in C are
     pointers, but a dynamic array already is a pointer

git-svn-id: trunk@40573 -
2018-12-16 20:44:35 +00:00
Jonas Maebe
95171a1e22 * initialise cgpara with valid data for the C-style "array of const" para
(necessary for the LLVM backend)

git-svn-id: trunk@40571 -
2018-12-16 20:44:28 +00:00
Jonas Maebe
820d2f7135 * support OS_32/OS_64 in AArch64 cgsize2subreg() for MM registers (can happen
for records with floating point fields with the LLVM code generator)

git-svn-id: trunk@40570 -
2018-12-16 20:44:24 +00:00
Jonas Maebe
ff002e2664 * set paralocations correctly for LLVM/AArch (must be register-type instead
of parameter-type based)

git-svn-id: trunk@40568 -
2018-12-16 20:44:18 +00:00
Jonas Maebe
6b58185bda * fixed shifval for big endian (bits instead of bytes)
git-svn-id: trunk@40567 -
2018-12-16 20:44:15 +00:00
Jonas Maebe
6e453a1477 * fixed paraloc def when changing the size to OS_32
git-svn-id: trunk@40566 -
2018-12-16 20:44:12 +00:00
Jonas Maebe
52fec8a94a * when optimising subsetreg moves for aarch64, take into account the fact
that the subsetreg itself can be 32 or 64 bit (mantis #33607)

git-svn-id: trunk@40512 -
2018-12-09 14:46:52 +00:00
Jonas Maebe
4cd6f59bc3 * changed create_hlcodegen into a procvar, so that we don't have to insert
hlcgllvm in the uses clause of every unit that calls create_hlcodegen
   o prevents dependency cycles that can cause llvm codegen units to init
     before the cpu variants, which is bad since the llvm versions have to
     override the cpu variants in their init code (+ added checks in the
     init code that they are in fact initialised later)

git-svn-id: branches/debug_eh@40410 -
2018-11-29 21:31:15 +00:00
Jonas Maebe
bfc7c58a69 * synchronised with trunk till r40348
git-svn-id: branches/debug_eh@40349 -
2018-11-18 12:01:50 +00:00
florian
9b0ff05ee8 - get rid of MaxOps, it is redundant with max_operands
* MatchOpType with three operands is only available of max_operands>2

git-svn-id: trunk@40190 -
2018-11-02 21:32:29 +00:00
yury
4357caaad8 * Removed unused local vars.
git-svn-id: trunk@40183 -
2018-11-02 18:44:29 +00:00
Jonas Maebe
8555ec1438 + fpc_eh_return_data_regno() intrinsic to get the return register numbers
for the Dwarf EH exception handler result

git-svn-id: branches/debug_eh@40070 -
2018-10-28 18:16:38 +00:00
florian
112fb4613b * take care of the fact that x and w registers overlap when carrying out the Str/LdrAdd/Sub2Str/Ldr Postindex optimization
git-svn-id: trunk@40023 -
2018-10-24 17:38:51 +00:00
florian
0a5e6d29cb + implement assembler optimization Str/LdrAdd/Sub2Str/Ldr Postindex done
git-svn-id: trunk@40017 -
2018-10-23 20:41:27 +00:00
florian
379c2fe821 * cleanup debug code
git-svn-id: trunk@40016 -
2018-10-22 21:27:36 +00:00
florian
f27fee5566 + make use of the BFI instruction in tcgaarch64.a_load_ref_reg_unaligned
git-svn-id: trunk@40015 -
2018-10-22 21:23:48 +00:00
pierre
92acd38f40 Fix for bug report #34380
git-svn-id: trunk@39986 -
2018-10-18 20:21:54 +00:00