florian
5b90a02e75
* inherit nf_write/nf_modify in tcallnode.replaceparaload also when replacing parameters
...
git-svn-id: trunk@22075 -
2012-08-13 15:06:16 +00:00
florian
ecb037ad79
+ tarminnode.pass_1 to set expectloc correctly
...
git-svn-id: trunk@22074 -
2012-08-13 15:03:35 +00:00
florian
d2aa35e9de
* throw an internal error if code generation depends on expectloc but expectloc and real loc do not match
...
git-svn-id: trunk@22073 -
2012-08-13 15:02:55 +00:00
florian
dd18d0bd4d
* write flags in tnode.printnodeinfo
...
git-svn-id: trunk@22072 -
2012-08-13 14:50:37 +00:00
michael
1b10dfbc26
* Use HTTP delimiters for locations
...
git-svn-id: trunk@22071 -
2012-08-13 11:44:01 +00:00
michael
3418ba156e
* Retry opening session file on error (max 5 times)
...
git-svn-id: trunk@22070 -
2012-08-13 11:43:16 +00:00
marco
b822371d41
* add platform modifiers to all locally defined functions in unix' dos unit.
...
git-svn-id: trunk@22069 -
2012-08-13 10:14:07 +00:00
sergei
45d27ef82e
* Relocating common symbols needs adjusting by symbol size only on DJCOFF targets, not on PECOFF ones.
...
git-svn-id: trunk@22068 -
2012-08-13 09:31:49 +00:00
sergei
de34f58284
* Update instruction segment prefix when copying operands from another instruction, Mantis #18113 .
...
git-svn-id: trunk@22067 -
2012-08-13 04:51:28 +00:00
svenbarth
3ad324ad13
Removed x86 unit from the Makefile.fpc (it's a Unix only unit) and regenerated Makefile.
...
git-svn-id: trunk@22066 -
2012-08-12 13:53:55 +00:00
Jonas Maebe
ed8087c71a
* check with parameters that must be followed by either nothing or a +/-,
...
are indeed never followed by other characters (prevents typos such as
-EnabledFeature instead of -dEnableFeature from simply switching of
linking)
git-svn-id: trunk@22065 -
2012-08-12 13:30:36 +00:00
florian
33f287d320
+ tarminnode.in_smallset making use of tst
...
git-svn-id: trunk@22064 -
2012-08-11 22:10:45 +00:00
florian
c1bca748ee
* factored out tcginnode.in_smallset
...
* indention changed to common compiler style
git-svn-id: trunk@22063 -
2012-08-11 22:07:36 +00:00
tom_at_work
9a82fb9eb4
Fix InterlockedExchange for non-armv6+ ARMV processors. Original InterlockedExchange was not atomic in regards to the other Interlocked* functions, leading to crashes if they were used.
...
Instead of directly using "swp" in InterlockedExchange, use
- kuser_cmpxchg if available (on Linux/armel)
- the fpc global mutex (fpc_system_lock) otherwise
to implement it.
git-svn-id: trunk@22062 -
2012-08-11 19:32:11 +00:00
florian
19debd87cc
* start with a qword aligned frame pointer to enable more ldrd/strd optimizations
...
git-svn-id: trunk@22061 -
2012-08-11 15:12:19 +00:00
florian
371ef7bada
* cover more cases in AlignedToQWord
...
git-svn-id: trunk@22060 -
2012-08-11 15:11:43 +00:00
florian
db7e029574
* strd/ldrd optimization might be only done on dword operations
...
git-svn-id: trunk@22059 -
2012-08-11 15:11:10 +00:00
florian
8c45a909be
+ support ldr/ldr -> ldrd and str/str -> strd optimization where appliable
...
git-svn-id: trunk@22058 -
2012-08-11 11:45:54 +00:00
florian
49246b6263
* make textrec/filerec unpacked, this improves the code significantly on arm etc.
...
git-svn-id: trunk@22057 -
2012-08-10 21:17:50 +00:00
florian
2c122a9bf6
* inherit modification flag from load nodes when creating temp nodes when inlining, dfa/cse need this information
...
git-svn-id: trunk@22056 -
2012-08-10 21:16:54 +00:00
florian
aadf6da14f
* better naming of CPU flag strings
...
git-svn-id: trunk@22055 -
2012-08-09 20:32:18 +00:00
florian
1c2ed53735
* updated comments to reflect latest changes to cse
...
git-svn-id: trunk@22054 -
2012-08-09 20:18:04 +00:00
michael
a43d433081
* Fixed to take expressions into account
...
git-svn-id: trunk@22053 -
2012-08-09 19:31:36 +00:00
michael
647bd0ec1c
* Case statement tests
...
git-svn-id: trunk@22052 -
2012-08-09 19:24:37 +00:00
michael
e4758e3cd1
* Case statement labels are now expressions
...
git-svn-id: trunk@22051 -
2012-08-09 19:24:02 +00:00
florian
4d86d25c6c
* -O4 switch for optimizations which are correct but which might have unexpected effects
...
like field reordering (possible problems cracker classes) or using ebp as normal register (broken
stack traces from dump_stack)
+ niln is also valid in a cse domain
* parameters passed by reference shall have a complexity >1
* load nodes from outer scopes shall have a complexity >1
* better cse debugging
+ more node types added to cse
* consider parameters passed by reference in cse
* take care of cse in parameters in simple cases
git-svn-id: trunk@22050 -
2012-08-09 18:58:54 +00:00
sergei
95535ea845
- Do not create any default object sections. On targets with section-based smartlink these sections remain empty and only cause linker to do useless job of removing them. The same happens when loading object files because duplicate section names are allowed at that time. On targets without smartlink they don't stay empty, but the internal assembler creates sections when required, so not creating initial sections effectively doesn't change anything.
...
git-svn-id: trunk@22049 -
2012-08-09 17:12:39 +00:00
sergei
393f1d58ed
* Fixed register rsi being overwritten. It is used to pass argc into libc_start_main.
...
git-svn-id: trunk@22043 -
2012-08-09 07:34:49 +00:00
sergei
12dc48afbf
* Set errno using a call to seterrno, like it is done for i386 target. This removes most of assembler code together with PIC hacks and makes this part independent of threadvar implementation details.
...
git-svn-id: trunk@22042 -
2012-08-09 06:34:00 +00:00
florian
03071709a9
* the transformation (a or/and b) or/and c into a or/and (b or/and c) can be applied for booleans as well
...
git-svn-id: trunk@22041 -
2012-08-08 21:21:45 +00:00
florian
b330bba0bc
+ introduce -Oofastmath
...
* limit the application of the tree transformation introduced in r21986 to safe cases and -Oofastmath
git-svn-id: trunk@22040 -
2012-08-08 19:35:45 +00:00
florian
8fd84376d7
* msg files regenerated
...
git-svn-id: trunk@22039 -
2012-08-08 19:26:36 +00:00
florian
2fc350eabd
* the reference counter offset depends only on the current rtl, not the compiler version, so no ifdef needed
...
git-svn-id: trunk@22038 -
2012-08-08 18:59:19 +00:00
florian
fb7f25f410
* removed wrong -N switch (switch is not used) description
...
git-svn-id: trunk@22037 -
2012-08-08 17:02:05 +00:00
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
51af7bd440
Assembly version of fpc_ansistr_incr_ref for ARM
...
Optimized to minimize load latency and icache usage. Together with the
previous fpc_ansistr_decr_ref optimization this little test programm
runs about 40% faster.
program stringspeed;
procedure test(s:string);
begin
end;
var
s:string;
i: cardinal;
begin
s:='abcd';
for i:=0 to $FFFFFF do
test(s);
end.
Even with s:='' it's about 30% faster.
git-svn-id: trunk@22035 -
2012-08-08 15:29:26 +00:00
masta
b9770519f8
Assembly version of fpc_ansistr_decr_ref for ARM
...
As fpc_ansistr_decr_ref is a very often called procedure in typical
pascal programs this optimized version will shave off some cycles
compared to the generic one.
It tries to avoid load latencies as much as possible and also uses the
new Z-flag functionality of the InterlockedDecrement from the previous
patch. Also FreeMem is called as a tail-function.
git-svn-id: trunk@22034 -
2012-08-08 06:44:31 +00:00
masta
25e2f5f3fa
Small improvement to InterlockedExchange on ARM
...
Use movs instead of mov when setting the result in r0. This way the Z
flag will be set for the calling function which might allow some smaller
optimizations later on. It does not affect current code in any way,
because flags are not expected to be used across function calls.
git-svn-id: trunk@22033 -
2012-08-08 06:44:26 +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
michael
8ed3408527
* with statement tests
...
git-svn-id: trunk@22031 -
2012-08-07 21:16:19 +00:00
michael
874a1f4304
* Use expressions in with statement
...
git-svn-id: trunk@22030 -
2012-08-07 21:16:01 +00:00
michael
5a57943320
* Tests for loop structures
...
git-svn-id: trunk@22029 -
2012-08-07 20:58:03 +00:00
michael
e1dead6a1c
Conditions in for/while/repeat are now expression elements
...
git-svn-id: trunk@22028 -
2012-08-07 20:57:35 +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