Commit Graph

14095 Commits

Author SHA1 Message Date
pierre
15252b546d * Restore 'mips' name as cpumipseb source_cpu_string
git-svn-id: trunk@21666 -
2012-06-20 23:51:36 +00:00
pierre
23a3275291 * Define both mipseb and mips for non endian-little MIPS compiler
git-svn-id: trunk@21663 -
2012-06-20 16:11:00 +00:00
sergei
bd7ebdce18 * ELF relocation cleanup/improvement:
+ Store size of relocation and explicit addend in TObjRelocation (reusing 'orgsize' field for the latter). This removes need for reading addends back from section data, addends are stored in full 64 bits and therefore not truncated.
  + Relocation style is now controlled by relocs_use_addend variable instead of $ifdef's.
  - Removed (never working) checks forbidding relocations of readonly sections. At the linking stage readonly sections *can* have relocations, executable stage is different matter to be handled elsewhere.
  - removed ugly hack with mapping 32-bit absolute relocations to RELOC_RVA.
  + support 64-bit relative relocations.
  * actualized list of x86_64 relocations.

git-svn-id: trunk@21662 -
2012-06-20 14:16:48 +00:00
sergei
98fffb7981 * Overloaded MemPos_ExeSection and DataPos_ExeSection accepting a TExeSection instead of name.
git-svn-id: trunk@21661 -
2012-06-20 13:33:18 +00:00
masta
2768e0fc12 Folded Add/Sub/Or Splitter, lots of debug output
git-svn-id: trunk@21660 -
2012-06-20 12:39:28 +00:00
masta
5498456269 Add LsrAndLsr Peephole Optimizer for ARM
Remove the superfluous and in:
mov r0, r0, lsr #24
and r0, r0, #255

Doing this allows for better shift-folding later

git-svn-id: trunk@21659 -
2012-06-20 12:39:19 +00:00
masta
92c47148cc Optimize 8/16 OP_NOT on ARM
This now generates:

mvn r0, r0, lsl #24/#16
mov r0, r0, lsr/asr #24/#16

The lsr/asr might be folded into a following instruction, making the
whole operation 1 cycle instead of 2-3 with the previous solution.

git-svn-id: trunk@21658 -
2012-06-20 12:39:09 +00:00
svenbarth
f90e686be2 Always try to present file/line information for generics even if no source is available or the unit was compiled as release unit. This allows IDE like Lazarus to correctly navigate to an error or warning even if the unit containing the generic was compiled as a release unit.
* pscanner.pas, tscannerfile.replaytoken: remove the checks for "sources_avail" and always update the read file/line information 
* fppu.pas, tppumodule.readsourcefiles: always load at least the filenames which were used when compiling the unit from the ppu file, so that file/line information will be correctly shown, but don't touch the "sources_avail" flag of the tppumodule

git-svn-id: trunk@21657 -
2012-06-20 09:01:28 +00:00
svenbarth
75bf094e3f Fix for Mantis #21064.
* pgenutil.pas: factor out the reading of generic specialization parameters (parse_generic_specialization_types) and the generation of a generic type name (generate_generic_name)
* pdecsub.pas, parse_proc_head:
    * also allow an interface alias declaration if an identifier is followed by a "<" (which starts a specialization)
    + add a procedure "consume_generic_interface" which parses such a specialization (by using "parse_generic_specialization_types") - this is needed, because "consume_generic_type_parameter" can (and should not!) handle "ISomeIntf<Integer, T>" or (somewhen in the future) "ISomeIntf<TSomeOtherGeneric<T>>" - and finds the correct symbol for the interface (by utilizing the "generate_generic_name" function)
    * generate the correct mapping entry (for the generic it's only needed for checking (if any), but for a specialization it's essential that we reference the correct specialization)

+ add tests which were included with the issue and also two additional ones

Note: In non-Delphi modes an interface alias can be done like in Delphi mode; "specialization" is not necessary and furthermore not even allowed!

git-svn-id: trunk@21656 -
2012-06-20 08:35:57 +00:00
svenbarth
e0b41141d2 "SizeInt" inside the compiler references the "size of an int" on the Host platform. What we want for writing size information in PPUs for Generics is "ASizeInt" which is the "size of an int" of the target platform. This fixes Mantis #20947.
* pscanner.pas: change SizeInt to ASizeInt for tokenreadsizeint and tokenwritesizeint and change necessary other locations for record- and replaytokenbuffers
+ Added a test in the hope that some test-platforms do cross platform (e.g. win32 => win64) compilation.

git-svn-id: trunk@21651 -
2012-06-19 08:47:30 +00:00
sergei
a2f0e54dc6 * Fixed internal linker entering infinite loop if script contains empty lines or comments.
git-svn-id: trunk@21650 -
2012-06-18 17:03:35 +00:00
masta
0f3441a9c2 Split OP_ADD, OP_SUB, OP_AND and OP_ORR into multiple instructions if that can avoid constant construction or even loading from a pool.
OP_ADD, OP_SUB, OP_ORR will be split into two intructions if possible when a load/const
construction is required.

OP_AND is a bit different, because we can't just split it up, but we try
to find a two instruction BIC-equivalent to it.

Till now code like

a:= a and $FFFF;

produced code like

mov r0, $FF00
orr r0, r0, $FF
and r1, r1, r0

With this addition we produce code like:

bic r0, r0, $FF00
bic r0, r0, $FF

Saving us at least a cycle and in some cases also a load from the
constant-pool.

This uses the new split_into_shifter_const function.

git-svn-id: trunk@21647 -
2012-06-18 16:59:29 +00:00
masta
f11fbe527e Improve loading of ARM constant values
*  use split_into_shifter_const to reduce the MOV/ORR combination to a
   single check and allow a broader rang of combinations.
*  Introduce MVN/BIC combination to load values which have more 1 than 0
   bits set (like small negative values)

git-svn-id: trunk@21646 -
2012-06-18 16:59:24 +00:00
masta
d987cee96a Introduce split_into_shifter_const to ARM-Code Generator
This functions tries to split up a 32-bit value into two shifter
constants. This approach finds a broader range for two shifter constant
combinations.

git-svn-id: trunk@21645 -
2012-06-18 16:59:19 +00:00
masta
3205169ab9 Use roldword intrinsic instead of function rotl.
These days we don't need the hand coded rol anymore.

git-svn-id: trunk@21644 -
2012-06-18 16:59:13 +00:00
sergei
7cda919547 * Pass ExeOutput as argument to TObjSection.fixuprelocs, needed for ELF targets to relocate the complex GOT stuff.
* TExeSection.AddObjSection made virtual.
- TExeSymbol.ExeSection is nowhere used, removed.

git-svn-id: trunk@21626 -
2012-06-16 22:33:26 +00:00
Jonas Maebe
0fc422f244 * moved definition of maxcpuregister and tcpuregisterset from cgbase to
cgutils, and define them so they are no larger than what is required by
    the current target platform
  * added cgutils to the uses clause of several units that use the
    tcpuregisterset type

git-svn-id: trunk@21624 -
2012-06-15 18:24:35 +00:00
Jonas Maebe
6f336a5d13 * the register allocator always knows the exact number of the first imaginary
supreg of the current register type, so use that rather than the maximum of
    all possible register types

git-svn-id: trunk@21623 -
2012-06-15 18:24:30 +00:00
Jonas Maebe
708a2532fc * consistently define empty saved_mm_registers arrays as containing a single
RS_INVALID superregister (instead of sometimes RS_NO and sometimes
    RS_INVALID)
  * check for RS_INVALID in tcg.g_save_registers() and ignore such entries

git-svn-id: trunk@21622 -
2012-06-15 18:24:25 +00:00
Jonas Maebe
313e976256 * avoid spurious range errors due to longint+qword expressions (results in
both values getting converted to a qword, which causes a range error
    in case the longint is smaller than 0)

git-svn-id: trunk@21621 -
2012-06-15 16:58:27 +00:00
pierre
46d98a1f4e * Fix mips compiler compilation failure
git-svn-id: trunk@21620 -
2012-06-15 14:26:51 +00:00
Jonas Maebe
f79aff553e - removed duplicate RS_INVALID declaration (with moreover a different
value than in cgbase)

git-svn-id: trunk@21619 -
2012-06-15 13:48:05 +00:00
pierre
0462dc3ca7 * Use A_NEGU (without overflow check) for OP_NEG op_reg_reg
git-svn-id: trunk@21615 -
2012-06-14 23:05:15 +00:00
pierre
ca497405b8 Avoid double call to set_source_info for mipsel
git-svn-id: trunk@21614 -
2012-06-14 15:51:49 +00:00
pierre
72d310a8a4 Partial merge of 21562 by Foxsen, adapted.
git-svn-id: trunk@21613 -
2012-06-14 15:09:14 +00:00
pierre
c87ee7f100 Merge of 21562 by Foxsen
git-svn-id: trunk@21612 -
2012-06-14 15:08:12 +00:00
pierre
a3184d7ff5 Merge of 21562 by Foxsen, needs_frame_pointer field added to TMIPSProcInfo
git-svn-id: trunk@21611 -
2012-06-14 15:06:40 +00:00
pierre
261538f9c2 Fix bug report 22265
git-svn-id: trunk@21609 -
2012-06-14 14:00:44 +00:00
svenbarth
d87b203a0a Do not call ret_in_param of the current parameter manager when parsing a generic method/function. This fixes Mantis #21921.
* pparautl.pas, insert_funcret_para:
    assume that the result in a generic function/method can not be passed in a param
* pparautl.pas, insert_funcret_local: 
    don't call ret_in_param, but create the symbol as we need a valid funcretsym
* pstatmnt.pas, assembler_block:
    don't modify the framepointer for a generic method/function
* rautils.pas, TOperand.SetupResult:
    don't assume that we can't use the result for a generic function/method

git-svn-id: trunk@21608 -
2012-06-14 12:11:11 +00:00
pierre
41248ea4f7 Hopefully correct fix for ReplayToken TSettings record writes
git-svn-id: trunk@21605 -
2012-06-14 10:14:24 +00:00
pierre
1d4862f3c1 * Remove obsolete size check leading to failure for generics tests
git-svn-id: trunk@21604 -
2012-06-14 07:28:55 +00:00
svenbarth
d2fabd2a22 Fix for Mantis #21350
+ pgenutil.pas: 
    add a procedure which adds a type symbol to a non-Delphi-mode generic class or record which has the same name as the unit global dummy symbol for that generic. I don't know why I had that idea earlier as this will simplify some of the conditions in the parser again (I haven't changed these yet, but I hope to do that at least when I start working on generic functions).
* pgenutil.pas, generate_specialization:
    correctly handle "specialize TSomeGeneric<T>" as method parameter in a generic with the newly added rename symbol
* pdecobj.pas, object_dec & ptype.pas, record_dec: 
    call the procedure to add the rename symbol (the procedure checks whether the mode is correct)
* ppu.pas: 
    increase PPU version so that we don't use non-Delphi mode units with generics, but without the rename symbol
+ added tests:
    the one in webtbs are for classes/objects and those in test are for records

git-svn-id: trunk@21603 -
2012-06-14 07:07:28 +00:00
pierre
e8c7635d49 Merge of rev21561 by Foxsen
fix short/smallint operations
without this test/cg/tcnvint6.pp failed at 31 

git-svn-id: trunk@21602 -
2012-06-13 22:49:05 +00:00
pierre
495a6cfebf Merge of rev21558-59-60 by Foxsen
21558:
use inherited first_int_to_real to avoid mixing doubles and singles
it fixes the failure of test/cg/taddcurr.pp

21559:
set default round mode to round nearest instead of round to zero
it fix test/cg/taddcurr.pp

21560:
enable softfpu, default first_int_to_real depends on int64_to_float64/32 etc.
It is needed by the patch of r21558

git-svn-id: trunk@21601 -
2012-06-13 22:39:00 +00:00
pierre
600dd162af Merge of rev21557 by Foxsen
Make macro MIPS/CPUMIPS/MIPS32 common for big endian and little endian mips processors
use MIPSEL* for little endian systems
use MIPSEB* for big endian systems

git-svn-id: trunk@21599 -
2012-06-13 22:25:38 +00:00
pierre
90fd8d8962 Merge of revision 21554 by Foxsen.
correct constant for mipsel.

git-svn-id: trunk@21598 -
2012-06-13 22:07:31 +00:00
pierre
2e4703d454 Merge of revision 21553 by Foxsen.
make clear what registers might need to be saved

git-svn-id: trunk@21597 -
2012-06-13 22:03:29 +00:00
pierre
d6828965fd Merge of revision 21552 by Foxsen.
use NR_R1 instead of NR_R3 for big stack adjustment temp register(R1 is $at, more suitable)
use A_JR for register operands, although the assembler can translate J to JR when necessary, it is more clear

git-svn-id: trunk@21596 -
2012-06-13 21:57:43 +00:00
pierre
a805259761 + Increase CurrentPPUVersion following removal of packed attribute for tsettings type
git-svn-id: trunk@21595 -
2012-06-13 21:53:37 +00:00
pierre
d67d1abcba * Use field by field write of current_settings for replaytoken and remove packed attribute for tsettings type
git-svn-id: trunk@21594 -
2012-06-13 21:51:59 +00:00
pierre
9453b1bb1e Merge of revision 21551 by Foxsen.
use cpu64bitaddr instead of cpu64bit
fix wrong order of 64BIT return register(now for little endian mips)

git-svn-id: trunk@21593 -
2012-06-13 21:50:11 +00:00
sergei
85f6062e05 * Reworked writing ELF symbols into a separate class, TElfSymtab, which is also suitable for creating symbol tables in executable and dynamic ELF files.
* Do not write ELF symbols for internal sections (symbol/string table, relocation sections and alike).

git-svn-id: trunk@21592 -
2012-06-13 16:40:50 +00:00
pierre
8698357d6c Makefile regenerazted after change to Makefile.fpc:
+ Add CYCLELEVEL variable, whose value can be from 1 to 3
  to be able to modify used options at a specific level,
  using OPTLEVELX, LOCALOPTLEVELX and RTLOPTLEVELX
  with X being the current value of CYCLELEVEL.
  extcycle: Append to value of OPT variable instead of overwriting it.
  fullcycle: Remove i386 target for x86_64 source cpu
  as this does not work for windows-64bit.

git-svn-id: trunk@21590 -
2012-06-13 08:05:36 +00:00
pierre
f369069965 + Add CYCLELEVEL variable, whose value can be from 1 to 3
to be able to modify used options at a specific level,
  using OPTLEVELX, LOCALOPTLEVELX and RTLOPTLEVELX
  with X being the current value of CYCLELEVEL.
  extcycle: Append to value of OPT variable instead of overwriting it.
  fullcycle: Remove i386 target for x86_64 source cpu
  as this does not work for windows-64bit.

git-svn-id: trunk@21589 -
2012-06-13 08:04:44 +00:00
pierre
84214d1249 * Use mips_extra_offset function to give offsets expected by GDB for MIPS cpu
git-svn-id: trunk@21588 -
2012-06-12 22:57:19 +00:00
pierre
a52699cf98 MIPS packed record are not working yet, so do not use them for TSEttings record
git-svn-id: trunk@21587 -
2012-06-12 22:55:37 +00:00
pierre
ae7dd3a930 tprocdef.total_local_size field added for MIPS cpu
git-svn-id: trunk@21586 -
2012-06-12 22:54:42 +00:00
pierre
550bbb0186 + computed_local_size new longint field in TMIPSProcInfo
to check that LocalSize stays constant.

   New function mips_extra_offset (needed for stabs debugging)

git-svn-id: trunk@21585 -
2012-06-12 22:53:19 +00:00
svenbarth
7dfaec7a05 Fix for Mantis #21457
* pdecsub.pas, parse_proc_dec & pdecobj.pas, constructor_head: 
    correctly set the return type of the constructor of a class helper to the extended def
* psub.pas, generate_bodyentry_block:
    call the NEWINSTANCE of the extended class for constructors of class helpers

git-svn-id: trunk@21582 -
2012-06-12 09:42:22 +00:00
sergei
d0df2b247b * ogelf.pas: pass objdata into TElfObjSection.create_ext, so sections created via create_ext are 'owned' the same way as ones created via objData.CreateSection.
* cpu_soft -> fpu_soft

git-svn-id: trunk@21581 -
2012-06-11 13:02:35 +00:00
sergei
cc5fda2a1e + ogelf.pas: added definitions for program headers and .dynamic section, and reformatted existing ones to reduce line count.
git-svn-id: trunk@21580 -
2012-06-11 12:41:48 +00:00
sergei
4e95b50344 * Improved performance of COFF object reader: handle string table as array of chars instead of stream, use Pos instead of Copy to determine if name starts with the given chars.
git-svn-id: trunk@21577 -
2012-06-10 17:50:49 +00:00
florian
64ac48c815 * patch by Nico Erfurth: Better support for PLD on ARM
git-svn-id: trunk@21572 -
2012-06-09 17:28:05 +00:00
florian
3db61ae52d * patch by Nico Erfurth: Reworked regLoadedWithNewValue
Added better support for A_STR, A_LDR, A_STM, A_LDM.

Reworked the code the use a case statement for better readability.

git-svn-id: trunk@21571 -
2012-06-09 17:27:30 +00:00
florian
03a30ff036 * patch by Nico Erfurth: Remove STRH and STRB from instructionLoadsFromReg
STRH and STRB are not handled as sperate instructions by the code
generator.

git-svn-id: trunk@21570 -
2012-06-09 17:26:06 +00:00
florian
7599de416d * patch by Nico Erfurth: Reworked MatchOperand in ARM Peephole Optimizers
Added top_ref comperator which uses RefsEqual.
Reworked the code for easier readability by using a case statement.

git-svn-id: trunk@21569 -
2012-06-09 17:25:32 +00:00
sergei
e0deb4cc99 * Fixed building with OPT="-dTEST_WIN64_SEH -O2" after r21454. It is not yet possible to omit rbp-based stack frames if using SEH on Win64.
git-svn-id: trunk@21556 -
2012-06-08 18:29:10 +00:00
pierre
2b90b444bf Differentiate mips/mipsel default system macros
git-svn-id: trunk@21546 -
2012-06-08 10:08:24 +00:00
pierre
9fc6f91cd0 Set correct source info for mips/mipsel
git-svn-id: trunk@21545 -
2012-06-08 10:07:46 +00:00
pierre
b21198a14a * Fix error in comment in previous commit
git-svn-id: trunk@21539 -
2012-06-07 23:23:52 +00:00
pierre
93e0dd9c2f * Patch from Fuxin Zhang: other mips and mipsel CPUs changes
git-svn-id: trunk@21538 -
2012-06-07 23:20:06 +00:00
pierre
22eae1b337 * Stack setup for MIPS and MIPSEL
git-svn-id: trunk@21537 -
2012-06-07 23:19:33 +00:00
pierre
4d8ebe5d1e Do not modify $sp inside function body for mipscpu
git-svn-id: trunk@21536 -
2012-06-07 23:17:52 +00:00
pierre
c1269b0305 * Patch from Fuxin Zhang: po_assembler special code also disabled for mips and mipsel CPUs
git-svn-id: trunk@21535 -
2012-06-07 23:13:16 +00:00
pierre
ac38901d2a * Patch from Fuxin Zhang: set first_pram_offset to 0 for mips and mipsel CPUs
git-svn-id: trunk@21534 -
2012-06-07 23:11:16 +00:00
pierre
1e1e0f969e * Patch from Fuxin Zhang: remove cpuflags define for mips and mipsel CPUs
git-svn-id: trunk@21533 -
2012-06-07 23:08:18 +00:00
pierre
d6d237d688 * Patch from Fuxin Zhang: FPC_HAS_INTERNAL_SAR set for mips and mipsel CPUs
git-svn-id: trunk@21532 -
2012-06-07 23:07:32 +00:00
Jonas Maebe
50659b7e7f * give an error if a routine definition defines default values for
parameters that do not appear in forward/interface definitions
    (mantis #19434)
  * added test for #17136 already works

git-svn-id: trunk@21524 -
2012-06-07 22:36:39 +00:00
sergei
807a2f243f * Fixed control flow after r21492, was causing IE 200602252 if compiling with "-g -Xg" (Mantis #22224)
- Also removed accidentally committed debug code.

git-svn-id: trunk@21522 -
2012-06-07 22:30:50 +00:00
florian
6e8594a9af * patch by Nico Erfurth: Minor fix for FoldShiftProcess peephole optimizer on ARM
Use UpdateUsedRegs and drop the check for reloading of the register, as
this is done in RegUsedAfterInstruction now.

git-svn-id: trunk@21520 -
2012-06-07 18:21:46 +00:00
florian
5b02a7cb9b * patch by Nico Erfurth: Check for register reloading in RegUsedAfterInstruction on ARM
This slightly changes the semantics of RegUsedAfterInstruction.
We now check if the `current value` of the register will be used later.
It will do `the right thing` for all the normal use cases.

git-svn-id: trunk@21519 -
2012-06-07 18:20:35 +00:00
florian
72746e635d * optimize TAOptObj.UpdateUsedRegs to avoid multiple passes through the asmlist
git-svn-id: trunk@21513 -
2012-06-07 15:19:55 +00:00
Jonas Maebe
572012fad3 * mark units as used in case only static symbols from inside object,
record or enum symtables are used (such as class helper methods)
    (mantis #21808)

git-svn-id: trunk@21512 -
2012-06-06 20:16:50 +00:00
florian
45c70ec81c * patch by Nico Erfurth: Support the usage of BIC instead of AND on ARM
BIC clears the specified bits, while AND keeps them. The usage of BIC
allows a broader range of shifterconsts to be used on the ARM cpu, often
saving a cycle.

Previously code like:
Data:=Data and $FFFFFF00

would result in

mvn r1, #255
and r0, r0, r1

This patch changes this to

bic r0, r0, #255

git-svn-id: trunk@21510 -
2012-06-06 19:45:26 +00:00
florian
fefc130efc * patch by Nico Erfurth: Handle BIC properly in taicpu.spilling_get_operation_type
BIC was handled as a read only operation, which caused it to overwrite
live register content sometimes.

git-svn-id: trunk@21509 -
2012-06-06 19:44:53 +00:00
florian
8cae4c9f23 * patch by Nico Erfurth: Fix for MovStrMov Peephole optimizer on ARM
The loop checked for the wrong instruction for .opcode = A_STR. Making
the whole optimizer non functional but at least not destructive.

git-svn-id: trunk@21508 -
2012-06-06 19:44:20 +00:00
florian
83fb4c289d * patch by Nico Erfurth: Implement FoldShiftProcess Peephole optimizer for ARM
This optimizer folds shift/roll operations into following data
instructions.

It will change code like:

mov r0, r0, lsl #16
add r1, r0, r1

into

add r1, r1, r0, lsl #16

Source registers will be reordered when necessary, also SUB/SBC will be
replaced with RSB/RSC and vice versa when reordering is required.

It could be expanded to support more operations like LDR/STR.

git-svn-id: trunk@21507 -
2012-06-06 19:43:36 +00:00
florian
5393efb128 * patch by Nico Erfurth: Support A_MOV and A_MVN in RedundantMovProcess
This changes the ARM Peephole optimizer RedundantMovProcess to also
recognize and modify something like the following sequence.

mov r0, r1
mov r0, r0, lsl #8

this would be changed into

mov r0, r1, lsl #8

git-svn-id: trunk@21506 -
2012-06-06 19:43:05 +00:00
florian
4ea1d22c5a * patch by Nico Erfruth: Support BX for function returns on armv5+
BX is supported from ARMv4T onwards, but i don't have a armv4t device to
test it.

Using BX instead of mov pc,lr allows for a better pipeline utilization
by enabling the CPUs branch predictor to work properly.

git-svn-id: trunk@21505 -
2012-06-06 19:42:26 +00:00
Jonas Maebe
12553a9367 * don't give -CO warnings or hints for ordinal constants, because those
are already checked by range checking (and were checked wrongly by -CO
    checking) (mantis #19581)

git-svn-id: trunk@21504 -
2012-06-06 19:28:22 +00:00
Jonas Maebe
ca29bb10af - zapped some gremlins in comments
git-svn-id: trunk@21503 -
2012-06-06 18:55:38 +00:00
Jonas Maebe
3414f91590 * minor reformatting, and removed superfluous assigned test (the value is
already used before that test)

git-svn-id: trunk@21502 -
2012-06-06 18:51:14 +00:00
Jonas Maebe
9412d4abd2 * add a reference to the procsym corresponding to the chosen overloaded
procdef, so that the unit containing it is marked as "used" (mantis #15966)

    Even better would be if the unit containing the originally found procsym
    were not also marked as used, but that would require a significant
    rewrite (all symbols found using symboltable helpers are automatically
    marked by those routines)

git-svn-id: trunk@21501 -
2012-06-06 18:46:01 +00:00
Jonas Maebe
df99ef17b6 + mfpvr, mfdcr, mtdcr, mfdec and mtdec opcodes (mantis #18878)
git-svn-id: trunk@21500 -
2012-06-06 18:17:55 +00:00
svenbarth
aa0f1bdf26 pdecl.pas, readconstant: If we are parsing a constant declaration in a generic and we encounter an intrinsic then this intrinsic is left as is (thus the node p returned by comp_expr will be a inlinen instead of an expected ordconstn, stringconstn, etc.). Nevertheless we need to create a symbol for the constant (which isn't done otherwise). In the case of SizeOf a constant "0" will be created. This fixes Mantis #21593.
git-svn-id: trunk@21498 -
2012-06-06 15:00:28 +00:00
svenbarth
7332a0f801 ninl.pas, tinlinenode.pass_typecheck: an intrinsic which has a generic type parameter as argument is left as is (e.g. a call) and thus this needs to be respected when typechecking a SizeOf. Fixes Mantis #21592.
git-svn-id: trunk@21497 -
2012-06-06 14:41:12 +00:00
svenbarth
bf9cb352b3 ptype.pas, single_type: If the generic dummy type is used in mode Delphi then generate an error. This fixes Mantis #21363.
git-svn-id: trunk@21496 -
2012-06-06 13:15:18 +00:00
sergei
7d3294b504 * Moved 4 procedures for basic reading/writing TObjSection contents into ogcoff.pas, so they don't have to be reimplemented for every output format.
git-svn-id: trunk@21492 -
2012-06-05 19:52:40 +00:00
sergei
263b46be86 * ogelf.pas: Changed MaybeSwap* into procedures, makes them more suitable for reuse in the upcoming reader (and reduces amount of copying while writing, too).
git-svn-id: trunk@21484 -
2012-06-04 10:27:14 +00:00
florian
31b1678757 * write parameter refs to ppu (only 1=used; 0=unsed), fixes parameter usage checking of inlined procedures loaded from units
git-svn-id: trunk@21482 -
2012-06-03 18:56:44 +00:00
florian
e96dc4204e * version update
git-svn-id: trunk@21481 -
2012-06-03 18:55:44 +00:00
sergei
747cd55b09 * Fixed 64-bit ELF program header definition (field order is different from 32-bit counterpart!)
* Factored values used in the ELF header into constants, so they can be reused when reading object files.
* Writing first 16 bytes of ELF header should be endian-neutral.
* Section symbols must have st_name equal to zero, using section shstridx is incorrect because it is an index into .shstrtab, not into .strtab (actually written content is unchanged, because section_write_symbol is called while shstridx is still zero).

git-svn-id: trunk@21455 -
2012-06-02 11:35:12 +00:00
florian
52372a88ca * arm and x86-64 can do exception handling without a framepointer based stack
git-svn-id: trunk@21454 -
2012-06-01 21:32:23 +00:00
florian
3ae5fc8c04 * patch by Nico Erfurth: adds a check for SM_ASR to also support removal of unnecessary sign extension before STRH.
git-svn-id: trunk@21446 -
2012-05-31 20:24:48 +00:00
florian
af7bb6faab * ignore unused parameters when inlining
git-svn-id: trunk@21445 -
2012-05-31 18:48:38 +00:00
florian
4f273aa08d * patch by Nico Erfurth: Handle STR*/LDR* properly in ARM Peephole optimizers
git-svn-id: trunk@21444 -
2012-05-31 17:00:19 +00:00
pierre
b9f8934d7e * Fix for go32v2 specific failure in test/cg/tcalval5 with -Aas option
git-svn-id: trunk@21443 -
2012-05-31 12:55:56 +00:00
pierre
069cd9f250 Fix go32v2 staticClibprefix used by internal linker
git-svn-id: trunk@21442 -
2012-05-31 09:34:53 +00:00
sergei
14d66a64a4 + Definitions and utility functions for executable ELF files
git-svn-id: trunk@21441 -
2012-05-31 09:23:35 +00:00
sergei
1c271251f8 - Removed tcoffexeoutput.FCoffSyms, it is never used (symbols are written directly to the output)
* Improved TCoffObjOutput.ReadObjData to use one Seek less, also improved error messages.

git-svn-id: trunk@21440 -
2012-05-31 09:01:11 +00:00
sergei
3a89544cd6 + Internal linker for go32v2:
* Enable smart linking on go32v2
  * Adapted external linker script for long section names (ld 2.17 from fpcbuild repository does not seem to actually remove unused sections though)
  * Do not pass '-lc' twice to external linker
  * Pass -Map with correct filename to external linker if -Xm is specified on command line
  * Debug sections for DJCOFF must have zero memory position and flag COFF_STYP_INFO (not COFF_STYP_NOLOAD).

git-svn-id: trunk@21435 -
2012-05-30 13:45:36 +00:00
sergei
1579583484 * COMISD (and COMISS, too) instruction cannot have memory reference as destination, Mantis #22150.
git-svn-id: trunk@21432 -
2012-05-29 14:43:01 +00:00
florian
fbc77b74c2 * patch by Nico Erfurth to remove superfluouse moves
git-svn-id: trunk@21422 -
2012-05-28 21:58:06 +00:00
florian
c348b6f2cc * patch by Nico Erfurth:
- Support MLA and MUL in DataMov2Data
- SMLAL and UMLAL are also reading from oper[0]
- UMLAL, UMULL, SMLAL and SMULL are writing to oper[1]

git-svn-id: trunk@21421 -
2012-05-28 18:11:31 +00:00
florian
0fa1bf27c1 + tmipsaddnode.pass_1 setting expectloc correctly
git-svn-id: trunk@21420 -
2012-05-28 16:24:21 +00:00
florian
1b3dd8eefe * patch by Jeppe Johansen: fixes TCGMIPS.getfpuregister
git-svn-id: trunk@21419 -
2012-05-28 16:23:11 +00:00
florian
2162df1802 * patch by Jeppe Johansen: fix gen_load_cgpara_loc for mips(el)
git-svn-id: trunk@21417 -
2012-05-28 16:21:30 +00:00
Jonas Maebe
5dc75a92a3 * don't write size suffix for popcnt on Darwin, its assembler doesn't
support it (fixes webtbs/tw13186)

git-svn-id: trunk@21412 -
2012-05-28 14:00:02 +00:00
florian
7bdbb3448e * minimum compiler version to build the compiler is 2.6.0
git-svn-id: trunk@21411 -
2012-05-28 13:30:51 +00:00
sergei
6571b4d140 * Factored code to create internal link script for debug sections into a separate procedure.
git-svn-id: trunk@21410 -
2012-05-28 13:28:21 +00:00
Jonas Maebe
9f0fb9cf10 - removed "<<<<<<< HEAD" leftover from a conflicting merge
git-svn-id: trunk@21409 -
2012-05-28 12:08:14 +00:00
sergei
8814f56081 * Fixed oso_debug section attribute being not preserved while reading/writing DJCOFF object files.
* Fixed header data positions for DJCOFF executables, they need adjustment by stub size.
* Fixed symbol values in DJCOFF executables, they must be absolute.
* Fixed missing oso_common flag on TExeOutput.commonObjSection, causing incorrect COFF relocations to this section.

git-svn-id: trunk@21408 -
2012-05-28 11:46:52 +00:00
florian
9e180fb318 * remove unneeded zero extensions from 16 to 32 Bit
git-svn-id: trunk@21404 -
2012-05-28 07:21:27 +00:00
sergei
35e3e363dd * Changed writing section symbols to use storage class COFF_SYM_LOCAL (3), this is what is used by both GCC and MSVC. Previously used COFF_SYM_SECTION (104) is accepted by GNU binutils, but only for PE targets (and silently converted to COFF_SYM_LOCAL), for DJGPP it issues warnings.
* Assign section indexes independent from symbol indexing.
* Fixed section flags not assigned while reading DJGPP object files.
* Fixed objData type for TDJCoffexeoutput.
* Fixed entry point address of DJGPP executables.
* Fixed filling exe section headers for DJGPP.

git-svn-id: trunk@21396 -
2012-05-26 14:22:13 +00:00
Jonas Maebe
a2426178dc * don't insert type conversions in add nodes if both arguments are constant
and if the result does not depend on the types of the arguments (to
    prevent "qwordconst>int64const" being turned into
    "int64(qwordconst)>int64const" and thereby potentially change the outcome)
    (mantis #19622)

git-svn-id: trunk@21395 -
2012-05-26 14:14:59 +00:00
Jonas Maebe
9e0184884e * correctly change the signdness information of tordconstnodes that are
simplified via typeconvnode (corrects resultdef of "qword(1) shl 33",
    mantis #22133)
  * simplify shl/shr nodes after their resultdef has been set, so the
    resultdef used during simplify is set (fixes same expression as above
    when it is calculated by an inline function)

git-svn-id: trunk@21394 -
2012-05-26 13:31:23 +00:00
Jonas Maebe
baa8fa39a8 * converted code to trash variables (-gt) to operate at the node tree level,
and also use this code to trash local variables in inlined routines
   o fixes mantis #22088
   o makes it possible to also implement it for the jvm target in the future

git-svn-id: trunk@21393 -
2012-05-26 11:32:39 +00:00
Jonas Maebe
f2c82e32cd - removed g_indirect_sym_load() from hlcgobj/hlcg2ll because this cgobj
method is only used anymore internally in cgobj.tcg and its descendants
  * made tcg.g_indirect_sym_load() protected to ensure it stays that way

git-svn-id: trunk@21392 -
2012-05-26 11:32:33 +00:00
Jonas Maebe
8234a842e6 * fixed conversion of empty ansistring/widestring constants to pchar on
the jvm target + test

git-svn-id: trunk@21391 -
2012-05-26 11:32:20 +00:00
Jonas Maebe
11968c4261 * use A_J instead of A_B (without explicitly defined condition) to jump to
wrapped interface methods

git-svn-id: trunk@21389 -
2012-05-25 14:50:50 +00:00
florian
21b94f675f + add for MLA the same register interferences as for MUL
* register interferences for MUL/MLA are only needed for less than ARMv6

git-svn-id: trunk@21385 -
2012-05-24 19:14:58 +00:00
sergei
bbb08bbf66 ogcoff.pas:
- removed empty destructor and checks for nil before .Free (they are done in tobject.free itself)
+ added COMDAT definitions.

git-svn-id: trunk@21383 -
2012-05-24 16:34:13 +00:00
Jonas Maebe
ffe68ca284 * do not search overloaded assignment/conversion operators for internal
type conversions (those should always re-interpret the raw bits),
    except for variants (because those are sometimes generated internally)
    -- done so that -gt code at the node tree level can insert explicit
    typecasts to integer types without triggering overloaded explicit
    typecast operators such as in tests/test/terecs14

git-svn-id: trunk@21381 -
2012-05-24 15:34:27 +00:00
Jonas Maebe
0037de6ac9 * disable range/overflow checking for subsetreg/ref code, to prevent
spurious errors when calculating masks (was also the case for the old
    code in cgobj)

git-svn-id: trunk@21380 -
2012-05-24 15:33:49 +00:00
florian
638d0d49c0 + take advantage of the mla instruction when calculating array offsets
git-svn-id: trunk@21375 -
2012-05-23 20:48:26 +00:00
sergei
71c8b9cf8a * ogelf.pas: cleaned up code that creates default sections.
git-svn-id: trunk@21374 -
2012-05-23 14:21:44 +00:00
florian
c75486db89 * patch by Nico Erfurth:
Reorder unaligned Load sequence on ARM

The old version produced code like that:

ldrb rDEST, [rBASE]
ldrb rTemp, [rBASE, #1]
orr  rDEST, rDEST, rTEMP lsl #8 (2 stall cycles)
ldrb rTemp, [rBASE, #2]
orr  rDEST, rDEST, rTEMP lsl #16 (2 stall cycles)
ldrb rTemp, [rBASE, #3]
orr  rDEST, rDEST, rTEMP lsl #24 (2 stall cycles)

This creates a lot of stall-cycles on ARM Implementations with load
delay slots like Marvel Kirkwood or Intel XScale. With the usual up to 2
stall-cycles this code requires a total of 13 cycles (7 instructions + 6 stall
cycles) in best case.

The new code uses a second temp register to avoid the stall cycles.

ldrb rDEST, [rBASE]
ldrb rTemp1, [rBASE, #1]
ldrb rTemp2, [rBASE, #2]
orr  rDEST, rDEST, rTEMP1 lsl #8
ldrb rTemp1, [rBASE, #3]
orr  rDEST, rDEST, rTEMP2 lsl #16
orr  rDEST, rDEST, rTEMP1 lsl #24 (1 stall cycle)

The rescheduling and second register bring the total cycles down to 8.
If a later rescheduling should happen for the last orr it even can go
down to 7.

git-svn-id: trunk@21363 -
2012-05-22 19:09:20 +00:00
sergei
dc03282cb7 + Support assembling expressions ".long L2-L1" where label L1 belongs to the current objsection and L2 comes from any objsection. This is done using relative relocations and is compatible with GNU AS.
* Also fixed ogcoff.pas to handle these relative relocations correctly.

git-svn-id: trunk@21362 -
2012-05-22 14:59:24 +00:00
svenbarth
dbc410de63 Allow the usage of a generic's name without type arguments inside of nested classes inside the generic. This fixes Mantis #19499, but also Mantis #18688.
* symtable.pas:
    + add function "get_generic_in_hierarchy_by_name" which returns a def with the name of the symbol in the given object/record hierarchy (useful only in non-Delphi modes)
    + add function "return_specialization_of_generic" which returns the specialization def of a given class inside the given object/record hierarchy
* pexpr.pas, factor, factor_read_id: instead of checking whether the names of the found symbol and the current_structdef are equal, check whether the generic appears in hierarchy of current_structdef
* ptype.pas:
    * id_type: check whether the found symbol is a generic dummy and we are currently parsing a generic then return the correct def of the generic instead of the dummy one
    * single_type: when using the generic type without type parameters the def must resolve to the specialized def when specializing the class instead of the generic def which the dummy symbol points to
    * read_named_type, expr_type: like in "single_type" we need to resolve the use of the parameterless type name to the correct specialization def instead of the generic def
* pdecobj.pas, object_dec: also set the typesym of the current_structdef as otherwise some assumptions about generics with the above mentioned changes aren't valid anymore (like the def the typesym is unset again afterwards)
+ add tests for both bug reports (the one for 19499 is slightly modified so that it does not contain any errors)

git-svn-id: trunk@21361 -
2012-05-22 12:19:11 +00:00
Jonas Maebe
9bfb8b5d48 * fixed (currently harmless) error in r21287 that specified that the full
contents of a procvar had to be loaded in case of a procedure of object
    or nested procvar rather than only the code address (harmless, because
    this code is only active for low level targets currently and since
    r21330 the location's size was used because the source and destination
    types were the same)

git-svn-id: trunk@21352 -
2012-05-20 21:11:45 +00:00
florian
5f0bcd9248 * patch by Nico Erfurth:
Optimize ARM OP_MUL/OP_IMUL for x*ispowerof2(const+1) cases

Calculations like a*7 can be optimized to a*8-a with the usage of RSB and left
shifts which can be done in a single cycle.

git-svn-id: trunk@21351 -
2012-05-20 20:50:04 +00:00
Jonas Maebe
78bb3e323a * fixed source type information for values loaded in arrayconstructor after
r21069

git-svn-id: trunk@21350 -
2012-05-20 20:34:14 +00:00
florian
21573f50c5 * allow LOC_CONSTANT to be used as vmt pointers in the cg, resolves #21914
git-svn-id: trunk@21349 -
2012-05-20 19:02:36 +00:00
Jonas Maebe
7dbfd9dc81 * don't say a config file is empty if it only contains #define, #undef,
#write and/or #include statements (mantis #20504)

git-svn-id: trunk@21345 -
2012-05-20 15:00:53 +00:00
Jonas Maebe
eb7e192226 * support pointer constants as initialisation values for procvar typed
constants in Delphi mode on non-treetypedconstbuilder platforms
    (mantis #21267)

git-svn-id: trunk@21344 -
2012-05-20 14:51:15 +00:00
Jonas Maebe
c27f9da1b2 * always surround ld link.res SEARCH_DIR() arguments with double quotes,
rather than with single/double quotes depending on the target platform
    (ld only supports double quotes), and rather than only quoting when
    necessary (wastes time since quotes are always allowed, and double
    quotes inside a directory name cannot be escaped for ld; they are
    simply not supported by the program) (mantis #22059, follow-up to
    r21069 and r21208)

git-svn-id: trunk@21343 -
2012-05-20 13:30:51 +00:00
Jonas Maebe
ccf895af5a * link.res is a real linkerscript when we target binutils, not when we
target the AIX linker
  * never quote file names added to link.res when it's not a linkerscript
    (only newline is a separator in the case)

git-svn-id: trunk@21342 -
2012-05-20 13:30:42 +00:00
Jonas Maebe
4a730bd053 * fixed source type for location_force_register() when loading second
parameter of inc/dec into a register

git-svn-id: trunk@21338 -
2012-05-19 14:39:29 +00:00
Jonas Maebe
9d860904fe * merged AIX changes from ncgutil.gen_proc_symbol_end() into
hlcgobj.gen_proc_symbol_end() and removed the routine from ncgutil (it's
    not used anymore)

git-svn-id: trunk@21337 -
2012-05-19 14:39:12 +00:00
florian
6c8eed21c4 + implement auto inlining (-Ooautoinline)
+ implement trashing of local variables if subroutine is inlined
* fix some errors releated to interproc. gotos and inlining
+ node_count function
* inline cannot be used with iochecking and safecall calling conventions
* track inherited usage
* don't inline if inherited is used

git-svn-id: trunk@21335 -
2012-05-19 13:30:02 +00:00
marco
a98e75fc89 * remove used of deprecated function. Use this one from dos.
git-svn-id: trunk@21332 -
2012-05-19 11:34:04 +00:00
Jonas Maebe
9e51b0837c * avoid problems when using a_load*loc* calls with 3-byte-sized parameters
(fix internalerror when compiling webtbs/tw16163 on non-Darwin/ARM)

git-svn-id: trunk@21330 -
2012-05-19 10:19:53 +00:00
Jonas Maebe
958600e74b * by default disable the warning about interfaces raising a particular
method's visibility, because this is common practice in Object-Pascal.
    It can be re-enabled with {$warn INTF_RAISE_VISIBILITY on} (mainly
    useful when trying to keep code compatible with the JVM target)

git-svn-id: trunk@21329 -
2012-05-19 10:19:49 +00:00
Jonas Maebe
8282d6e37a * do not create a global symbol in the middle of ansi/unicodestring
constants on Darwin, because its linker uses global symbols as delimiters
    of subsections for dead code stripping. This was previously solved by
    never making any ansistring constants smart linkable, which is now
    solved

git-svn-id: trunk@21328 -
2012-05-19 10:19:35 +00:00
sergei
19053de279 * Added {$i fpcdefs.inc}, was missing in the newly added unit, causing incorrect parameter positions on some platforms (e.g. broken tsafecall2, tsafecall3).
git-svn-id: trunk@21318 -
2012-05-17 17:34:12 +00:00
florian
05a8783b1e * patch by Nico Erfurth:
Improve ARM-Peephole Optimizers

1.) Introduce a ARM-specific RegUsedAfterInstruction which analyzes
instructions and reg allocation information to see if a register is
really needed afterwards to decide if some special optimizations can be
done.

2.) Introduce "RemoveSuperfluousMove"
This tries to fold mov into a previous Data-Instruction (ADD, ORR, etc)
or LDR-Instruction.

3.) Introduce new Optimizer "DataMov2Data" and modify LdrMov2Ldr to use
RemoveSuperfluousMove

4.) Expand Ldr* and Str* Optimizers to also work on {Ldr,Str}{,b,h}

git-svn-id: trunk@21314 -
2012-05-17 08:31:44 +00:00
florian
798c9340cc * patch by Nico Erfurth:
Inline a couple of small functions of the ARM-Compiler

These small changes improved overall compile times of the fpc suite by
about 2-3% running on an 1.2GHz Kirkwood.

git-svn-id: trunk@21312 -
2012-05-17 08:03:51 +00:00
florian
b2813abec2 + patch by Bernd to add the push/pop mnemonic for arm/thumb-2, resolves #22041
git-svn-id: trunk@21310 -
2012-05-15 18:52:09 +00:00
florian
8832a34b67 * fix reg. allocs even for procedures without labels
git-svn-id: trunk@21309 -
2012-05-15 18:09:12 +00:00
florian
17dd362a5a * white space
git-svn-id: trunk@21308 -
2012-05-15 18:08:52 +00:00
florian
2560266e5d * skip comments properly when searching for places for constant pool distances
git-svn-id: trunk@21307 -
2012-05-15 18:08:19 +00:00
florian
2402e8e504 * fixes FindRegAlloc
+ GetAllocationString
 * fix comment for lazarus
 * change behaviour of UpdateUsedRegs in PeepHoleOptPass1

git-svn-id: trunk@21306 -
2012-05-15 18:07:52 +00:00
florian
d4c120cb34 * fix comment so it does not confuse lazarus
git-svn-id: trunk@21305 -
2012-05-15 18:07:25 +00:00
florian
75e62e42e4 * add debug statements
* avoid possible problems with unknown ra_ types

git-svn-id: trunk@21304 -
2012-05-15 18:07:08 +00:00
florian
748694a325 * fixes some issues with reg. allocation information
git-svn-id: trunk@21303 -
2012-05-15 18:06:41 +00:00
Jonas Maebe
08784aca44 * fixed compilation for high level code generator targets after r21287
git-svn-id: trunk@21302 -
2012-05-15 13:05:27 +00:00
Jonas Maebe
d6f85c35b5 - removed stray symtablestack.push() after r21282
git-svn-id: trunk@21301 -
2012-05-15 13:04:51 +00:00
Jonas Maebe
4f396735f4 * support LOC_(C)SUBSETREG/REF in thlcgobj.a_load_loc_ref() (should fix
mantis #22029)

git-svn-id: trunk@21300 -
2012-05-15 12:13:10 +00:00
Jonas Maebe
0fd9228deb * extended r21290 to also apply to Java interfaces (they can also contain
constants)

git-svn-id: trunk@21297 -
2012-05-14 21:27:44 +00:00
Jonas Maebe
618a5e8e2e * fixed operand order for AND-operation in smallset<=/=>smallset code
(fixes taddset, correction to r21095)

git-svn-id: trunk@21294 -
2012-05-14 17:41:48 +00:00
paul
4312aa4e08 compiler: allow compiler to find real class definition during class members parse to handle references to self constants + test
git-svn-id: trunk@21290 -
2012-05-14 04:50:49 +00:00
florian
53c39d5420 * fixes peephole optimizer problems with -O3 on x86-64
git-svn-id: trunk@21288 -
2012-05-13 19:19:04 +00:00
Jonas Maebe
edd42aa42a * moved subsetref/reg and bit_set/test support from cgobj to hlcgobj for
future use by high level code generator targets
   o this in turn required that all a_load*_loc* methods are called via
     hlcg rather than via cg, since a location can be a subsetref/reg and
     and those are no longer handled in tcg
   o that then required moving several force_location_* routines into
     thlcg because they use a_load_loc*, but did not take tdef size
     parameters (which are required by the thlcg a_load_loc* routines)
   o the only practical consequence is that from now on, you have to
     use hlcg.location_force_mem/reg() (fpureg not yet) and
     hlcg.gen_load_loc_cgpara() instead of the removed versions from ncgutil,
     and hlcg.a_load*loc*() instead of cg.a_load*loc* if a subsetref/reg
     might be involved

git-svn-id: trunk@21287 -
2012-05-13 12:33:10 +00:00
Jonas Maebe
3ba801d37c * fix loading 64 bit floating point parameters passed half in an integer
register and half on the stack into a VFP register on ARM (mantis
    #21917)

git-svn-id: trunk@21286 -
2012-05-13 12:14:34 +00:00
Jonas Maebe
ef2d665a50 + support for REV and several other ARMv6/ARMv6T2+ opcodes (mantis #21888)
git-svn-id: trunk@21285 -
2012-05-13 12:14:26 +00:00
Jonas Maebe
f95925dd91 * don't push/pop current_module.localsymtable when adding explicitly created
pointer/arraydefs, because these operations can have side-effects in case
    of helpers (will add/remove helpers, so popping after the insertion
    removed all helpers in the static symtable of the current unit)

git-svn-id: trunk@21282 -
2012-05-12 22:24:27 +00:00
Jonas Maebe
85a3fd3357 + ossinttype/osuinttype defs that correspond to OS_SINT/OS_INT for use in
the high level code generator

git-svn-id: trunk@21279 -
2012-05-12 16:03:15 +00:00
Jonas Maebe
c1b1eadb98 * factored out the intialization of uinttype/sinttype/ptruinttype/ptrsinttype
from create_intern_types and load_intern_types (+ the version from
    load_intern_types was out-of-date)

git-svn-id: trunk@21278 -
2012-05-12 16:03:02 +00:00
paul
62a91ef626 compiler: don't search symbol in other symtables than in found nested class, fix wrong test + add another one
git-svn-id: trunk@21275 -
2012-05-12 08:21:50 +00:00
paul
62b59235ca compiler: fix accessing typed constants inside class declaration (bug #21941)
git-svn-id: trunk@21273 -
2012-05-12 01:09:56 +00:00
svenbarth
b3595893c8 pgenutil.pas, generate_specialization: set the correct module index, so that warnings, etc. that are generated for a type declaration are printed using the module where the generic came from (this is already done for method bodies, but not for declarations)
git-svn-id: trunk@21271 -
2012-05-11 06:44:12 +00:00
svenbarth
810bd7ddab + symtable.pas, tspecializesymtable.create: SymList and DefList do not need to own the symbols and defs as they are moved to another symtable before the specialize symtable is destroyed (avoids the need to call "extract" on those lists)
* pgenutil.pas, generate_specialization: Correctly change the ownership of extracted symbols and defs by calling ChangeOwner on the symbol/def which does all the magic of changing the owner and adding it to the corresponding list of the given symtable. This fixes Mantis #21550
* Adjusted tw21550.pp so that it enforces the generation of debug information which (as this was the option which caused the above mentioned bug to show)

git-svn-id: trunk@21270 -
2012-05-10 06:27:32 +00:00
paul
d79eee8ed1 compiler: write a warning if unit should be compiled with built-in system codepage for ansistring constants but this codepage is not known by the compiler
git-svn-id: trunk@21269 -
2012-05-10 01:24:18 +00:00
svenbarth
4fc7515591 * pdecsub.pas, parse_proc_dec: always parse operator overload heads as block type bt_body so that operators like ">", "=>" or "<>" are resolved to the correct tokens ("<>" would be a sequence of "_LSHARPBRACKET _RSHARPBRACKET" instead of _NE otherwise). Fixes Mantis #21127
git-svn-id: trunk@21266 -
2012-05-09 12:32:34 +00:00
svenbarth
def357287e * revert revision 21251 for pdecvar.pas: not generating the bss-data for the static symbol for a generic breaks linking with debug info enabled; I'll need to find a better solution to avoid unneeded use of space (luckily it wasn't needed to fix any bug ^^)
git-svn-id: trunk@21264 -
2012-05-09 12:02:41 +00:00
Jonas Maebe
641b259aed * adjusted thlcg.g_rangecheck() implementation so it can be used for all
targets and removed (the almost identical) tcg.g_rangecheck()

git-svn-id: trunk@21262 -
2012-05-08 20:02:36 +00:00
Jonas Maebe
11e9f95580 * fixed (not harmless) class cast error when indexing an array[orddef] using
a non-orddef (e.g., a variant)

git-svn-id: trunk@21261 -
2012-05-08 20:02:26 +00:00
Jonas Maebe
95b8b95c9c * fixed (harmless) class cast error
git-svn-id: trunk@21260 -
2012-05-08 20:02:18 +00:00
Jonas Maebe
41d86f2b26 * fixed (harmless) class cast error when checking whether an aggregate
has the same size as one of its members to determine whether we can
    exchange two temps rather than copying one to the other

git-svn-id: trunk@21259 -
2012-05-08 20:02:04 +00:00
Jonas Maebe
003a30db6b - reverted r21246, it breaks tcalext3/5 on x86
git-svn-id: trunk@21258 -
2012-05-08 17:17:01 +00:00
Jonas Maebe
24be42d509 * changed "crc" variable from longint to cardinal to avoid (harmless) range
check errors

git-svn-id: trunk@21257 -
2012-05-08 17:16:56 +00:00
Jonas Maebe
ab914a8ae3 * the code page of unicodestring/widestring on big endian targets is
UTF-16BE, not UTF-16LE

git-svn-id: trunk@21255 -
2012-05-08 13:38:16 +00:00
svenbarth
5b1b194b47 * pdecvar.pas, read_record_fields: don't generate BSS-data for generic static fields (doesn't fix any specific bug, but we don't need space reserved for the field)
* pgenutil.pas, generate_specialization: fix a stupid "don't iterate upwards if deleting/extracting" mistake (twice!); this fixes Mantis #21550 and Mantis #21654 (tests added)

git-svn-id: trunk@21251 -
2012-05-08 07:31:37 +00:00
Jonas Maebe
64f3ba3299 * clarified description of -Xd, it is not always required for
cross-compiling (mantis #21963)

git-svn-id: trunk@21248 -
2012-05-06 15:44:52 +00:00
Jonas Maebe
50d2fa7134 * after changing a modeswitch, only change related module/localswitches that
depend on the modeswitch that was just changed (so that e.g. changing
    the nested procvars setting has no effect on the state of $h+/$h-)
    (mantis #21951)

git-svn-id: trunk@21247 -
2012-05-06 14:56:49 +00:00
Jonas Maebe
9568693664 * removed superfluous sign extension from a_load_subsetreg_reg() (the value
is already sign extended at that point if required)

git-svn-id: trunk@21246 -
2012-05-06 14:50:38 +00:00
florian
edbb826521 * generate correct entry code on mips for subroutines with a stack frame >2^15-1
git-svn-id: trunk@21238 -
2012-05-05 18:34:31 +00:00
florian
5cfc865889 * version update
git-svn-id: trunk@21237 -
2012-05-05 18:33:15 +00:00
florian
77ae218556 * safer calculation of pool placement on arm
git-svn-id: trunk@21226 -
2012-05-04 19:10:30 +00:00
paul
aad9294c27 compiler: when explicit codepage modeswitch is installed and compiler has no codepage map for the DefaultSystemCodepage use default compiler codepage
git-svn-id: trunk@21223 -
2012-05-04 06:09:35 +00:00
sergei
78c0215447 Preparations to native threadvar support:
- i386/cgcpu.pas: removed segment check, rejecting references with segment here is too early. These references are passed to tcgx86.a_loadaddr_ref_reg, which can generate required code for them (or reject if they are not allowed for the target).
- ncgld.pas: removed "not tf_section_threadvars in target_info" condition, it is inverse to one on the following line, making non-generic branch impossible to execute.
+ Define FPC_SECTION_THREADVARS macro if corresponding flag is set for the target.

git-svn-id: trunk@21210 -
2012-05-03 16:26:44 +00:00
Jonas Maebe
0841ee6e4f * GNU ld only supports double quotes in its response file -> requote there
as well under Unix (mantis #21928, caused by r21069)

git-svn-id: trunk@21208 -
2012-05-03 12:41:16 +00:00
svenbarth
3d6e08ed59 + Add support for the JVM architecture to the compiler driver "fpc"
git-svn-id: trunk@21204 -
2012-05-03 06:26:30 +00:00
svenbarth
7ebbebc877 - removed a duplicated include statement
git-svn-id: trunk@21203 -
2012-05-03 06:24:52 +00:00
Jonas Maebe
9c0ec8ee8c * part of r21120, forgot to commit
git-svn-id: trunk@21128 -
2012-04-29 22:27:05 +00:00
Jonas Maebe
dd03bc3e66 * i386 version of fix from r21113
git-svn-id: trunk@21127 -
2012-04-29 22:27:00 +00:00
Jonas Maebe
8a7123eed8 * override a_call_reg() with an internalerror rather than a_call_ref(),
since it's the former that is abstract in the base class

git-svn-id: trunk@21126 -
2012-04-29 22:26:51 +00:00
florian
366e2027fc * rename TMIPSELParaManager into TMIPSParaManager
git-svn-id: trunk@21124 -
2012-04-29 21:32:52 +00:00
florian
31f54a7810 * use separate build directory for mipsel
git-svn-id: trunk@21122 -
2012-04-29 21:30:46 +00:00
florian
25e82bb1af * fix stack frame generation on mips(el)
git-svn-id: trunk@21121 -
2012-04-29 21:29:06 +00:00