Commit Graph

11757 Commits

Author SHA1 Message Date
Jonas Maebe
ea4bb9d752 * don't treat variant records with one element as "records with one element"
(the ABIs that prescribe special treatment for aggregates with one
     scalar element don't either, since a "union containing a single scalar"
     is not the same as a scalar)
  * fixed passing record with a single float field on PowerPC/AIX abi's
  * several changes to cgobj and ncgutil to correctly deal with transfering
    such records between integer and floating point registers

git-svn-id: trunk@15416 -
2010-06-13 09:57:58 +00:00
Jonas Maebe
39adedb12a * fixed writing debug info for string constants that are exactly 255 chars
* fixed debug info for floating point constants whose size is <
    sizeof(bestreal)

git-svn-id: trunk@15411 -
2010-06-12 07:09:42 +00:00
Jonas Maebe
6e12de117b * report correct location of classes that miss method implementations for
interfaces/protocols they implement/conform to

git-svn-id: trunk@15410 -
2010-06-11 19:27:22 +00:00
Jonas Maebe
6d6892bec6 * fixed "byte/word/... ptr []" and "byte/word/..([])" typecasted expressions
in case the memory expression contains a record subscription (mantis
    #16700)

git-svn-id: trunk@15408 -
2010-06-11 14:51:58 +00:00
Jonas Maebe
7c372ede44 * fixed initialising 32 resp. 64 bit regvars with -g-t if the compiler is
an i386 resp. x86-64 binary (mantis #16668)

git-svn-id: trunk@15398 -
2010-06-09 15:58:39 +00:00
Jonas Maebe
b4687b5a13 * handle aitconst_darwin_dwarf_delta32 and aitconst_darwin_dwarf_delta64 in
tai_const.size (fixes internalerror when using the internal Mach-O
    assembler with DWARF debug info, patch by Dmitry Boyarintsev, mantis
    #16640)

git-svn-id: trunk@15391 -
2010-06-05 17:12:00 +00:00
Jonas Maebe
a4c4bc1ee5 * fixed paraloc^.size for 3-byte parameter parts
* fixed record parameter passing (all records <= 4 bytes passed
    by value, records > 4 bytes by reference)
  * fixed procedure of object parameter passing (handle like tmethod
    record) (mantis #16520)
  * fixed aligning parameters for EABI (it does not depend on the
    parameter size, but rather on its alignment, and also align in
    case a parameter that we wanted to pass via registers has to be
    passed via the stack because we ran out of registers)

git-svn-id: trunk@15390 -
2010-06-05 17:08:28 +00:00
Jonas Maebe
3c8b23cda4 * fixed cg.a_loadmm_reg_ref() and cg.a_loadfpu_reg_ref() in case they are
used to store a record function result in an MM/FPUREGISTER to memory
    (the register size will be OS_F32/OS_F64, while the memory size will
     be OS_32/OS_64 -> convert the latter to the former)
  * extended tcalext6 to also test this scenario

git-svn-id: trunk@15385 -
2010-06-04 22:31:35 +00:00
Jonas Maebe
dd759ba906 * avoid some more "movq %xmm0, %xmm0" instructions by setting the subreg
of function results to R_SUBMMWHOLE (default was R_SUBMMNONE, which didn't
    match registers allocated later)

git-svn-id: trunk@15384 -
2010-06-04 22:28:50 +00:00
Jonas Maebe
a7eb6bf64b * fixed checking validity of temporary parameter location that triggered
internalerror(200501281) on some platforms after r15365

git-svn-id: trunk@15374 -
2010-06-04 15:20:30 +00:00
Jonas Maebe
15e9c54b44 * fixed ABI compliance for parameter passing and function returning on all
x86-64 platforms (except for win64, which uses another ABI and which
    already complied to it) + test
  * fixed returning records containing 1 single or double field on darwin/i386,
    these have to be returned via ST0 instead of as a regular record
  * added support for LOC_FPUREGISTER and LOC_MMREGISTER in several places
    where they can now occur due to the previous two changes
  * made a few internalerrors unique

git-svn-id: trunk@15368 -
2010-06-03 20:08:50 +00:00
Jonas Maebe
48d7c69aab * set maxCrecordalign to 16 for all x86_64 platforms that follow the
official ABI (records containing a C long double require 16 byte
    alignment)

git-svn-id: trunk@15367 -
2010-06-03 20:02:06 +00:00
Jonas Maebe
9e785ea553 + several internalerrors in case things go wrong
+ support for OS_M64 in several places

git-svn-id: trunk@15366 -
2010-06-03 19:09:27 +00:00
Jonas Maebe
27f6376fd4 * when determining whether a temporary paraloc can be in a LOC_REGISTER,
look at paraloc^.size rather than cgpara.size, because e.g. a 32 bit
    record (-> cgpara.size=OS_32) may have to be passed via a
    LOC_MMREGISTER (-> paraloc^.size=OS_F32 or OS_M32)

git-svn-id: trunk@15365 -
2010-06-03 18:43:42 +00:00
Jonas Maebe
82b65a1f93 * made internalerror unique
git-svn-id: trunk@15364 -
2010-06-03 18:38:43 +00:00
florian
84590d67b0 * don't try to create cse on void resultdefs, resolves #16488
git-svn-id: trunk@15363 -
2010-06-03 16:10:02 +00:00
Jonas Maebe
c8d75245a9 + extra sanity checks in TCGPara.ppuwrite()
git-svn-id: trunk@15358 -
2010-05-31 20:48:35 +00:00
Jonas Maebe
cf36646238 * forgot to commit (part of r15350)
git-svn-id: trunk@15356 -
2010-05-31 17:38:54 +00:00
Jonas Maebe
6fa584fc12 * fixed endless loop in TCGPara.ppuwrite
git-svn-id: trunk@15355 -
2010-05-31 16:15:12 +00:00
Jonas Maebe
72bec41317 * increased ppu version after r15350, because the explicit paralocations
are now stored in a different way

git-svn-id: trunk@15354 -
2010-05-31 16:13:34 +00:00
Jonas Maebe
283018a3bf * changed tprocdef.funcretloc[] from a tlocation into a tcgpara so it can
represent complex locations (required for full x86-64 ABI support,
    which is not yet implemented) -> lots of special result handling
    code has been removed and replaced by the parameter handling
    routines
  + added support for composite parameters (and hence function
    results) to tcg.a_load_ref_cgpara() (so it can be used for
    handling, e.g., 64 bit parameters on 32 bit platforms)
  * the above fixed writing past the end of allocated memory when
    handling records returned in registers on x86-64 whose size is
    not a multiple of 8 bytes (mantis #16357)
  - removed the x86-64 and PPC specific versions of a_load_ref_cgpara(),
    as they are now handled correctly by the generic version
  * moved the responsibility of allocating tcgpara cpu registers
    (using paramanager.allocparaloc()) from the callers of
    cg.a_load*_cgpara() to the cg.a_load*_cgpara() methods
    themselves (so the register allocation can be done efficiently
    when dealing with function results)
  * for the above, renamed paramanager.alloc/freeparaloc() to
    paramanager.alloc/freecgpara(), and use paramanager.allocparaloc()
    to allocate individual pcgparalocations instead
  * fixed the register size of SSE2 function result registers for
    x86-64 (when used for floating point), which results in removing
    a few superfluous "movs? %xmm0,%xmm0" instructions
  * fixed compilation of paramanagers of avr, m68k and mips after r13695
    and also updated them for these new changes

git-svn-id: trunk@15350 -
2010-05-30 21:12:57 +00:00
Jonas Maebe
ffc9e07275 * only don't perform the complex mul->lea optimizations for the Pentium3
git-svn-id: trunk@15344 -
2010-05-30 12:57:52 +00:00
Jonas Maebe
46ff0c4fc4 * extracted gen_load_cgpara_loc()
* unified previously introduced helpers into a single gen_load_loc_cgpara()
    with the same interface as gen_load_cgpara_loc()

git-svn-id: trunk@15327 -
2010-05-26 19:57:11 +00:00
Jonas Maebe
f5c52b25cd * removed "and not is_class()" condition from is_managed_type(), because
tobjectdef.needs_inittable returns false for classes nowadays (and already
    since quite some time)
  * nevertheless replaced all usages in the compiler of x.needs_inittable with
    is_managed_type(x) (in case some other condition is added again in the
    future) and removed all remaining accompanying "and not is_class(x)"
    checks

git-svn-id: trunk@15320 -
2010-05-22 21:28:24 +00:00
Jonas Maebe
40705a085f * renamed is_refcounted_type() into is_managed_type(), because it also
returns true for variants and those aren't refcounted
  * also allow tempnodes for pointers to managed types to be put in
    registers (not sure why it was disabled, and there are no
    testsuite regressions by enabling it)

git-svn-id: trunk@15319 -
2010-05-22 20:51:50 +00:00
Jonas Maebe
e9b62c1294 * refactored general loc->cgpara loading code in ncgcal into helpers in
ncgutil it can be used elsewhere too
  - removed the code that checks for 64 bit integer types in the float
    para loading code, since is_64bit() can never return true for a
    floatdef

git-svn-id: trunk@15318 -
2010-05-22 16:05:04 +00:00
Jonas Maebe
ef824c53f8 * more cpu-specific ifdef'd fpu/intregister code removed
git-svn-id: trunk@15317 -
2010-05-22 13:51:52 +00:00
Jonas Maebe
ceb063c7fe * moved support for passing floating point values in integer registers from
platform-dependent ifdef'ed code in ncgcal to generic code cgobj

git-svn-id: trunk@15316 -
2010-05-22 13:47:46 +00:00
Jonas Maebe
9bc15a5f61 * renamed a_param_* to a_load_*_cgpara
git-svn-id: trunk@15305 -
2010-05-22 09:07:21 +00:00
Jonas Maebe
537cb9677d * prevent duplicate range check code for some array accesses (mantis #16518)
git-svn-id: trunk@15303 -
2010-05-21 14:17:32 +00:00
Jonas Maebe
3019d3e560 * do not generate DW_AT_allocated info for dynarrays/ansi/unicodestrings
(it means that if the pointer is nil, the value is invalid; that's not the
     case here, it just means that they are empty)
  * generate upper bound of -1 (for dynarrays) or 0 (for ansi/unicodestrings)
    if they are not allocated, so gdb can calculate their length as 0
   (all based on tips by Jan Kratochvil)

git-svn-id: trunk@15288 -
2010-05-16 21:39:41 +00:00
Jonas Maebe
4945d419d3 * moved some paraloc->tlocation loading helpers from ncgutil to cgobj
* fixed an {$ifdef cpu64bitaddr} that should be {$ifdef cpu64bitalu}

git-svn-id: trunk@15276 -
2010-05-15 12:02:17 +00:00
Jonas Maebe
34cf323f7a * don't use hardcoded expectloc for certain types for callnodes (was wrong
for floatdefs handled via vectorfpu)

git-svn-id: trunk@15274 -
2010-05-13 19:12:18 +00:00
Jonas Maebe
ca660d409c - removed unnecessary dependencies on tprocdef.funcretloc being a tlocation
(has to be changed into a tcgpara to fix the x86-64 abi bugs)

git-svn-id: trunk@15272 -
2010-05-13 18:29:01 +00:00
Jonas Maebe
38e0e0ca29 * fixed comment
+ added extra sanity check when parsing a type constant set
  + added brackets around or/and expression to make it clear what the meaning
    is

git-svn-id: trunk@15269 -
2010-05-13 18:18:33 +00:00
Jonas Maebe
7d049c2c8d * fixed typo in comment
git-svn-id: trunk@15264 -
2010-05-13 10:42:10 +00:00
Jonas Maebe
cddb2ffcae * give a compile-time error when trying to define a short/ansistring typed constant
containing unicode strings instead of producing unpredictable behaviour
    (mantis #16219)

git-svn-id: trunk@15240 -
2010-05-08 10:57:39 +00:00
pierre
11d6509a56 Attempt to fix missing stabs definitions problem
git-svn-id: trunk@15238 -
2010-05-06 22:53:26 +00:00
Jonas Maebe
c60bcf8699 * fixed changing the visibility of a property with a fixed index in a child
class (mantis #15610)

git-svn-id: trunk@15223 -
2010-05-04 14:41:22 +00:00
Jonas Maebe
3f280c34cb * don't generate range checking code for pointers-indexed-as-arrays when
using non-constant indices (mantis #16377)

git-svn-id: trunk@15221 -
2010-05-04 10:39:01 +00:00
Jonas Maebe
2911435c5a * do replace one temp with another while inlining in case the former can
be a regvar while the latter cannot be (mantis #16018)

git-svn-id: trunk@15218 -
2010-05-03 16:29:03 +00:00
Jonas Maebe
a055ed873d * set correct expectloc for vectorfpu temps
git-svn-id: trunk@15217 -
2010-05-03 15:42:40 +00:00
joost
f1e4de764a * Write a warning to stderr that this utility is deprecated
git-svn-id: trunk@15213 -
2010-05-03 14:02:22 +00:00
florian
f3c572edc5 * handle multiple string labels in one case branch correctly, resolves #16130
git-svn-id: trunk@15212 -
2010-05-02 21:44:24 +00:00
florian
af3eee54cd * make nested comment warning go away
git-svn-id: trunk@15208 -
2010-05-02 19:24:15 +00:00
Jonas Maebe
0b44f8db1f * don't give an internal error when creating a dynamic array or a
record that requires init/finalisation with an objcclass
    (mantis #16366)

git-svn-id: trunk@15202 -
2010-05-02 13:42:03 +00:00
florian
d0e9a7ead9 + description of tasnode.call (by Jonas Maebe)
git-svn-id: trunk@15198 -
2010-04-28 21:35:19 +00:00
joost
3759ad8963 * Moved fpcmkcfg from compiler/utils to utils/fpcmkcfg
git-svn-id: trunk@15189 -
2010-04-27 07:59:20 +00:00
Jonas Maebe
34487fa455 * part of r15163, forgot to commit
git-svn-id: trunk@15164 -
2010-04-24 12:49:53 +00:00
Jonas Maebe
0dcedf3799 * do not crash but give a fatal error when using Objective-Pascal code
without {$modeswitch objectivec1}

git-svn-id: trunk@15163 -
2010-04-24 12:49:16 +00:00