Commit Graph

10590 Commits

Author SHA1 Message Date
peter
8f239d04b6 * cleanup and simplify the set type handling
git-svn-id: trunk@10432 -
2008-03-02 17:48:27 +00:00
florian
39250de33a * don't load stack size value when generic stack checking is done, resolves #10924
git-svn-id: trunk@10429 -
2008-03-02 16:44:08 +00:00
peter
761344e9fc * don't allow passing ordinal and real constants to formal const parameters
git-svn-id: trunk@10426 -
2008-03-02 15:00:32 +00:00
peter
f915cbc4ca * replace constants to formal const with variables
git-svn-id: trunk@10425 -
2008-03-02 14:01:22 +00:00
peter
85e904cb36 * fix range error
git-svn-id: trunk@10424 -
2008-03-02 14:00:38 +00:00
micha
83b7f81f81 + add no-fpu support to compiler/rtl for powerpc-linux (-Cfnone)
git-svn-id: trunk@10422 -
2008-03-02 12:59:02 +00:00
Jonas Maebe
d80d3f36d2 * fixed crash when writing a currency value with a specified number
of fractional digits in case it's not the last value of the
    write(ln) statement (mantis #10920)

git-svn-id: trunk@10421 -
2008-03-02 10:22:25 +00:00
Jonas Maebe
97f4c0a130 * call taddnode.simplify at the very end of taddnode.pass_typecheck, so
it doesn't have to duplicate any type checking code, and so constant
    expressions get the same resultdefs as non-constant expressions
  * properly fixed resultdef determination of "set + setelementn" (follows
    same rules now as "set + set")
  * also convert "longint or/xor cardinal" to int64 (needed for correct
    results with negative numbers and Delphi-compatible) + test
  * extended 64-to-32 type conversion simplification to also handle
    or/xor nodes (so if the result is typecasted back to 32 bit, the
    evaluation can still be done entirely in 32 bit). These changes also
    enable that optimization in some extra cases (not just anymore for
    expressions containing only uint32)

git-svn-id: trunk@10418 -
2008-03-01 20:48:50 +00:00
florian
5826b9bdad + define cpunodefaultint
git-svn-id: trunk@10415 -
2008-03-01 20:31:56 +00:00
florian
bc0586139a * copyright and description fixed
git-svn-id: trunk@10414 -
2008-03-01 20:22:18 +00:00
florian
d83722076f * fixed implements for interfaces
+ tests for implements through interface

git-svn-id: trunk@10413 -
2008-03-01 20:20:49 +00:00
Jonas Maebe
86f90d8ac1 + support for setting the name of "main" (-XM command line parameter) in
the code using {$pascalmainname x} + storing it in the ppu file
    (and give a warning if it's overridden multiple times + test)

git-svn-id: trunk@10406 -
2008-03-01 13:05:01 +00:00
Jonas Maebe
e1ec2834df * increase/decrease refcount of interface value parameters on procedure
entry/exit (mantis #10897)
  * fixed tinterface2 which crashed after this change. It also crashed under
    Kylix: you cannot assign the result of an interfaced class to a class
    instance variable and then use it both as an interface (refcounted) and
    as class (non-refcounted)

git-svn-id: trunk@10405 -
2008-03-01 10:25:27 +00:00
Jonas Maebe
a2beae0e11 * use more generic set type boundaries for constant sets with one
element in Delphi mode (fixes mantis #10890, but requires more
    thorough changes in nadd.pas for proper fixing)

git-svn-id: trunk@10399 -
2008-02-27 21:17:13 +00:00
Jonas Maebe
59ca0153e7 * moved transformation of "mul by power-of-2" to shl from type check
pass to pass 1 (where most optimizing transformations are located,
    and because the way it's written it goes wrong if left and right are
    a constant, and I'm working on moving the simplify code after the
    typechecking code so the resulttype for constant and non-constant
    expressions can be the same)

git-svn-id: trunk@10396 -
2008-02-27 15:56:40 +00:00
Jonas Maebe
179b840cea * also adjust constsetlo when parsing a constant set in Delphi mode
git-svn-id: trunk@10395 -
2008-02-27 15:42:49 +00:00
florian
6c53785e3a * first part of implements clean up and fixing
git-svn-id: trunk@10382 -
2008-02-24 11:05:46 +00:00
Jonas Maebe
469452b0ba * avoid check being wrongly "optimized" away (left and right
side were convered to int64, after which the expression was
    considered to be never true)

git-svn-id: trunk@10372 -
2008-02-20 21:27:32 +00:00
Jonas Maebe
db34ed44e4 * fixed an {$ifndef cpu64bitalu} which had to be {$ifndef cpu64bitaddr}
git-svn-id: trunk@10371 -
2008-02-20 20:08:03 +00:00
Jonas Maebe
638fc56489 * rlwnm_ -> rlwnm.
git-svn-id: trunk@10368 -
2008-02-20 11:50:12 +00:00
Jonas Maebe
417b5dcfda + internal round/trunc support for ppc970 using fctid/fctidz
* a_fctw_ -> a_fctiw_

git-svn-id: trunk@10367 -
2008-02-20 11:49:15 +00:00
Jonas Maebe
e9108ed51c * fixed skipping of character after number of errors to report in
parsing of -Se<xxx> string (mantis #10849)

git-svn-id: trunk@10362 -
2008-02-19 20:20:26 +00:00
daniel
3540c400dc * Fix read/write enum on cpu's requiring alignment: Call 'align' the proper way.
git-svn-id: trunk@10351 -
2008-02-17 21:43:39 +00:00
florian
796f39a7a7 * force ansistring concatenation when building stabs
git-svn-id: trunk@10336 -
2008-02-16 08:53:54 +00:00
florian
d8d96f14e6 + experimental directive, resolves #10833
git-svn-id: trunk@10331 -
2008-02-15 19:29:34 +00:00
florian
e5a960d860 * set default reserved stack size on win32/win64 to 16MB
git-svn-id: trunk@10330 -
2008-02-15 19:06:23 +00:00
florian
f28636ac5b + dummy navradd unit
git-svn-id: trunk@10328 -
2008-02-14 20:40:18 +00:00
Jonas Maebe
f36e5411af * split cpu64bit compiler define into
a) cpu64bitaddr, which means that we are generating a compiler which
       will generate code for targets with a 64 bit address space/abi
    b) cpu64bitalu, which means that we are generating a compiler which
       will generate code for a cpu with support for 64 bit integer
       operations (possibly running in a 32 bit address space, depending
       on the cpu64bitaddr define)
   All cpus which had cpu64bit set now have both the above defines set,
   and none of the 32 bit cpus have cpu64bitalu set (and none will
   compile with it currently)
  + pint and puint types, similar to aint/aword (not pword because that
    that conflicts with pword=^word)
  * several changes from aint/aword to pint/pword
  * some changes of tcgsize2size[OS_INT] to sizeof(pint)

git-svn-id: trunk@10320 -
2008-02-13 20:44:00 +00:00
florian
c05d4912f4 + basic system unit for avr-embedded
* fixed several compiler stuff to be able to start system unit compilation on avr

git-svn-id: trunk@10318 -
2008-02-13 20:35:16 +00:00
florian
cae52272aa * split ena_rq define
git-svn-id: trunk@10316 -
2008-02-13 19:06:17 +00:00
florian
469672cb56 * fixed another crash with the new function result handling for sysv x86-64 abi
git-svn-id: trunk@10312 -
2008-02-12 21:26:46 +00:00
peter
737212ff22 * fix result type of constset+[]
git-svn-id: trunk@10311 -
2008-02-12 17:30:00 +00:00
peter
417c832e9d * in node simplify
git-svn-id: trunk@10310 -
2008-02-12 17:27:27 +00:00
tom_at_work
52135af71f * implement branchless fpc_abs_long in a generic way
* enable optimization for ppc/ppc64 (two times faster than 
"generic" rtl branching routine)

git-svn-id: trunk@10306 -
2008-02-11 21:13:52 +00:00
florian
1a2a4af773 * hopefully the final fix for x86-64 sysv calling conventions
git-svn-id: trunk@10304 -
2008-02-11 19:46:40 +00:00
yury
ed86757898 * Pass const record parameters by reference for all calling conventions on i386-wince. It is needed to be Windows unit Delphi compatible, since WinAPI functions are cdecl on wince.
git-svn-id: trunk@10296 -
2008-02-11 15:12:41 +00:00
florian
e4997eaa45 * fixes safecall on non-win64 x86-64, should solve random rte 229
git-svn-id: trunk@10295 -
2008-02-11 13:47:41 +00:00
florian
4592402529 * fixed sysv x86-64 function results for records and arrays with sizes 9..16 bytes
git-svn-id: trunk@10285 -
2008-02-10 22:28:07 +00:00
Jonas Maebe
3e63d3f1dd - removed {$ifndef cpu64bit} code
git-svn-id: trunk@10275 -
2008-02-10 17:05:27 +00:00
Jonas Maebe
a497aec91d * always use ppc<targetcpu> instead of ppcross<targetcpu> on darwin,
because due to the mach-o executable format which can contain
    binaries for different architectures in a single file, different
    names for native and cross compilers are not used on Mac OS X
    (mantis #10067)

git-svn-id: trunk@10270 -
2008-02-10 14:42:49 +00:00
Jonas Maebe
59d9169bbd * perform typechecking of callinit/callcleanup statements immediately when
they are added (mantis #10807), because
   a) the typecheckpass of the entire blocks has to be postponed until firstpass
      because new statements may still be added in the firstpass (otherwise
      the newly added statements in the firstpass are never typechecked due to
      the blocknode already having a resultdef set)
   b) simplify can be called between the typecheck and firstpass, and it needs
      the typeinfo

git-svn-id: trunk@10263 -
2008-02-10 11:13:33 +00:00
Jonas Maebe
839edb58a1 - reverted r9776 (see comments to #10433)
git-svn-id: trunk@10261 -
2008-02-10 10:09:25 +00:00
Jonas Maebe
058e3762aa * added missing begin/end
git-svn-id: trunk@10260 -
2008-02-10 10:07:55 +00:00
Jonas Maebe
c44fb4a79e * call FreeInstance after fail if vmt<>nil rather than if vmt=1
(mantis #10790)

git-svn-id: trunk@10249 -
2008-02-08 15:04:58 +00:00
florian
a210a74629 * compiling skeleton
git-svn-id: trunk@10211 -
2008-02-04 20:57:09 +00:00
florian
0e13d07a31 + more avr code
git-svn-id: trunk@10207 -
2008-02-04 19:50:22 +00:00
Jonas Maebe
fee257ba81 * one more fix for x86 fpu stack swapping (mantis #10757)
git-svn-id: trunk@10199 -
2008-02-03 22:49:06 +00:00
Jonas Maebe
84401d2226 * fixed debug info for enum types after r10189
git-svn-id: trunk@10197 -
2008-02-03 21:45:59 +00:00
peter
13f6396221 * generalize def and symbol handling
* stabs uses ansistring instead of pchars
  * write procdef in separate loop. this fixes debugging of nested/overloaded procs

git-svn-id: trunk@10189 -
2008-02-03 17:52:30 +00:00
florian
bc73f9021c Merged revisions 5891-10167,10169-10180 via svnmerge from
http://svn.freepascal.org/svn/fpc/branches/avr

........
  r5891 | florian | 2007-01-11 17:30:12 +0100 (Do, 11 Jan 2007) | 2 lines
  
  + some initial work
........
  r10170 | florian | 2008-02-03 11:02:04 +0100 (So, 03 Feb 2008) | 2 lines
  
  * continued to work on avr port
........
  r10180 | florian | 2008-02-03 15:29:30 +0100 (So, 03 Feb 2008) | 2 lines
  
  + a lot of skeleton code for avr added
........

git-svn-id: trunk@10186 -
2008-02-03 17:21:52 +00:00
florian
90a3b20b48 Merged revisions 10168 via svnmerge from
http://svn.freepascal.org/svn/fpc/branches/avr

........
  r10168 | florian | 2008-02-03 10:56:10 +0100 (Sun, 03 Feb 2008) | 1 line
  
  * properties set
........

git-svn-id: trunk@10169 -
2008-02-03 09:59:37 +00:00
peter
169516ffc0 * don't optimize funcret with assignment result if the value is also used
as a parameter and the funcret is also passed as parameter. Because in that
    case both are pointing to the same memory location

git-svn-id: trunk@10159 -
2008-02-02 17:39:28 +00:00
Jonas Maebe
3521d64f4b - removed "do_count" parameter from tcallparanode.insert_typeconv
because the method was always called the same way (and it did not
    affect any counting anymore)
  * fixed and simplified read/write checking of methodpointer (mantis
    #10736)

git-svn-id: trunk@10155 -
2008-02-02 16:34:48 +00:00
peter
519b11dba7 * workaround for 2.2 rnagecheck
git-svn-id: trunk@10106 -
2008-01-29 23:19:24 +00:00
peter
6744b747b8 * remove goto, that prevents optimizations
git-svn-id: trunk@10083 -
2008-01-28 18:13:32 +00:00
peter
74f21d7bc3 * typecheck after converting type to constant set
git-svn-id: trunk@10081 -
2008-01-28 17:35:32 +00:00
Jonas Maebe
8349cde7db * changed byte/word/longbool to be Delphi-compatible (+ similar changes
for qwordbool) + test:
    o assigning true to such a variable now sets them to $ff/$ffff/$ffffffff
    o these types are now all signed
    o converting an integer type to a byte/word/long/qwordbool using an
      explicit type cast keeps the integer's original value stored in the
      bool, instead of forcing it to ord(true)/ord(false)
    (mantis #10233 and #10613, implemented for all architectures, testsuite
     tested for ppc32, sparc and x86)
  * fixed some places where the rtl depended on longbool(true) having the
    value 1
  * extended several boolean tests (and adapted some to no longer assume
    that byte/word/long/qwordbool(true)=1)
  + support for converting to qwordbool in second_int_to_bool for x86, ppc
    and sparc

git-svn-id: trunk@9898 -
2008-01-24 21:30:55 +00:00
Jonas Maebe
ea22e81374 * fixed include/exclude for byte-sized sets in registers
git-svn-id: trunk@9887 -
2008-01-23 22:28:12 +00:00
yury
801837f60d * Fixed bug #10681.
+ Test.

git-svn-id: trunk@9879 -
2008-01-23 10:24:04 +00:00
Jonas Maebe
53be0147d4 * fixed assignments to integer regvars typecasted to a type
of equal size but with different signdness + test

git-svn-id: trunk@9871 -
2008-01-22 21:27:34 +00:00
peter
266622deef * start new objectfile for interface wrappers
git-svn-id: trunk@9868 -
2008-01-22 18:49:29 +00:00
florian
94ea214f32 * more spilling fixes
git-svn-id: trunk@9820 -
2008-01-20 16:13:20 +00:00
florian
50294418bc * spilling for neg, ext and extb fixed
git-svn-id: trunk@9819 -
2008-01-20 16:07:42 +00:00
florian
ddad44bc1e * win64 -glw build fix
git-svn-id: trunk@9817 -
2008-01-20 15:13:42 +00:00
peter
de918497ef * support -Xg under linux
git-svn-id: trunk@9811 -
2008-01-20 12:12:15 +00:00
daniel
894dc04966 * Procedures containing a non-local label should not be inlined.
git-svn-id: trunk@9809 -
2008-01-20 12:08:12 +00:00
Jonas Maebe
1f1a43d7f0 * fixed crash when compiling inlined procedures containing labels
git-svn-id: trunk@9804 -
2008-01-20 10:29:04 +00:00
daniel
459382faa8 + Teach peephole optimizer the cmc/adc trick I used in int_str.
git-svn-id: trunk@9799 -
2008-01-19 21:47:37 +00:00
Jonas Maebe
5fbc947ae8 + -Xg support for darwin with dwarf
git-svn-id: trunk@9798 -
2008-01-19 20:54:36 +00:00
Jonas Maebe
56c18c5521 * fix from r9332 for shared libraries
git-svn-id: trunk@9797 -
2008-01-19 20:44:43 +00:00
daniel
4ca3a590e8 * Labels that are defined or referenced in a different lexical level
than their declaration need to be code generated as global asmlabels.

git-svn-id: trunk@9791 -
2008-01-19 13:50:58 +00:00
peter
793fd8fc09 * Add -Xg to help pages
* -Xg now produces a .dbg file with debuginfo
    that can be used by gdb. The main executable gets
    a debuglink section that references the .dbg file.

git-svn-id: trunk@9778 -
2008-01-17 01:20:37 +00:00
Vincent Snijders
9de3695061 * fixed comparing ppu time with source time (bug 10443)
git-svn-id: trunk@9776 -
2008-01-16 18:57:43 +00:00
florian
cd4b05f3de * better detection of source file change while writing debug info
* set module index before replaying tokens of a generic

git-svn-id: trunk@9767 -
2008-01-15 21:36:58 +00:00
florian
b5c114934d * reverted 9727 and made a better fix for it
git-svn-id: trunk@9734 -
2008-01-13 13:23:19 +00:00
florian
295fdbe37c * use the current cgsizes instead of the def to determine if loadfpu can be used, else softfloats are broken
git-svn-id: trunk@9728 -
2008-01-13 09:59:13 +00:00
florian
2d91fef4f1 + accept system.string, resolves #10489
git-svn-id: trunk@9727 -
2008-01-12 22:25:33 +00:00
Jonas Maebe
be2119b489 * simply discard overloaded routines which cannot accept a variant
when determining the optimal candidate for a single variant
    parameter, rather than giving an internal error (mantis #10623)

git-svn-id: trunk@9726 -
2008-01-12 19:01:49 +00:00
Jonas Maebe
70d94fecc1 * enable {$push}/{$pop} in all syntax modes instead of ony in macpas
(mantis #10351)

git-svn-id: trunk@9723 -
2008-01-12 16:47:46 +00:00
tom_at_work
4e60ceb237 * removed code which splits "unaligned" 8 byte stores/loads into two 4 bytes stores/loads on ppc64. The processor manuals and extensive testing showed that PPC970+ class processors have hardware assisted handling of unaligned memory accesses, which results in 8 byte memory accesses to be always faster than 4 byte ones
git-svn-id: trunk@9721 -
2008-01-12 13:47:55 +00:00
Jonas Maebe
cf295c8e88 * increased ppu version number because the ansi/widestring result patch
makes the generated code ABI-incompatible with code compiled with
    older compilers

git-svn-id: trunk@9719 -
2008-01-11 22:50:07 +00:00
Jonas Maebe
cdfb7c8f26 * patch from Sergei Gorelkin to return ansi/widestrings by reference
in an invisible parameter (Delphi compatible, faster/smaller code)

git-svn-id: trunk@9718 -
2008-01-11 22:36:50 +00:00
Jonas Maebe
e72fab1e43 * perform floating point type conversions directly in assignment nodes
when possible, as this can save a lot of useless memory traffic
    (and fpu<->sse conversions on x86)

git-svn-id: trunk@9716 -
2008-01-11 21:18:49 +00:00
Jonas Maebe
9772da7eeb * compare stripped copies of the compiler instead of the original
compiler binaries when determining whether cycle has finished
    on darwin, because when using Dwarf the linked binaries are
    always slightly different there (because the Dwarf info is kept
    in the object files and is referenced using a unique identifier,
    to be able to ascertain that you are using the correct object
    files and binary together when debugging)

git-svn-id: trunk@9715 -
2008-01-11 20:08:47 +00:00
Jonas Maebe
6e9b3bf345 * perform double->single-conversion-before-storing workaround for
fpu bug on some ppc's depending on the selected target cpu type
    rather than depending on whether we're compiling for 64 bit

git-svn-id: trunk@9685 -
2008-01-08 22:00:37 +00:00
Legolas
9dc6b3992f * Some cleaning on nds linker; new extension for intermediate files
git-svn-id: trunk@9672 -
2008-01-07 19:31:32 +00:00
Jonas Maebe
84159b3cbb * optimize away unnecessary implicit upcasts to int64 for subtractions
of u32bit values on 32 bit platforms (after the int64 values have 
    already been used for overload selection etc, i.e., semantically
    nothing changes)
  + test which checks that not too many typecasts are optimized away

git-svn-id: trunk@9664 -
2008-01-06 23:30:19 +00:00
Jonas Maebe
03e9f652fd * fixed range error in case node distance calculation
git-svn-id: trunk@9662 -
2008-01-06 23:18:12 +00:00
Jonas Maebe
482b83c3cb * typecheckpass before calling do_simplify, as the siplify methods
assume that the resultdefs are available

git-svn-id: trunk@9652 -
2008-01-06 15:30:04 +00:00
peter
bbae08d0ef * fix range check error when compiling with 2.2.x
git-svn-id: trunk@9650 -
2008-01-06 12:45:26 +00:00
Jonas Maebe
9ec3cc2022 * fixed sign of location.size for divmodn, 64 shlshrn and for muln
git-svn-id: trunk@9646 -
2008-01-05 21:35:42 +00:00
Jonas Maebe
e3d82f1953 * don't change the temp location of types which needs to be
initialised/finalised, because the init/final generation code
    happens after pass 2 using plain nodes and therefore needs the
    original locations intact

git-svn-id: trunk@9626 -
2008-01-04 20:51:09 +00:00
Jonas Maebe
08ccb30e3b * perform real "exactness" checking for open array parameters
git-svn-id: trunk@9624 -
2008-01-04 12:54:47 +00:00
Jonas Maebe
af2b4ee178 - reverted r9519 because it breaks tbs/tb0162 and test/tint644
git-svn-id: trunk@9622 -
2008-01-03 22:13:13 +00:00
Jonas Maebe
db6e60789b * only use ".set" directive when creating dwarf relsyms on darwin and
not for other relsyms, as older versions of the darwin assembler
    don't understand the ".set" directive (mantis #10541)

git-svn-id: trunk@9621 -
2008-01-03 12:47:31 +00:00
Jonas Maebe
7dac4e7e81 * fixed ppc compiler compilation with -dextdebug
git-svn-id: trunk@9620 -
2008-01-03 12:45:13 +00:00
michael
eddde27b0b It is of course apache 1.3, not 1.13
git-svn-id: trunk@9614 -
2008-01-02 13:18:05 +00:00
michael
7839c9e46b Fixed wrong path for apache defines
git-svn-id: trunk@9613 -
2008-01-02 10:55:45 +00:00
marco
38bbdb95ee * patch from KMS, resolves 10147
git-svn-id: trunk@9611 -
2008-01-02 09:43:55 +00:00
florian
6843833d60 * regenerated
git-svn-id: trunk@9606 -
2008-01-01 11:07:42 +00:00