Commit Graph

14128 Commits

Author SHA1 Message Date
florian
ecdec2e431 * disable reg. allocator optimization introduced in r21812 for now because it caused some trouble, see #22405
git-svn-id: trunk@22036 -
2012-08-08 16:29:03 +00:00
masta
aa21845cd9 Small optimization for OP_AND on ARM
Especially with 64bit operators the CG sometimes generates:
and r0, r1, #0
Which just clears r0 and is equivalent with
mov r0, #0

git-svn-id: trunk@22032 -
2012-08-08 06:44:20 +00:00
florian
7513291ad8 * generate different code for OS_S8 -> OS_16 conversion which might fold better, idea by Nico Erfurth
git-svn-id: trunk@22027 -
2012-08-07 19:36:46 +00:00
Jonas Maebe
4d31fbc31d * also allow conversion of niln to forward-defined pointerdef
(mantis #22593)

git-svn-id: trunk@22026 -
2012-08-07 11:23:00 +00:00
Jonas Maebe
a63a603cc1 * allow conversion from niln to not-yet-fully-resolved classrefdefs
(mantis #22593)

git-svn-id: trunk@22025 -
2012-08-07 09:56:08 +00:00
masta
6529307d9e Don't emit useless AND/BICs in ARM CG
In certain cases the CG would emit something like
bic r1, r0, #0
As BIC is clearing the specified bits this is equivalent to
mov r1, r0
This patch changes the CG to emit the mov instead which the register
allocator will hopefully remove most of the time.

git-svn-id: trunk@22024 -
2012-08-07 06:46:45 +00:00
masta
9e039936bf Support more operators in FoldShiftProcess on ARM
Now we can also fold shifts into teq, tst, cmp, cmn instructions.

git-svn-id: trunk@22023 -
2012-08-07 06:46:32 +00:00
florian
b20c4cfe87 * replace is_written by using actualtargetnode
git-svn-id: trunk@22022 -
2012-08-06 20:26:23 +00:00
Jonas Maebe
aad3ce960a * give an error when trying to give a parameter of a non-simple type a
default value (mantis #22343)
  * give an error when specifying an invalid default value (e.g. a
    floating point number for a longint parameter)

git-svn-id: trunk@22021 -
2012-08-06 20:13:20 +00:00
Jonas Maebe
ebda98deec * give (w)string tconstsyms a def, so all constsyms always have a def
git-svn-id: trunk@22020 -
2012-08-06 20:13:15 +00:00
Jonas Maebe
be2c757aad * don't crash in getarraydef/getpointerdef if localsymtable is still nil
git-svn-id: trunk@22019 -
2012-08-06 20:13:11 +00:00
Jonas Maebe
c25d9d5e06 * do not search for overloaded operators while parsing constant declarations,
since they require function calls and it's not possible to call functions
    inside constant blocks (and because current_procinfo is not necessarily
    valid when a constant block is parsed, this moreover crashes the compiler)

git-svn-id: trunk@22018 -
2012-08-06 20:13:06 +00:00
florian
405a80066e + cse across assignment operator fixed and enabled
git-svn-id: trunk@22017 -
2012-08-05 20:37:18 +00:00
florian
f619a1aaf6 * fld/fst can have a base register+offset
git-svn-id: trunk@22016 -
2012-08-05 18:34:13 +00:00
florian
df01717c38 * mov x, %treg; mov %treg, y might be only optimized if y does not use treg
git-svn-id: trunk@22015 -
2012-08-05 17:48:28 +00:00
Jonas Maebe
3c1b82f9a0 * don't add value transformations for internal type casts from/to currency
(mantis #22561)

git-svn-id: trunk@22014 -
2012-08-05 15:36:44 +00:00
florian
e81ba0f82e + make use of the armv6+ sign/zero extension instructions if appropriate
git-svn-id: trunk@22013 -
2012-08-05 14:04:11 +00:00
florian
eb1efdff8a + introduce cstylearrayofconst because pocall_mwcall was forgotten at several places
git-svn-id: trunk@22012 -
2012-08-05 08:48:23 +00:00
florian
ad3aa937d3 * respect Dontlinkstdlibpath when adding a default library search path
git-svn-id: trunk@22011 -
2012-08-04 17:29:07 +00:00
florian
19ed835f2b * don't generate an extra indirection when loading vfp constants
git-svn-id: trunk@22010 -
2012-08-04 17:01:57 +00:00
masta
8a684c1f10 Don't generate IT instruction in second_cmp64bit for Thumb-2
Currently the register spiller can not handle the "bond" between IT* and
a following instruction, sometimes breaking them apart, which breaks the
build or worse the result.

So for now we're not emitting A_IT* in second_cmp64bit anymore but use a
conditional jump instead.

This fixes Mantis #22520

git-svn-id: trunk@22009 -
2012-08-04 16:55:58 +00:00
florian
2b6fc9b1ee + at least raspian has no soft links in /usr/lib to crt*.o, so add their location to the search path
git-svn-id: trunk@22004 -
2012-08-04 08:16:02 +00:00
sergei
c1e7e9c85e * TObjData.symbolref: don't lose the weak binding of asm symbol. This fixes tests/tweaklib*.pp at least for Linux x86 targets with internal assembler.
* Enabled weak linking for Linux targets.

git-svn-id: trunk@21998 -
2012-08-02 12:15:55 +00:00
masta
1c51b8d906 Disable 64bit shifts for thumb2 - Fix for Mantis #22520
In r21686 I've introduced optimized 64bit shifts for ARM. But the
methods did not check for which machine it has to generate the code.

This patch disables the optimized code for now if the target is in
cpu_thumb2 and falls back to the generic code.

There are 2 problems with the current code:

1.) Thumb-2 does not support shift by register on all data instruction
as ARM does.
2.) The code does not generate the required IT-block for the conditional
executed code.

git-svn-id: trunk@21997 -
2012-08-02 00:56:21 +00:00
masta
c16871e129 Generate better code in Tthumb2cgarm.g_flags2reg
The old code generated a strange IT-sequence:

IT EQ
MOVEQ r0, #1
IT NE
MOVNE r0, #1

Now we generate:

ITE EQ
MOVEQ r0, #1
MOVNE r0, #1

IT stands for IfThen, ITE for IfThenElse it has a couple of other forms
where the instruction gets extended to handle more of the following
instructions. So we have ITEE, ITETE etc, up to 4 instructions can be
handled.

git-svn-id: trunk@21996 -
2012-08-02 00:56:15 +00:00
sergei
944189f046 - don't supply sh_link and sh_info members to TElfObjSection.create_ext.
+ Dedicated constructor TElfObjSection.create_reloc for relocation sections.
+ pass symbol name offset separately to TElfSymtab.writeSymbol, this is necessary for two-pass writing of dynamic symbol tables.

git-svn-id: trunk@21989 -
2012-07-31 07:44:10 +00:00
sergei
d4b7a6a9bd + Added some more ELF definitions
* Factored telfreloc.info calculation into separate function

git-svn-id: trunk@21988 -
2012-07-31 07:11:10 +00:00
florian
562a45f2e1 * try to transform the tree to be able to do better cse
git-svn-id: trunk@21986 -
2012-07-29 21:29:07 +00:00
florian
a27cc3e5f2 + be able to handle CSE's of records/arrays/objects
* consider static array/records/object variables during CSE determination on non x86 CPUs

git-svn-id: trunk@21985 -
2012-07-29 17:17:12 +00:00
florian
89ec13deeb * improved complexity estimation for subscript nodes
git-svn-id: trunk@21984 -
2012-07-29 17:12:54 +00:00
svenbarth
360592d1f4 Some corrections after the loosening of operator overloads:
* check "A op B" and "B op A" again for operators that can be commutative (all binary ones except shl, shr, div, mod, **, / and -)
* also check for Nil for classrefdefs if left side is a pointer (allows "TClass var" <>/= Nil again, after the above changes)
* don't allow overloads for "implicit pointer type <>/= pointer" and the other way around (this fixes non compiling Objective Pascal test tobjc21.pp and also the new toperator87.pp test)
* some formating corrections

+ added test for "TObject <> Pointer"
+ added test for "TClass <>/= Nil"

git-svn-id: trunk@21983 -
2012-07-29 12:38:09 +00:00
florian
023d632f44 * optimize also lsr/asr, lsl, lsr/asr sequences on arm
git-svn-id: trunk@21981 -
2012-07-28 22:30:11 +00:00
florian
283afbcb07 * new controllers by lelekx, resolves #22523
git-svn-id: trunk@21980 -
2012-07-28 21:57:29 +00:00
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