Jonas Maebe
f754978540
* handle constructor function results that have been migrated to the
...
parentfpstruct the same as regular function results (see r32687)
git-svn-id: trunk@40641 -
2018-12-25 15:36:24 +00:00
Jonas Maebe
70cadc7694
* fixed string constant length when going from utf-8 to single-byte code page
...
(mantis #33666 , patch by engkin)
git-svn-id: trunk@40637 -
2018-12-24 22:21:40 +00:00
Jonas Maebe
c9a7afe053
* in constructors, free the temp holding self only after loading the function
...
result, as self is the function result there (follow up to 40501)
git-svn-id: trunk@40635 -
2018-12-24 22:10:09 +00:00
Jonas Maebe
acf02ab64b
* when creating wrappers, add a prefix to parameter names to prevent them
...
hiding the method name of the wrapped routine
o also add a few more '&' prefixes to the generated wrapper code to
prevent issues when keywords are used as identifiers
git-svn-id: trunk@40634 -
2018-12-24 22:10:06 +00:00
Jonas Maebe
377d4e1b58
* make the size parameter of thlcgobj.location_force_mmregscalar() a
...
var-parameter, as the size sometimes gets changed in this routine and
high level code generators don't use the location.size but the def
git-svn-id: trunk@40633 -
2018-12-24 22:10:02 +00:00
Jonas Maebe
f3d831b480
* fixed result cgsize of LLVM's second_nothing type conversion node (new
...
size instead of original size, which can be different in case of going
from void to something else)
git-svn-id: trunk@40632 -
2018-12-24 22:09:58 +00:00
Jonas Maebe
eb769e3859
* force pointer-based self parameters of inlined routines in temps for LLVM
...
to ensure that their type gets updated
git-svn-id: trunk@40631 -
2018-12-24 22:09:55 +00:00
Jonas Maebe
3ccc3e329b
* prevent calling firstpass multiple times for a node (such as when
...
transforming inc/dec to an addn/subn in case of range checking) from
triggering the transformation logic for accessing nested variables
on LLVM/JVM multiple times
* also prevent it from triggering errors during inlining, in case a
parameter to a nested routine gets replaced by a local variable
from a parent routine (in that case, it does not need to be
accessed via the parentfpstruct, as we are being inlined in the
parent) -> don't duplicate the check from pass_typecheck in pass_1,
but check whether it needs to be accessed via the parentfpstruct
by verifying that tloadnode.left is assigned (which pass_typecheck
will ensure if needed)
git-svn-id: trunk@40630 -
2018-12-24 22:09:52 +00:00
Jonas Maebe
dd29088430
* simplify all type conversions for formal constants even for LLVM and JVM
...
(since these happen at compile time and don't result in generated code,
they never need extra type conversions in the code)
git-svn-id: trunk@40629 -
2018-12-24 22:09:48 +00:00
Jonas Maebe
b1b559f283
* fixed used resulttype of char-to-shortstring typeconversion in case the
...
shortstring type is smaler than 255 chars
git-svn-id: trunk@40628 -
2018-12-24 22:09:45 +00:00
Jonas Maebe
f87304f5ca
* fixed LLVM code generator not taking into account constalignmin/max
...
settings for typed constants
git-svn-id: trunk@40605 -
2018-12-21 20:57:22 +00:00
Jonas Maebe
4f72edcdd5
+ LLVM support for the FMA intrinsics
...
git-svn-id: trunk@40604 -
2018-12-21 20:57:19 +00:00
Jonas Maebe
1cc995b471
* use ccallnode.createintern() instead of
...
ccallcnode.createinternfromunit('SYSTEM')
git-svn-id: trunk@40603 -
2018-12-21 20:57:16 +00:00
Jonas Maebe
c55ffa8cc7
* fixed <> comparisons with NaNs (use LLVM "unordered" comparison: succeed
...
if either operand is a NaN)
git-svn-id: trunk@40602 -
2018-12-21 20:57:12 +00:00
Jonas Maebe
3b4011760a
* cleaned up blockaddress instruction (add type rather than hardcoding it
...
in the assembler writer)
* fixed taking the address of a label in a typed const for llvm (fixes
tbs/tb0468a)
git-svn-id: trunk@40599 -
2018-12-20 21:22:44 +00:00
Jonas Maebe
c6bb85eae9
* support for compiling the objects unit methods that expect local procedure/
...
function pointers using {$modeswitch nestedprocvars} functionality, activate
this for LLVM and also activate that modeswitch for a test that uses this
o also convert the IDE units to use this functionality
o requires extra typecasts because implicit type conversions from
procvar(p: psometype) to procvar(p: pointer) are not supported; on the
plus side, even those type conversions are checked for validity
o note: requires {$modeswitch nestedprocvars} in all programs/units
that rely on this functionality
git-svn-id: trunk@40598 -
2018-12-20 21:22:40 +00:00
yury
92e579a294
* Improved the comment.
...
git-svn-id: trunk@40586 -
2018-12-18 13:23:52 +00:00
yury
fdcb12d9f6
* ARM: Remove preindexing and postindexing for LDR in some cases when removing superfluous MOVs. It fixes crash when calling Format() if rtl is compiled with -O3.
...
git-svn-id: trunk@40585 -
2018-12-18 13:20:40 +00:00
Jonas Maebe
7cc7268635
* fixed dynamic array constants for non-Darwin LLVM platforms
...
git-svn-id: trunk@40578 -
2018-12-16 20:59:58 +00:00
Jonas Maebe
2330164ee2
+ internal sqrt support for LLVM (faster on all platforms, necessary on
...
platforms that don't have RTL support for it, as the the generic
fpc_sqrt_real just calls runerror)
git-svn-id: trunk@40575 -
2018-12-16 20:44:41 +00:00
Jonas Maebe
8845f4d1ce
* fixed type consistency in handler for array parameters on platforms where
...
these have to be passed on the caller side (i.e., AArch64)
git-svn-id: trunk@40574 -
2018-12-16 20:44:38 +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
e69b4d2d9a
* replaced some stray cpointerdef.create() calls with cpointerdef.getreusable()
...
git-svn-id: trunk@40572 -
2018-12-16 20:44:31 +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
93e39fb0cd
* only coerce the type of the leftover bytes of a record if the location
...
size doesn't match the number of remaining bytes
o prevents a second "single" field of a record getting interpreted as a
"cardinal"
git-svn-id: trunk@40569 -
2018-12-16 20:44:21 +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
97bc58d248
* fixed bug that caused the "sret" argument attribute to never be used (and
...
a guaranteed internalerror on AArch64/llvm)
git-svn-id: trunk@40565 -
2018-12-16 20:44:09 +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
32a51d7b62
* add nocapture and dereferenceable/dereferenceable_or_null decorators to
...
parameters for llvm where appropriate
git-svn-id: trunk@40503 -
2018-12-08 15:31:54 +00:00
Jonas Maebe
51502874af
* emit temp lifetime information for llvm
...
o also allow freeing temps in the middle of a routine for llvm (we won't
reuse them, but it results in better lifetime information)
git-svn-id: trunk@40502 -
2018-12-08 15:31:51 +00:00
Jonas Maebe
3b7efb5123
* only free the temp holding the function result after we've loaded it into
...
the function return register (so we won't load from an already freed
temp once we emit lifetime info for temps on LLVM)
git-svn-id: trunk@40501 -
2018-12-08 15:31:48 +00:00
Jonas Maebe
8a4947dba2
* don't do anything in thlcgllvm.allocallcpuregisters() like in
...
deallocallcpuregisters()
git-svn-id: trunk@40499 -
2018-12-08 15:31:41 +00:00
yury
ad269dedd4
* If ds_dwarf_cpp (C++ emulation) is enabled, add DW_AT_linkage_name attribute for methods.
...
LLDB uses it to display fully qualified method names. Add a simple C++ mangled name without params to achieve at least "Class::Method()" instead of just "Method" in LLDB.
git-svn-id: trunk@40498 -
2018-12-07 20:55:50 +00:00
yury
f0d42db82d
* When ds_dwarf_cpp option is enabled, use dwarf2 implementation of strings debug info. It makes LLDB happy.
...
git-svn-id: trunk@40492 -
2018-12-07 16:14:02 +00:00
Jonas Maebe
122d0d36d6
+ volatile() expression that marks an expression as volatile
...
* disable matching volatile references in the assembler optimisers, so they
can't be removed (more conservative than needed, but better than removing
too many)
o the CSE optimiser will ignore them by default, because they're an unknown
inline node for it
* also removed no longer used fpc_in_move_x and fpc_in_fillchar_x inline node
identifiers from rtl/inc/innr.inc, and placed fpc_in_unaligned_x at the
right place
git-svn-id: trunk@40465 -
2018-12-04 19:53:20 +00:00
Jonas Maebe
b7da7cd654
* ensure the generic version of tcgshlshrnode gets used for llvm
...
git-svn-id: trunk@40464 -
2018-12-04 19:53:16 +00:00
Jonas Maebe
2109612fa3
- disable cs_opt_use_load_modify_store because for llvm because it is
...
apparently buggy as far as type information is concerned, and it also
results in tons of spilling
git-svn-id: trunk@40463 -
2018-12-04 19:53:13 +00:00
florian
eeadf618b8
+ abi tag for i386
...
* arm abi tag moved into pascal file
git-svn-id: trunk@40454 -
2018-12-02 22:56:12 +00:00
Károly Balogh
6629e72d79
m68k: reinstate the inc/dec tempregister type hack again in an isolated way (it was removed in r40385, as it was breaking llvm target)
...
git-svn-id: trunk@40453 -
2018-12-02 18:54:04 +00:00
Jonas Maebe
e8512d19b5
* set constalignmax to the same value as varalignmax for all targets where
...
constalignmax was lower (which does not make sense)
git-svn-id: trunk@40443 -
2018-12-01 23:07:09 +00:00
Jonas Maebe
95d79296bd
* fixed alignment of tfiledef (same as corresponding file recorddef)
...
* cap set alignment to sizeof(aint)
git-svn-id: trunk@40442 -
2018-12-01 23:07:05 +00:00
pierre
67fe756642
Regenerate msgid and msgtxt include files after commit 40422
...
git-svn-id: trunk@40425 -
2018-12-01 16:18:58 +00:00
marco
b60cbf3329
* systematically capitalize first word of errormsg/sentence, patch by J. Gareth Moreton, mantis 34618
...
git-svn-id: trunk@40422 -
2018-11-30 11:21:50 +00:00
Jonas Maebe
758a8dd34a
* fixed dwarf debug info after r40398 (mantis #34622 )
...
git-svn-id: trunk@40421 -
2018-11-29 23:21:15 +00:00
Jonas Maebe
50ab607676
+ customint torddef type to create arbitraty bit-width integers
...
o use this to handle non-power-of-two-sized parameters for llvm
o no general support in the parser/code generator, so don't expose
git-svn-id: trunk@40398 -
2018-11-29 20:57:08 +00:00
Jonas Maebe
63847f1948
* disable explicitly calling class constructors on the JVM platform, as that
...
is forbidden there
git-svn-id: trunk@40386 -
2018-11-28 19:23:34 +00:00
Jonas Maebe
026d06cffb
- reverted r39188, as this hack removes the type correctness of the
...
instructions, which breaks the llvm code generator. Put such hacks
in CPU-specific overrides
git-svn-id: trunk@40385 -
2018-11-28 19:23:31 +00:00