florian
71e71ad267
* fix currency division on non x86 32 bit targets
...
* disable fix for #33439 during bootstrapping with 3.0.x, as 3.0.x cannot compile the currency division without the fix above
git-svn-id: trunk@38558 -
2018-03-17 22:44:44 +00:00
florian
b2825f2467
* scale constants if possible before currency multiplications to avoid overflows, resolves #33439
...
git-svn-id: trunk@38555 -
2018-03-17 21:33:07 +00:00
florian
c230f81719
+ support for <dyn. array>+<dyn. array>, resolves #30463
...
git-svn-id: trunk@38406 -
2018-03-04 16:12:43 +00:00
Jonas Maebe
1934285c20
* don't convert "int64(sint32) * cardinal_const" into a 32x32->64
...
multiplication (mantis #32046 )
git-svn-id: trunk@37921 -
2018-01-06 13:44:03 +00:00
pierre
59edd81a26
Disable some code using bestrealrec if macro FPC_SOFT_FPUX80 is defined
...
git-svn-id: trunk@37296 -
2017-09-21 14:39:14 +00:00
Károly Balogh
b755524c38
made it possible to override the decision from the cgs, if a certain muln needs a helper
...
git-svn-id: trunk@36347 -
2017-05-26 18:42:21 +00:00
nickysn
34113b930b
* removed the checkoverflow: boolean parameter of the software mul helpers;
...
replaced it with a separate "_checkoverflow" version of each helper
git-svn-id: trunk@36344 -
2017-05-26 15:34:26 +00:00
Károly Balogh
3e8ee48458
m68k: define cpurox and enabled the rotate-related optimizations on CPUs which support rotate instructionsoptions.pas
...
git-svn-id: trunk@36302 -
2017-05-23 00:16:29 +00:00
nickysn
efc5e339d0
* use an enum instead of integer constants to represent inline numbers
...
* compinnr.inc include file converted to a unit
* inline number field size stored in ppu increased from byte to longint
* inlines in the parse tree (when written with the -vp option) now printed with
their enum name, instead of number
git-svn-id: trunk@36174 -
2017-05-10 14:41:43 +00:00
florian
b1dff29cbf
* removed unused units
...
git-svn-id: trunk@36165 -
2017-05-09 19:53:14 +00:00
nickysn
546e993c25
* use resultdef for the type of the resulting zero const from the '0*x' and
...
'0 and x' optimization
git-svn-id: trunk@36040 -
2017-05-01 18:11:12 +00:00
nickysn
f26a844b19
* only do the '0*x' and '0 and x' optimization if x has no side effects (except
...
at -O4, where it is done regardless of whether there are side effects or not)
git-svn-id: trunk@36039 -
2017-05-01 17:34:19 +00:00
nickysn
f44f2f9194
* do the optimizations in r36027 at level -O3 or higher
...
git-svn-id: trunk@36034 -
2017-05-01 13:14:32 +00:00
nickysn
6d589f415b
* do the left.equals(right) check before might_have_sideeffects, because
...
left.equals(right) is usually faster
git-svn-id: trunk@36033 -
2017-05-01 12:57:15 +00:00
nickysn
217d39abf1
* fixed bug in r36027 (I had it fixed already, but accidentally committed the
...
wrong file in r36027)
git-svn-id: trunk@36030 -
2017-05-01 11:43:16 +00:00
nickysn
5aeb73b940
+ optimizations (at -O2 level) for (where 'a' is an integer expression, without
...
side effects):
* a - a -> 0
* a xor a -> 0
* a and a -> a
* a or a -> a
* a <> a -> false
* a < a -> false
* a > a -> false
* a = a -> true
* a <= a -> true
* a >= a -> true
git-svn-id: trunk@36027 -
2017-05-01 10:17:50 +00:00
nickysn
1560f20e7f
+ implemented other 32-bit rol/ror by const methods for i8086 and added a
...
(hopefully) reasonable selection for them for all consts between 1 and 31
git-svn-id: trunk@35744 -
2017-04-06 15:41:39 +00:00
nickysn
321876252b
+ enabled the rol/ror intrinsic on i8086
...
git-svn-id: trunk@35734 -
2017-04-04 22:37:58 +00:00
florian
8bea3e0614
* the optimization introduced in r35526 requires that the tested set has no side effects as it is copied
...
git-svn-id: trunk@35531 -
2017-03-06 21:35:04 +00:00
florian
13b3866552
* convert (s*[const. set])<>/=[] for var. sets into or'ed in nodes, if const. set contains only a few elements
...
git-svn-id: trunk@35526 -
2017-03-05 20:29:22 +00:00
florian
7213a13081
* split fpc_mul_<64 bit> into separate procedures with and without overflow checking
...
git-svn-id: trunk@35454 -
2017-02-19 19:15:14 +00:00
florian
331bb95c5e
* simplify logical operations with constant booleans if the expresions involve no side effects
...
git-svn-id: trunk@35230 -
2017-01-04 16:33:29 +00:00
florian
3e2aff15fb
* short boolean evaluation is too expensive for simple nodes with no side effects, do full evaluation in this case
...
git-svn-id: trunk@35229 -
2017-01-04 16:33:27 +00:00
florian
ef81009362
* set nf_internal for nodes being generated by constant folding
...
git-svn-id: trunk@34800 -
2016-11-05 23:06:03 +00:00
Jonas Maebe
ec5dea1092
* don't perform the "/ const" to "* (1/const)" transformation for comp-typed
...
expressions, since comp cannot represent fractions (bug reported at
http://lists.freepascal.org/pipermail/fpc-pascal/2016-June/048234.html )
git-svn-id: trunk@34035 -
2016-06-30 15:33:51 +00:00
Jonas Maebe
2bbab60c92
* when simplifying a constant string concatenation that gets assigned to a
...
rawbytestring, ensure the resulting constant string does not get CP_NONE
as codepage, but the default system code page (mantis #30082 )
git-svn-id: trunk@33597 -
2016-05-01 13:16:02 +00:00
yury
d4d70d3865
* Evaluate currency constant expressions when the currency type is 64-bit integer. Issue #28749 .
...
git-svn-id: trunk@33334 -
2016-03-26 17:48:50 +00:00
Jonas Maebe
4ae8dcc91e
* make the resultdef of left and right equal when comparing a dynarray
...
with nil (for llvm)
git-svn-id: trunk@32902 -
2016-01-10 14:01:39 +00:00
nickysn
a159ebdbad
* fixed comparison of two procvars in the i8086 compact and medium memory models
...
git-svn-id: trunk@32166 -
2015-10-27 17:24:33 +00:00
nickysn
8eceb73dd4
* also use an 8-bit zero constant for string comparisons with the empty string.
...
This avoids the unnecessary 32-bit comparison on 16-bit and 8-bit CPUs
git-svn-id: trunk@32103 -
2015-10-20 15:50:02 +00:00
nickysn
a20428f246
* when doing a string comparison that calls an rtl helper, compare the function
...
result with an 8-bit zero constant (which will be expanded to the native
integer size by the comparison node), instead of 32-bit zero. This avoids the
unnecessary 32-bit comparison on 16-bit and 8-bit cpus.
git-svn-id: trunk@32099 -
2015-10-20 01:22:01 +00:00
Jonas Maebe
b22e2ef400
* add "doregister" parameter to tsetdef.create, and don't register temporary
...
defs created in the scanner for evaluating compile time expressions
git-svn-id: trunk@32048 -
2015-10-13 15:59:12 +00:00
Jonas Maebe
fbacf9682f
* rename WinCE softfp compilerproc names to lowercase, needed since r31404
...
(mantis #28598 )
git-svn-id: trunk@31478 -
2015-09-02 09:54:02 +00:00
Jonas Maebe
f402b0d7df
* changed getpointerdef() into a tpointerdef.getreusable() class method
...
o allows removing the ugly x86 hacks
git-svn-id: trunk@31144 -
2015-06-22 08:17:49 +00:00
Jonas Maebe
e9800ad3f9
* make the resultdef of left and right equal when comparing a procvar
...
with nil (for llvm)
git-svn-id: trunk@30954 -
2015-05-31 16:50:59 +00:00
florian
cfa68be55b
* do not use 16 Bit mul helper on avr, the code generator generates
...
muls and adds. For simple cases this might be cause longer code than a call to a well crafted assembler helper
but inlining the muls/adds makes register allocation more flexible
git-svn-id: trunk@30739 -
2015-04-27 20:51:32 +00:00
florian
a8e001d4ad
* do not warn about disjunct ranges for internally created cmp nodes
...
git-svn-id: trunk@30269 -
2015-03-21 22:56:30 +00:00
Jonas Maebe
dd2aa17de1
* also allow 64 bit platforms have have a 32x32->64 bit multiplication to
...
take advantage of this transormation (enables this optimization for
AArch64)
git-svn-id: trunk@30035 -
2015-02-28 22:31:06 +00:00
florian
ccb01d6196
* allow subtraction/addition of internally generated nodes, resolves #27256
...
git-svn-id: trunk@29456 -
2015-01-12 20:56:17 +00:00
florian
5c67fcc43f
+ change always floating point divisions into multiplications if they are a power of two,
...
this is an exact operation so it is always allowed
* change only divisions by normal numbers into multiplications
git-svn-id: trunk@29085 -
2014-11-16 20:47:38 +00:00
florian
9fdfe4f474
+ convert floating point division by a constant into a multiplication if fastmath is turned on
...
git-svn-id: trunk@29069 -
2014-11-13 21:13:12 +00:00
florian
499dd078e3
+ automatically insert fma inlines into floating point code if possible and fastmath is activated
...
git-svn-id: trunk@28382 -
2014-08-11 20:50:21 +00:00
sergei
0d96963459
* Do not promote integer comparison operations to native size if one side is a constant and its value is within range of opposite side. Instead, cast the constant to type of the opposite side.
...
Comparisons are already not promoted if sides are equally signed, but this wasn't true for "unsigned vs constant" case, because constants are preferably parsed as signed.
The change considerably improves generated code for i386 and even more considerably for m68k. Tested on i386-win32.
git-svn-id: trunk@28266 -
2014-07-25 21:40:22 +00:00
nickysn
33dac14554
* defutil.get_int_type_for_pointer_arithmetic replaced with a virtual method
...
tpointerdef.pointer_arithmetic_int_type
git-svn-id: trunk@28258 -
2014-07-24 14:18:57 +00:00
nickysn
bb48761652
* taddnode.pass_typecheck_internal: always pass a tpointerdef to
...
get_int_type_for_pointer_arithmetic, even when adding a zero-based array with
a number
git-svn-id: trunk@28257 -
2014-07-24 13:28:19 +00:00
nickysn
6d54046300
* output a proper error message in case number+nil is encountered (just like
...
it's already done for nil+number and nil-number)
git-svn-id: trunk@28225 -
2014-07-15 22:26:58 +00:00
nickysn
d86a8ebc99
* defutil.get_int_result_type_from_pointer_subtraction moved to a virtual
...
method tpointerdef.pointer_subtraction_result_type
git-svn-id: trunk@28219 -
2014-07-14 23:30:29 +00:00
nickysn
99c555cea8
+ implemented huge pointer subtraction
...
* the result of far pointer subtraction changed to word (for TP7 compatibility)
git-svn-id: trunk@28218 -
2014-07-13 23:40:43 +00:00
nickysn
2b2224494b
* call first_addpointer and first_cmppointer in pass_1 for pchars as well. Fixes
...
huge pointer arithmetic/comparison on huge pchars.
git-svn-id: trunk@28159 -
2014-07-04 23:58:26 +00:00
nickysn
c8130843b2
* fixed 'cannot convert type' error when comparing two voidhugepointers with
...
= or <>
git-svn-id: trunk@28158 -
2014-07-04 23:54:47 +00:00