summaryrefslogtreecommitdiff
path: root/compiler/arm
Commit message (Collapse)AuthorAgeFilesLines
* * converted register_maybe_adjust_setbase() to the high level code generatorjonas2015-12-051-2/+2
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@32591 3ad0048d-3df7-0310-abae-a5850022a9f2
* Added a bunch of new and fixed embedded controller units. From Michael Ring.laksen2015-11-211-14/+226
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@32386 3ad0048d-3df7-0310-abae-a5850022a9f2
* * support marking defs created via the getreusable*() class methods asjonas2015-11-041-5/+5
| | | | | | | | | | | | | | | "don't free even if not registered"; use for defs that may not be written to a ppu file, but that must nevertheless survive the compilation of the current module * mark all defs created for para locations as "don't free even if not registered", because we don't discard and recalculate all para locations after a module has been compiled (since that's not needed) o solves issues if the paralocations for a routine in the interface of unit A are calculated while the implementation of unit B gets compiled, and a new reusable type is allocated at that point which is not used anywhere else (after r32160) git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@32235 3ad0048d-3df7-0310-abae-a5850022a9f2
* Most if not all instructions for thumb use only 2 operand rw forms. Changed ↵laksen2015-10-201-81/+168
| | | | | | get_oper_type to match that. It was previously creating bad spilling. git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@32100 3ad0048d-3df7-0310-abae-a5850022a9f2
* + added support for using Clang as an assembler, and make it the defaultjonas2015-09-251-0/+15
| | | | | | | | | | | | | | | | | for all non-ppc(32/64) Darwin platforms o pass the macosx-version-min/iphoneos-version-min to clang as an assembler, so that it properly sets this information starting with Xcode 7 (solves errors when targeting the iOS simulator, and warnings about object files being compiled for a different OS X version when targeting (Mac) OS X) o the old assembler is still selectable via -Aas-darwin (required with Xcode 3.1.x and older) o since the first Xcode version that shipped with Clang is Xcode 3.2, which is available for Mac OS X 10.6, most users should not encounter any issues with the new default (in fact, it fixes some tests for x86 because Clang supports some instructions that "as" doesn't). Clang does not support Stabs however, so -gs does require the use of -Aas-darwin git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31830 3ad0048d-3df7-0310-abae-a5850022a9f2
* * changed idtext of as_darwin to AS-DARWIN, so it can be explicitlyjonas2015-09-241-1/+1
| | | | | | selected via -Aas-darwin (since it compares uppercased strings) git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31808 3ad0048d-3df7-0310-abae-a5850022a9f2
* - reverted r31806, it breaks building on non-Darwin (mantis #28716)jonas2015-09-241-2/+2
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31807 3ad0048d-3df7-0310-abae-a5850022a9f2
* - removed as_darwin, since there is no difference with as_gas (there is nojonas2015-09-231-2/+2
| | | | | | | | | | | | GNU as from binutils for Darwin, and Apple's "as" is based on an old version of GNU as) o this will not cause any backward compatibility problems, as the previous identifier for as_darwin was "AS-Darwin" and the compiler compared the uppercase value of the -A parameter to the identifier, so it was not explicitly selectable earlier. The new name is "AS", so it is explicitly selectable via -Aas like on other platforms. git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31806 3ad0048d-3df7-0310-abae-a5850022a9f2
* * always use unified assembler syntax on Darwin (required by Xcode 7+)jonas2015-09-231-0/+10
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31805 3ad0048d-3df7-0310-abae-a5850022a9f2
* * also support unified syntax for non-thumb2 (not yet activatable/usable)jonas2015-09-231-3/+9
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31804 3ad0048d-3df7-0310-abae-a5850022a9f2
* * Removed a leftover of my code. It is not needed anymore.yury2015-09-181-6/+0
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31755 3ad0048d-3df7-0310-abae-a5850022a9f2
* * Removed lot of unused vars.yury2015-09-177-17/+3
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31732 3ad0048d-3df7-0310-abae-a5850022a9f2
* * Removed unused vars.yury2015-09-171-24/+6
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31731 3ad0048d-3df7-0310-abae-a5850022a9f2
* * ARM: I hope this is a final proper fix for GOT initialization. + Test.yury2015-09-171-7/+19
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31730 3ad0048d-3df7-0310-abae-a5850022a9f2
* * ARM: Fixed GOT init when optimization is off.yury2015-09-161-13/+8
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31728 3ad0048d-3df7-0310-abae-a5850022a9f2
* * ARM: Do not use R9 as a fixed GOT register.yury2015-09-162-6/+17
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31712 3ad0048d-3df7-0310-abae-a5850022a9f2
* * Fixed instruction re-scheduler for ARM in case of PIC.yury2015-09-161-4/+7
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31706 3ad0048d-3df7-0310-abae-a5850022a9f2
* * Big fix for ARM GOT support to make it work:yury2015-09-142-5/+15
| | | | | | | | - Fixed access to symbols with offset. - Always use register R9 for GOT pointer to prevent bugs when free register limit is reached in a function. - GOT is not needed for function calls by name. git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31681 3ad0048d-3df7-0310-abae-a5850022a9f2
* * store a pointer to the used tasminfo record in every assembler writer, sojonas2015-09-121-8/+7
| | | | | | | | that we can use assembler writers with different conventions from the currently set target_asm (e.g. an x86 assembler writer for inline assembly in LLVM IR) git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31628 3ad0048d-3df7-0310-abae-a5850022a9f2
* * factored out the output file handling (mostly writing data) from thejonas2015-09-121-2/+2
| | | | | | | external assembler writer, so we can reuse the archtecture-specific writers to write inline assembly in LLVM IR files git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31625 3ad0048d-3df7-0310-abae-a5850022a9f2
* Moved tcontrollerdatatype out into cpuinfo.laksen2015-09-071-267/+274
| | | | | | Added cputype and fputype info to tcontrollerdatatype arrays. git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31574 3ad0048d-3df7-0310-abae-a5850022a9f2
* * take care of limited offsets of stf/ldf, resolves issue #23620florian2015-09-071-1/+3
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31572 3ad0048d-3df7-0310-abae-a5850022a9f2
* Add missing prefix for VCMP for FPv4_S16.laksen2015-09-061-2/+2
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31562 3ad0048d-3df7-0310-abae-a5850022a9f2
* Fix ARMv3/ARMv2A support.laksen2015-09-063-39/+114
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31561 3ad0048d-3df7-0310-abae-a5850022a9f2
* * disabled ARM-specific code for smallset in-operations on big endian targets,jonas2015-08-311-2/+11
| | | | | | | as it's also little endian-specific (mantis #28592) git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31466 3ad0048d-3df7-0310-abae-a5850022a9f2
* * replaced current_procinfo.currtrue/falselabel with storing the true/falsejonas2015-08-272-19/+15
| | | | | | | | | labels of LOC_JUMP in the node's location. This generates some extra jumps for short circuit boolean and/or-expressions if optimizations are off, but with optimisations enabled the generated code is the same (except for JVM because the jump threading optimisation isn't enabled there yet). git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31431 3ad0048d-3df7-0310-abae-a5850022a9f2
* * use handle_locjump() instead of local inlined versionjonas2015-08-271-19/+1
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31430 3ad0048d-3df7-0310-abae-a5850022a9f2
* Added STM32F7xx controller units and types.laksen2015-07-311-0/+14
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31257 3ad0048d-3df7-0310-abae-a5850022a9f2
* * changed getarraydef() into a tarraydef.getreusable() class methodjonas2015-06-231-2/+2
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31147 3ad0048d-3df7-0310-abae-a5850022a9f2
* * changed getpointerdef() into a tpointerdef.getreusable() class methodjonas2015-06-221-3/+3
| | | | | | o allows removing the ugly x86 hacks git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@31144 3ad0048d-3df7-0310-abae-a5850022a9f2
* Added Freescale MK20D7 controller support.laksen2015-05-281-0/+10
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30925 3ad0048d-3df7-0310-abae-a5850022a9f2
* * implemented r30870 for all platforms: pass dyn. array parameters like ↵florian2015-05-171-1/+4
| | | | | | pointer parameters so typically in a register git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30878 3ad0048d-3df7-0310-abae-a5850022a9f2
* ARMv6M was missing alignments for jumptableslaksen2015-05-031-0/+1
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30775 3ad0048d-3df7-0310-abae-a5850022a9f2
* * correctly handle LOC_SUBSETREG,LOC_CSUBSETREG,LOC_SUBSETREF,LOC_CSUBSETREF ↵florian2015-05-021-0/+4
| | | | | | in second_int_to_bool, resolves issue #28007 git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30765 3ad0048d-3df7-0310-abae-a5850022a9f2
* o fixes handling of iso i/o parameters/program parameters:florian2015-05-011-0/+5
| | | | | | | * explicit reset is needed * variable must be declared again git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30757 3ad0048d-3df7-0310-abae-a5850022a9f2
* Workaround for IE 20060521 when building the ARM compilerlaksen2015-04-261-1/+6
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30733 3ad0048d-3df7-0310-abae-a5850022a9f2
* Add initial support for STM32F429 corelaksen2015-04-141-0/+8
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30599 3ad0048d-3df7-0310-abae-a5850022a9f2
* Fix spilling_get_operation_type for MRS and MSR instructionslaksen2015-04-141-1/+2
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30590 3ad0048d-3df7-0310-abae-a5850022a9f2
* * don't give an internalerror when trying to prefetch a regvar or evenjonas2015-04-081-1/+1
| | | | | | | | something without a location at all; it's a hint/optional operation, so if there's nothing to prefetch just don't do anything (mantis #27811) git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30502 3ad0048d-3df7-0310-abae-a5850022a9f2
* + added tasmlist parameter to getintparaloc() (needed for llvm)jonas2015-04-042-5/+6
| | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30429 3ad0048d-3df7-0310-abae-a5850022a9f2
* * synchronised with trunk till r30345jonas2015-03-284-7/+24
|\ | | | | | | git-svn-id: http://svn.freepascal.org/svn/fpc/branches/hlcgllvm@30349 3ad0048d-3df7-0310-abae-a5850022a9f2
| * ARMv7M supports UMULL.laksen2015-03-222-3/+3
| | | | | | | | | | | | Fix missing conflicts for multiplication instructions for >=ARMv6. git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30276 3ad0048d-3df7-0310-abae-a5850022a9f2
| * Fix issue in is_thumb32_imm. imm<11:10> have to be non-zero meaning the ↵laksen2015-03-211-1/+1
| | | | | | | | | | | | rotate only works from 8 to 31. Caused 0x8000001F to be mistaken for a valid immediate. git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30266 3ad0048d-3df7-0310-abae-a5850022a9f2
| * Add workaround for ARM thumb when using GAS.laksen2015-03-171-3/+20
| | | | | | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30254 3ad0048d-3df7-0310-abae-a5850022a9f2
* | * renamed getdatalabel() to getglobaldatalabeljonas2015-03-272-2/+2
| | | | | | | | git-svn-id: http://svn.freepascal.org/svn/fpc/branches/hlcgllvm@30336 3ad0048d-3df7-0310-abae-a5850022a9f2
* | * synchronised with trunk till r30240jonas2015-03-1529-1951/+11406
|\ \ | |/ | | | | git-svn-id: http://svn.freepascal.org/svn/fpc/branches/hlcgllvm@30241 3ad0048d-3df7-0310-abae-a5850022a9f2
| * Fix selection of LDR/STR instructions in thumb mode. Most forms don't ↵laksen2015-03-151-5/+45
| | | | | | | | | | | | | | | | support pre or post indexing. Fix emission of offsets. git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30234 3ad0048d-3df7-0310-abae-a5850022a9f2
| * * merged ait_set and ait_thumb_set into a single tai classjonas2015-03-141-1/+1
| | | | | | | | | | | | (tai_symbolpair) git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30197 3ad0048d-3df7-0310-abae-a5850022a9f2
| * Fixed internal error in GOT related code for ARM internal assembler.laksen2015-03-141-0/+2
| | | | | | | | git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30188 3ad0048d-3df7-0310-abae-a5850022a9f2
| * Add most pre-UAL VFP instruction forms.laksen2015-03-146-27/+1094
| | | | | | | | | | | | Add fused mac instructions for VFPv4. git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@30187 3ad0048d-3df7-0310-abae-a5850022a9f2