Jonas Maebe
7af95cbf06
* LLVM does not support 128 bits arithmetic on 32 bit platforms, which we
...
need for overflow checking -> use RTL built-ins
git-svn-id: trunk@41205 -
2019-02-03 21:01:02 +00:00
Jonas Maebe
04d295f186
* first step towards supporting 32 bit targets with the LLVM code generator:
...
use the generic code in more cases when cpuhighleveltarget is defined
git-svn-id: trunk@41133 -
2019-01-29 21:39:09 +00:00
Jonas Maebe
d1361ca6ed
* fixed adjustments of lower/upper bounds in range test optimization in case
...
of strictly smaller/greater comparisons (mantis #34385 )
git-svn-id: trunk@40344 -
2018-11-17 22:38:31 +00:00
yury
4357caaad8
* Removed unused local vars.
...
git-svn-id: trunk@40183 -
2018-11-02 18:44:29 +00:00
florian
116f36fe56
* avoid range check errors
...
git-svn-id: trunk@39990 -
2018-10-20 10:17:34 +00:00
Jonas Maebe
0b246f3dbd
* converted Boolean8 to an internal type, and mapped Boolean to the
...
new internal pasbool1(type) (part of mantis #34411 )
o apply the _Bool x86-64 parameter passing rules only to pasbool1
git-svn-id: trunk@39949 -
2018-10-16 21:14:18 +00:00
pierre
293973b306
Add missing setting of expectloc for multiplications
...
git-svn-id: trunk@39935 -
2018-10-14 22:18:50 +00:00
florian
352fb866ef
* is_range_test returns false if "lower" bound is greater than "upper" bound
...
git-svn-id: trunk@39837 -
2018-09-27 20:24:52 +00:00
florian
a34d4e715c
Merged riscv_new branch
...
git-svn-id: trunk@39813 -
2018-09-26 19:49:08 +00:00
florian
a21397e356
+ based on a patch by Laksen, optimize (v>=x) and (v<=y) into (v-x)<(y-x)
...
git-svn-id: trunk@39759 -
2018-09-16 13:09:36 +00:00
svenbarth
32c307e9ce
* fix for Mantis #34021 : if one of the two operators is an array constructor try to use an operator overload for that first before converting it to a set
...
+ added tests
git-svn-id: trunk@39554 -
2018-08-03 15:24:59 +00:00
florian
32a58ba7d1
* might_have_sideeffects gets flags: if mhs_exceptions is passed, nodes which might cause an exception are considered as having a side effect
...
git-svn-id: branches/laksen/riscv_new@39483 -
2018-07-22 13:11:21 +00:00
florian
52846df241
* fixed condition in getbestreal
...
git-svn-id: trunk@39446 -
2018-07-13 19:53:47 +00:00
florian
0c6cf12fbf
+ support for the directive $EXCESSPRECISION
...
git-svn-id: trunk@39443 -
2018-07-12 21:39:50 +00:00
svenbarth
fa78bb0e89
* warn if the compiler hides an eventual "+" operator overload if modeswitch ArrayOperators is active
...
git-svn-id: trunk@39261 -
2018-06-20 19:53:56 +00:00
svenbarth
97acf24290
+ add a new modeswitch ArrayOperators which is set by default in Delphi modes that enables the internal array operators (currently only "+")
...
git-svn-id: trunk@39259 -
2018-06-20 19:53:43 +00:00
svenbarth
9b45f58c0b
+ add flags that allow checking for overloads with isbinaryoverloaded() and isunaryoverloaded() without modifying the passed in node or even checking for normally non-overloadable operators
...
git-svn-id: trunk@39258 -
2018-06-20 19:53:34 +00:00
svenbarth
199b5809a3
* optimize "dynarr := dynarr + [elem]" to "Insert(elem, dynarr, High(SizeInt))" and "dynarr := [elem] + dynarr" to "Insert(elem, dynarr, 0)" (we need to do this in the typecheck of taddnode as otherwise the array constructor is already converted)
...
+ added test
* adjusted test for Mantis #30463 as p1 triggers the optimization as well
git-svn-id: trunk@39119 -
2018-05-25 16:03:56 +00:00
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