Jonas Maebe
fffa2e163a
- removed unused local type in internal jvm record clone implementation
...
git-svn-id: trunk@23526 -
2013-01-26 21:28:26 +00:00
Jonas Maebe
dc7760bda0
* let type conversion nodes handle type checking for if/while/repeat
...
conditions, so that used-defined implicit boolean type conversions are
supported (patch by Peter-Jan Roes, mantis #23568 )
git-svn-id: trunk@23525 -
2013-01-26 21:28:22 +00:00
Jonas Maebe
2ed4b295fe
* only change the visibility of an existing getter/setter to that of
...
its property in case the visibility of the property is higher than
that of the getter/setter (on the JVM target when automatically
generating getters/setters)
git-svn-id: trunk@23523 -
2013-01-26 16:52:32 +00:00
Jonas Maebe
e7315d035c
* inherit po_auto_raised_visibility flag when the visibility of a method is
...
raised because it was automatically raised in the parent class (can happen
for the JVM target when letting the compiler generate getters/setters for
properties)
git-svn-id: trunk@23522 -
2013-01-26 16:52:28 +00:00
sergei
d762ef9e78
+ PECOFF targets: support more than 65535 relocations per object section, resolves #23752 . DJCOFF targets: give a fatal error, since this object file format does not support extended relocations.
...
git-svn-id: trunk@23521 -
2013-01-26 16:15:59 +00:00
svenbarth
7bad1763b8
Decrease amount of code duplication regarding handling of safecall and record constructors.
...
paramgr.pas, tparamanager:
+ add new method "handle_common_ret_in_param"
* extract common code (safecall + record constructor handling) from "ret_in_param" to "handle_common_ret_in_param" and call the latter in "ret_in_param"
[aarch64,arm,avr,i386,x86_64]/cpupara.pas, tCPUparamanager.ret_in_param:
* call "handle_common_ret_in_param" instead of implementing the same check again and again
ncgcal.pas, tcgcallnode.handle_return_value:
* move the check for (record) constructors to "tparamanager.handle_common_ret_in_param"
git-svn-id: trunk@23520 -
2013-01-25 20:39:28 +00:00
sergei
cb1098c26c
* Do not create SEH finalization procedures in generic methods, their similarity with nested procedures causes compilation errors because actual nested procedures are not allowed for generics. Not creating them doesn't hurt because generic node tree is not used for code generation. Resolves #23724 .
...
git-svn-id: trunk@23519 -
2013-01-25 18:50:04 +00:00
yury
d8902af3d6
* Do not replace ADD by SUB and vice-versa when overflow checking is enabled. Fixes tw15304 for ARM.
...
git-svn-id: trunk@23517 -
2013-01-24 21:49:21 +00:00
Jonas Maebe
9cbff6f5a6
+ support for record constructors for the JVM target
...
git-svn-id: trunk@23510 -
2013-01-24 09:45:12 +00:00
Jonas Maebe
3abc7b0d9c
* removed superfluous check (a procvardef can never be a constructor) and
...
typecasts
git-svn-id: trunk@23509 -
2013-01-24 09:45:06 +00:00
Jonas Maebe
10e3cab1b1
* fixed formatting
...
git-svn-id: trunk@23508 -
2013-01-24 09:44:59 +00:00
Jonas Maebe
9145f1d67d
* integrated potype_constructor check in maybe_create_funcret_node
...
git-svn-id: trunk@23507 -
2013-01-24 09:44:52 +00:00
sergei
40c510403f
* Don't crash on a PLT-generating relocation to a local symbol (which should not normally appear, but nevertheless is possible).
...
git-svn-id: trunk@23481 -
2013-01-21 16:49:10 +00:00
paul
5d74e0578a
compiler: remove unused variables and unneeded assignments
...
git-svn-id: trunk@23467 -
2013-01-21 01:24:36 +00:00
svenbarth
78f0d6f70e
Revert the changes from r23383 for m68k/n68kadd.pas. Memo to self: Don't change code if you don't really understand why it does things the way it does.
...
With this change and the change from r23465 we are down from ~950 to ~650 failures :D
git-svn-id: trunk@23466 -
2013-01-20 18:00:51 +00:00
svenbarth
b455ae9534
m68k/cpupara.pas, tm68kparamanager.getintparaloc:
...
* initialize paraloc^.size to OS_INT instead of leaving it at 0
This fixes tests/test/cg/ttryexc1.pp. The problem was that the raise node generated code which resulted in a word(!) move of the raised object's address to the stack location for fpc_raiseexception. This then resulted in an error when freeing the exception object.
git-svn-id: trunk@23465 -
2013-01-20 16:33:10 +00:00
florian
9d76168b57
* refactored Bl2B condition code to make it more readable
...
git-svn-id: trunk@23464 -
2013-01-20 15:38:38 +00:00
florian
7184306a4c
+ option -Wx to generate thumb interworking safe code on arm
...
git-svn-id: trunk@23463 -
2013-01-20 15:26:59 +00:00
florian
3fff969ced
* take care of instruction in between when doing ShiftShiftShift2ShiftShift optimizations
...
git-svn-id: trunk@23462 -
2013-01-20 14:58:03 +00:00
florian
f1b8fad6dc
* make AndAnd2And working with other instructions in between
...
git-svn-id: trunk@23461 -
2013-01-20 14:57:59 +00:00
florian
fcef2dc3df
* refactored some code and introduced usage of new method RegEndOfLife
...
git-svn-id: trunk@23460 -
2013-01-20 14:57:55 +00:00
florian
82f3ec7922
* if cs_opt_level3 is not set, limit lookahead of GetNextInstructionUsingReg to one instruction:
...
only -O3 means do the really slow optimizations
git-svn-id: trunk@23459 -
2013-01-20 14:57:51 +00:00
florian
a78af5b8fe
+ AndLslXsr2And and AndLsl2Lsl optimization
...
git-svn-id: trunk@23458 -
2013-01-20 14:57:46 +00:00
florian
ff522d7e18
* improve ShiftShiftShift2ShiftShift to look further ahead
...
* check register usage so the destination register can be different
git-svn-id: trunk@23457 -
2013-01-20 14:57:43 +00:00
florian
12d0c05ede
* remove bic instructions after lsr if possible
...
git-svn-id: trunk@23456 -
2013-01-20 14:57:38 +00:00
svenbarth
632db2229f
Fix for Mantis #23700 .
...
scanner.pas, parse_compiler_expr.read_factor:
* initialize result value
git-svn-id: trunk@23454 -
2013-01-20 11:21:20 +00:00
florian
81e0e3114c
* throw an error if threadvars are used but not supported
...
* fix building for arm-embedded
git-svn-id: trunk@23452 -
2013-01-19 15:17:47 +00:00
pierre
9e6a2b868c
Fix -Cp option failure due to cputypestr array that must be uppercased
...
git-svn-id: trunk@23446 -
2013-01-18 17:09:28 +00:00
paul
7c663af588
compiler: also don't allow record constructors with only default arguments
...
git-svn-id: trunk@23438 -
2013-01-18 11:59:25 +00:00
paul
fe338013a5
compiler: calculate offset of record fields in taddrnode also for bitpacked structures (Jonas comment in bug #0019357 )
...
git-svn-id: trunk@23437 -
2013-01-18 01:56:55 +00:00
paul
1b8369dd99
compiler: don't allow parameterless constructors
...
git-svn-id: trunk@23436 -
2013-01-18 01:24:04 +00:00
Jonas Maebe
583eb3f9a4
* re-enabled loadvmtaddrnode for records on JVM targets, fixes
...
tests/test/jvm/tpvar.pp after r23417
git-svn-id: trunk@23430 -
2013-01-17 19:45:09 +00:00
paul
65cbb4e9ba
compiler: calculate offset of record fields in taddrnode (based on patch of Jeppe Johansen, fixes bug #0019357 )
...
git-svn-id: trunk@23428 -
2013-01-17 14:30:55 +00:00
paul
3a3c10a474
compiler: don't allow constants, methods, class members and properties for local or anonymous records (fixes bug #0023000 )
...
git-svn-id: trunk@23421 -
2013-01-17 09:05:59 +00:00
paul
4d79a44e4c
compiler: don't create loadvmtaddrnode for record references, they have no VMT (fixes bug #23130 )
...
git-svn-id: trunk@23417 -
2013-01-17 07:30:00 +00:00
florian
cad1309935
* don't write directly to the function result destination if we are inlining and if the destination is too complex to evaluate (threadvar etc.)
...
git-svn-id: trunk@23415 -
2013-01-16 20:25:49 +00:00
florian
247d6dd394
+ implemented a tcasenode.printnodetree printing all cases
...
git-svn-id: trunk@23414 -
2013-01-16 20:24:56 +00:00
florian
abfa6c1b43
* redo LsrAnd2Lsr optimization
...
git-svn-id: trunk@23413 -
2013-01-16 20:24:07 +00:00
masta
fe520c215b
New ARM Peephole optimizer FoldShiftLdrStr
...
This one folds
mov r1, r2, lsl #2
ldr/ldrb r0, [r0, r1]
into
ldr/ldrb r0, [r0, r2, lsl #2 ]
There is still some room for improvement, maybe it would be better to do this before
the register allocator runs, as we'll currently waste a register (r1 in the above example)
in many cases. That would also allow to to fold more operations, because currently if r2
gets reused between the mov and ldr we'll not be able to do the optimization.
git-svn-id: trunk@23408 -
2013-01-16 14:37:28 +00:00
paul
e9615716c1
compiler: allow constructors in helpers for records
...
git-svn-id: trunk@23407 -
2013-01-16 13:47:22 +00:00
pierre
2b300ec2b4
Add breakpoint at Verbose.GenerateError procedure
...
git-svn-id: trunk@23399 -
2013-01-16 09:46:34 +00:00
pierre
6d8b1e03d7
Increase status.errorcount only inside GenerateError procedure, to simplify debugging
...
git-svn-id: trunk@23398 -
2013-01-16 09:45:57 +00:00
paul
b2a613c17f
compiler: implement record constructors + tests
...
git-svn-id: trunk@23395 -
2013-01-16 02:07:42 +00:00
paul
51825b6f2e
compiler: change ret_in_param to accept tabstractprocdef instead of tproccalloption to allow check more options (required for record constructor implementation)
...
git-svn-id: trunk@23394 -
2013-01-16 01:14:23 +00:00
sergei
b35d04ffa8
* MIPS: methodpointers must be compatible with records; since records are never passed by address in this ABI, so must be methodpointers. Fixes webtbs/tw9141.pp.
...
git-svn-id: trunk@23392 -
2013-01-15 19:09:19 +00:00
sergei
d2758265e3
* MIPS int->real conversion: When converting unsigned to single, load it into 64-bit FP register, otherwise further subtracting a 64-bit offset leads to invalid result. Fixes tw17714.pp.
...
* The addend is endian-dependent, fixes tcnvint4.pp on big-endian targets.
git-svn-id: trunk@23388 -
2013-01-15 10:49:37 +00:00
sergei
b5eecab582
* Procvars (methodpointers) must be treated as records, too. Fixes tw12318.pp and tw14155.pp after r23377.
...
* Factored related code into a separate method, as it will probably need further refinement.
git-svn-id: trunk@23387 -
2013-01-15 10:39:14 +00:00
svenbarth
c7a9e17bc5
Patch by Vasiliy Kevroletin. Fixes Mantis #23655 .
...
compiler/node.pas, tnode.printnodeinfo:
* write flags to file "t" instead of stdout
git-svn-id: trunk@23384 -
2013-01-15 06:04:10 +00:00
svenbarth
ccecf2c13c
Fix comparisons (aka usage of flag/CCR register)
...
m68k/aasmcpu.pas, taicpu.spilling_get_operation_type:
* add all Sxx instructions as "operand_write" instructions
m68k/n68kadd.pas, t68kaddnode.getresflags:
* use the correct operation in case of swapped nodes
m68k/cgcpu.pas, tcg68k.g_flags2reg:
- don't move a 0 to the register, because this will CLR it and thus the flags won't be valid anymore...
- NEG would have been the wrong operation (NOT would have been correct), but it isn't needed anyway...
* simplify the method by handling the address register case only when necessary
git-svn-id: trunk@23383 -
2013-01-14 20:31:15 +00:00
svenbarth
741992bae4
m68k/n68kmat.pas, tm68kshlshrnode.first_shlshr64bitint:
...
use RTL helper functions (through the inherited method) if we're not shifting by a constant
This fixes test/cg/tshlshr
git-svn-id: trunk@23378 -
2013-01-13 19:33:23 +00:00