Commit Graph

156 Commits

Author SHA1 Message Date
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
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
89db1e4118 + add proper int type conversions for huge pointer arithmetic in pass_typecheck
of the add node

git-svn-id: trunk@28094 -
2014-06-27 23:37:08 +00:00
Jonas Maebe
24f4adf657 * set the rangedef of open arrays to ptrsinttype (instead of s32inttype),
so that it's the same as the def returned by the low/high nodes
    (mantis #25703)

git-svn-id: trunk@27970 -
2014-06-15 15:26:47 +00:00
Jonas Maebe
338c064beb * moved x86-specific tpointerdef functionality to architecture-specific
descendants

git-svn-id: trunk@27397 -
2014-03-30 21:04:36 +00:00
sergei
1744988962 * Modified behavior of CExtended type in overload selection: it is made more compatible to Extended than to Double and Single. Also an Extended parameter selects a CExtended overload (if available) instead of Double.
+ Test.

git-svn-id: trunk@27366 -
2014-03-30 07:31:58 +00:00
nickysn
f6b18e9b8d * i8086 far data memory model fixes in defutil.def_cgsize
git-svn-id: trunk@27247 -
2014-03-23 22:14:09 +00:00
nickysn
894d400a7b + added is_farpointer(tdef) and is_hugepointer(tdef) helper functions to defutil
git-svn-id: trunk@24865 -
2013-06-10 20:50:05 +00:00
nickysn
bfd65ea550 * use tprocvardef(def).size (which takes into account far code/data) to determine cgsize for procvars in def_cgsize
git-svn-id: trunk@24844 -
2013-06-09 17:51:56 +00:00
sergei
4e873d0561 + Determine early (before pass 2) whether managed parameters/locals/temps will cause the procedure to reference RTTI labels and, therefore, need GOT.
+ trttinode also sets pi_needs_got flag.

git-svn-id: trunk@24767 -
2013-06-02 13:09:47 +00:00
Jonas Maebe
7d9f98e516 + def_cgmmsize() that returns a vector tcgsize for arraydefs (as generated
for certain parameter locations in the x86-64 parameter manager)
  * full support for vector types in the high level code generator by
    translating arraydefs passed to a_*mm*() methods into vector tcgsizes

git-svn-id: trunk@24762 -
2013-06-02 10:24:08 +00:00
Jonas Maebe
53ba7fbb8b * support formaldef in def_cgsize (-> OS_ADDR)
git-svn-id: trunk@24760 -
2013-06-02 10:23:54 +00:00
Jonas Maebe
2dd75e707e * renamed thlcgobj.tcgsize2orddef to defutil.cgsize_orddef
git-svn-id: trunk@24743 -
2013-06-01 18:28:15 +00:00
nickysn
42b2228dc7 + far pointer support in defutil.def_cgsize
git-svn-id: trunk@24552 -
2013-05-22 12:30:34 +00:00
nickysn
2486009d37 + support u64bit as well in defutil.range_to_basetype
git-svn-id: branches/i8086@24173 -
2013-04-07 10:57:27 +00:00
nickysn
d88855566a + added defutil.is_nativesint and is_nativeuint
git-svn-id: branches/i8086@24167 -
2013-04-06 23:03:12 +00:00
nickysn
70d02e6942 + added defutil.is_nativeint and is_nativeord
git-svn-id: branches/i8086@24166 -
2013-04-06 22:58:04 +00:00