virtual register
* always add EBX to used_in_proc in case pi_needs_got, because it's
currently always used due to the geteipasebx call
* don't explicitly free the PIC register in the exitcode because
then the assembler optimizer assumes the load restoring it (ebx)
can be safely removed
git-svn-id: trunk@8683 -
* fixed g_external_wrapper for darwin/i386 (both with and without pic,
by using a_jmp_name(), because the darwin jump stubs can always
be called directly)
git-svn-id: trunk@8669 -
to be made pic-safe (mainly accesses to the global default8087cw)
* At the same time also made the non-pic code abi-compliant (access
external data via indirect symbol pointers etc)
Darwin/i386 also puts the got into a virtual register (like
Darwin/ppc), a.o. because the register allocator fails to colour
a routine in aasmcpu.pas if we take away ebx from it.
git-svn-id: trunk@8657 -
* small cleanups of unused variables in firstpass
* node_resources_fpu() created to get an approximation of the
required fpu registers
* for the moment use node_complexity in the CG until the
node_resource_int() is created
git-svn-id: trunk@8655 -
suite compiled with -Cg compared to without -Cg)
+ support for using a virtual register as PIC/got base register
* moved got loading code from ncgutil to cgobj/cgcpu (can't test whether
it didn't break anything under linux/i386, because "make cycle OPT=-Cg"
was already broken due to the *prt*.as -> si_*.pp changes)
git-svn-id: trunk@8651 -
without relocations in sec_rodata_norel. It should be possible to make
this new section read-only on all platforms, although currently it
is only done for darwin, and for non-pic code written using the
-Aas assembler writer.
Most platforms also have a special section for "constant but with
relocations" data, but such a section is currently only used for
Darwin (others still use plain .data sections for that, like they
did before)
git-svn-id: trunk@8650 -
* no longer generate the DEBUGSTART/INFO/END/TABLE for Darwin as it
is not needed there and those symbols sometimes confuse the linker
git-svn-id: trunk@8626 -
assembler blocks in procedures marked as inline. I have no idea
why that was done, but it was the case already since a long time
and caused a compiler crash when compiling tests/test/opt/tretopt1
(because it caused the assembler optimizer to process such
assembler blocks, while their operand order is not guaranteed to
be the AT&T one as expected by the optimizers)
git-svn-id: trunk@8604 -
the order in which they are evaluated (except for LOC_REFERENCE
parameters on i386, because the code generator expects them in their
original order). This saves quite a lot of spilling and uses of
non-volatile registers when the parameters themselves also contain
calls
git-svn-id: trunk@8603 -
account that an unmodified value parameter's address could also be
passed as the address of the complex return value (and thus be modified
indirectly after all)
git-svn-id: trunk@8570 -
* refactored above mentioned stub code generation, allowing the CG to define a cpu specific method for this task by overriding new g_external_wrapper() method
git-svn-id: trunk@8566 -
class in case the parent class has a field with as type the (forward
defined) child class, because this crashes gdb
+ (interactive) test for this
git-svn-id: trunk@8565 -
* preprocess rather than postprocess the replaceparaloads in ncal
when inlining, because after r8558 a node is now sometimes replaced
by a tree which still contains this same node (so postprocess
causes endless recursion in those cases)
git-svn-id: trunk@8561 -
* rename methodpointerinit/done to callinitblock/callcleanupblock
* moved checks in callnode to separate functions
* funcretnode is now always a simple node instead of a block of
statements
* funcret and methodpointer are generated/optimized only in pass_1 so
a conversion from calln to loadn is much easier
* function result assignments are much more often optimized to use the
assignment destination location instead of using a temp
git-svn-id: trunk@8558 -
* fixed set add-nodes in case left and right are swapped (taddset4)
* fixed "in" expressions with packed sets in case left is < setbase
(now tested by tw8258b, which was missing a {$packset 1} directive)
git-svn-id: trunk@8519 -
is <> 0 (Delphi compatible now, + various tests)
+ support for enums and sets in is_in_limit()
* fixed converting smallset expressions to varsets
* improved choosing an appropriate common set type when mixing
set types in an expression
- removed no longer used normalset code from nadd.pas
- disabled large set (>256 elements) support for now, because
they are not yet supported entirely throughout the compiler
and this causes errors at run time in several situations
git-svn-id: trunk@8515 -
moved to it)
+ -go[no]dwarfsets switch to [disable]/enable generation of dwarf set
information, as this breaks gdb < 6.5 (used to be disabled in the
compiler by an ifdef, still off by default)
git-svn-id: trunk@8414 -
record variables is now independent of their packrecords setting
(except for packrecords C, which already calculated a reasonable
alignment). This means that e.g. a packed record consisting of two
pointers will be aligned at sizeof(pointer) normally. The internal
alignment of the individual fields of packed records obviously did
not change, also not if those fields are records themselves.
* The size of records without any packing atributes is also padded to
become a multiple of this improved alignment calculation, which
means that the size of such records may change after this patch.
Always explicitly specify a packing for records which are used for
data storage/transmission if you want to have a consistent layout.
git-svn-id: trunk@8409 -
* only suggest = if the user tried to overload <>
* suggest ** if the user tried to overload ^ (mantis #9606)
* no suggestion otherwise
(instead of always suggesting '=')
git-svn-id: trunk@8402 -
The downside is that because it is context-insensitive, several
(correct) optimizations which were performed in the past no longer
are now (and while some new ones are done now, the downside is bigger
-- but at least the code should be correct in all cases now)
git-svn-id: trunk@8385 -