Commit Graph

44893 Commits

Author SHA1 Message Date
Jonas Maebe
60dd2d1dd5 + register Darwin/AArch64 target
* pass "-arch arm64" to the linker for Darwin/AArch64

git-svn-id: trunk@29897 -
2015-02-23 22:51:44 +00:00
Jonas Maebe
bee9c4185b + default target for AArch64
git-svn-id: trunk@29896 -
2015-02-23 22:51:41 +00:00
Jonas Maebe
00b819307a + condition and shifterop operands for AArch64 assembler reader
git-svn-id: trunk@29895 -
2015-02-23 22:51:38 +00:00
Jonas Maebe
665a5e509e * default iOS deployment version for AArch64 is iOS 7
git-svn-id: trunk@29894 -
2015-02-23 22:51:34 +00:00
Jonas Maebe
8c89f7ee8f * AArch64 also uses the non-fragile Objective-C ABI
git-svn-id: trunk@29893 -
2015-02-23 22:51:31 +00:00
Jonas Maebe
de2dd592ab + shiftedregmodes and extendedregmodes set constants
git-svn-id: trunk@29892 -
2015-02-23 22:51:28 +00:00
Jonas Maebe
17bcd207af * fixed lowercase entry in uppercond2str
git-svn-id: trunk@29891 -
2015-02-23 22:51:25 +00:00
Jonas Maebe
53548663e3 + AArch64 assembler writer
git-svn-id: trunk@29890 -
2015-02-23 22:51:22 +00:00
Jonas Maebe
d246ababff + condition code operand for aarch64
+ taicpu.op_reg_cond() constructor
  * use this operand for cset

git-svn-id: trunk@29889 -
2015-02-23 22:51:19 +00:00
Jonas Maebe
5c6afe259e * long double = double on Darwin/AArch64
git-svn-id: trunk@29888 -
2015-02-23 22:51:15 +00:00
Jonas Maebe
65141ab135 + aarch64 makefile.cpu
git-svn-id: trunk@29887 -
2015-02-23 22:51:12 +00:00
Jonas Maebe
e32965879d * dummy strings.inc for aarch64
git-svn-id: trunk@29886 -
2015-02-23 22:51:09 +00:00
Jonas Maebe
dad442c7e3 + aarch64 fpu init, atomic routines and memory barriers
git-svn-id: trunk@29885 -
2015-02-23 22:51:06 +00:00
Jonas Maebe
6813831e03 + AArch64 setjump code based on NetBSD version
git-svn-id: trunk@29884 -
2015-02-23 22:51:03 +00:00
Jonas Maebe
6b371315f3 + dummy AArch64 stringss.inc file
git-svn-id: trunk@29883 -
2015-02-23 22:51:00 +00:00
Jonas Maebe
e82201d6ac + dummy set.inc for AArch64
git-svn-id: trunk@29882 -
2015-02-23 22:50:57 +00:00
Jonas Maebe
4c7f75c93b + round/trunc/int for AArch64
git-svn-id: trunk@29881 -
2015-02-23 22:50:54 +00:00
Jonas Maebe
66d4e9a3a5 + dummy int64p.inc
git-svn-id: trunk@29880 -
2015-02-23 22:50:51 +00:00
Jonas Maebe
84f04ad2ce + aarch64 fpu rounding mode/exception support
git-svn-id: trunk@29879 -
2015-02-23 22:50:48 +00:00
Jonas Maebe
9c55fa6f6c + FPCR, FPSR and TPIDR registers
git-svn-id: trunk@29878 -
2015-02-23 22:50:44 +00:00
Jonas Maebe
493b11da06 + Darwin/aarch64 system definition
git-svn-id: trunk@29877 -
2015-02-23 22:50:41 +00:00
Jonas Maebe
b5643f2a27 + aarch64 cpu identifier
git-svn-id: trunk@29876 -
2015-02-23 22:50:38 +00:00
Jonas Maebe
6995474ea0 + aarch64 cpunode
git-svn-id: trunk@29875 -
2015-02-23 22:50:35 +00:00
Jonas Maebe
820de6a17b * pass "const" arrays always by reference, because there is a lot of hacky
code out there that relies on this, even though it's not supposed to be
    guaranteed in any way :(

git-svn-id: trunk@29874 -
2015-02-23 22:50:32 +00:00
Jonas Maebe
edb3124ae8 * copy arrays passed by value to cdecl routines on the callee side even on
platforms that normally must copy value parameters on the caller side,
    because
   o if we copy them on the caller side, then the behaviour will be different
     compared to other platforms if the called routine is implemented in C
     (since they are passed by reference, changes to the array contents will
      be visible on other platforms, while they wouldn't be visible if the
      copy is made on the caller side)
   o if we don't copy them on the caller nor on the callee side, then behaviour
     will be different compared to other platforms if the called routine is
     implemented in Pascal and modifies the array (since then changes won't be
     visible on the caller side, except on platforms that normally perform
     the copy on the caller side)

git-svn-id: trunk@29873 -
2015-02-23 22:50:29 +00:00
Jonas Maebe
2dbfbd40ab * unified hlcg.g_copyvalueparas and ncgutil.copyvalueparas, they have the
same functionality in the mean time

git-svn-id: trunk@29872 -
2015-02-23 22:50:26 +00:00
Jonas Maebe
6e12ad817f * don't make copies of arrays passed as value parameters to cdecl routines
(since C compilers don't copy such arrays either, as they're implciitly
     pointers)

git-svn-id: trunk@29871 -
2015-02-23 22:50:23 +00:00
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