Commit Graph

14033 Commits

Author SHA1 Message Date
sergei
2638bc01d9 * Fixed error introduced in r21732. For libraries, startup is always dllprt0.o, regardless of profiling/linking to libc. Mantis #22397.
git-svn-id: trunk@21824 -
2012-07-09 12:18:34 +00:00
pierre
bc0c94c204 fpcdefs.inc: Set fpc_compiler_has_fixup_jmps for powerpcXX and mips CPUs.
psub.pas: Use new fpc_compiler_has_fixup_jmps conditional.
 mips/aasmcpu.pas: MIPS specific fixup_jmps function,
   The insttruction distance calculation is not exact as
   some pseudo-instruction can be expanded to a variable number of real instructions
   real calculation would only be possible if we first 
   convert pseudo-instuctions to real instructions before calling fixup_jmps.

 ncgutil.pas: Revert commit r21791
 ncgcon.pas: Revert commit r21786
 mips/cgcpu.pas: Partial revert of commit r21798, no need to always use A_J,
 as fixup_jmps now handles out of range branches.

git-svn-id: trunk@21822 -
2012-07-09 08:59:13 +00:00
Jonas Maebe
1b3b097f3a * always interpret a function name on the RHS as a recursive function
call in MacPas mode, like in TP/Delphi (mantis #22344)

git-svn-id: trunk@21817 -
2012-07-08 09:52:30 +00:00
masta
aef81cad68 Add debug information about register spilling
If DEBUG_SPILLING is defined we'll output "XXX: Spill read/write".

git-svn-id: trunk@21816 -
2012-07-08 09:24:14 +00:00
sergei
1a25aed68d * Renamed a method for consistency (let script building methods start with ScriptAdd).
git-svn-id: trunk@21814 -
2012-07-07 22:49:05 +00:00
florian
9833f642fe * coalesce if either u or v are precolored, tested on arm and i386, it gives for both a small advantage
git-svn-id: trunk@21812 -
2012-07-07 21:20:26 +00:00
masta
bba75a079c Better Code generation for SAR/ROR/ROL inline nodes
The old code forced dst and src to be the same, which is highly x86
specific and creates bad register utilization on other architectures
like arm.

The new version will use more imaginary registers, allowing the register
allocator to do a better job.

I've merged second_sar and second_rox into a single procedure
second_rox_sar because they were very similar.

git-svn-id: trunk@21809 -
2012-07-06 21:33:28 +00:00
masta
9825fbf554 Support top_shifterop and top_regset for arm in RegInOp
RegInOp did not check for a register beeing part of a shifterop
(op.shifterop^.rs) which could result in trashed registers (But that did
not seem to happen yet anyway).

I've also implemented support for top_regset, but it is currently not
generated outside of proc_entry/proc_exit anyway.

git-svn-id: trunk@21808 -
2012-07-06 21:33:22 +00:00
masta
dbf0404fb0 More consolidation of OP_SHL/SHR/ROR/SAR in ARM CodeGen
This removes the duplications in a_op_reg_reg_reg_checkoverflow.
OP_ROL stays seperate because it needs some special treatment again.

The code for OP_ROL was changed, previously it generated:
mov tempreg, #32
sub src1, tempreg, src1
mov dst, src2, ror src1

This would trash src1, which MIGHT be a problem, but i'm not totally
sure. But the mov/sub was replaced with rsb, so the new code looks like
this.

rsb tempreg, src1, #32
mov dst, src2, ror tempreg

If src1 gets freed afterwards the regallocator should be able to change
that into:

rsb src1, src1, #32
mov dst, src2, ror src1

git-svn-id: trunk@21804 -
2012-07-06 15:01:31 +00:00
pierre
6f12197d3b Fix set of frame poointer value for big local stack size
git-svn-id: trunk@21802 -
2012-07-06 13:32:13 +00:00
masta
d2d5d17557 Consolidate handling of OP_SHL/SHR/ROL/ROR/SAR in ARM CodeGen
The previous code was full with duplicated code, this new version just
maps the OP_* to the correct SM_* and does some special handling for
OP_ROL which is done via OP_ROR.

git-svn-id: trunk@21801 -
2012-07-06 12:10:42 +00:00
pierre
a771b32097 Use R9 instead of AT for big local stack size to avoid error due to AT being changed by pseudo-instructions
git-svn-id: trunk@21800 -
2012-07-06 12:05:58 +00:00
pierre
2e4c704f06 Use A_J instead of A_BA for a_jmp_XXX unless we generate PIC code to avoid branch out of range error (like for packages/fpmake compilation)
git-svn-id: trunk@21798 -
2012-07-05 21:24:22 +00:00
pierre
56b4977858 Override tcallnode.pass_1 for use of got for cdecl'ared functions (assuming it can be PIC code)
git-svn-id: trunk@21797 -
2012-07-05 21:18:16 +00:00
pierre
c53d07f741 Improve addr_pic support
git-svn-id: trunk@21796 -
2012-07-05 21:16:02 +00:00
pierre
86d82a9006 Add reference to new ncpuld unit
git-svn-id: trunk@21795 -
2012-07-05 21:13:22 +00:00
pierre
514b14a5ae Override a_call_name to use _gp loading and call for cdecl (to get PIC compatible code)
git-svn-id: trunk@21794 -
2012-07-05 21:12:14 +00:00
pierre
fc81979f61 set got at create of cs_create_pic is used
git-svn-id: trunk@21793 -
2012-07-05 21:10:30 +00:00
pierre
c2cd8246cb Override tloadnode.pass_1 to for use of got for shared library variables and genrate_picvaraccess
git-svn-id: trunk@21792 -
2012-07-05 21:07:46 +00:00
pierre
b63bc6be13 MIPS: use OC_EQ instead of OC_NE for new_exception to avoid branch out of range error
git-svn-id: trunk@21791 -
2012-07-05 21:04:03 +00:00
pierre
024bde8875 Create .ent/.end pair for mips/mipsel and alpha
git-svn-id: trunk@21787 -
2012-07-04 16:38:57 +00:00
pierre
3acc0e6686 Add needs_got_for_pic, set global_used to that procedure
git-svn-id: trunk@21786 -
2012-07-04 16:38:19 +00:00
pierre
31a3f4f4a0 Add ait_ent and ait_ent_end to aiclass array
git-svn-id: trunk@21785 -
2012-07-04 16:37:14 +00:00
pierre
9b7fec59bb Support ait_ent and ait_ent_end
git-svn-id: trunk@21784 -
2012-07-04 16:36:33 +00:00
pierre
502cd6db29 Remove tai_ent, which is moved to aasmtai unit
git-svn-id: trunk@21783 -
2012-07-04 16:35:46 +00:00
pierre
0a21c01737 Use 8 for max record alignment for mips/mipsel
git-svn-id: trunk@21782 -
2012-07-04 16:34:51 +00:00
pierre
e25937854f Use std reg names and and
git-svn-id: trunk@21781 -
2012-07-04 16:34:06 +00:00
pierre
1f762cc247 Add and replacement, for MIPS
git-svn-id: trunk@21780 -
2012-07-04 16:33:17 +00:00
pierre
f92fba996d + New tai_ent and tai_ent_end classes
git-svn-id: trunk@21779 -
2012-07-04 16:32:20 +00:00
pierre
68d7e943c8 + Add global_used callback procedure
git-svn-id: trunk@21778 -
2012-07-04 16:31:20 +00:00
pierre
7982b34416 Start of PIC code support
git-svn-id: trunk@21777 -
2012-07-04 16:28:55 +00:00
pierre
6a9edb2083 Always pass records by value (OABI compliance)
git-svn-id: trunk@21776 -
2012-07-04 16:27:57 +00:00
pierre
63b4cb3347 + Add NR/RS _GP and _PIC_FUNC aliases
git-svn-id: trunk@21775 -
2012-07-04 16:26:29 +00:00
pierre
a892e2aa6f set pi_needs_got always if cs_create_pic is on
git-svn-id: trunk@21774 -
2012-07-04 16:25:42 +00:00
pierre
944d500d55 Change std reg names to allow use with GAS assembler
git-svn-id: trunk@21773 -
2012-07-04 16:24:11 +00:00
pierre
87b6bb5053 + Add .cpXXX pseudo-instruction for PIC code
git-svn-id: trunk@21772 -
2012-07-04 16:23:16 +00:00
masta
8001979f7e Reworked ispowerof2 in cutils.pas
IsPowerOf2 now uses the BsfQWord intrinsic introduced in Freepascal 2.6,
instead of the old shl loop, to find the power.

git-svn-id: trunk@21771 -
2012-07-04 13:25:25 +00:00
Jonas Maebe
882351bb21 * don't insert a conversion to widechar for ansistr[x]:='y' assignments on
the jvm target  (forgot to adapt code after adding ansistring support)

git-svn-id: trunk@21765 -
2012-07-03 21:16:29 +00:00
svenbarth
71c13190e1 Fix for Mantis #22329.
symtable.pas, searchsym_in_class:
* if we found a helper method that has overload defined we should not forget the symbol as there can be a case that no method with that name is defined in the extended class hierarchy
symtable.pas, searchsym_in_record:
* analogous to the above

+ added test given in the issue
+ added analogous test for record helpers

git-svn-id: trunk@21764 -
2012-07-03 16:27:03 +00:00
svenbarth
a908db5a91 Partially fix for Mantis #22160. This resolves the internal error, but the given example units still don't compile, because of the way we handle specializations and unit loading (more about this once I fixed that, too).
pgenutil.pas, specialization_init:
* don't add implementation units of the generic's unit to the symtable stack if we are specializing in a different unit (thus the generic needs to be defined in the interface section) as there is the possibility that the globalsymtable of an implementation unit is not yet defined if the specialization unit is used in the interface section of an implementation unit

git-svn-id: trunk@21763 -
2012-07-03 16:17:55 +00:00
pierre
7492f196f8 * Handle OS_F32 <-> OS_F64 float conversions
git-svn-id: trunk@21762 -
2012-07-03 16:16:21 +00:00
sergei
37b8cd1b7a * If relocation to a local label cannot be translated into (section+offset), then the target symbol must be written into symbol table. Fixes IE 200603012 in number of tests with -Cg on i386-linux (and possibly other targets with internal ELF assembler).
git-svn-id: trunk@21759 -
2012-07-02 15:43:33 +00:00
florian
3f14f2b61b + be able to turn off warning -> error conversion on the command line (with -)
git-svn-id: trunk@21754 -
2012-07-01 18:47:45 +00:00
florian
7df1403849 * fix releasing of shortstring temps. in arrayconstructor nodes
git-svn-id: trunk@21753 -
2012-07-01 18:46:54 +00:00
florian
c62a2c8bb5 + write temptype when printing tempdelete nodes
git-svn-id: trunk@21752 -
2012-07-01 18:46:13 +00:00
sergei
1c5fa5448e * Do not dereference null pointer, 'real' (not script-provided) common symbols don't have objsection assigned at this point.
git-svn-id: trunk@21748 -
2012-07-01 13:42:25 +00:00
masta
504a0ce0ca Fix for Mantis #22326
This fixes 64bit shifts on arm with a constant shift value of 0.

The old code would have emitted something like this
mov r0, r0, lsl #32
as 32 is an invalid shift value (and would be wrong anyway) the
assembler declined to assemble the produced source.

The new code will just not emit any code for a shift value of 0.

tests/test/tint642.pp now tests shl/shr 0 on 64 bit values.
tests/webtbs/tw22326.pp is also added as an additional test.

git-svn-id: trunk@21746 -
2012-07-01 08:09:00 +00:00
sergei
65e701a198 * Fixed operation of 'PROVIDE' link script directive (all symbols were incorrectly put into .bss section, instead of locations given by placement of the directive).
* Changed type of symbols created by link script from AT_FUNCTION to AT_DATA. This isn't significant for COFF, but matters for ELF targets.
* Changed alignment of .gnu_debuglink section from 0 to 1, this matches behavior of ld.

git-svn-id: trunk@21741 -
2012-06-30 17:32:45 +00:00
sergei
c65abdeeae * Implemented link map generation without involving TObjSection.ObjSymbolDefines, and removed the latter because it isn't used otherwise. The new approach uses CPU/memory only when map generation is requested.
git-svn-id: trunk@21737 -
2012-06-30 07:51:45 +00:00
Jonas Maebe
b0462d27cc * by default, no longer initialize enumeration fields of classes/objects
with the enum instance corresponding to ordinal 0 in JVM constructors,
    because a virtual method called by a parent constructor may already
    have assigned a different value (see tests/test/jvm/tenum2.pp). This
    will result in null pointer exceptions when using such fields without
    first explicitly assigning a value to them though.

    The old behaviour can be restored with the new -CTenumfieldinit command
    line parameter

git-svn-id: trunk@21736 -
2012-06-29 21:24:35 +00:00