Commit Graph

14095 Commits

Author SHA1 Message Date
florian
c5ad1bce7b * avoid uncessary zero extensions in case code
git-svn-id: trunk@21979 -
2012-07-28 20:09:21 +00:00
florian
c8435b503f * better folding of consecutive shift operations
git-svn-id: trunk@21978 -
2012-07-28 17:59:45 +00:00
sergei
a7311f1348 * Fixed handling of OleVariant type (was messed up with Variant), now comparisons with colevarianttype work correctly, resolves #22504 (r21970 was correct but not enough).
git-svn-id: trunk@21976 -
2012-07-27 08:32:36 +00:00
svenbarth
b0458b55a3 Loosen the restriction regarding operator overloads by applying a (modified) patch from JC Chu. This fixes Mantis #22359.
The changes are built up in a way that all operators on two given types are not allowed if a default implementation for that operator exists. This implies that there is a possibility to have a overload work for (in this order) type A and B, but not for B and A. This is for example the case for Set + Enum (which seems to have a default implementation) where Enum + Set is allowed. The added tests try to detect as many default implementations as feasible, but can't cover everything...

git-svn-id: trunk@21975 -
2012-07-26 18:02:01 +00:00
Jonas Maebe
44fd18a041 * correctly set expectloc for bool->cbool type conversions (mantis #22502)
git-svn-id: trunk@21973 -
2012-07-26 14:50:28 +00:00
Jonas Maebe
df2eddd169 * correctly deal with writing debug information in the Stabs writer for class
hierarchies from other units that were compiled without debug information
    in case not all classes from the hierarchy are explicitly used
    (mantis #22495, #21503, #21259)

git-svn-id: trunk@21972 -
2012-07-26 14:27:10 +00:00
sergei
1d09005542 + Implemented two-stage removal of empty exe sections. Candidates for removal are first marked with oso_disabled flag, then actually removed. Descendants of TExeOutput that override MemPos_Start may modify list of sections pending removal. In particular, the COFF-specific .reloc section no longer has to be handled in base TExeOutput class.
git-svn-id: trunk@21971 -
2012-07-26 10:04:12 +00:00
sergei
3d19605fc2 * Using OleVariant type should trigger inclusion of Variants unit into uses clause the same way as using Variant type does. Mantis #22504.
git-svn-id: trunk@21970 -
2012-07-26 05:03:56 +00:00
sergei
31d004e056 + Basic executable stack support in TExeOutput.
+ Two stubs (TExeOutput.Load_DynamicObject and TObjInput.CanReadObjData) to override in ELF linker.
+ Stop linking if errors were detected while loading object files.
* Changed TStaticLibrary to TObject. It is never looked up by name, so hashing is redundant; moreover its name has been changed to TCmdStr, which may be trimmed by TFPHashList. 

git-svn-id: trunk@21968 -
2012-07-25 11:08:54 +00:00
florian
58a7baa62b * build an armhf armv6 compiler if it is built by an armhf armv6 compiler
git-svn-id: trunk@21966 -
2012-07-24 17:11:09 +00:00
sergei
24c7b7f433 * If alignment requirement of data is bigger than alignment of the section being written to, increase section alignment to match. This mostly affects cases of non-smart linking, where wrong initial alignment used to cause hard to catch misalignment issues. It also largely obsoletes the need to supply the initial section alignment (hidden tai_section constructor,etc).
* Likewise, when merging object sections into exe sections, set alignment of exe section to maximum value.

git-svn-id: trunk@21964 -
2012-07-24 08:38:11 +00:00
Jonas Maebe
b50d0aa3d0 * only don't pre-finalize funcret temps that are passed by reference to the
called function, fixes webtbs/tw3742.pp after r21955 (looked at wrong
    testsuite results :/ )

git-svn-id: trunk@21963 -
2012-07-23 23:55:00 +00:00
florian
614afc1c8f * pass march to GNU AS for cpu_armv6 and cpu_armv7
git-svn-id: trunk@21958 -
2012-07-23 20:20:17 +00:00
florian
c2eb030632 * for proper alignment in arrays of text, text should be a multiple of 4 in size on 32 bit platforms
git-svn-id: trunk@21956 -
2012-07-23 19:12:27 +00:00
Jonas Maebe
ccbcb36f98 * don't pre-finalize temp nodes that are passed by reference as hidden
function result parameter, because reference counted function results
    are not guaranteed to be initialized (we sometimes even pass the,
    non-finalized, left-hand side of an assignment as hidden function
    result parameter)

git-svn-id: trunk@21955 -
2012-07-23 14:22:36 +00:00
Jonas Maebe
ba4b08261c * fixed (real)modulename memory leak when changing the module name
git-svn-id: trunk@21954 -
2012-07-23 13:49:36 +00:00
Jonas Maebe
0a1157da38 * fixed memory leaks in the compiler introduced in r21862 by marking and
releasing temporarily created function result locations

git-svn-id: trunk@21953 -
2012-07-23 13:49:29 +00:00
florian
d5aa89449e * generate less register wasting code for 64 bit comparions
git-svn-id: trunk@21950 -
2012-07-22 21:07:33 +00:00
masta
be6bf6e3f7 Fix possible access violation introduces in r21885
r21885 added a new peephole optimizer. The associated code refactoring
missed a check for

  tai(hp1).typ = tai_instruction

Which can lead to an access violation later on, because the rest of the
code expects to find a taicpu in hp1.

git-svn-id: trunk@21949 -
2012-07-22 18:06:08 +00:00
Jonas Maebe
bdc62289b4 * the safecall -> cdecl mapping is also activated for x86_64
(tf_safecall_clearstack is set for it) -> also use pocalls_cdecl for it
    and adjust the safecall tests not to try parameter scenarios that are
    unsupported for cdecl

git-svn-id: trunk@21948 -
2012-07-22 16:59:04 +00:00
Jonas Maebe
3798b79fd7 + optimization that (re)orders instance fields of Delphi-style classes in
order to minimise memory losses due to alignment padding. Not yet enabled
    by default at any optimization level, but can be (de)activated separately
    via -Oo(no)orderfields
   o added separate tdef.structalignment method that returns the alignment
     of a type when it appears in a record/object/class (factors out
     AIX-specific double alignment in structs)
   o changed the handling of the offset of a delegate interface
     implemented via a field, by taking the field offset on demand
     rather than at declaration time (because the ordering optimization
     causes the offsets of fields to be unknown until the entire
     declaration has been parsed)

git-svn-id: trunk@21947 -
2012-07-22 16:47:19 +00:00
florian
9672f0537a * handle exports with a name consisting of a single character correctly
git-svn-id: trunk@21945 -
2012-07-22 14:23:09 +00:00
sergei
06844fdb23 * Entirely moved relocation fixup functionality from TObjSection to TExeOutput.
git-svn-id: trunk@21944 -
2012-07-22 07:21:11 +00:00
florian
e10a95bf16 - removed unneeded firstcomplex calls, pass_left_right calls already firstcomplex
git-svn-id: trunk@21941 -
2012-07-21 07:09:06 +00:00
sergei
2bc792fe97 * TObjData.FName made protected.
* Allow EntryName to remain unspecified.

git-svn-id: trunk@21940 -
2012-07-20 12:50:21 +00:00
Jonas Maebe
408f459f5a * the code generator bugs referred to in r21921 weren't completely fixed yet
after all, although for some reason the problems only showed up with the
    external assembler on x86-64 platforms other than Darwin. Now we never use
    GOT entries on x86-64 anymore for local symbols, regardless of their nature,
    and instead use plain RIP-relative addressing for them.

git-svn-id: trunk@21924 -
2012-07-17 14:36:37 +00:00
sergei
684bf4fba2 + Reject object types without VMT as arguments of typeof(). Without this check, an undefined reference to VMT is generated which fails at the linking stage.
git-svn-id: trunk@21923 -
2012-07-17 05:46:55 +00:00
Jonas Maebe
5e93f6b70f - reverted r1733, which caused all local procedures to become global in case
PIC was used. This was probably a workaround for a code generator bug,
    which is no longer required

git-svn-id: trunk@21921 -
2012-07-16 15:22:14 +00:00
florian
3a9e3991be * the switch -Oouseebp allows the i386 compiler to use ebp as normal register
the drawback of this is that get_caller_frame and get_caller_addr might not work
  anymore because they make the wrong assumption (i.e. not required by the abi)
  that ebp contains always a valid (not necessarily the current) frame pointer

git-svn-id: trunk@21918 -
2012-07-15 19:23:36 +00:00
Jonas Maebe
b1d00b66ac * fixed internalerror after invalid type node in subscript node
(mantis #22395)

git-svn-id: trunk@21917 -
2012-07-15 18:17:29 +00:00
florian
a38be24672 * get rid of tabs with wrong size
git-svn-id: trunk@21916 -
2012-07-15 16:56:11 +00:00
Jonas Maebe
07ebc51b6c * always store generics token streams in little endian, so we don't have to
keep a separate field for each tstoreddef that records whether the
    endianness needs to be swapped

git-svn-id: trunk@21914 -
2012-07-15 16:09:14 +00:00
masta
aa4fe66153 Fix ARM ASM-reader for MVN/CMP/CMN/TST/TEQ
Like MOV these instructions support 2 operands, with the second beeing a
shifterop.

Without this patch the asm reader would fail on something like

cmp r0, r1, lsr 16

with

Error: Unknown identifier "LSR"

git-svn-id: trunk@21911 -
2012-07-15 01:03:08 +00:00
Jonas Maebe
7717e43929 * moved setting the call result to a separate method, so it can still be
used across multiple levels of inheritance such as on MIPS (and the code
    has to be reusable for a_call_ref/reeg in the future anyway)

git-svn-id: trunk@21906 -
2012-07-12 20:56:25 +00:00
sergei
e5ee1c9f67 * Don't access tcfilestream.size 3 times in sequence, as each access costs two seeks (syscalls).
+ made size of tobjectreader data available via property.

git-svn-id: trunk@21905 -
2012-07-12 16:10:34 +00:00
pierre
dd59db1bba * Set retun value of get_frame method to nil
git-svn-id: trunk@21904 -
2012-07-12 14:16:24 +00:00
Jonas Maebe
56fcc87cb2 * add get_frame as an internal symbol for the jvm target because that target
defines INTERNAL_BACKTRACE (which assumes get_frame to be internal rather
    than a system unit procedure)
  * changed fpc_assert() declaration for jvm to be the same as for other
    targets, so the same code can be used to call it in ninl now that's
    called from the first pass

git-svn-id: trunk@21903 -
2012-07-12 13:25:02 +00:00
pierre
ecddfb7838 + Added FPC_LOCALS_ARE_STACK_REG_RELATIVE system macro for MIPS cpu
git-svn-id: trunk@21893 -
2012-07-12 08:54:06 +00:00
masta
f9cdf3d4ca Be more specific in spilling debug messages
Output "Spilling: " instead of "XXX: " in front of spilling debug
messages. This makes the output easier to process.

git-svn-id: trunk@21890 -
2012-07-12 01:11:29 +00:00
masta
e2a744e19b Consolidate do_spill_read/do_spill_written on arm
ARM can not reference an arbitrary offset so it needs some special
handling if the offset goes beyond abs(4095).

The code for do_spill_read and do_spill written used to be very similar.
I've partially factored out the code into spilling_create_load_store.

The former code loaded the offset from a constant pool, which is a waste
of memory-bandwidth and cache lines. The new code tries to find a way to
adjust the baseregister so the memory location can be reached more
easily, this allows us to handle at least +-1MB with just a single
additional ADD or SUB instruction. If that fails we'll resort to the normal
constant loading code, which on it's own will fallback to loading the
constant from a constant-pool.

So instead of:
ldr r1, =16388
ldr r0, [r13, r1]

which will at least uses 4 cycles (2 Instruction cycles + 2 stall
cycles) on most cores.

We try to generate:
add r1, r13, #16384
ldr r0, [r1, #4]

which most armv5+ cores will execute in 2 cycles. We'll also save on
DCache usage.

git-svn-id: trunk@21889 -
2012-07-12 01:11:23 +00:00
florian
701a5d76bb * remove unneeded movs
git-svn-id: trunk@21885 -
2012-07-11 20:58:52 +00:00
Jonas Maebe
d6066ed51a * fixed compilation for i386/m68k after r21878/21879
git-svn-id: trunk@21884 -
2012-07-11 17:41:18 +00:00
sergei
083f0a7137 + Added a flag to tarobjectreader constructor that allows it to work as regular tobjectreader if archive signature is missing.
git-svn-id: trunk@21883 -
2012-07-11 17:39:36 +00:00
Jonas Maebe
be8f8fec76 * converted tcg.g_releasevaluepara_openarray() to thlcg
git-svn-id: trunk@21879 -
2012-07-11 15:23:18 +00:00
Jonas Maebe
9197ce100e * converted tcg.g_copyvaluepara_openarray() to thlcg
git-svn-id: trunk@21878 -
2012-07-11 15:23:08 +00:00
Jonas Maebe
89c230c035 * moved assert handling from second to first pass, so that the code generator
knows that the frame pointer needs to be available (and the code is also
    much simpler this way), fixes test/units/system/tassert7 after r21843

git-svn-id: trunk@21869 -
2012-07-11 11:49:47 +00:00
sergei
21524c56c6 * If subtrahend symbol belongs to current section, generate a RELATIVE relocation instead of PIC_PAIR. Now the corresponding relative expressions in assembler operands compile correctly on all i386 targets (and x86_64 too, although such feature is less important there).
+ Test.

git-svn-id: trunk@21864 -
2012-07-11 09:05:21 +00:00
masta
57b67dfa30 Better SP adjustments on entry/exit for ARM
If the needed adjustment is not expressible in a shifterconst, the old code
loaded a temporary register (fixed to r12) via a_load_const_reg and used it
to adjust the SP. Resulting in:

mov r12, #44
orr r12, r12, #4096
sub sp, sp, r12

The new code will try to split the adjustment into 2 shifterconstants and
will do two seperate adjustments:

sub sp, sp, #44
sub sp, sp, #4096

If that doesn't work we'll fall back to the old code. But that should
happen VERY rarely, only for stacks bigger than 256k which are not
expressible in 2 shifter constants.

git-svn-id: trunk@21863 -
2012-07-11 08:41:45 +00:00
Jonas Maebe
1955255dda * let thlcg.a_call_name() return the tcgpara representing the function
result location (NR_FUNCTION_RESULT_REG is not valid on all platforms)
   o this requires passing the forced function result type (if any) to this
     method
   o a generic, basic thlcg.a_call_name() is now available that sets the
     function result location; can be called by descendants
  * the availability under all circumstances of the correct function return
    type enables g_call_system_proc() on the JVM platform to now determine
    by itself how many stack slots are removed by the call -> do so, instead
    of manually counting them (or forgetting to do so and messing up the
    maximum evaluation stack height calculations)

git-svn-id: trunk@21862 -
2012-07-11 08:25:58 +00:00
Jonas Maebe
aba6923187 * moved g_test_self() from cgobj to hlcgobj
git-svn-id: trunk@21861 -
2012-07-11 08:25:51 +00:00