pierre
796db4cef5
Implement mark_write override for tinilinenode
...
git-svn-id: trunk@40277 -
2018-11-08 20:18:30 +00:00
yury
4682ac269d
* Further improvement for r40180:
...
An uninitialized function Result of a managed type needs special handling.
When passing it as a var parameter a warning need to be emitted, since a user
may expect Result to be empty (nil) by default as it happens with local vars
of a managed type. But this is not true for Result and may lead to serious issues.
The only exception is SetLength(Result, ?) for a string Result. A user always
expects undefined contents of the string after calling SetLength(). In such
case a hint need to be emitted.
+ Tests for this.
git-svn-id: trunk@40216 -
2018-11-04 15:37:52 +00:00
yury
4357caaad8
* Removed unused local vars.
...
git-svn-id: trunk@40183 -
2018-11-02 18:44:29 +00:00
yury
1b151df89f
* Make SetLength() to emit hint "Local variable "s" of a managed type does not seem to be initialized" instead of the warning. This change is needed because when calling a regular procedure with a ver parameter of a managed type the hint is generated. Now SetLength() behaves the same.
...
git-svn-id: trunk@40180 -
2018-11-02 16:19:18 +00:00
pierre
d512d8cae1
Also fix first_abs_real like in rev 39988
...
git-svn-id: trunk@39997 -
2018-10-20 18:11:25 +00:00
florian
3078cc4b0d
* same fix as in r39988 for fpc_first_sqrt
...
git-svn-id: trunk@39991 -
2018-10-20 10:18:45 +00:00
pierre
7d7f966ccb
Fix wrong explicit typecast that lead to memory corruption in first_sqr_real
...
git-svn-id: trunk@39988 -
2018-10-19 23:04:55 +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
svenbarth
d5f0d8e306
* addendum for Mantis #34333 : also complain about number of arguments with the maximum number of arguments for Copy ( = 3 ) is exceeded
...
git-svn-id: trunk@39836 -
2018-09-27 19:44:35 +00:00
svenbarth
76c45b1a72
* fix for Mantis #34333 : improve error output for incorrect calls to Copy()
...
git-svn-id: trunk@39817 -
2018-09-26 21:33:51 +00:00
florian
a34d4e715c
Merged riscv_new branch
...
git-svn-id: trunk@39813 -
2018-09-26 19:49:08 +00:00
svenbarth
bf91991bae
* fix for Mantis #34332 : allow 2 parameter form of Copy also for ShortString variables
...
+ added test
git-svn-id: trunk@39802 -
2018-09-25 19:10:06 +00:00
florian
4f052e4f90
o fix several issues with floating point exceptions
...
+ mask underflow and precision on startup
+ check for floating point exceptions after inlined float routine helpers
- do not check for floating point exceptions after floating point moves
git-svn-id: branches/laksen/riscv_new@39645 -
2018-08-19 15:26:00 +00:00
svenbarth
3d740f13e4
* ensure that the data of the temp node is freed correctly in case of an error (the error might be non-fatal in case of a generic passing an untyped type to Write/Read)
...
git-svn-id: trunk@39566 -
2018-08-04 08:37:07 +00:00
svenbarth
781303c0d8
* ensure that the file parameter for the Read/Write family of intrinsics is (and can be) freed in tinlinenode.handle_read_write()
...
git-svn-id: trunk@39565 -
2018-08-04 08:37:01 +00:00
florian
9af9658fa7
* first parameter of SetLength must be valid, as it is read
...
git-svn-id: trunk@39347 -
2018-06-30 11:25: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
0e5a598b6a
* don't use a vecnode to convert a dynamic array or an array constructor to a pointer as that will lead to problems with range checking if the array should be empty; fixes run of tarray12 with -Cr
...
git-svn-id: trunk@38368 -
2018-02-27 21:43:21 +00:00
svenbarth
916ff0b92c
+ extend Concat() with support for dynamic arrays
...
+ added test
git-svn-id: trunk@37723 -
2017-12-12 19:54:08 +00:00
florian
194c0c7073
* compilation fixed
...
git-svn-id: trunk@37546 -
2017-11-01 16:54:08 +00:00
florian
4752b0ef96
+ tinlinenode calls cpu specific routines for unknown inline numbers
...
git-svn-id: trunk@37543 -
2017-11-01 16:33:32 +00:00
svenbarth
f6a867ef04
* move handling of Concat to tinlinenode so that it can be easily extended for dynamic arrays
...
+ added test
git-svn-id: trunk@37429 -
2017-10-08 10:39:34 +00:00
svenbarth
b3ee9339b8
* also report the dynamic array "overloads" for the Insert() intrinsics
...
git-svn-id: trunk@37343 -
2017-09-27 21:18:04 +00:00
svenbarth
c5b33f51f9
* fix for Mantis #32412 : correctly handle an incorrect parameter count for Delete() and Insert() intrinsics
...
+ added tests
git-svn-id: trunk@37342 -
2017-09-27 21:15:00 +00:00
svenbarth
0b02dab684
+ new Delphi-compatible intrinsic GetTypeKind() which returns the TTypeKind of a type as a constant value (and thus can be optimized away in If- and Case-statements)
...
+ added test
git-svn-id: trunk@36875 -
2017-08-11 22:12:53 +00:00
svenbarth
29d9beb40c
* initialize datatemp
...
git-svn-id: trunk@36308 -
2017-05-23 19:27:08 +00:00
svenbarth
72c595eefe
+ implement support for Insert() for dynamic arrays; the parameter that is inserted can be a dynamic or static array of the same type, an array constructor or a single element of the arrays type; all that is determined based on the second type
...
+ added test
git-svn-id: trunk@36307 -
2017-05-23 19:11:49 +00:00
nickysn
a7ca75a4b6
* use current node's localswitches field for checking whether range and overflow
...
checking is on, when handling the inc/dec inline nodes, instead of using
current_settings.localswitches
* when creating inline nodes in the optloadmodifystore optimization pass, copy
localswitches from the node, that is being replaced, because otherwise,
localswitches is copied from current_settings.localswitches at the time the
new node is created, and that can already be in a different state, since
optloadmodifystore is performed in a separate pass, after the current
procedure has already been parsed and in this moment, it reflects the state
of localswitches after the end of the procedure.
* these two fixes fix a bug, where an internalerror 2017032701 can happen, when
compiling with -O3 code that turns on and off range/overflow checking in the
middle of a procedure.
git-svn-id: trunk@36195 -
2017-05-12 14:07:13 +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
987cf2a9cf
* fixed a bug in the maxqword check in the Rol/RorQWord(maxqword,x)->maxqword
...
optimization, which prevented the optimization from ever being performed. This
should also fix the test failure of tbs/tb0627b.pp on all 64-bit platforms.
git-svn-id: trunk@36071 -
2017-05-03 15:32:48 +00:00
nickysn
f65f0b125a
+ optimize sar(0,x) to 0 and sar(-1,x) to -1
...
git-svn-id: trunk@36044 -
2017-05-01 19:12:04 +00:00
nickysn
c028362f31
* added the missing pop directive after the push directive in handle_const_rox
...
git-svn-id: trunk@36043 -
2017-05-01 18:25:01 +00:00
nickysn
855cd616f0
+ optimize rol(0, x) and ror(0, x) to 0; also optimize the case with all ones,
...
e.g. rol32(ffffffff, x) = ffffffff, etc.
git-svn-id: trunk@36042 -
2017-05-01 18:19:49 +00:00
nickysn
29429cca3c
+ mask the shift/rotate count value in the rol/ror/sar inline nodes, before
...
checking for 0, so that things like sar(int32,32) can be optimized to int32,
just like sar(int32,0)
git-svn-id: trunk@36031 -
2017-05-01 11:45:23 +00:00
nickysn
b17d97050f
+ also simplify rol(x,0) and ror(x,0) to x
...
git-svn-id: trunk@36024 -
2017-04-30 20:45:51 +00:00
nickysn
8ac84ce43a
+ simplify sar(x,0) to x
...
git-svn-id: trunk@36023 -
2017-04-30 20:24:44 +00:00
nickysn
d8ec0eff8e
+ implemented inline code generation for 64-bit sar (the SarInt64 intrinsic) on
...
less-than-64-bit CPUs that have a 64-bit OP_SHR/OP_SHL/OP_SAR implementation
in their cg64 backend code generator. This is enabled only for i386 for now.
git-svn-id: trunk@36022 -
2017-04-30 16:06:34 +00:00
nickysn
5393daa994
+ added compile time const evaluation for Bsf/Bsr(const) as well
...
git-svn-id: trunk@35941 -
2017-04-24 20:35:08 +00:00
nickysn
32395bbcbb
+ added compile time const evaluation optimization for PopCnt(const)
...
git-svn-id: trunk@35937 -
2017-04-24 16:11:43 +00:00
nickysn
d7c8a081a1
+ enable using the cg64 ops OP_SHR/OP_SHL/OP_SAR on i386 for implementing the
...
64-bit in_sar/shl/shr_assign_x_y inline nodes
git-svn-id: trunk@35835 -
2017-04-18 14:36:41 +00:00
nickysn
b14f277e8f
+ use rtl helpers for 64-bit shl/shr/sar/rol/ror modify in place operations, on
...
platforms that don't have native 64-bit implementation of the corresponding
64-bit shift/rotate operation
git-svn-id: trunk@35787 -
2017-04-13 15:24:32 +00:00
nickysn
f514657e45
+ implemented the sar/shl/shr/rol/ror inline modify-in-place nodes; the actual
...
optimization of "i:=i shl/shr k", etc statements is not performed yet
git-svn-id: trunk@35780 -
2017-04-12 00:41:15 +00:00
nickysn
8d885ffde6
+ write the inlinenumber of inline nodes in the node tree
...
git-svn-id: trunk@35764 -
2017-04-10 14:54:50 +00:00
nickysn
256dc546ac
+ implemented the in_neg_assign_x and in_not_assign_x inline nodes, which will
...
be used (TBD in a future commit) for optimizing x:=-x and x:=not x on CPUs
that support performing these operations directly in memory (such as x86)
git-svn-id: trunk@35749 -
2017-04-07 16:02:40 +00:00
nickysn
fc59649a98
+ added inline nodes for handling and/or/xor in place (i.e. x:=x op y, where
...
op=and/or/xor). They generate more optimal code on certain architectures
(including x86). The new inline nodes aren't generated by the compiler yet,
but will be used in the future, at certain optimization levels, whenever the
pattern x:=x op y is detected by the compiler.
git-svn-id: trunk@35666 -
2017-03-26 23:16:53 +00:00
florian
6d6a45c034
* add/sub nodes with nf_internal set should not do overflow checking, resolves #30889
...
* do not convert succ/pred into add/sub nodes if nf_internal is set
git-svn-id: trunk@34896 -
2016-11-13 21:18:39 +00:00
florian
a705525e9b
* allow prec/succ on non-consecutive enums if pred/succ are generated internally
...
git-svn-id: trunk@34813 -
2016-11-06 15:22:39 +00:00
florian
0bc1e7e23b
* "inherit" the nf_internal flag in tinlinenode.getaddsub_for_incdec
...
git-svn-id: trunk@34802 -
2016-11-05 23:06:06 +00:00
florian
64e2c2b914
+ simplify succ/pred(<const>/x+/-x<const>)
...
git-svn-id: trunk@34798 -
2016-11-05 23:06:00 +00:00