Commit Graph

10255 Commits

Author SHA1 Message Date
florian
f290d5195d * line ending properties set
git-svn-id: trunk@8685 -
2007-09-29 22:28:27 +00:00
florian
0ebbbd5380 * spelling mistakes fixed
git-svn-id: trunk@8684 -
2007-09-29 22:26:33 +00:00
Jonas Maebe
3a60a28283 * don't try to add current_procinfo.got to used_in_proc if it's a
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 -
2007-09-29 20:24:51 +00:00
Jonas Maebe
0a606b308d - removed unused nested do_generate_code procedure from read_proc
git-svn-id: trunk@8678 -
2007-09-29 10:28:40 +00:00
Jonas Maebe
b9752680a5 * fixed crashes when combining -Cg with -g or -pg due to a missing
restore of lr in leaf procedures in that case (Darwin-only)

git-svn-id: trunk@8675 -
2007-09-28 23:27:16 +00:00
Jonas Maebe
993ec01a76 * use the gcc jumptable scheme for all ppc targets instead of only for
darwin

git-svn-id: trunk@8674 -
2007-09-28 23:00:58 +00:00
Jonas Maebe
5a0a6d0d9e * fixed and enabled smartlinking on Darwin by adding more .reference
statements (some to work around linker bugs, most because they were
    really missing)

git-svn-id: trunk@8673 -
2007-09-28 22:48:41 +00:00
Vincent Snijders
bc7e54c3f0 * search preprocessor binary and add it as command line parameter for windres, so that the cpp doesn't need to be on the path
git-svn-id: trunk@8670 -
2007-09-28 19:53:19 +00:00
Jonas Maebe
c84744b27f * fixed a_jmp_name() for darwin/i386 (go via a stub)
* 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 -
2007-09-28 14:12:46 +00:00
Jonas Maebe
559bb6226e * don't try to translate the got register if it's NR_NO (fixes
regression of webtbs/tw3402 on linux/ppc64 after r8651)

git-svn-id: trunk@8668 -
2007-09-28 11:15:16 +00:00
peter
b5fb7120b8 * fixed length calculation of leb128 constants
git-svn-id: trunk@8666 -
2007-09-27 22:40:38 +00:00
peter
c19217f846 * only for jump instructions we need to look at the relative
offset of an symbol

git-svn-id: trunk@8664 -
2007-09-27 20:10:30 +00:00
Jonas Maebe
e81d4b737f * give a build-time error when trying to cross-compile the compiler from
non-i386 to i386 because that will result in internalerrors later anyway

git-svn-id: trunk@8662 -
2007-09-27 13:22:51 +00:00
Jonas Maebe
d7c4fdbed5 * added maxfpuregs constant to fix compilation after r8655
git-svn-id: trunk@8658 -
2007-09-26 22:00:29 +00:00
Jonas Maebe
3266f4e483 + Compiler support for pic on darwin/i386. The i386 rtl still needs
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 -
2007-09-26 21:42:27 +00:00
peter
4492ee39c5 * remove firstpasscount
git-svn-id: trunk@8656 -
2007-09-26 21:13:32 +00:00
peter
6b8aed593f * remove registers{int/mmx/fpu} from firstpass
* 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 -
2007-09-26 21:12:01 +00:00
Jonas Maebe
7e5e13223e * also count references to relsymbols
git-svn-id: trunk@8654 -
2007-09-26 20:31:41 +00:00
Jonas Maebe
b103605bc3 * added comment clarifying why g_indirect_sym_load doesn't have to
care about PIC

git-svn-id: trunk@8653 -
2007-09-26 18:39:14 +00:00
Jonas Maebe
9750e49d5a * fixed x86 compilation after r8651
git-svn-id: trunk@8652 -
2007-09-26 17:25:38 +00:00
Jonas Maebe
335bc9fd46 + PIC support for darwin/ppc32 (-Cg works now, no regressions in test
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 -
2007-09-26 16:41:32 +00:00
Jonas Maebe
70c2414daa * split off sec_rodata_norel from sec_rodata, and only put constant data
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 -
2007-09-26 15:49:01 +00:00
Jonas Maebe
2de2b6e17f * changed darwin/ppc32 jumptable code to be the same as the darwin/ppc64
code, because that's also what gcc does in all cases and it's pic-safe

git-svn-id: trunk@8643 -
2007-09-25 17:56:23 +00:00
Tomas Hajny
e4fe4e740c * usedircache reenabled
git-svn-id: trunk@8629 -
2007-09-24 05:58:10 +00:00
Jonas Maebe
0cbcf95ff2 * fixed compilation on non-x86 after r8617
git-svn-id: trunk@8628 -
2007-09-23 21:21:17 +00:00
Jonas Maebe
2bb0dced62 * optimized code for jumptables (same as for ppc now)
* put jump tables in const section for darwin/i386

git-svn-id: trunk@8627 -
2007-09-23 21:15:59 +00:00
Jonas Maebe
83624822c3 * moved and changed format of N_OSO stab to be the same as under gcc
* 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 -
2007-09-23 21:00:30 +00:00
florian
4cd15058df * take care of the used fpu instruction set when saving/restoring function results on x86
git-svn-id: trunk@8617 -
2007-09-23 14:23:31 +00:00
Jonas Maebe
3f81a4ed65 * make code page name parsing case insensitive (mantis #8930)
git-svn-id: trunk@8610 -
2007-09-22 20:54:49 +00:00
Jonas Maebe
b79e4ff3f0 * fixed typo that broke non-i386 compilation after r8603
git-svn-id: trunk@8609 -
2007-09-22 20:46:45 +00:00
Jonas Maebe
ecd2445602 + segment register support in g_concatcopy (should fix #9667, but I
can't test since I don't have Dos/Windows -- at least the changes
    don't break Linux/i386)

git-svn-id: trunk@8608 -
2007-09-22 20:10:56 +00:00
florian
4d57395a12 * indoniesan language update by Zaenal Mutaqin
git-svn-id: trunk@8606 -
2007-09-22 19:43:48 +00:00
Jonas Maebe
56f8424af6 * no longer remove AsmBlockStart and AsmBlockEnd markers from
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 -
2007-09-22 19:01:44 +00:00
Jonas Maebe
93aad97c22 * Also take into account the node complexity of parameters to determine
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 -
2007-09-22 17:22:17 +00:00
Jonas Maebe
b4b715f213 * make sure tai_align.calculatefillbuf no longer destroys the fillsize
field, because it can still be read afterwards

git-svn-id: trunk@8602 -
2007-09-22 13:01:30 +00:00
Jonas Maebe
1e5fee5c6f + callparan support in node_complexity()
git-svn-id: trunk@8601 -
2007-09-22 10:02:36 +00:00
tom_at_work
c6d42528a2 * linker script: keep got and toc sections together; allows use of -Cg (PIC) in large programs (e.g. compiler) on powerpc64/linux
git-svn-id: trunk@8591 -
2007-09-21 00:05:51 +00:00
florian
8db40851c0 * fixed some crashes
git-svn-id: trunk@8588 -
2007-09-20 22:28:54 +00:00
peter
4d48f2c6ff * move systems_darwin constant to correct location
git-svn-id: trunk@8580 -
2007-09-20 21:08:08 +00:00
tom_at_work
37695af02b * added missing assignment check when searching for a symbol in a class, fixing bug #9673
* test program for above

git-svn-id: trunk@8579 -
2007-09-20 20:35:35 +00:00
peter
4525df9ea0 * nf_is_funcret node flag added
* remove ti_is_funcret, use new node flag instead
  * check for funcret node in doreplace instead of funcretsym

git-svn-id: trunk@8578 -
2007-09-20 20:24:30 +00:00
peter
eb7aedc285 * fixed overflow
git-svn-id: trunk@8577 -
2007-09-20 20:23:26 +00:00
Jonas Maebe
2146ad614c * fixed toperator5 after r8558. The inlining logic did not take into
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 -
2007-09-20 18:27:59 +00:00
peter
2652a0c416 * added get_local_or_para_sym to search in parast and localst
for self and vmt. The new function uses the owner of procdef
    instead of the parsing symtablestack used by searchsym

git-svn-id: trunk@8568 -
2007-09-19 22:37:49 +00:00
tom_at_work
73b88f4d46 * constantified hardcoded minimum stackframe size required by the (powerpc64/linux) ABI
git-svn-id: trunk@8567 -
2007-09-19 20:55:47 +00:00
tom_at_work
b0bb3f94a7 * improve powerpc64/linux stub for external procedures in units: also consider GOT change in call to this external procedure
* 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 -
2007-09-19 20:41:39 +00:00
Jonas Maebe
9049f845f4 * avoid writing the stabs for a child class before those of a parent
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 -
2007-09-19 16:37:49 +00:00
peter
582fa79494 * don't overwrite cai_align with tai_align_abstract
* check that tai_align is used and not tai_align_abstract

git-svn-id: trunk@8563 -
2007-09-19 15:41:47 +00:00
Jonas Maebe
4d1c4091ba + added pm_preprocess support to foreachnode
* 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 -
2007-09-19 09:17:57 +00:00
peter
79ca4b28a8 * fix non-x86 compile after r8558
git-svn-id: trunk@8559 -
2007-09-18 22:16:28 +00:00
peter
e0cf015159 * refactor function result handling
* 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 -
2007-09-18 22:12:07 +00:00
peter
399a2a86fa * fix temp release for 64bit compare
git-svn-id: trunk@8557 -
2007-09-18 21:05:40 +00:00
pierre
d7a1ec8e49 Use AllFilesMask fro RTL or define it
git-svn-id: trunk@8550 -
2007-09-18 14:33:58 +00:00
Tomas Hajny
3db626873b * first part of cfileutl cleanup
git-svn-id: trunk@8533 -
2007-09-17 21:20:37 +00:00
peter
58e9fc0368 * only freetemp when there were registers saved
git-svn-id: trunk@8531 -
2007-09-17 20:52:51 +00:00
peter
2f044481ae * release temp when downgrading fpuregister value
git-svn-id: trunk@8530 -
2007-09-17 20:52:24 +00:00
peter
e10c55d73c * invalid typecast
git-svn-id: trunk@8526 -
2007-09-17 19:40:36 +00:00
Jonas Maebe
89ed91509a * Some fixes for r8515:
* 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 -
2007-09-16 22:24:42 +00:00
tom_at_work
1fa32dffef * remove additional dot for import name of external function. Makes tprocext compile and run for powerpc64 (stub still not fully working, due to missing GOT loading in stub).
git-svn-id: trunk@8518 -
2007-09-16 21:32:29 +00:00
Jonas Maebe
0040eecf9f + support for extra packing of sets whose lower element number
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 -
2007-09-16 20:04:45 +00:00
florian
620ceac903 * result for functions returning a managed type must be initialized and loaded, fixes #9704
git-svn-id: trunk@8512 -
2007-09-16 18:55:15 +00:00
florian
0a50052802 * allow <const. node> -> <struct. type> type casts for internal type cast nodes, this is required by the softfloat code generator, it was forbidden by rev. 8369
git-svn-id: trunk@8504 -
2007-09-16 11:53:05 +00:00
florian
bd4bb505b3 * put Charlie's writeln debugger between DEBUG_CHARLIE conditional compilation symbols
git-svn-id: trunk@8503 -
2007-09-16 11:43:04 +00:00
florian
b4da246668 + printnode shortcut for lazy people
git-svn-id: trunk@8501 -
2007-09-16 10:47:28 +00:00
florian
abfdda6129 * small m68k cleanups
git-svn-id: trunk@8500 -
2007-09-16 10:21:17 +00:00
Jonas Maebe
4f7106eded * sparc compiles again
git-svn-id: trunk@8495 -
2007-09-16 09:14:21 +00:00
Jonas Maebe
d64eb811ab * fixed compilation after r8349
git-svn-id: trunk@8491 -
2007-09-15 07:21:56 +00:00
pierre
4116f79a75 * Do not use disk cache on go32v2 system
Same as rev 8488 in fixes_2_2_0_dos

git-svn-id: trunk@8489 -
2007-09-14 21:58:43 +00:00
florian
039b513d93 * pass classes and interfaces by value if const is used, resolves #9674
git-svn-id: trunk@8484 -
2007-09-14 19:26:09 +00:00
Károly Balogh
0c6f533ba3 + made m68k compiler to compile again
git-svn-id: trunk@8467 -
2007-09-13 22:30:27 +00:00
florian
1b7aeb568c * setup proper starting value when optimizing away a loop, resolves #9096
git-svn-id: trunk@8443 -
2007-09-12 19:41:36 +00:00
peter
0fda1126b5 * fix invalid typecast
git-svn-id: trunk@8435 -
2007-09-11 22:28:39 +00:00
peter
1d387c935d * small typecheckpass wrapper for recursion
git-svn-id: trunk@8434 -
2007-09-11 22:26:36 +00:00
peter
68245771cc * fix invalid typecast
git-svn-id: trunk@8432 -
2007-09-11 22:13:31 +00:00
florian
b984b2227f * improved constant loading for arm
git-svn-id: trunk@8429 -
2007-09-11 19:28:48 +00:00
peter
fcfe1b24b4 * prevent overflow in record size
git-svn-id: trunk@8428 -
2007-09-11 18:12:28 +00:00
peter
b36a06e4d4 * use regular ref_incr/ref_decr for related interface assignments
instead of fpc_intf_assign. This allows optimization by reusing
    the left of the assignment for function return

git-svn-id: trunk@8427 -
2007-09-10 16:48:33 +00:00
peter
6b8a5e56b6 * no refcount needed for all constants instead of only stringconst
git-svn-id: trunk@8426 -
2007-09-10 16:41:29 +00:00
peter
5f4b89903c * use callnodeflag to check if the result of a function is used
git-svn-id: trunk@8425 -
2007-09-10 16:40:40 +00:00
peter
2c10fb7e7d * use fpc_decr_intf and zeroing for finalizing of interfaces
git-svn-id: trunk@8424 -
2007-09-10 16:40:03 +00:00
florian
25883c18c3 * updates by Karl-Michael Schindler
git-svn-id: trunk@8423 -
2007-09-09 19:49:07 +00:00
Jonas Maebe
288a538df5 * don't allow starting new virtual trees in TP-style objects + test
* fixed bug in whlpview.pas where such an new tree was unintentially
    started

git-svn-id: trunk@8422 -
2007-09-09 14:58:55 +00:00
peter
eefd81094e * remove old_append_str
git-svn-id: trunk@8421 -
2007-09-09 14:31:17 +00:00
peter
4b5a599309 * remove -gg and -gd options
* minor capitalization fixes from bug #9640

git-svn-id: trunk@8420 -
2007-09-09 14:24:30 +00:00
peter
8fcd3169d8 * remove -gd, use -gw instead
git-svn-id: trunk@8419 -
2007-09-09 14:22:11 +00:00
peter
db98f1eecb * indenting of node names
git-svn-id: trunk@8418 -
2007-09-09 14:03:31 +00:00
Jonas Maebe
523b7b84cd * properly set the "current compilation directory" (all included files
are relative to this directory, otherwise include dirs appear twice
    in some paths)

git-svn-id: trunk@8417 -
2007-09-09 13:51:30 +00:00
Jonas Maebe
488cfa3c32 + -go<x> switch for debugging options (some global switches could be
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 -
2007-09-09 09:27:49 +00:00
Jonas Maebe
9888e674cc * upped recordalignmax for darwin/ppc and darwin/ppc64 a bit
git-svn-id: trunk@8413 -
2007-09-08 22:52:12 +00:00
Jonas Maebe
42ff6fc5bb * enabled tail recursion optimization for ppc
git-svn-id: trunk@8412 -
2007-09-08 22:47:34 +00:00
Jonas Maebe
0567329343 * the "external alignment" (i.e., that of their starting addresses) of
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 -
2007-09-08 18:13:28 +00:00
Jonas Maebe
70d94ade58 * replaced uses of -1 as C_alignment with the symbolic constant name
* some reformatting of ppc-specific code to be the same as the
    surrounding code

git-svn-id: trunk@8408 -
2007-09-08 15:26:55 +00:00
peter
703158292b * fix high value in pointer to array conversion
git-svn-id: trunk@8407 -
2007-09-08 15:25:25 +00:00
Jonas Maebe
91629f810f * better error messages for non-overloadable operators:
* 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 -
2007-09-08 10:49:16 +00:00
Jonas Maebe
b02fd37fbe * removed some unused variables
git-svn-id: trunk@8399 -
2007-09-08 08:45:12 +00:00
Jonas Maebe
666d156e8e * disabled inlining when passing a refcounted parameter typecasted to
a non-refcounted type to a procedure, as this is incompatible with
    the inlining process

git-svn-id: trunk@8391 -
2007-09-07 10:40:26 +00:00
Jonas Maebe
22f616d6af * treat procvardef parameters the same as records (fixes webtbs/tw9141)
* fixed some issues with 16 byte parameters on both ppc and ppc64

git-svn-id: trunk@8389 -
2007-09-06 17:35:50 +00:00
Jonas Maebe
e1aefdbac5 * Improved escape analysis so the improved tretopt no longer fails.
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 -
2007-09-05 13:29:22 +00:00
peter
0a9b94ca92 * save and restore aktobjectdef
git-svn-id: trunk@8384 -
2007-09-04 18:31:20 +00:00
peter
b513ebe9c6 * missing not
git-svn-id: trunk@8383 -
2007-09-04 18:30:57 +00:00