Commit Graph

44866 Commits

Author SHA1 Message Date
Jonas Maebe
c6ba0bb6fb + support for targets that require by-reference value parameters to be
be copied on the caller instead of callee side
   o mark Darwin/Aarch64 as such a target (any AArch64 target will be like
     that normally, as its ABI specifies this behaviour)
   o don't mark by-reference value parameters on such targets as
     vo_has_local_copy, since a) they don't have one (the copy is on the
     caller side), and b) this ensures that all code handling such
     parameters automatically knows that they are still by reference
     after the init code has run
   o when making the copies on the caller side, don't increase the
     reference count for managed types except for variants, just like
     is done when making the copies on the callee side. This is because
     the reference count increasing code on the callee side only runs
     for non-assembler functions, and we cannot know 100% certain on the
     caller side whether the called function is assembler or not (e.g. in
     case of externally declared functions)
   o maybe over time we can reuse the Pascal code in
     tcallparanode.copy_value_by_ref_para to replace the equivalent code
     in hlcgobj and ncgutil also on the caller side for other targets

git-svn-id: trunk@29870 -
2015-02-23 22:50:20 +00:00
Jonas Maebe
bedcc5cbb1 + Darwin/AArch64 system identifier
git-svn-id: trunk@29869 -
2015-02-23 22:50:16 +00:00
Jonas Maebe
0af4f3e3fb + aarch64 math nodes implementation
git-svn-id: trunk@29868 -
2015-02-23 22:50:13 +00:00
Jonas Maebe
4aeb22f7f4 + initial implementation of aarch64 type conversion nodes
git-svn-id: trunk@29867 -
2015-02-23 22:50:10 +00:00
Jonas Maebe
71ae8015da + initial implementation of aarch64 add nodes
git-svn-id: trunk@29866 -
2015-02-23 22:50:07 +00:00
Jonas Maebe
8a444ed96a + initial implementation of aarch64 inline nodes
git-svn-id: trunk@29865 -
2015-02-23 22:50:04 +00:00
Jonas Maebe
7fa414f7f1 + initial implementation of aarch64 register allocator
git-svn-id: trunk@29864 -
2015-02-23 22:50:01 +00:00
Jonas Maebe
1c8eb58792 * adapted copyright statement
git-svn-id: trunk@29863 -
2015-02-23 22:49:58 +00:00
Jonas Maebe
2214966f26 * implemented parameter passing and function result locations
git-svn-id: trunk@29862 -
2015-02-23 22:49:55 +00:00
Jonas Maebe
edef6b2a0a + AArch64 Darwin abi declaration
git-svn-id: trunk@29861 -
2015-02-23 22:49:52 +00:00
Jonas Maebe
7fbc44471b * made getparaloc ABI-compliant
git-svn-id: trunk@29860 -
2015-02-23 22:49:49 +00:00
Jonas Maebe
232599b429 * made push_addr_param() ABI-compliant
git-svn-id: trunk@29859 -
2015-02-23 22:49:46 +00:00
Jonas Maebe
e2c30eb0a1 * return base type from is_hfa()
git-svn-id: trunk@29858 -
2015-02-23 22:49:43 +00:00
Jonas Maebe
e7bbb31080 * implemented ret_in_param() according to the ABI
git-svn-id: trunk@29857 -
2015-02-23 22:49:40 +00:00
Jonas Maebe
4562731ad9 - removed custom getintparaloc()
git-svn-id: trunk@29856 -
2015-02-23 22:49:37 +00:00
Jonas Maebe
60768fcffe + implemented is_hfa()
git-svn-id: trunk@29855 -
2015-02-23 22:49:34 +00:00
Jonas Maebe
c244daaafb * don't initialize the fpu register allocator, it is/must not be used on
AArch64

git-svn-id: trunk@29854 -
2015-02-23 22:49:31 +00:00
Jonas Maebe
ab186f7892 + initial implementation of aarch64 code generator
git-svn-id: trunk@29853 -
2015-02-23 22:49:28 +00:00
Jonas Maebe
01a6777530 * simplified flag_2_cond array range
git-svn-id: trunk@29852 -
2015-02-23 22:49:25 +00:00
Jonas Maebe
51a094a917 + FP/LR register aliases
git-svn-id: trunk@29851 -
2015-02-23 22:49:22 +00:00
Jonas Maebe
e6d7c6a62a + is_shifter_const() function to determine whether a constant can be encoded
as an immediate operand for a logical operation

git-svn-id: trunk@29850 -
2015-02-23 22:49:19 +00:00
Jonas Maebe
d23299af1e * fixed cgsize2subreg() for integer registers (we can use 32 and 64 bit
registers -> 64 bit values go into 64 bit registers and everything else into
    32 bit ones)

git-svn-id: trunk@29849 -
2015-02-23 22:49:15 +00:00
Jonas Maebe
f4ada6cda0 + aarch64-specific treference fields
git-svn-id: trunk@29848 -
2015-02-23 22:49:13 +00:00
Jonas Maebe
123503a4f7 + GOT-related (Darwin) address modes
git-svn-id: trunk@29847 -
2015-02-23 22:49:10 +00:00
Jonas Maebe
0ce5a1de7f + IsSimpleRef() function that can be used to determine whether a reference
is a valid AArch64 memory reference or not. It returns an enum that says
    it's either valid, invalid, or invalid in a way that should trigger an
    internal error in case we created the reference ourselves (as opposed to
    it coming in via the assembler reader)

git-svn-id: trunk@29846 -
2015-02-23 22:49:07 +00:00
Jonas Maebe
84cea76f7a * ARM64 -> AArch64
git-svn-id: trunk@29845 -
2015-02-23 22:49:04 +00:00
Jonas Maebe
19d47610ad * added error checking to spilling_create_load/store
git-svn-id: trunk@29844 -
2015-02-23 22:49:01 +00:00
Jonas Maebe
92b644a19f + taicpu.op_reg_reg_const_shifterop()
* made shifterop parameter of taicpu.op_reg_reg_reg_shifterop() const

git-svn-id: trunk@29843 -
2015-02-23 22:48:58 +00:00
Jonas Maebe
f5950ac4cd + added remaining aarch64 shift/extension modes
git-svn-id: trunk@29842 -
2015-02-23 22:48:55 +00:00
Jonas Maebe
24d3b1cdf6 + tcgsizep2size[] to convert a tcgsize to its power-of-2 bytesize
git-svn-id: trunk@29841 -
2015-02-23 22:48:52 +00:00
Jonas Maebe
a49d386541 + SW postfix for sign extending a 32 bit integer
git-svn-id: trunk@29840 -
2015-02-23 22:48:49 +00:00
Jonas Maebe
ff61aba3fe * there is no ROR shiftmode on AArch64
git-svn-id: trunk@29839 -
2015-02-23 22:48:46 +00:00
Jonas Maebe
cd6e3d5622 * fixed another compilation error
git-svn-id: trunk@29838 -
2015-02-23 22:48:43 +00:00
Jonas Maebe
544c8d34ec + taicpu.op_reg_const_shifterop() constructor
git-svn-id: trunk@29837 -
2015-02-23 22:48:40 +00:00
Jonas Maebe
3cfa91a249 * enable cgsize2subreg() and cgsize2subreg() to differentiate between 32 and
64 bit integer registers

git-svn-id: trunk@29836 -
2015-02-23 22:48:37 +00:00
Jonas Maebe
df8b644190 - removed some ARM leftovers
git-svn-id: trunk@29835 -
2015-02-23 22:48:33 +00:00
Jonas Maebe
fc235c9400 * fixed warnings
git-svn-id: trunk@29834 -
2015-02-23 22:48:30 +00:00
Jonas Maebe
76d779b648 * added SW suffix
git-svn-id: trunk@29833 -
2015-02-23 22:48:27 +00:00
Jonas Maebe
c0548cadb0 * added some missing instructions and aliases, reordered them according
to how they appear in the ARM ARM
   o in particular, added the "unscaled offset" variants of instructions as
     separate opcodes (seems simpler than handling them as postfixes)

git-svn-id: trunk@29832 -
2015-02-23 22:48:24 +00:00
Jonas Maebe
f1b619a942 * made (X|W)ZR and (W)SP separate registers, because a number of
instructions can use either depending on the encoding

git-svn-id: trunk@29831 -
2015-02-23 22:48:21 +00:00
Jonas Maebe
e8c9b94147 * X29 is callee-saved
git-svn-id: trunk@29830 -
2015-02-23 22:48:18 +00:00
Jonas Maebe
3f5e95791b * use iosxwstr instead of cwstring on Darwin (for iOS 7+ testing)
git-svn-id: trunk@29829 -
2015-02-23 22:48:15 +00:00
Jonas Maebe
a56d94230f + iosxwstr unit that uses CoreFoundation where possible for the widestring
manager routines (in particular for locale-based routines, such as upper/
    lowercase), and which falls back to cwstring for functionality not
    supported by CoreFoundation (such as converting an UTF-8 string with
    illegal sequences to a different encoding)
   o this unit is particularly useful on iOS 7 (and 8?), as Apple no
     longer includes command line locale information on that platform and
     hence locale-dependent libc routines only work with the "C" locale
     there)

git-svn-id: trunk@29828 -
2015-02-23 22:48:11 +00:00
Jonas Maebe
67c9d60b72 * factored out the check regarding whether the index of a vecn needs to be
loaded into a register because of its size
   o by default, also allow if the size is the same as OS_ADDR but with a
     different sign

git-svn-id: trunk@29827 -
2015-02-23 22:48:08 +00:00
Jonas Maebe
73a9dc8077 * fixed formatting
git-svn-id: trunk@29826 -
2015-02-23 22:48:05 +00:00
Jonas Maebe
f886fe49d6 * only prepend the sysroot path to -Fl paths if these paths are absolute;
if they are not, they should be interpreted relative to the current
    directory instead (solves compiling tests that depend on a library
    when cross-testing for a platform with a sysroot)

git-svn-id: trunk@29825 -
2015-02-23 22:48:02 +00:00
Jonas Maebe
bc3d495285 * extra error checking in gen_load_cgpara_loc
git-svn-id: trunk@29824 -
2015-02-23 22:47:59 +00:00
Jonas Maebe
3fe0bd065e * ARM assembler reader: don't check for postfixes beyond the length
of the opcode

git-svn-id: trunk@29823 -
2015-02-23 22:47:56 +00:00
Jonas Maebe
1dd5f579e6 * support record fields with the same name as registers in subscripts in
the assembler reader

git-svn-id: trunk@29822 -
2015-02-23 22:47:53 +00:00
Jonas Maebe
504a9d1594 * fixed register sizes in a_load_ref_reg_unaligned()
git-svn-id: trunk@29821 -
2015-02-23 22:47:50 +00:00