Commit Graph

44857 Commits

Author SHA1 Message Date
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
Jonas Maebe
290e3f5ff8 * fixed assigning one float loc_reference to another of a different size if a
platform does not support (hl)cg.a_loadfpu_*, but only (hl)cg.a_loadmm_*

git-svn-id: trunk@29820 -
2015-02-23 22:47:47 +00:00
Jonas Maebe
c764826bb3 * check whether we are explicitly typecasting untypedpointer^ before other
cases (that depend on the sizes of the typecast matching) so that we
    can (internally) generate typecasts to open array/array of const

git-svn-id: trunk@29819 -
2015-02-23 22:47:44 +00:00
Jonas Maebe
aae879d28a * also set aktcallnode during tcallnode.pass_1, so that the callparanode
pass_1 code can make use of it

git-svn-id: trunk@29818 -
2015-02-23 22:47:41 +00:00
Jonas Maebe
863e81315e * changed goto usage in tcallnode.pass_typecheck into try/finally (and at
the same time solved some issues where "exit" instead of "goto errorexit"
    was used)

git-svn-id: trunk@29817 -
2015-02-23 22:47:38 +00:00
Jonas Maebe
68303b8df1 * add explicit check that argument of sizeof(x) is a simple load node (this
was already assumed later on)

git-svn-id: trunk@29816 -
2015-02-23 22:47:35 +00:00
Jonas Maebe
b8c8ef8489 * support transfering a cgpara that is stored in multiple paralocs into a
single register, by first storing everything consecutively to memory and
    then loading it. Required for "homogeneous float aggregates" on AArch64

git-svn-id: trunk@29815 -
2015-02-23 22:47:32 +00:00
Jonas Maebe
e6511bcb33 * support multiple paralocs in a_load_reg_cgpara() by taking a round trip
via a_load_ref_cgpara()

git-svn-id: trunk@29814 -
2015-02-23 22:47:29 +00:00
nickysn
9be4e6a0de * made the registers shown in the registers window depend on the target CPU
defines, instead of the host CPU defines (i.e. i386 instead of cpui386, etc)

git-svn-id: trunk@29813 -
2015-02-23 22:17:11 +00:00
florian
35d550c9c6 + commented directive for easier enabling
git-svn-id: trunk@29812 -
2015-02-23 22:11:26 +00:00