Commit Graph

45695 Commits

Author SHA1 Message Date
Jonas Maebe
6230119140 - removed self-assignment of cur_stack_offset introduced by refactoring in
r30221

git-svn-id: trunk@30230 -
2015-03-14 21:55:48 +00:00
Jonas Maebe
8334597476 * a homogeneous float aggregate can maximally contain 4 elements
(mantis #27665)

git-svn-id: trunk@30229 -
2015-03-14 21:46:45 +00:00
Jonas Maebe
faf3efe139 + Linux/ppc64le test object files
git-svn-id: trunk@30228 -
2015-03-14 18:37:01 +00:00
Jonas Maebe
0c394eb6f4 * ensure we don't call a_load_cgparaloc_anyreg() to move an fpu register
into an integer register

git-svn-id: trunk@30227 -
2015-03-14 18:36:57 +00:00
Jonas Maebe
622852b8c9 * check that a_load_cgparaloc_anyreg() is not used to try to move an fpu
register into a non-fpu register, as this is not (yet) supported

git-svn-id: trunk@30226 -
2015-03-14 18:36:54 +00:00
Jonas Maebe
a02d52f533 * support thlcg2ll.gen_loadfpu_loc_cgpara() from LOC_REGISTER to
LOC_FPUREGISTER (can happen with certain ABIs due to records
    having to be passed in floating point registers)

git-svn-id: trunk@30225 -
2015-03-14 18:36:52 +00:00
Jonas Maebe
c50c822e13 * fixed destination size when loading fpu temp paralocs
git-svn-id: trunk@30224 -
2015-03-14 18:36:49 +00:00
Jonas Maebe
6d02aedf70 * support multiple register paralocs in tcgobj.a_loadfpu_ref_cgpara()
git-svn-id: trunk@30223 -
2015-03-14 18:36:46 +00:00
Jonas Maebe
cea2741339 * correct paraloc size for 3-byte records passed in the lower bits of a
register (32 bit instead of 64 bit register)

git-svn-id: trunk@30222 -
2015-03-14 18:36:43 +00:00
Jonas Maebe
3d6fcd8815 + ppc64le/ELFv2 ret_in_param implementation
* fixed ret_in_param for other ppc64 ABIs

git-svn-id: trunk@30221 -
2015-03-14 18:36:40 +00:00
Jonas Maebe
f4a580d669 * don't fail if multiple dotests try to create the same directory in parallel
git-svn-id: trunk@30220 -
2015-03-14 18:36:37 +00:00
Jonas Maebe
a02fb7c794 * fixed misplaced braces that caused all records to be passed by reference
on ppc64 with the mwpascal calling convention, instead of only the const
    ones

git-svn-id: trunk@30219 -
2015-03-14 18:36:35 +00:00
Jonas Maebe
7bc66a5142 + ELF/ppc64le resource support
git-svn-id: trunk@30218 -
2015-03-14 18:36:32 +00:00
Jonas Maebe
6b9b575b74 * choose between arm (little endian) and armeb for fpcres based on the
target_info rather than based on the source_info

git-svn-id: trunk@30217 -
2015-03-14 18:36:29 +00:00
Jonas Maebe
eee83ebb4a * use generic code for a_load_subsetref_regs_noindex on ppc64le
git-svn-id: trunk@30216 -
2015-03-14 18:36:26 +00:00
Jonas Maebe
c69265a61c * disable out big endian-specific helpers for ppc64le
git-svn-id: trunk@30215 -
2015-03-14 18:36:23 +00:00
Jonas Maebe
cf5b42b4b2 * use generic code for set+setelement on ppc64le
git-svn-id: trunk@30214 -
2015-03-14 18:36:20 +00:00
Jonas Maebe
82d92dbf50 * call seterrno instead of manually handling the setting setting the errno
threadvar (and having to deal with differences between the ELFv1 and ELFv2
    ABIs regarding indirect function calls, + future ability to have the
    compiler generate PIC for those routines)
   o includes workaround for lack of linkage area size allocation in current
     released PPC64 versions, remove after 3.0.2 has been released

git-svn-id: trunk@30213 -
2015-03-14 18:36:17 +00:00
Jonas Maebe
399ffb2005 * allocate enough room in assembler routines for a complete linkage area
so that potential callees have enough room to store their LR etc
    if needed

git-svn-id: trunk@30212 -
2015-03-14 18:36:14 +00:00
Jonas Maebe
e3f451066b * support little endian in getFPSCR/setFPSCR
git-svn-id: trunk@30211 -
2015-03-14 18:36:11 +00:00
Jonas Maebe
3ab62dcfed * switched Linux/PowerPC64 to Pascal startup code so that we can used ifdefs
to detect whether we're compiling for ELFv1/SYSV or ELFv2

git-svn-id: trunk@30210 -
2015-03-14 18:36:08 +00:00
Jonas Maebe
53680329d3 * changed type of operatingsystem_parameter_argc from ptruint to longint,
as that's the type of argc in the system unit (which maps onto this
    variable), and even in C it's "int argc". This fixes the use of this
    variable on big endian targets

git-svn-id: trunk@30209 -
2015-03-14 18:36:05 +00:00
Jonas Maebe
d6499b4bc0 + rldcl., rldicl., rldcr[.] and rldicr[.] opcodes (needed for new
bootstrapping code)

git-svn-id: trunk@30208 -
2015-03-14 18:36:02 +00:00
Jonas Maebe
5a6b9c9f16 * store/reload toc around indirect calls for ELFv2 ABI
* ensure that register calls happen via R12 on the ELFv2 ABI

git-svn-id: trunk@30207 -
2015-03-14 18:35:59 +00:00
Jonas Maebe
33ed32b024 * when targeting the ELFv2 ABI, don't reserve space for the (never used)
words in the linkage area reserved for use by the compiler and linker

git-svn-id: trunk@30206 -
2015-03-14 18:35:56 +00:00
Jonas Maebe
3d9713b9c8 * has_single_field() now looks recursively into fields that are aggregate
types until it finds a non-aggregate type, and then returns "true" if
    that aggregate (record or array) contains one element
  * it now also returns the type of that element directly rather than a
    tfieldvarsym, since we only care about the type and in case of an array
    there is no field

git-svn-id: trunk@30205 -
2015-03-14 18:35:53 +00:00
Jonas Maebe
2e126bb723 - removed darwin/i386 special case code from i8086 code generator
git-svn-id: trunk@30204 -
2015-03-14 18:35:50 +00:00
Jonas Maebe
9788b01d31 * rewrote most of the special case handling of parameter passing on ppc64,
documenting the pecularities of the various calling conventions and
    marking what we do and don't support currently
  * also handle arrays for the ELFv2 ABI when determining whether an aggregate
    only contains floating values of a single type

git-svn-id: trunk@30203 -
2015-03-14 18:35:47 +00:00
Jonas Maebe
165aaea8a4 * made a separate abi entry for powerpc_darwin, as it's not exactly the same
as the AIX abi (especially on ppc64)
   o replaced (for now) all checks for the AIX abi with a check for either the
     AIX or Darwin abi
   o changed the ABI of Darwin/ppc, Darwin/ppc64 and Mac OS/ppc to
     abi_powerpc_darwin

git-svn-id: trunk@30202 -
2015-03-14 18:35:44 +00:00
Jonas Maebe
25340480b0 * factored out creating a single paraloc, so we can reuse it for creating
function return locations

git-svn-id: trunk@30201 -
2015-03-14 18:35:41 +00:00
Jonas Maebe
f0ee1a9ee3 * pass records that (recursively) only contain floating point values of the
same type (even in other records or in arrays), with 8 or less such
    values, as if those values were passed individually on ppc64/ELFv2

git-svn-id: trunk@30200 -
2015-03-14 18:35:38 +00:00
Jonas Maebe
9a73c9a460 * avoid string truncation for ait_symbolpair in assembler writer
git-svn-id: trunk@30199 -
2015-03-14 18:35:34 +00:00
Jonas Maebe
fb27dff638 * generate ".abiversion 2" directive when targeting ppc64/ELFv2
* generate code to load the TOC register if it's required, and
    emit the the ".localentry" directive to indicate to the linker
    where the actual function body starts
  * support the ".localentry" directive in the ppc64 assembler reader
   o disable the fpc_qword_to_double() assembler implementation for
     ELFv2, because we can't manually insert the .localentry directive
     before the stack allocation code
  * perform indirect calls on ppc64 via R12 in ncgcal, as R12 needs to
    contain the function address on entry on ppc64/ELFv2 (and it's
    a volatile register, so there's no problem with always using
    it)

git-svn-id: trunk@30198 -
2015-03-14 18:35:31 +00:00
Jonas Maebe
8445381929 * merged ait_set and ait_thumb_set into a single tai class
(tai_symbolpair)

git-svn-id: trunk@30197 -
2015-03-14 18:35:28 +00:00
Jonas Maebe
1e227f78fe * factored out the check for whether we have to generate dotted function
names, and disabled them for ppc64 ELFv2
  * disabling those also disables the function descriptors, so use the
    _CALL_ELF compiler variable to check whether there is in fact a
    function descriptor

git-svn-id: trunk@30196 -
2015-03-14 18:35:25 +00:00
Jonas Maebe
cc071ded4b * define _CALL_ELF=1 or _CALL_ELF=2 symbol when targeting ppc(64)
ELFv1/ELFv2, like GCC

git-svn-id: trunk@30195 -
2015-03-14 18:35:22 +00:00
Jonas Maebe
05f6660a25 * set the correct dynamic linker for the ppc64 ELFv2 abi
* specify the correct linker emulation to use for ppc64 ELFv2 little endian
  * specify the correct default library directories to search for ELFv2 little
    endian

git-svn-id: trunk@30194 -
2015-03-14 18:35:19 +00:00
Jonas Maebe
3946971c73 * default to ppc64le/elfv2 when compiling on a ppc64le platform
* default to elfv2 abi when targeting ppc64le and no abi has been specified

git-svn-id: trunk@30193 -
2015-03-14 18:35:16 +00:00
Jonas Maebe
0e76a84e04 + "ELFv2" abi identifier for ppc64
git-svn-id: trunk@30192 -
2015-03-14 18:35:13 +00:00
Károly Balogh
918c4add06 m68k: in do_spill_replace, exclude the case where the source register would be an address and the destination is a reference
git-svn-id: trunk@30191 -
2015-03-14 17:19:14 +00:00
Károly Balogh
935820293c m68k: in tm68ktypeconvnode.int_to_real, fix the reference before using it, and if the source is a register, make sure it's a data register
git-svn-id: trunk@30190 -
2015-03-14 17:14:10 +00:00
Károly Balogh
1121c2e6ce m68k: before doing a reg->ref operation, make sure the source is a datareg
git-svn-id: trunk@30189 -
2015-03-14 16:36:02 +00:00
Jeppe Johansen
52e505bff7 Fixed internal error in GOT related code for ARM internal assembler.
git-svn-id: trunk@30188 -
2015-03-14 16:03:16 +00:00
Jeppe Johansen
439027a8de Add most pre-UAL VFP instruction forms.
Add fused mac instructions for VFPv4.

git-svn-id: trunk@30187 -
2015-03-14 14:59:13 +00:00
Jeppe Johansen
64f127141f Add VFPv4 FPU type for ARM.
Fix assembler reader so it can read instructions longer than 5 characters.

git-svn-id: trunk@30186 -
2015-03-14 12:49:07 +00:00
marco
f79a8c1544 * IMAGE_FIRST_SECTION
git-svn-id: trunk@30185 -
2015-03-14 11:16:12 +00:00
marco
f6d72af6a3 * fix 64-bit issue in jwawinnt
git-svn-id: trunk@30184 -
2015-03-14 11:14:29 +00:00
Jeppe Johansen
9478099e5a Undo recent VFP assembler changes to make bootstrapping from 3.0.1 possible.
git-svn-id: trunk@30183 -
2015-03-14 10:04:17 +00:00
marco
698a068da7 * Missing symbols from mantis #27657 except macro IMAGE_FIRST_SECTION
git-svn-id: trunk@30182 -
2015-03-13 20:08:29 +00:00
Jeppe Johansen
73abf5e630 Merge from armiw branch.
Update ARM internal assembler to support most ARM, Thumb and Thumb-2 instructions.
Changed generation of VFP instructions to use UAL mnemonics.
Added divided and unified assembler syntax support to ARM assembly reader.

git-svn-id: trunk@30181 -
2015-03-13 19:22:27 +00:00