Commit Graph

583 Commits

Author SHA1 Message Date
Jonas Maebe
bbf0e35a51 + Support for ARM CPS/CPSIE/CPSID instructions and mode flag bitfield
operand (patch by Jeppe Johansen, mantis #18334)

git-svn-id: trunk@16750 -
2011-01-11 16:02:51 +00:00
Jonas Maebe
780e75bfac o patch by Jeppe Johansen to fix mantis #17472:
* generate add.w instead of add for thumb-2 in case one of the registers
      is > r8
    * add register interferences for the "add" instruction so the register
      allocator can detect invalid instruction forms (even for assembler code)
    * fixed error in thumb2.inc detected by the previous change

git-svn-id: trunk@16633 -
2010-12-24 15:54:39 +00:00
paul
b317139006 compiler: fix compilation problems caused by tprocdef._class -> tprocdef.struct rename which was found by make fullcycle
git-svn-id: branches/paul/extended_records@16530 -
2010-12-10 06:50:58 +00:00
Jonas Maebe
c44d79f3ba * fix the value of the frame pointer for Thumb-2 after r14317
(patch by Jeppe Johansen, mantis #18025)

git-svn-id: trunk@16416 -
2010-11-24 10:07:49 +00:00
joost
07bf44517c * Merged XPCom branch into trunk, added support for constref and changed
the IInterface implementation to be XPCom-compatible
--- Merging r15997 through r16179 into '.':
U    rtl/inc/variants.pp
U    rtl/inc/objpash.inc
U    rtl/inc/objpas.inc
U    rtl/objpas/classes/persist.inc
U    rtl/objpas/classes/compon.inc
U    rtl/objpas/classes/classesh.inc
A    tests/test/tconstref1.pp
A    tests/test/tconstref2.pp
A    tests/test/tconstref3.pp
U    tests/test/tinterface4.pp
A    tests/test/tconstref4.pp
U    tests/webtbs/tw10897.pp
U    tests/webtbs/tw4086.pp
U    tests/webtbs/tw15363.pp
U    tests/webtbs/tw2177.pp
U    tests/webtbs/tw16592.pp
U    tests/tbs/tb0546.pp
U    compiler/sparc/cpupara.pas
U    compiler/i386/cpupara.pas
U    compiler/pdecsub.pas
U    compiler/symdef.pas
U    compiler/powerpc/cpupara.pas
U    compiler/avr/cpupara.pas
U    compiler/browcol.pas
U    compiler/defcmp.pas
U    compiler/powerpc64/cpupara.pas
U    compiler/ncgrtti.pas
U    compiler/x86_64/cpupara.pas
U    compiler/opttail.pas
U    compiler/htypechk.pas
U    compiler/tokens.pas
U    compiler/objcutil.pas
U    compiler/ncal.pas
U    compiler/symtable.pas
U    compiler/symsym.pas
U    compiler/m68k/cpupara.pas
U    compiler/regvars.pas
U    compiler/arm/cpupara.pas
U    compiler/symconst.pas
U    compiler/mips/cpupara.pas
U    compiler/paramgr.pas
U    compiler/psub.pas
U    compiler/pdecvar.pas
U    compiler/dbgstabs.pas
U    compiler/options.pas
U    packages/fcl-fpcunit/src/testutils.pp

git-svn-id: trunk@16180 -
2010-10-17 20:58:22 +00:00
Jonas Maebe
f13f6627c4 * moved use_fixed_stack from cgutils to a method in paramgr so it can
be used outside the code generator
  * renamed tabstractprocdef.requiredargarea into callerargareasize,
    and also added calleeargareasize field; added init_paraloc_info(side)
    method to init the parameter locations and init those size fields and
    replaced all "if not procdef.has_paraloc_info then ..." blocks with
    procdef.init_paraloc_info(callersize)"
  * moved detection of stack tainting parameters from psub to
    symdef/tabstractprocdef
  + added tcallparanode.contains_stack_tainting_call(), which detects
    whether a parameter contains a call that makes use of stack paramters
  * record for each parameter whether or not any following parameter
    contains a call with stack parameters; if not, in case the current
    parameter itself is a stack parameter immediately place it in its
    final location also for use_fixed_stack platforms rather than
    first putting it in a temporary location (part of mantis #17442)
  * on use_fixed_stack platforms, always first evaluate parameters
    containing a stack tainting call, since those force any preceding
    stack parameters of the current call to be stored in a temp location
    and copied to the final location afterwards

git-svn-id: trunk@16050 -
2010-09-26 21:24:14 +00:00
florian
f13eff22b0 + added generic stellaris support as provided by #17365
git-svn-id: trunk@15957 -
2010-09-09 09:02:14 +00:00
Jonas Maebe
f302fcdc98 + TSubRegisterSet definition forgotten to commit in r15952
* fixed compilation on non-x86 platforms after r15952

git-svn-id: trunk@15956 -
2010-09-09 08:48:02 +00:00
Jonas Maebe
304a8f4db7 * only insert the current list of pc-relative data if it's not empty,
solves the problem whereby an empty list could sometimes be inserted
    after a jump table load (in case the jump table was larger than the
    maximally allowed offset, and if there was a skipinstr between the
    previous instruction and the jump table load) (mantis #17164)

git-svn-id: trunk@15831 -
2010-08-16 20:17:07 +00:00
Jonas Maebe
57bd6d2685 + merged nestedprocvars branch
+ support for nested procedural variables:
    o activate using {$modeswitch nestedprocvars} (compatible with all
      regular syntax modes, enabled by default for MacPas mode)
    o activating this mode switch changes the way the frame pointer is
      passed to nested routines into the same way that Delphi uses (always
      passed via the stack, and if necessary removed from the stack by
      the caller) -- Todo: possibly also allow using this parameter
      passing convention without enabling nested procvars, maybe even
      by default in Delphi mode, see mantis #9432
    o both global and nested routines can be passed to/assigned to a
      nested procvar (and called via them). Note that converting global
      *procvars* to nested procvars is intentionally not supported, so
      that this functionality can also be implemented via compile-time
      generated trampolines if necessary (e.g. for LLVM or CIL backends
      as long as they don't support the aforementioned parameter passing
      convention)
    o a nested procvar can both be declared using a Mac/ISO Pascal style
      "inline" type declaration as a parameter type, or as a stand-alone
      type (in the latter case, add "is nested" at the end in analogy to
      "of object" for method pointers -- note that using variables of
      such a type is dangerous, because if you call them once the enclosing
      stack frame no longer exists on the stack, the results are
      undefined; this is however allowed for Metaware Pascal compatibility)

git-svn-id: trunk@15694 -
2010-08-02 22:20:36 +00:00
Jonas Maebe
356026f849 * use new_section() instead of tai_section.create() everywhere
- sort of reverted r14134, which is no longer required after the above
    change (new_section() inserts the alignment itself)
  * made the tai_section.create() constructor private so it cannot be
    called directly anymore

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

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

git-svn-id: trunk@15350 -
2010-05-30 21:12:57 +00:00
Jonas Maebe
9bc15a5f61 * renamed a_param_* to a_load_*_cgpara
git-svn-id: trunk@15305 -
2010-05-22 09:07:21 +00:00
Jonas Maebe
0d57bba4c9 * fixed ARM and MIPS compilation after r14912
git-svn-id: trunk@14923 -
2010-02-18 21:19:17 +00:00
Jonas Maebe
b6e4896805 * small typo corrections by Adriaan Van Os (mantis #15652)
git-svn-id: trunk@14844 -
2010-02-02 10:41:38 +00:00
florian
5acf377e31 * enable node cse for all cpus as level 2 optimization
git-svn-id: trunk@14703 -
2010-01-17 12:28:28 +00:00
Jonas Maebe
b4c8c73e70 * changed tf_use_function_relative_addresses into an assembler flag (with
the opposite meaning, af_stabs_use_function_absolute_addresses), because it
    is different on Darwin for the internal and external assembler)

git-svn-id: trunk@14342 -
2009-12-06 13:21:28 +00:00
Jonas Maebe
fbebd87593 * use BLX instead of "mov r14, r15; mov r15, reg" for a_call_reg on ARMv6
and above, so this also works when calling thumb code (should actually
    also be done for ARMv5T, but we don't have a monicker for that yet)
  * use BX instead of "mov r15, r14" for simple returns from subroutines
    on ARMv6+ to support returning to thumb code from ARM code (idem)

git-svn-id: trunk@14332 -
2009-12-04 22:38:50 +00:00
Jonas Maebe
d1538ab023 o added ARM VPFv2/VFPv3 support:
+ RTL support:
      o VFP exceptions are disabled by default on Darwin,
        because they cause kernel panics on iPhoneOS 2.2.1 at least
      o all denormals are truncated to 0 on Darwin, because disabling
        that also causes kernel panics on iPhoneOS 2.2.1 (probably
        because otherwise denormals can also cause exceptions)
    * set softfloat rounding mode correctly for non-wince/darwin/vfp
      targets
    + compiler support: only half the number of single precision
      registers is available due to limitations of the register
      allocator
    + added a number of comments about why the stackframe on ARM is
      set up the way it is by the compiler
    + added regtype and subregtype info to regsets, because they're
      also used for VFP registers (+ support in assembler reader)
    + various generic support routines for dealing with floating point
      values located in integer registers that have to be transferred to
      mm registers (needed for VFP)
    * renamed use_sse() to use_vectorfpu() and also use it for
      ARM/vfp support
    o only superficially tested for Linux (compiler compiled with -Cpvfpv6
      -Cfvfpv2 works on a Cortex-A8, no testsuite run performed -- at least
      the fpu exception handler still needs to be implemented), Darwin has
      been tested more thoroughly
  + added ARMv6 cpu type and made it default for Darwin/ARM
  + ARMv6+ implementations of atomic operations using ldrex/strex
  * don't use r9 on Darwin/ARM, as it's reserved under certain
    circumstances (don't know yet which ones)
  * changed C-test object files for ARM/Darwin to ARMv6 versions
  * check in assembler reader that regsets are not empty, because
    instructions with a regset operand have undefined behaviour in that
    case
  * fixed resultdef of tarmtypeconvnode.first_int_to_real in case of
    int64->single type conversion
  * fixed constant pool locations in case 64 bit constants are generated,
    and/or when vfp instructions with limited reach are present

  WARNING: when using VFP on an ARMv6 or later cpu, you *must* compile all
    code with -Cparmv6 (or higher), or you will get crashes. The reason is
    that storing/restoring multiple VFP registers must happen using
    different instructions on pre/post-ARMv6.

git-svn-id: trunk@14317 -
2009-12-03 22:46:30 +00:00
florian
f54365db94 * adapted more fpc-mips stuff to trunk
git-svn-id: trunk@14230 -
2009-11-20 21:13:53 +00:00
florian
0c8546f94c * more MIPS code of David Zhang integrated
git-svn-id: trunk@14228 -
2009-11-20 14:46:45 +00:00
Jonas Maebe
3a774ce66a * fixed alignment for (non-)lazy symbol sections
* converted lazy symbol directive in arm/cgcpu.pas to section, forgotten
    in r14128 (fixes mantis #15047)

git-svn-id: trunk@14135 -
2009-11-10 10:43:15 +00:00
Jonas Maebe
62c1781bea + mw_pascal calling convention support for ARM, ppc64 and x86_64: identical
to cdecl, except that all const record parameters are passed by reference
    (required for Mac OS X interfaces)

git-svn-id: trunk@14114 -
2009-11-08 13:42:11 +00:00
Jonas Maebe
559e284bd0 * merged r13762-14047 from trunk
git-svn-id: branches/objc@14048 -
2009-11-04 15:50:26 +00:00
florian
515774b864 * merged armthum branch
-- Zusammenführen der Unterschiede zwischen Projektarchiv-URLs in ».«:
U    rtl/arm/setjump.inc
A    rtl/arm/thumb2.inc
U    rtl/arm/divide.inc
A    rtl/embedded/arm/stm32f103.pp
U    rtl/inc/system.inc
U    compiler/alpha/cgcpu.pas
U    compiler/sparc/cgcpu.pas
U    compiler/i386/cgcpu.pas
U    compiler/ncgld.pas
U    compiler/powerpc/cgcpu.pas
U    compiler/avr/cgcpu.pas
U    compiler/aggas.pas
U    compiler/powerpc64/cgcpu.pas
U    compiler/x86_64/cgcpu.pas
U    compiler/cgobj.pas
U    compiler/psystem.pas
U    compiler/aasmtai.pas
U    compiler/m68k/cgcpu.pas
U    compiler/ncgutil.pas
U    compiler/rautils.pas
U    compiler/arm/raarmgas.pas
U    compiler/arm/armatts.inc
U    compiler/arm/cgcpu.pas
U    compiler/arm/armins.dat
U    compiler/arm/rgcpu.pas
U    compiler/arm/cpubase.pas
U    compiler/arm/agarmgas.pas
U    compiler/arm/cpuinfo.pas
U    compiler/arm/armop.inc
U    compiler/arm/narmadd.pas
U    compiler/arm/aoptcpu.pas
U    compiler/arm/armatt.inc
U    compiler/arm/aasmcpu.pas
U    compiler/systems/t_embed.pas
U    compiler/psub.pas
U    compiler/options.pas

git-svn-id: trunk@13801 -
2009-10-04 09:03:44 +00:00
Jonas Maebe
0c675a4039 * the objc1 unit has been renamed to objc
* the objc unit links against the Foundation instead of against the Cocoa
    framework, and inludes an interface to either the fragile or non-fragile
    obj-c run time depending on the target platform
  + support for the non-fragile Objective-C runtime/ABI, as used on Mac OS X
    for ARM (iPhone) 64 bit (PowerPC/64, x86_64) -- all these targets now
    are now also supported for the objectivec1 modeswitch
  + support for private_extern symbol bindings, required for the above
  * mark objcclasses that are declared in the implementation section of a
    unit as "hidden" (not sure what the effect is, since the Objective-C
    runtime does not seem to do anything with this flag)
  * enabled all obj-c tests for the newly supported platforms

git-svn-id: branches/objc@13763 -
2009-09-27 15:24:50 +00:00
Jonas Maebe
cc5aeb09de * fixed handling the result value of functions where the result type is
forced to something else by the compiler (internal rtl functions etc),
    necessary for the objc branch
  * fixed adding all used function result registers to the list of
    registers that may need to be saved before a function call

git-svn-id: trunk@13695 -
2009-09-12 12:21:34 +00:00
Jonas Maebe
34c985cfa6 * added register type parameter to cgsize2subreg(), as the subreg can
depend on that (and correct a number of cases where this was wrong)
  * set the correct subreg type for xmm x86_64 parameter registers
    (resolved mantis #14067)

git-svn-id: trunk@13410 -
2009-07-19 13:57:23 +00:00
florian
60169d34dc * fixed compilation of AVR compiler
git-svn-id: trunk@13342 -
2009-06-27 19:31:24 +00:00
florian
7a65b5c7a0 + added some AT91SAM7 controllers
* improved linker script for arm-embedded

git-svn-id: trunk@13292 -
2009-06-18 21:55:12 +00:00
Jonas Maebe
a6f20cdba9 * align the stack pointer to alignment.localalignmax, fixes crashes on
ARM EABI systems because of a missing 8 byte alignment (mantis
    #11595, #13391 and #13454)

git-svn-id: trunk@13030 -
2009-04-24 12:35:26 +00:00
florian
91dcb722a2 + optimization of sequential ands
git-svn-id: trunk@12806 -
2009-02-27 12:59:08 +00:00
florian
20db8dc978 * handle case tables correctly when inserting pc relative data
git-svn-id: trunk@12805 -
2009-02-27 12:58:18 +00:00
Jonas Maebe
e672ead77a * fixed class cast errors in range checking code
git-svn-id: trunk@12720 -
2009-02-08 13:07:12 +00:00
Jonas Maebe
7d459cf12a * the compiler now explicitly keeps track of the minimally guaranteed
alignment for each memory reference (mantis #12137, and
    test/packages/fcl-registry/tregistry1.pp on sparc). This also
    enables better code generation for packed records in many cases.
  o several changes were made to the compiler to minimise the chances
    of accidentally forgetting to set the alignment of memory references
    in the future:
    - reference_reset*() now has an extra alignment parameter
    - location_reset() can now only be used for non LOC_(C)REFERENCE,
      use location_reset_ref() for those (split the tloc enum so the
      compiler can catch errors using range checking)

git-svn-id: trunk@12719 -
2009-02-08 13:00:24 +00:00
Jonas Maebe
73a394bca6 * fixed class cast error
git-svn-id: trunk@12718 -
2009-02-08 12:59:31 +00:00
florian
acb06dac1b + Wp<Controllertype> support for arm and avr
git-svn-id: trunk@12664 -
2009-02-02 20:16:25 +00:00
Jonas Maebe
b1c3f76ff9 * changed the supported targets for assembler writers to a set, and
(hopefully correctly) limited all assembler writers to only the
    OSes they support (mantis #11801)

git-svn-id: trunk@12622 -
2009-01-28 15:12:43 +00:00
florian
edc58d78d5 + support for arm special registers
git-svn-id: trunk@12611 -
2009-01-26 14:22:38 +00:00
florian
c5816c500a + support for nop, msr and mrs instructions
git-svn-id: trunk@12609 -
2009-01-26 14:18:42 +00:00
Jonas Maebe
a23630260b + "weakexternal" support for imported procedures and variables.
the syntax is exactly the same as for "external", except for
    the keyword. It is currently only active for Darwin targets.
    It should also work at least for Linux targets, but only with
    the GNU assembler (which is why it is not activated there)
  + test for this functionality

git-svn-id: trunk@12009 -
2008-11-01 18:38:32 +00:00
florian
04fe88f134 * handle 64 bit parameters correctly for arm eabi
git-svn-id: trunk@11913 -
2008-10-18 13:48:57 +00:00
florian
7a4f76f262 + VFP instructions for arm
git-svn-id: trunk@11863 -
2008-10-04 19:25:34 +00:00
Jonas Maebe
5347e536c2 + support for generating non-pic darwin/arm call stubs
+ write the header for non-pic darwin/arm call stubs properly in aggas
  * r9 is not available for general use on darwin/arm according to the llvm
    code generator

git-svn-id: trunk@11862 -
2008-10-04 14:07:52 +00:00
Jonas Maebe
479d5c7aa3 * forgot inherited call in previous commit for non-darwin
git-svn-id: trunk@11855 -
2008-10-02 21:53:45 +00:00
Jonas Maebe
5f39783ec6 * moved adding of '-mfpu=softvfp' for arm/softfloat to overridden
method in TArmGNUAssembler, because it's cleaner (no ifdef) and it
    mustn't be added for darwin (which uses TArmAppleGNUAssembler)

git-svn-id: trunk@11854 -
2008-10-02 21:52:47 +00:00
Jonas Maebe
3aa600e569 + darwin/arm assembler writer
git-svn-id: trunk@11853 -
2008-10-02 21:33:16 +00:00
Jonas Maebe
afa14de20d + some generic changes preparing for darwin/arm support
git-svn-id: trunk@11849 -
2008-10-02 15:10:13 +00:00
yury
4cabbe0e39 * Fixed compiler cycling with enabled range and overflow checking.
git-svn-id: trunk@11489 -
2008-07-29 21:11:03 +00:00
florian
66e015f48c * avoid shifter constant overflow on arm when optimizing two shifter operations into one
git-svn-id: trunk@11474 -
2008-07-28 15:51:58 +00:00
florian
fe7cba52dc + support of inlined ror/rol on arm
git-svn-id: trunk@11473 -
2008-07-28 15:48:38 +00:00
florian
1afb1aa9cc + ror/rol functions
+ internal compiler support for ror/rol on i386

git-svn-id: trunk@11466 -
2008-07-27 17:12:32 +00:00
yury
a6eb251cee * Define dummy tcgarm.g_stackpointer_alloc to fix abstract warning.
* Suppressed unreachable code warnings.
* Now ARM compiler compiles without warnings and notes.

git-svn-id: trunk@11456 -
2008-07-23 13:22:36 +00:00
yury
0bcaf8845f * Fixed 'mixed signed/unsigned' warnings.
* Suppressed 2 unreachable code warnings.
* Now x86 compiler compiles without warnings and notes! It will be great to keep such state in future...

git-svn-id: trunk@11455 -
2008-07-23 13:16:46 +00:00
yury
a039dd6942 * Fixed warnings about hiding inherited method.
git-svn-id: trunk@11449 -
2008-07-23 11:51:19 +00:00
yury
bf454fad71 * Added function result for unimplemented methods to prevent warnings.
git-svn-id: trunk@11448 -
2008-07-23 11:47:03 +00:00
yury
451a290caf * Fixed 'mixed signed/unsigned' and pointer conversion warnings.
git-svn-id: trunk@11444 -
2008-07-23 11:17:27 +00:00
yury
491f0fa1d8 * Replaced all user defined warnings by TODO comments to reduce compiler noise.
git-svn-id: trunk@11443 -
2008-07-23 11:00:03 +00:00
yury
fd0ed50331 * Removed/commented more unused variables.
* Fixed some uninitialized variable warnings.

git-svn-id: trunk@11442 -
2008-07-23 10:48:53 +00:00
yury
6c6bf452ca * Fixed level 2 comment warnings.
git-svn-id: trunk@11441 -
2008-07-23 10:08:48 +00:00
yury
fcceb9cfa1 * Removed/ifdefed/commented unused local variables.
git-svn-id: trunk@11430 -
2008-07-20 23:00:31 +00:00
florian
67ef9f20ae * test for previous commit
* fixed wrapper generation for bigger offsets as well

git-svn-id: trunk@11059 -
2008-05-23 16:16:34 +00:00
florian
ea46cb4218 * take care of the maximum constant size when creating interface wrappers, resolves #10831
git-svn-id: trunk@11058 -
2008-05-23 16:02:17 +00:00
yury
60ecb64346 * Fixed loading of single floating point values from memory to register for ARM hardfloat.
git-svn-id: trunk@10826 -
2008-04-27 20:47:52 +00:00
yury
b9431c876e * More complete fix for bug #10515. Thanks to Jonas for suggestion.
* Fixed warnings in tcnvint6.pp

git-svn-id: trunk@10765 -
2008-04-23 08:22:27 +00:00
yury
88597d23c5 * Fixed tcgarm.a_load_ref_reg to load word values from location with alignment 2 using unaligned load.
git-svn-id: trunk@10754 -
2008-04-22 08:46:19 +00:00
yury
adaeb0fc73 * Strip result if inc/dec is performed in register on value less than 32-bit on ARM. (bug #10515)
* Updated tcnvint6 to test this issue.

git-svn-id: trunk@10753 -
2008-04-22 08:45:50 +00:00
yury
9222540e84 * Small optimization.
git-svn-id: trunk@10692 -
2008-04-18 11:46:39 +00:00
yury
95ea5d87dd * Fixed int to int conversion in ARM code generator.
+ Added new test to detect more bugs in int to int conversion.

git-svn-id: trunk@10691 -
2008-04-18 11:31:12 +00:00
yury
b70bf05ad5 * I hope it's proper fix for r10688.
git-svn-id: trunk@10690 -
2008-04-18 10:51:56 +00:00
yury
e71d631c24 * Fix for tw10233 for all CPUs.
git-svn-id: trunk@10688 -
2008-04-18 07:38:25 +00:00
yury
ec943198fd * Properly fill treference.alignment when variable is loaded by tcgloadnode. It allows code generator to insert unaligned handling if needed.
* Improved generic a_load_ref_reg_unaligned if ref alignment is 2.
* Improved unaligned load/store of register for ARM.
* It fixes passing records by value on ARM.
+ New test.

git-svn-id: trunk@10681 -
2008-04-16 23:01:20 +00:00
yury
771479e65c * Improved fix for bug #10233 for better Delphi compatibility and efficiency:
- Explicit typecasts like LongBool(byte_value) do not change ordinal value.
  - Explicit typecasts like ByteBool(longint_value) do not change ordinal value and can lead to data loss if longint_value is outside of ByteBool range.
  - Explicit typecasts like ByteBool(LongBool) handle type ranges correctly.
  - Updated test tw10233.pp. It is passed by Delphi as well.

git-svn-id: trunk@10672 -
2008-04-15 22:19:29 +00:00
yury
cf235145cb * Fixed a_load_reg_reg for arm.
* Fixed sign/zero-extension in second_int_to_bool for all CPUs. x86 and pppc were not affected by this bug, but I fixed it for all CPUs for consistency.
* cg/tcnvint1 is passed on arm now.

git-svn-id: trunk@10669 -
2008-04-15 20:44:27 +00:00
florian
951a202e5d * fix by Jan Bruns for #11042: improves reading of references on arm
git-svn-id: trunk@10625 -
2008-04-10 19:47:49 +00:00
florian
7ef191021f + check for location.loc<>expectloc in extdebug mode
* set expectloc properly for add nodes on arm

git-svn-id: trunk@10536 -
2008-03-23 10:18:33 +00:00
Jonas Maebe
62e66d2a56 * explicit typecasting of any ordinal type to a boolean of the same
size must happen without any mangling of the value (mantis #11027)
  * moved checking for signed-to-unsigned (or vice versa) type
    conversions in assignments from htypechk to ncnv (where there
    was already code for similar checks) and added support for
    bool_to_bool there as well

git-svn-id: trunk@10521 -
2008-03-21 14:44:58 +00:00
micha
6910b0ed40 * fix arm(eb) load/store of smaller than register sizes
git-svn-id: trunk@10500 -
2008-03-17 21:27:44 +00:00
florian
ed540dc7c1 * fixed copy&paste error in rev. 10460
git-svn-id: trunk@10462 -
2008-03-08 14:05:04 +00:00
micha
f70c24435d * fix int64 result passing on armeb
git-svn-id: trunk@10460 -
2008-03-08 13:02:33 +00:00
peter
8f239d04b6 * cleanup and simplify the set type handling
git-svn-id: trunk@10432 -
2008-03-02 17:48:27 +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
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
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
sekelsenmat
38048fd073 Small fix for symbian arm target.
git-svn-id: trunk@9376 -
2007-12-02 08:27:18 +00:00
florian
29766e5d81 + first additions for the arm eabi
git-svn-id: trunk@9157 -
2007-11-07 20:48:32 +00:00
florian
c3475dddc0 * handle case ranges properly for unsigned types with a non-zero base, resolves #10009
git-svn-id: trunk@8974 -
2007-10-28 17:06:02 +00:00
florian
1e618b499d * fixes unaligned load_ref_reg on little endian arm
git-svn-id: trunk@8972 -
2007-10-28 15:30:50 +00:00
florian
00d6a03b2c + default code now preserves mm registers
* save|restore_standard_registers => save|restore_registers

git-svn-id: trunk@8954 -
2007-10-27 12:02:28 +00:00
florian
c77267e01f * more div n^2 optimization
git-svn-id: trunk@8867 -
2007-10-20 18:02:55 +00:00
florian
c57f44d75b + div 2^n optimization for arm
git-svn-id: trunk@8864 -
2007-10-20 17:42:29 +00:00
micha
bae0251549 * fix big endian arm loading (fixes issue #8752)
git-svn-id: trunk@8862 -
2007-10-20 14:31:08 +00:00
florian
9ab1a1c550 * allow mla to take 4 operands, resolves #9461
git-svn-id: trunk@8801 -
2007-10-14 18:08:49 +00:00
florian
fa0507ec2c * fixed compilation on arm in extdebug mode
git-svn-id: trunk@8771 -
2007-10-12 16:14:49 +00:00
peter
9f0ca44c94 * new tf_smartlink_library flag
* use create_smartlink[_sections|_library] to check what to 
    do for smartlinking

git-svn-id: trunk@8715 -
2007-10-01 16:55:08 +00:00
peter
6b8aed593f * remove registers{int/mmx/fpu} from firstpass
* small cleanups of unused variables in firstpass
  * node_resources_fpu() created to get an approximation of the
    required fpu registers
  * for the moment use node_complexity in the CG until the
    node_resource_int() is created

git-svn-id: trunk@8655 -
2007-09-26 21:12:01 +00:00
florian
039b513d93 * pass classes and interfaces by value if const is used, resolves #9674
git-svn-id: trunk@8484 -
2007-09-14 19:26:09 +00:00
florian
b984b2227f * improved constant loading for arm
git-svn-id: trunk@8429 -
2007-09-11 19:28:48 +00:00
yury
3e60b4a8dd * Don't optimize (eliminate) arm fpu move instruction if it performs float type conversion. It fixes tb0519.pp on arm-linux.
git-svn-id: trunk@8059 -
2007-07-14 21:52:15 +00:00
yury
bd0cafd545 * fixed ARM stackframe optimization when float registers are used.
git-svn-id: trunk@8032 -
2007-07-12 21:55:34 +00:00
yury
1782305ae2 * Completely fixed float constants in softfloat mode when compiler was compiled in hardfloat mode on arm-linux host.
git-svn-id: trunk@8015 -
2007-07-10 21:05:12 +00:00
yury
09fa6b5893 * Fixed Abs and Sqrt in hardfloat mode on arm.
git-svn-id: trunk@7980 -
2007-07-08 08:17:32 +00:00
yury
b86574cf36 * Fixed float constants in softfloat mode when compiler was compiled in hardfloat mode on arm-linux host.
git-svn-id: trunk@7977 -
2007-07-07 19:19:49 +00:00
yury
2829f4e46f * Fixed arm optimizer bug (mantis #9209). No testsuite regressions with -O2.
* Removed unused local vars.
+ test.

git-svn-id: trunk@7970 -
2007-07-06 13:09:28 +00:00
yury
86d49c2a0c * Activated safecall support for ARM CPU.
git-svn-id: trunk@7762 -
2007-06-21 17:32:35 +00:00
yury
d1c2f41c66 * Fixed passing variant parameters by value for ARM. It fixes tw7806.pp.
git-svn-id: trunk@7758 -
2007-06-21 15:06:43 +00:00
yury
ff3bd9fa6f * fixed compilation for arm targets.
git-svn-id: trunk@7729 -
2007-06-18 23:38:54 +00:00
yury
3b7e458f02 * Properly set location of float return value if it is passed as var parameter (it is always happens for safecall functions). It fixes bugs #8523 and #8977.
+ test.

git-svn-id: trunk@7728 -
2007-06-18 23:23:46 +00:00
daniel
9adb202a92 * Rework the constexprint to allow operations from low(int64) to high(qword).
+ Some initial work on a formaldef which also carries the typinfo of a parameter.

git-svn-id: trunk@7639 -
2007-06-13 07:41:18 +00:00
florian
a3d906f1ca - removed several ;;
git-svn-id: trunk@7498 -
2007-05-28 15:59:17 +00:00
daniel
182fca72f2 * Change spill_* routines to return Taicpu instead of Tai to increase
strong typing.
  * Fix PowerPC R0 register allocation

git-svn-id: trunk@7317 -
2007-05-12 15:43:16 +00:00
florian
70b438a40f * better insert of pc relative data
git-svn-id: trunk@6975 -
2007-03-24 18:35:53 +00:00
florian
dd45cf582f * set temp. start properly when omitting stackframe
git-svn-id: trunk@6761 -
2007-03-09 20:52:04 +00:00
florian
ffd79553a0 + prefetch support for arm
git-svn-id: trunk@6561 -
2007-02-19 17:27:07 +00:00
florian
e8c48ab561 + eDSP instructions for arm
git-svn-id: trunk@6425 -
2007-02-11 15:10:27 +00:00
florian
eb8b2fb138 * be more carefull with unaligned load optimization
git-svn-id: trunk@6356 -
2007-02-07 17:43:56 +00:00
florian
a800b2a3d3 * fixed interference generation for top_local
git-svn-id: trunk@6343 -
2007-02-04 20:43:31 +00:00
florian
c5d8e53758 * last commit fixed
git-svn-id: trunk@6338 -
2007-02-04 18:50:22 +00:00
florian
3609ddc5dd * more MustBeLast fixes
* const insertation algorithm fixed

git-svn-id: trunk@6337 -
2007-02-04 18:45:43 +00:00
florian
762bd12d16 * handle embedded case jump tables correctly
git-svn-id: trunk@6333 -
2007-02-04 14:33:57 +00:00
florian
35b9bfc83e * several range check errors fixed
git-svn-id: trunk@6324 -
2007-02-03 19:36:06 +00:00
florian
8d33f640d4 * stop conditional optimization at mov pc,...
git-svn-id: trunk@6321 -
2007-02-03 17:40:32 +00:00
florian
d09295b686 * shift folding
git-svn-id: trunk@6312 -
2007-02-02 23:12:08 +00:00
florian
01b23ca896 * improved last commit
git-svn-id: trunk@6309 -
2007-02-02 22:47:29 +00:00
florian
d0b34fef46 * safe an loadaddr for simple references when generating unaligned accesses
git-svn-id: trunk@6308 -
2007-02-02 22:43:30 +00:00
florian
b16b9d5251 * don't load a spilled register between mov lr,pc mov pc,<reg>
git-svn-id: trunk@6273 -
2007-01-30 21:34:26 +00:00
florian
0fd3498892 * fixed longint -> real, was broken in 6153
git-svn-id: trunk@6257 -
2007-01-28 21:27:21 +00:00
Jonas Maebe
c866400823 + support for VMTOFFSET in assembler readers to get VMT offset of virtual
methods (mantis #8153)

git-svn-id: trunk@6168 -
2007-01-24 18:26:23 +00:00
florian
4e69739a78 * fixed dword -> single
git-svn-id: trunk@6155 -
2007-01-23 22:12:13 +00:00
florian
df44f7c231 * fixed dword -> double in fpa mode
git-svn-id: trunk@6153 -
2007-01-23 21:07:09 +00:00
florian
c16c124562 * handle pc relative offsets in ldf/stf correctly
git-svn-id: trunk@6115 -
2007-01-21 22:55:12 +00:00
Jonas Maebe
302a2a3ec2 * fixed calling qualified methods in assembler + tests for ppc/ppc64/
i386/x86_64

git-svn-id: trunk@6112 -
2007-01-21 22:16:42 +00:00
yury
36ea8ec683 * Fixed Internal error 2003042401 in tw7379 for ARM CPU.
git-svn-id: trunk@5963 -
2007-01-14 01:15:22 +00:00
Jonas Maebe
e815b923d5 * a_loadfpu_* gets two size parameters: fromsize and tosize
* fixed downsizing the precision of floating point values
  * floating point constants are now treated using only the minimal
    precision required (e.g. 2.0 is now a single, 1.1 extended etc)
    (Delphi compatible)

git-svn-id: trunk@5927 -
2007-01-12 18:33:51 +00:00
Jonas Maebe
1d96dcc50d * renamed nf_swaped to nf_swapped
git-svn-id: trunk@5818 -
2007-01-05 12:47:22 +00:00
Jonas Maebe
a23fa2e81e * moved (unfinished) routines related to writing taicpu's to ppu files
from x86/aasmcpu to aasmtai and (new) aasmsym, so that when they're
    finished they're available for all targets
  * added dummy implementation of tai_cpu_abstract.pass1 and pass2 so there
    are no more hundreds of warnings on non-x86 about constructing taicpu
    instances with abstract methods

git-svn-id: trunk@5787 -
2007-01-02 18:28:05 +00:00
yury
11daaa31f2 * fixed Internal error 200408203 in tbs/tb0258.pp for ARM.
git-svn-id: trunk@5669 -
2006-12-21 22:02:29 +00:00
yury
2a274aa510 * fixed tbs/tb0350.pp.
* removed unused local variables.

git-svn-id: trunk@5667 -
2006-12-21 21:18:38 +00:00
yury
496e19c9c2 * fixed ARM register allocation problem when additional register is used for spilling.
git-svn-id: trunk@5659 -
2006-12-21 14:18:03 +00:00
florian
fd2032dab2 + start of embedded rtl
+ feature support in the compiler

git-svn-id: trunk@5628 -
2006-12-17 18:40:36 +00:00
Legolas
96e1c482bc * compiler part of first Nintendo DS port
git-svn-id: trunk@5592 -
2006-12-14 17:32:16 +00:00
yury
c427fcf902 * fixed register to register conversion for ARM.
git-svn-id: trunk@5537 -
2006-12-03 22:01:33 +00:00
yury
96bfb7ce97 * don't destroy both r11 and r13 when copying data.
git-svn-id: trunk@5485 -
2006-11-26 13:18:27 +00:00
yury
d4335749ec * reverted r5481. That order of instructions can be executed more effectively on newer ARM CPUs.
git-svn-id: trunk@5484 -
2006-11-26 11:42:29 +00:00
florian
01a20b25a2 * don't reuse registers
git-svn-id: trunk@5483 -
2006-11-26 11:11:14 +00:00
yury
35b1014207 * more usual order of instructions.
git-svn-id: trunk@5481 -
2006-11-26 10:06:12 +00:00
florian
b77a5016ca * don't destroy r13 when copying data
git-svn-id: trunk@5470 -
2006-11-24 21:55:23 +00:00
yury
a4407d5ad2 * fixed insertpcrelativedata when case jump table is used.
git-svn-id: trunk@5468 -
2006-11-24 13:40:49 +00:00
yury
e94277d5dc * removed unneeded label.
* asm output beautification. 

git-svn-id: trunk@5467 -
2006-11-24 13:20:32 +00:00
florian
964a98edca * fixed spilling with large offsets
git-svn-id: trunk@5463 -
2006-11-23 19:49:27 +00:00
yury
70b5d41d5c * optimized case jump table generation for ARM.
git-svn-id: trunk@5458 -
2006-11-23 00:55:16 +00:00
yury
187c71ac18 * fixed and enabled case jump table generation for ARM.
git-svn-id: trunk@5446 -
2006-11-22 12:16:33 +00:00
yury
5ceef96cf3 * fixed double parameters passing and storing result for ARM in softfloat mode (by removing old hacks).
git-svn-id: trunk@5438 -
2006-11-21 21:20:24 +00:00
yury
257a76d6c8 * finally fixed case code generation for ARM.
git-svn-id: trunk@5437 -
2006-11-21 21:16:25 +00:00
florian
fbc197f27a * fixed writing of double constants on WinCE
git-svn-id: trunk@5416 -
2006-11-17 22:17:54 +00:00
yury
135c0ecfb7 * fixed passing float constants as part of "array of const" parameter for ARM.
git-svn-id: trunk@5403 -
2006-11-16 17:01:17 +00:00
yury
347af4dbe4 * fixed case code for ARM.
git-svn-id: trunk@5402 -
2006-11-16 13:07:32 +00:00
florian
3f0dfdcba4 * OP_SUB must set always the flags in case of case
git-svn-id: trunk@5400 -
2006-11-16 10:21:43 +00:00
florian
3f77637b56 * set is_jmp flag correctly
git-svn-id: trunk@5399 -
2006-11-16 09:43:58 +00:00
florian
6ad8307653 + better case code generation for arm
git-svn-id: trunk@5395 -
2006-11-15 22:44:13 +00:00
florian
1e1f711663 * instructions being already conditional can't be marked as conditional again
git-svn-id: trunk@5394 -
2006-11-15 22:42:22 +00:00
florian
84f0b62f93 * cond. instruction optimization enabled
git-svn-id: trunk@5393 -
2006-11-15 21:59:29 +00:00
florian
4010d66c2c * arm cond. instruction support
git-svn-id: trunk@5387 -
2006-11-14 22:37:22 +00:00
yury
87d5058dec * fix arm-wince exception handling.
git-svn-id: trunk@5375 -
2006-11-14 16:49:02 +00:00
yury
8abe2d365e * Implemented stackframe optimization for ARM CPU.
git-svn-id: trunk@5374 -
2006-11-14 16:18:49 +00:00
yury
ba53db3b5d * ARM PC relative references optimization.
git-svn-id: trunk@5368 -
2006-11-14 09:31:17 +00:00
florian
4cbb67aa00 * some fpu emulation code from arm to generic code generator moved
* several m68k fixes

git-svn-id: trunk@5218 -
2006-11-04 10:23:35 +00:00
peter
658c46b903 * remove tdictionary and tindexarray
* symtables based on TFPHashObjectList and TFPObjectList
  * rename torddef.typ to torddef.ordtype
  * rename tfloatdef.typ to tfloatdef.floattype
  * rename tdef.deftype to tdef.typ
  * remove obsolete browser code, browcol is kept so the ide
    can still be compiled

git-svn-id: trunk@5192 -
2006-11-03 00:30:30 +00:00
peter
9eb07499bf * fix non-x86 for iasmop
git-svn-id: trunk@5151 -
2006-11-01 16:23:43 +00:00
florian
ef7bd58c54 * germanism removed (aktfilepos -> current_filepos)
git-svn-id: trunk@5099 -
2006-10-30 22:37:31 +00:00
florian
85d63d9fa9 * settings refactored
git-svn-id: trunk@5094 -
2006-10-30 18:02:58 +00:00
florian
922de0bc8d * fixed wrong load_ref_ref
git-svn-id: trunk@5092 -
2006-10-30 11:48:37 +00:00
florian
e9a1dff46a * fixed most calling convention trouble on arm-linux
git-svn-id: trunk@5091 -
2006-10-30 10:45:26 +00:00
florian
293638230a * cleanedup cpupara
git-svn-id: trunk@5087 -
2006-10-30 09:08:23 +00:00
florian
5603955795 * fixed passing of floats, broken by one of the previous commits
git-svn-id: trunk@5085 -
2006-10-30 08:38:38 +00:00
florian
797c8de846 * fix structure parameter passing
git-svn-id: trunk@5083 -
2006-10-30 08:04:45 +00:00
peter
3078a1927f * remove ttype
* rename old ttype variables *type to *def
  * rename resulttypepass to pass_typecheck
  * rename pass_2 to pass_generate_code

git-svn-id: trunk@5077 -
2006-10-29 22:19:39 +00:00
florian
67aa148602 * fixed softfpu support
+ softfpu enabled for arm-gba

git-svn-id: trunk@4939 -
2006-10-15 21:31:27 +00:00
florian
2a54d957b2 * fixed two small errors
* supported_optimizerswitches now takes generic flags also into account

git-svn-id: trunk@4865 -
2006-10-11 21:14:47 +00:00
florian
a61abb25cb * reorganized optimizer switch sets
git-svn-id: trunk@4862 -
2006-10-11 18:16:10 +00:00
florian
e8d5dc4ab2 * tailrecursion optimization enabled for for sparc, i386, x86-64 and arm
git-svn-id: trunk@4860 -
2006-10-11 16:34:28 +00:00
florian
67ba76f090 * several arm fixes
git-svn-id: trunk@4742 -
2006-09-27 21:05:05 +00:00
florian
e08bf34689 * stack page initialization disabled, not necessary according to Yury Sidorov
git-svn-id: trunk@4539 -
2006-09-02 20:43:59 +00:00
florian
7145eeb4b9 * bugs in wince stack initialization fixed
git-svn-id: trunk@4517 -
2006-08-29 19:32:40 +00:00
florian
e08a24562c * experimental wince stack initialization fix
git-svn-id: trunk@4516 -
2006-08-29 16:01:52 +00:00
florian
1f032375c3 * improved template with help from Mattias Gaertner
git-svn-id: trunk@4515 -
2006-08-28 20:29:04 +00:00
florian
049312ced8 * first try to make a lazarus template project
git-svn-id: trunk@4514 -
2006-08-28 12:26:11 +00:00
florian
e0955aea59 - removed unnecessary array
git-svn-id: trunk@4253 -
2006-07-18 20:45:41 +00:00
Jonas Maebe
90cacb4cf5 * changed result type of dwarf_reg from byte to shortint to avoid
warning about comparison which can never be true

git-svn-id: trunk@4183 -
2006-07-14 17:25:16 +00:00
yury
0018d7b920 * final fix for overflow checking for ARM.
git-svn-id: trunk@4103 -
2006-07-06 18:54:19 +00:00
yury
0c396ad3da * proper fix for rev. 4097.
git-svn-id: trunk@4099 -
2006-07-06 12:23:29 +00:00
yury
76921030e9 * fixed bug #6079 for ARM CPU.
git-svn-id: trunk@4097 -
2006-07-06 10:27:23 +00:00
florian
bbc42e8503 * made ie unique
git-svn-id: trunk@3737 -
2006-05-29 19:50:12 +00:00
florian
86d9e04409 * method pointers are now passed by value, fixes #5736
git-svn-id: trunk@3691 -
2006-05-27 08:52:05 +00:00
florian
30e7d87c11 * fixed loading of floating point constants
git-svn-id: trunk@3667 -
2006-05-25 09:57:07 +00:00
florian
2ddd617971 * fixed stm/ldm for usage with large temp. areas
git-svn-id: trunk@3633 -
2006-05-22 21:00:55 +00:00
florian
d9dfcfa402 * fixed reading of shifter op in mov instructions, fixes bug #4722
git-svn-id: trunk@3528 -
2006-05-14 16:28:16 +00:00
florian
8bd674af24 * another patch from Roozbeh GHolizadeh
* improved concatcopy code generation
  * improved constant loading
  * improved multiplication code generation

git-svn-id: trunk@3471 -
2006-05-10 20:07:29 +00:00
florian
fa03ab8fe5 * fixed arm compiler by adding a_call_ref
git-svn-id: trunk@3416 -
2006-05-03 13:53:40 +00:00
florian
09ad199450 * cleanup and bug fixing of unaligned data handling code by Roozbeh GHolizadeh
git-svn-id: trunk@3377 -
2006-04-30 08:07:29 +00:00
florian
13493a5355 * fixed copying of unaligned value parameters
git-svn-id: trunk@3369 -
2006-04-29 20:13:57 +00:00
florian
053bff4295 + improved concatcopy from Roozbeh GHolizadeh
git-svn-id: trunk@3355 -
2006-04-29 13:12:48 +00:00
florian
0780616dee + unaligned load/store support from Roozbeh GHolizadeh
git-svn-id: trunk@3351 -
2006-04-29 11:44:44 +00:00
florian
f073b1288d * avoid crash when multiple references to one text symbol entry are used
git-svn-id: trunk@3339 -
2006-04-26 18:46:38 +00:00
florian
6c3ef12cfb * fixed internal error with int64 comparisations
git-svn-id: trunk@3337 -
2006-04-26 18:12:22 +00:00
florian
a25337d9ca + op_reg_reg_reg_shifterop
git-svn-id: trunk@3330 -
2006-04-25 18:50:19 +00:00
peter
ecdb5df2d6 * fix alignment of tdoublearray by using a variant record
git-svn-id: trunk@3071 -
2006-03-29 06:40:47 +00:00
peter
0ec2921bbe * split newasmsymbol to refasmsymbol and defineasmsymbol
git-svn-id: trunk@3057 -
2006-03-27 11:45:18 +00:00
peter
870be04a3f * use dwarf_reg()
git-svn-id: trunk@3046 -
2006-03-26 20:15:32 +00:00
florian
1b5e2b67b1 * compilation fixed
git-svn-id: trunk@2947 -
2006-03-17 21:16:15 +00:00
Jonas Maebe
8a6ebdf274 - disabled loop unrolling for level 3 optimizations since it only causes
crashes (and even if it didn't, on its own it mainly causes code
    bloat)

git-svn-id: trunk@2941 -
2006-03-17 17:42:39 +00:00
peter
b7fe6797bf Merged revisions 2921-2922,2925 via svnmerge from
http://svn.freepascal.org/svn/fpc/branches/linker/compiler

........
r2921 | peter | 2006-03-15 08:35:00 +0100 (Wed, 15 Mar 2006) | 2 lines

  * pass ObjectWriter to ObjectOuput

........
r2922 | peter | 2006-03-15 12:40:30 +0100 (Wed, 15 Mar 2006) | 2 lines

  * refactor asmdata

........
r2925 | peter | 2006-03-15 16:09:39 +0100 (Wed, 15 Mar 2006) | 3 lines

  * add cfi to asmdata
  * move asmlist, asmcfi, asmdata to own unit

........

git-svn-id: trunk@2932 -
2006-03-16 08:52:22 +00:00
peter
2888a21593 * list supported optimization options in -i
* support $OPTIMIZATION and $O+

git-svn-id: trunk@2904 -
2006-03-13 11:17:56 +00:00
peter
b6e35a200e * rewrite of optimizer options
git-svn-id: trunk@2901 -
2006-03-13 09:05:50 +00:00
Jonas Maebe
9de2847865 + support for passing parameters via pre-allocated stack space on i386
(override/adjust cgutils.use_fixed_stack to change conditions where
     this is done, currently only activated for darwin-i386)
  * make sure the stack is always aligned to 16 bytes on darwin-i386

git-svn-id: trunk@2840 -
2006-03-10 19:59:44 +00:00
Jonas Maebe
ba6f1e4990 * factered WriteInstruction out of TGNUAssembler into its own class
* put Apple-specific GNU assembler stuff in its own class
  + darwin/x86 support to the assembler writer

git-svn-id: trunk@2818 -
2006-03-09 14:59:04 +00:00
florian
4443ce0d2a * typo fixed
git-svn-id: trunk@2785 -
2006-03-06 10:33:50 +00:00
Jonas Maebe
f6ad9bea87 * marked resetpass[12] override
git-svn-id: trunk@2784 -
2006-03-06 10:03:45 +00:00
peter
f1976eda5c Merged revisions 2782 via svnmerge from
http://svn.freepascal.org/svn/fpc/branches/linker/compiler

........
r2782 | peter | 2006-03-06 10:59:35 +0100 (Mon, 06 Mar 2006) | 2 lines

  * fix arm compile

........

git-svn-id: trunk@2783 -
2006-03-06 10:00:14 +00:00
peter
785550d7e3 Merged revisions 2669,2673,2677,2683,2696,2699-2702,2704,2708,2712-2715,2718,2722-2723,2728-2730,2740,2769 via svnmerge from
svn+ssh://peter@www.freepascal.org/FPC/svn/fpc/branches/linker/compiler

........
r2669 | peter | 2006-02-23 09:31:21 +0100 (Thu, 23 Feb 2006) | 2 lines

  * add compiler dir

........
r2673 | peter | 2006-02-23 17:08:56 +0100 (Thu, 23 Feb 2006) | 2 lines

  * enabled more code

........
r2677 | peter | 2006-02-24 17:46:29 +0100 (Fri, 24 Feb 2006) | 2 lines

  * pe stub and headers

........
r2683 | peter | 2006-02-25 23:13:24 +0100 (Sat, 25 Feb 2006) | 2 lines

  * section options cleanup

........
r2696 | peter | 2006-02-26 20:27:41 +0100 (Sun, 26 Feb 2006) | 2 lines

  * fixed typecasts

........
r2699 | peter | 2006-02-26 23:04:32 +0100 (Sun, 26 Feb 2006) | 2 lines

  * simple linking works

........
r2700 | peter | 2006-02-27 09:44:50 +0100 (Mon, 27 Feb 2006) | 2 lines

  * internal linker script

........
r2701 | peter | 2006-02-27 12:05:12 +0100 (Mon, 27 Feb 2006) | 2 lines

  * make elf working again

........
r2702 | peter | 2006-02-27 14:04:43 +0100 (Mon, 27 Feb 2006) | 3 lines

  * disable dwarf for smartlinking with .a
  * fix section start in new .a file

........
r2704 | peter | 2006-02-27 18:30:43 +0100 (Mon, 27 Feb 2006) | 2 lines

  * stab section fixes

........
r2708 | peter | 2006-02-28 19:29:17 +0100 (Tue, 28 Feb 2006) | 2 lines

  * basic work to merge stabs sections

........
r2712 | peter | 2006-02-28 23:17:48 +0100 (Tue, 28 Feb 2006) | 2 lines

  * unload tmodules before linking

........
r2713 | peter | 2006-02-28 23:18:51 +0100 (Tue, 28 Feb 2006) | 2 lines

  * fixed stabs linking

........
r2714 | peter | 2006-02-28 23:19:19 +0100 (Tue, 28 Feb 2006) | 2 lines

  * show code and data size

........
r2715 | peter | 2006-02-28 23:25:35 +0100 (Tue, 28 Feb 2006) | 2 lines

  * unload .stabs from objdata after it is merged

........
r2718 | peter | 2006-03-01 12:24:38 +0100 (Wed, 01 Mar 2006) | 3 lines

  * memsize/datasize cleanup
  * check for exports/resources when adding module to linker

........
r2722 | peter | 2006-03-03 09:12:20 +0100 (Fri, 03 Mar 2006) | 2 lines

  * new TObjSymbol splitted from TAsmSymbol

........
r2723 | peter | 2006-03-03 14:08:55 +0100 (Fri, 03 Mar 2006) | 2 lines

  * coff fixes after recent objsymbol changes

........
r2728 | peter | 2006-03-03 22:43:04 +0100 (Fri, 03 Mar 2006) | 2 lines

  * fixed coff writer

........
r2729 | peter | 2006-03-04 01:10:32 +0100 (Sat, 04 Mar 2006) | 2 lines

  * fix read-only opening

........
r2730 | peter | 2006-03-04 01:11:16 +0100 (Sat, 04 Mar 2006) | 2 lines

  * Read edata from DLLs, basic work

........
r2740 | peter | 2006-03-04 21:13:43 +0100 (Sat, 04 Mar 2006) | 3 lines

  * deletedef added
  * don't remove defs from index when we are already clearing everything

........
r2769 | peter | 2006-03-05 21:42:33 +0100 (Sun, 05 Mar 2006) | 4 lines

  * moved TObj classes to ogbase
  * ObjSection.SymbolRefs and SymbolDefines list
  * DLL importing

........

git-svn-id: trunk@2771 -
2006-03-05 21:10:37 +00:00
peter
54d4e9e4b9 * palmos patch from mazen
git-svn-id: trunk@2400 -
2006-02-02 07:12:43 +00:00
florian
dae84f282f * fixed handling of doubles in softemu mode if they are split between register and memory
git-svn-id: trunk@2047 -
2005-12-24 17:43:57 +00:00
florian
12a1449884 * ldf*/stf* can handle only offsets with max. +/- 1020, so generate never a pc relative symbol
git-svn-id: trunk@1649 -
2005-11-04 23:56:06 +00:00
florian
cf3c9bdcad * a_jmp_always fixed, it doesn't generate a new symbol anymore
git-svn-id: trunk@1534 -
2005-10-19 14:38:30 +00:00
florian
0308048768 * fixed compilation
git-svn-id: trunk@1418 -
2005-10-16 14:12:30 +00:00
Jonas Maebe
ab3bc45fa4 * cpu-specific overrides of optimizer methods now get called
+ first simple rlwinm optimization for ppc

git-svn-id: trunk@1320 -
2005-10-07 21:44:00 +00:00
florian
5efee639fa * fixed result registers for reals when using softfloat mode
git-svn-id: trunk@1194 -
2005-09-25 17:44:24 +00:00
florian
faa5630fab * forgot to add file: should have been added with r1176
git-svn-id: trunk@1179 -
2005-09-24 17:44:45 +00:00
florian
c67502ac2c * real consts are now stored in text segment so they can be easier accessed
git-svn-id: trunk@1176 -
2005-09-24 16:11:49 +00:00
florian
5a2b5a50a4 * data order for doubles in int registers on wince fixed
git-svn-id: trunk@1171 -
2005-09-24 09:28:55 +00:00
peter
a3ab2053c9 * support multiple asmlabel types, renamed getlabel to
getjumplabel and added type para to getlabel for specific types
  * moved lineinfo generation from assemble and aggas to dbgstabs

git-svn-id: trunk@1120 -
2005-09-18 21:16:10 +00:00
peter
fdc4925fcd * basic framework for debuginfo class added
git-svn-id: trunk@1084 -
2005-09-15 08:34:51 +00:00
florian
95dc2eba5f * basic operand matching works
+ skeleton for pass 2 implemented

git-svn-id: trunk@1075 -
2005-09-11 20:53:16 +00:00
florian
6ad3930a5d * fixed broken powerpc compilation
* fixed imm24 constant matching on the arm

git-svn-id: trunk@1074 -
2005-09-11 16:13:55 +00:00
florian
d280ed6e8b * continued to work on arm binary writer, started to fix operand matching
git-svn-id: trunk@1073 -
2005-09-11 10:01:54 +00:00
florian
caecabf7ba + more arm assembler stuff
git-svn-id: trunk@1070 -
2005-09-10 09:30:39 +00:00
florian
e7e12f0f31 + some more arm binary writer stuff, this is mainly a transfer commit
git-svn-id: trunk@1068 -
2005-09-09 16:12:19 +00:00
florian
9452e2a91f + added all used instructions to armins.dat
* first clean up of armins.dat

git-svn-id: trunk@1065 -
2005-09-08 22:08:31 +00:00
florian
14fca113bf * basic framework for integrated arm assembler
git-svn-id: trunk@1061 -
2005-09-07 21:34:25 +00:00
florian
a8f2d702a7 * fixed code generation for sqrt and sqr in softfloat mode
git-svn-id: trunk@1038 -
2005-09-02 12:31:50 +00:00
florian
609f35b34c * fixed missing offset assignment
git-svn-id: trunk@984 -
2005-08-30 08:59:23 +00:00
florian
fea7d1df10 * fixed passing of float in softfloat mode on the stack
git-svn-id: trunk@978 -
2005-08-29 20:39:35 +00:00
florian
a53c9e2666 * fixed stupid copy/paste which turned softfloat always off
* fixed wince softfloat compiler proc. to be correctly named also when used outside the system unit

git-svn-id: trunk@966 -
2005-08-28 21:08:23 +00:00
florian
adb193497d + softfloat support for wince
* more units are build for wince

git-svn-id: trunk@959 -
2005-08-28 12:40:43 +00:00
florian
169688f198 * compiler part of first gba port
git-svn-id: trunk@937 -
2005-08-24 18:47:08 +00:00
florian
804207239d *c <int64>:=-<longint> fixed (bug 4253)
git-svn-id: trunk@796 -
2005-08-05 19:00:30 +00:00
florian
c15f720867 * fixed passing of floats for cdecl procedures/functions
git-svn-id: trunk@726 -
2005-07-21 20:12:28 +00:00
Jonas Maebe
8bc4e0a32f * inline and compilerproc are now procoptions instead of proccall types
(so both can be combined with each other, as well as with other calling
     conventions)
  * defined COMPPROCINLINEFIXED so SYSTEMINLINE is again activated

git-svn-id: trunk@658 -
2005-07-18 15:27:14 +00:00
florian
94b97e8898 * loading of references with small offsets fixed
git-svn-id: trunk@575 -
2005-07-03 16:27:11 +00:00