yury
e5c2d13671
* Do not set pi_needs_got in current_procinfo.flags at the node level, since the GOT usage can only be estimated there. Instead set the pi_needs_got flag at places where the GOT register is accessed during the code generation. This eliminates generation of the unneeded initialization of the GOT register and fixes linker errors when the _GLOBAL_OFFSET_TABLE_ symbol is referenced but no actual GOT references are present.
...
git-svn-id: trunk@41460 -
2019-02-25 13:35:40 +00:00
Jonas Maebe
bc77aad3d9
* give an error when trying to call through to a C varargs routine with a
...
high level code generator
o we cannot create a high-level stub in that case
git-svn-id: trunk@41443 -
2019-02-24 19:58:44 +00:00
Jonas Maebe
503ea604f3
+ nolinline modifier to specify that a routine must never be inlined
...
git-svn-id: trunk@41198 -
2019-02-03 21:00:17 +00:00
Jonas Maebe
51e68eb302
* fixed several places where the interface crc could change:
...
o unsetting po_inline while parsing the implementation for various reasons
(interprocedural goto/label, accessing a local in a parent frame,
having nested procedures)
o instead handle this via the pio_inline_not_possible flag
o noreturn can no longer be specified only in the implementation
git-svn-id: trunk@40789 -
2019-01-06 20:35:56 +00:00
Jonas Maebe
91d5457b38
* moved around/replaced the following procedures to stop nflw from depending
...
on pdecsub (node units should not depend on parser units):
o maybe_add_public_default_java_constructor()
o handle_calling_convention()
o create_finalizer_procdef() (replaced with create_outline_procdef())
o insert_record_hidden_paras()
o handle_calling_convention()
o proc_add_definition()
o build_parentfpstruct()
o maybe_guarantee_record_typesym()
o get_first_proc_str()
* factored out the creation of a procinfo for a nested procdef based on a
subnodetree of the current procdef into tprocinfo.create_for_outlining()
git-svn-id: trunk@40773 -
2019-01-05 16:26:33 +00:00
Jonas Maebe
3a5a69619e
* moved initialisation of parentfpstruct to just behind where the local vars
...
get initialised, so that parameters in this struct are already available
in any wrappers generated for the parent routine (e.g. in case self is
moved to the parentfpstruct in a destructor, which calls beforestruction
in its wrapper)
git-svn-id: trunk@40384 -
2018-11-28 19:23:28 +00:00
Jonas Maebe
b96a8aee61
* don't generate tempsfinalize nodes in except filter procdefs, as that would
...
finalize the parent's temps twice (fix for r40345, mantis #34574 )
git-svn-id: trunk@40357 -
2018-11-20 19:25:06 +00:00
Jonas Maebe
3b9f5a5e96
* moved finalization of code generator temps to a node, so it can be getcopy'd
...
(needed for LLVM, where we need two copies of the finally code: one in case
an exception occurs, and one in case none is raised)
o also first finalize parameters and only then code generator temps, since
in theory the former could create more of the latter
git-svn-id: trunk@40345 -
2018-11-17 22:38:36 +00:00
florian
a40335de34
* non-linux arm targets fixed
...
git-svn-id: trunk@40276 -
2018-11-08 19:57:30 +00:00
florian
c37c485eb7
+ check if initialization/finalization code uses implicitly thread vars
...
git-svn-id: trunk@40269 -
2018-11-07 22:03:00 +00:00
florian
9f16c34329
+ initial work for tls-based threadvar support on arm-linux
...
git-svn-id: trunk@40267 -
2018-11-07 22:02:58 +00:00
yury
5c5dc2ed50
* Changed verbosity of ""???" not yet supported inside inline procedure/function" to note to be consistent with note "Call to subroutine "?" marked as inline is not inlined".
...
git-svn-id: trunk@40255 -
2018-11-07 12:57:23 +00:00
yury
dd60397165
+ Added the pio_inline_not_possible flag to timplprocoption. It is set if a function can't be inline (contains an assembler block, etc). When calling such functions, no note "Call to subroutine "?" marked as inline is not inlined" is emitted.
...
git-svn-id: trunk@40254 -
2018-11-07 12:20:30 +00:00
yury
b115886930
* po_inline can't be removed from procoptions when the interface part is already parsed. It changes the interface's CRC and causes other units to recompile.
...
git-svn-id: trunk@40238 -
2018-11-06 10:21:06 +00:00
yury
95d18cd052
* If a function can't be inline (contains an assembler block, etc) remove the po_inline flag from its procoptions.
...
git-svn-id: trunk@40223 -
2018-11-05 14:18:27 +00:00
yury
4357caaad8
* Removed unused local vars.
...
git-svn-id: trunk@40183 -
2018-11-02 18:44:29 +00:00
Jonas Maebe
0cd85d73e4
* ttryfinallynode now inherits from tbinarynode instead of tloopnode, as its
...
t1 field was always set to tnothingnode
git-svn-id: trunk@40142 -
2018-11-01 13:19:33 +00:00
florian
a34d4e715c
Merged riscv_new branch
...
git-svn-id: trunk@39813 -
2018-09-26 19:49:08 +00:00
svenbarth
10886d8cef
* fix for Mantis #34206 : when specializing nested routines of a generic routine we don't need access to their genericdef (which isn't available anyway in other units when loading from PPU) as their definition is completely contained in the token stream
...
+ added simplified test for the problem
git-svn-id: trunk@39692 -
2018-08-31 16:11:05 +00:00
Jeppe Johansen
76dda5813e
Updated dynlinker filename.
...
Fix passing of vararg register pairs.
Fix passing of big record, and return of records.
Disabled framepointer elimination for the time being.
git-svn-id: branches/laksen/riscv_new@39519 -
2018-07-28 20:06:06 +00:00
Jeppe Johansen
ceb38833f2
Added RiscV32/64 target, from a cleaned up version of branches/laksen/riscv/trunk.
...
git-svn-id: branches/laksen/riscv_new@39474 -
2018-07-20 08:21:15 +00:00
nickysn
966564aade
- removed 'if assigned(code)' before calling code.free in tcgprocinfo.destroy,
...
since .free already checks for <>nil
git-svn-id: trunk@39312 -
2018-06-27 12:38:58 +00:00
svenbarth
5510b13975
* ensure that sto_has_generic is set when a generic routine has been parsed
...
git-svn-id: trunk@39230 -
2018-06-15 13:49:03 +00:00
florian
f08d3fdf8f
* moved execution weight calculation into a separate pass, so the info is available already available before the code generation pass if needed
...
git-svn-id: trunk@38717 -
2018-04-08 20:51:27 +00:00
florian
1497b64804
* the temp. locations created by cse were not properly cleanup up, this patch fixes this
...
git-svn-id: trunk@38624 -
2018-03-25 15:55:34 +00:00
svenbarth
dffe423b10
* fix for Mantis #31945 : two fixes for nested routines inside generic methods
...
a) correctly determine whether token recording is required or not (nested routines of generic routines don't need it)
b) correctly determine whether the trailing ";" needs to be parsed (nested routines of generic routines need to)
git-svn-id: trunk@36469 -
2017-06-09 15:46:10 +00:00
florian
b1dff29cbf
* removed unused units
...
git-svn-id: trunk@36165 -
2017-05-09 19:53:14 +00:00
nickysn
012153201a
* moved the conversion of "x:=x op k" to inline nodes to a separate optimization
...
pass, so that it can be done after other optimizations, such as constant
propagation
git-svn-id: trunk@35961 -
2017-04-26 22:44:01 +00:00
maciej-izak
48b149acd4
New tokens for new management operators: Initialize, Finalize, AddRef and Copy. Small code adjustment for parser (pdecobj.pas, pstatmnt.pas, psub.pas, ptype.pas) was required because few of old token has from now value which is outside range of set: _CONSTRUCTOR, _FINALIZATION.
...
New tokens for operators:
* _OP_INITIALIZE, _OP_FINALIZE, _OP_ADDREF, _OP_COPY
New tokens:
* _INITIALIZE, _FINALIZE, _ADDREF, _COPY
git-svn-id: trunk@35438 -
2017-02-18 18:12:45 +00:00
Jonas Maebe
7013a879c3
- disabled check for existence for texceptaddr/tguid/tjmpbuf in the system
...
unit for the JVM platform (they do not exist/are not needed there)
(mantis #31240 )
git-svn-id: trunk@35348 -
2017-01-28 14:33:36 +00:00
florian
668b198d7c
* fix for issue #29936 : check if the internal needed types are available
...
git-svn-id: trunk@35310 -
2017-01-15 20:54:07 +00:00
svenbarth
109dff8b56
* allow nested procedures and functions in generic routines (and get rid of an untranslated error message :P )
...
git-svn-id: trunk@35148 -
2016-12-17 21:23:07 +00:00
svenbarth
779799c406
* only record tokens for real generic routines or those that belong to a generic class/record
...
* don't parse a semicolon at the end for real specializations or specializations of methods that belong to a specialized class/record
git-svn-id: trunk@35146 -
2016-12-17 21:13:30 +00:00
svenbarth
a76fd967b2
* inherit df_generic and df_specialization from the parent routine and correctly set the genericdef for a specialization
...
git-svn-id: trunk@35145 -
2016-12-17 21:10:58 +00:00
florian
b527bab087
* better check if we are in the main program which never returns
...
git-svn-id: trunk@34938 -
2016-11-20 18:01:13 +00:00
pierre
89c1b68b14
* Delete regvars unit.
...
This unit was empty unless OLDREGVARS macro was set,
but this does not compile and no change has been made since 2011.
* Remove regvars from all _USES clauses.
git-svn-id: trunk@34808 -
2016-11-06 14:01:39 +00:00
nickysn
e1792e712a
* changed the 'size' parameter of fpc_zeromem and fpc_fillmem from ptruint to sizeuint
...
git-svn-id: trunk@34741 -
2016-10-18 15:42:29 +00:00
nickysn
cc234e7de9
+ when the -vp option is specified, also print the node tree in tree.log right
...
before pass 2, since there are now quite a lot of changes to the tree
happening after pass 1.
git-svn-id: trunk@34606 -
2016-10-03 14:15:59 +00:00
Jonas Maebe
1e506ce1d5
* call beforedestruction if an exception happens in afterconstruction
...
(mantis #30570 )
git-svn-id: trunk@34453 -
2016-09-08 14:18:59 +00:00
Jonas Maebe
90f09a599e
* simplified flow while adding afterconstruction code
...
git-svn-id: trunk@34451 -
2016-09-08 14:18:53 +00:00
Jonas Maebe
adcf07aabb
* fixed line information for constructor code added to new block while
...
generating the afterconstruction code
git-svn-id: trunk@34450 -
2016-09-08 14:18:50 +00:00
Jonas Maebe
d22b83ee73
* renamed afterconstructionblock to constructionblock
...
git-svn-id: trunk@34449 -
2016-09-08 14:18:47 +00:00
Jonas Maebe
eb2ce85269
* correctly set the line info for the implicitly generated entry code nodes,
...
and update the code to also set it for some implicitly generated exit code
git-svn-id: trunk@34393 -
2016-08-29 16:05:25 +00:00
svenbarth
f69b365b77
* declare various symbols as external assembler symbols: RTTI references, parent VMT, FPC_EMPTYMETHOD (all three only if it's used from a different unit), threadvar lists and symbols declared as "external"
...
git-svn-id: trunk@34176 -
2016-07-22 13:34:38 +00:00
Jonas Maebe
1cb8c0d00c
* specify the def of assembler level symbols defined via
...
tasmdata.DefineAsmSymbol() and all routines that call it
o will be used to automatically generate AB_INDIRECT sybols when
necessary
git-svn-id: trunk@34164 -
2016-07-20 20:52:59 +00:00
Jonas Maebe
cd5817a689
* also emit a tai_varloc() when regvars are initially assigned
...
o removed separate writing of the local variable/parameter location from
psub, as that is now triggered by thise tai_varloc
git-svn-id: trunk@34084 -
2016-07-08 07:46:45 +00:00
Jonas Maebe
98ac6c4797
* converted gen_stack_check_call() to the high level code generator
...
git-svn-id: trunk@33990 -
2016-06-15 18:31:52 +00:00
svenbarth
e527b6fe4f
psub.pas, read_proc:
...
* always register implementation-only, public routines as they might only be called from other units using an external declaration
git-svn-id: trunk@33967 -
2016-06-12 13:47:08 +00:00
svenbarth
af26a31251
psub.pas, read_proc_body:
...
* reset _FAIL directly after parsing the routine
git-svn-id: trunk@33881 -
2016-06-02 19:31:47 +00:00
svenbarth
ac95dcd7fa
Improve inlining of generic routines (no matter whether they belong to a generic type or a generics themselves).
...
psub.pas, read_proc_body:
* also try to generate pending specializations before generating a routine's code so that these might be inlined as well
git-svn-id: trunk@33827 -
2016-05-26 18:57:55 +00:00