Commit Graph

173 Commits

Author SHA1 Message Date
Michaël Van Canneyt
cd6d048588 * Add is_systemunit_unicode function (cchartype suymbol) 2023-07-22 08:26:22 +00:00
Sven/Sarah Barth
ea417fbaaf + add utility function to retrieve the char type def from a stringlike def 2023-01-26 07:07:34 +01:00
J. Gareth "Curious Kit" Moreton
a1abe51f2a * Refactor of is_cyclic to use a linked list on the stack instead of a dynamic array 2022-12-31 09:04:02 +00:00
J. Gareth "Curious Kit" Moreton
f00a932cc6 * New is_cyclic function to detect if def references itself - fixes #40010 2022-12-03 23:53:16 +00:00
Jonas Maebe
a6c7ed5e61 vector support: use vector result types
Set the result of a vector add node to a vector type.

Ensure that that these vector types are still asignment-compatible with
regular array types (may want to change this when we expose vector types),
and don't remove type conversions from vector types to array types (so the
code generator pass can still rely on the resultdef being a vector type)
2022-09-16 11:21:04 +02:00
Jonas Maebe
2ce4f0baf5 defutil: new is_address() helper
Returns whether a def represents an address
2022-06-12 11:45:31 +02:00
Sven/Sarah Barth
a20bfc0753 + add utility function to check whether an invokable can be invoked without explicit parameters 2022-05-26 21:42:57 +02:00
Sven/Sarah Barth
22bbcf4b27 + add utility function to retrieve the invoke procdef of a function reference interface 2022-05-26 21:42:57 +02:00
Sven/Sarah Barth
833a971877 + add utility function to check whether an objectdef is an invokable one 2022-05-26 21:42:57 +02:00
Sven/Sarah Barth
122c6c92cb + add function to check whether a def is an invokable function reference 2022-05-26 21:42:57 +02:00
Sven/Sarah Barth
90844c2027 * fix #35261: apply slightly adjusted changes by Ryan Joseph to implement support for implicit generic function specializations
The main adjustments were as follows:
  - fixing coding style and identation
  - fixing some typos
  - using a better name for the property in tcallcandidates which holds the symbols created for anonymous parameter values
2022-04-20 18:59:31 +02:00
Nikolay Nikolov
b91fc3a0d3 * fixed passing of singleton record parameters, containing a float in WebAssembly 2021-10-14 10:53:55 +03:00
Jonas Maebe
803779002d * the new constant string arraydefs are also implicit pointers types for JVM
git-svn-id: trunk@48833 -
2021-02-27 19:30:37 +00:00
florian
34f7c3e6d4 + array defs. of open arrays are now marked by ado_OpenArray, so (internally!) zero sized array can be declared with 0..-1
git-svn-id: trunk@48758 -
2021-02-21 18:45:58 +00:00
Jonas Maebe
3e047d3691 * generate more efficient code for trunc(currency), trunc(comp), and
round(comp) on platforms where currency and comp are handled using the FPU
   o also fixes trunc(comp) and trunc(currency) compilation for x86 on LLVM
     with -Oofastmath
 * add missing removal of excess fpu precision typecasts for trunc/round

git-svn-id: trunk@47854 -
2020-12-27 13:18:47 +00:00
florian
57dc416d96 + replace appropriate if statements by min/max intrinsics
+ support min/max intrinsic on xtensa

git-svn-id: trunk@47693 -
2020-12-05 22:00:59 +00:00
florian
1d474f822e * fits_in_mm_register takes care of avx(512) support
git-svn-id: trunk@47523 -
2020-11-21 22:30:33 +00:00
florian
51da470757 * constrained type parameters are not undefined defs, resolves #37107
git-svn-id: trunk@45457 -
2020-05-21 18:19:08 +00:00
svenbarth
89434f0124 * extract calculation of a NOT value to a separate function
git-svn-id: trunk@45050 -
2020-04-24 14:08:58 +00:00
florian
3705f95b92 * compilation fixed
git-svn-id: trunk@44545 -
2020-04-03 20:15:27 +00:00
florian
af8202be3d * compilation for non-Xtensa targets fixed
git-svn-id: trunk@44543 -
2020-04-03 20:15:26 +00:00
florian
fa4cbc89a5 + Xtensa: hard float support, i.e. make use of floating point extension if available
git-svn-id: trunk@44539 -
2020-04-03 20:15:23 +00:00
florian
70a836c4a2 * first part of merging parts of Jeppe's intrinsics patch, mainly r31135
is merged by this commit with a lot of adaptions

git-svn-id: trunk@43949 -
2020-01-14 21:52:39 +00:00
florian
b7c6e01b03 * cleaning up tcgsize: it makes no sense to declare every combination and type
the different vector types must be either handled in the high level cg or
    by using the shuffle parameter

git-svn-id: trunk@43860 -
2020-01-04 21:54:53 +00:00
Jonas Maebe
d23c7980aa * properly perform (or not) range/overflow checking when performing constant
propagation into inlined routines, regardless of the range/overflow
    checking state at the caller site

git-svn-id: trunk@43436 -
2019-11-10 12:00:05 +00:00
Jonas Maebe
c038e4c3f2 * relaxation of r42272: again only show warnings rather than errors for
out-of-range constants, because of the comments mentioned in #35753
    (except for enums, as apparently Delphi does the same)
  * added range check warnings about explicit type casts that throw away
    bits (e.g. byte($fff)), without giving warnings for most common cases
    (like cardinal(-1))
  * fixed masking/sign exting constant array indices (must be based on index
    range type size/signedness rather than on array size/"signedness")

git-svn-id: trunk@42275 -
2019-06-23 14:12:33 +00:00
Jonas Maebe
3a2fe24f49 * report range errors for assigning out-of-range constants to enums in
Delphi mode (mantis #35671)
  * always give an error (rather than only a warning in case range checking
    is disabled) when assigning an out-of-range constant to an ordinal variable
    whose type does not span the entire range that its bits can hold (because
    the result is undefined and FPC's optimisers rely on variables only
    holding values that are valid for the type)

git-svn-id: trunk@42272 -
2019-06-22 17:30:42 +00:00
florian
749c4d4e47 + keep (certain) arrays in registers if they are used with constants indices only
git-svn-id: trunk@42239 -
2019-06-16 21:29:48 +00:00
Jonas Maebe
281b3ad276 * fix case completeness and unreachable code warnings in compiler that would
be introduced by the next commit

git-svn-id: trunk@42046 -
2019-05-12 14:29:03 +00:00
Jonas Maebe
8b9e90dc7a * keep track of whether a routine has a C-style variadic parameter in the
procoptions even when it's through an array-of-const parameter
  * always call create_varargs_paraloc_info() instead of create_paraloc_info()
    in the former case, even when no varargs parameters are specified (because
    on some platforms even some non-variadic parameters need to be passed
    differently, such as on ARM with gnueabihf)

git-svn-id: trunk@41420 -
2019-02-23 15:42:45 +00:00
Jonas Maebe
50ab607676 + customint torddef type to create arbitraty bit-width integers
o use this to handle non-power-of-two-sized parameters for llvm
   o no general support in the parser/code generator, so don't expose

git-svn-id: trunk@40398 -
2018-11-29 20:57:08 +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
florian
8c5606b41d + support mmx shifting
git-svn-id: trunk@38367 -
2018-02-27 21:40:12 +00:00
florian
31f78ea2b6 + implementation of the vectorcall calling convention by J. Gareth Moreton
+ tests

git-svn-id: trunk@38206 -
2018-02-11 17:50:37 +00:00
michael
f6a08a2c74 * Patch from Ondrej Pokorny to allow correct nodefault/stored for strings
git-svn-id: trunk@37954 -
2018-01-13 10:22:16 +00:00
Jonas Maebe
4014f900cb * fixed get_iso_range_type() for non-integer orddefs (belongs with r37934)
git-svn-id: trunk@37938 -
2018-01-09 19:03:36 +00:00
Jonas Maebe
a2217cedd5 * evaluate the lower and upper bounds of for-loops in ISO mode using the
ISO-defined range type, instead of using the type of the iteration
    variable (mantis #24318)

git-svn-id: trunk@37934 -
2018-01-07 18:51:53 +00:00
svenbarth
7e692fac2b + new utility function get_typekind() to retrieve the TTypeKind value of a def
git-svn-id: trunk@36874 -
2017-08-11 22:02:22 +00:00
svenbarth
0c42b6f44a * fix for Mantis #32118: also provide a range for undefined defs
+ added test

git-svn-id: trunk@36723 -
2017-07-10 19:47:21 +00:00
nickysn
876c0c5fd5 + added helper function are_equal_ints()
git-svn-id: trunk@35761 -
2017-04-10 13:22:50 +00:00
Károly Balogh
5426c11611 marked a few uses of TConstExprInt as const during parameter passing, to avoid a few unnecessary record copying
git-svn-id: trunk@35509 -
2017-03-03 17:29:59 +00:00
nickysn
657685a8b6 * use sizesinttype instead of ptrsinttype for the index and high parameter of
open arrays/dynarrays/string-like char arrays, etc.

git-svn-id: trunk@34665 -
2016-10-08 13:56:24 +00:00
Jonas Maebe
33b44443b8 + get_unsigned_inttype(def) to get an unsigned integer type of the same
size as the provided def (must be an orddef or enumdef)

git-svn-id: trunk@34033 -
2016-06-30 15:33:43 +00:00
Jonas Maebe
75a6ba4113 - removed symcpu dependencies
git-svn-id: trunk@31047 -
2015-06-13 22:47:59 +00:00
Jonas Maebe
146e3bcb9e * synchronised with trunk till r29513
git-svn-id: branches/blocks@29516 -
2015-01-21 23:28:34 +00:00
Jonas Maebe
e97f31541e - reverted partial commit of merge
git-svn-id: branches/blocks@29515 -
2015-01-21 23:24:37 +00:00
Jonas Maebe
a76bbf363d * synchronised with trunk r29513
git-svn-id: branches/blocks@29514 -
2015-01-21 23:18:29 +00:00
nickysn
4ea551a0f7 * is_farpointer and is_hugepointer moved from defutil to symcpu
git-svn-id: trunk@28328 -
2014-08-06 20:32:41 +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
Jonas Maebe
c730e16031 * changed the syntax for block procvars from "xxx is block" to
"reference to ...; cdecl;". The "reference to ..." syntax is what Delphi
    uses for anonymous function references. The "cdecl;" indicates that this
    is for the C-variant of such references, which is what blocks are

git-svn-id: branches/blocks@28233 -
2014-07-18 09:15:29 +00:00