Basic ppc64le support

This adds initial support for ppc64le to the ppc64 port.  That is:
* little endian aware (also in strtod),
* and ELFv2 aware (not using function descriptors)
* adjust various block sizes to be multiple of 64k, the default
  pagesize on ppc64le.  The sources should have used the system function
  to ensure alignment on pagesize, so this is just a stop-gap

It also corrects the list of registers for the precise GC, but that isn't
used in mini at all on any architecture currently.

Author: Michael Matz <matz@suse.de>
Origin: https://build.opensuse.org/request/show/225490
Changes: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Switch ppc_r11 with ppc_r12

This is a preliminary patch for ppc64le ELFv2 support.  That one requires
r12 to hold a functions address at calls to normal (global) C functions.
As is r12 is also used by mini for its IMT_REG, VTABLE_REG and RGCTX_REG
to pass around values to functions outside the normal argument registers
(ugh!), so there's a conflict.  This mechanical (by sed) patch simply switches
ppc_r11 and ppc_r12 everywhere, r11 doesn't have any special use in the ABI.

Author: Michael Matz <matz@suse.de>
Origin: https://build.opensuse.org/request/show/225490
Changes: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Use ppc_r12 for some global call sequences

After the mechanical exchange of ppc_r11 and ppc_r12 we now can use
ppc_r12 for global calls to hold the callees address without clobbering
r11 (which potentially contains IMT_REG, VTABLE_REG and RGCTX_REG).
We don't need to change all indirect calls, only those potentially reaching
functions containing a TOC setup based on r12 (in particular functions
in shared libs).  As the instruction sequence patcher can only deal
with one destination register we also need to make some additional
calls use r12.  We probably should convert all calls that currently
use r0 to use r12 if no other conflicts arise but this is enough to build.

Author: Michael Matz <matz@suse.de>
Origin: https://build.opensuse.org/request/show/225490
Changes: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
PowerPC64 ELFv2 ABI: cases for in-register parameter passing, return values, and structs

The ELFv2 ABI specifies some particular cases for in-register parameter
passing, return values, float/double structs; e.g.,
- small struct returned via registers (2 doublewords)
- homogeneous float struct returned via registers (8 members)
- small float struct passed/returned via FR registers
- return via multiple registers

Author: Bill Seurer <seurer@us.ibm.com>
Origin: https://launchpad.net/ubuntu/+source/mono/3.2.8+dfsg-4ubuntu2
Changes: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
[ppc] Bump (more) instruction sizes after 51c454f6b03b468273bb93db2aa9b76e330a7e57.

This fixes ~30 ppc-specific failures in mono/tests (e.g., appdomain), like this:
	wrong maximal instruction length of instruction atomic_add_i4 (expected 20, got 28)
	* Assertion: should not be reached at mini-ppc.c:5235

The commit 51c454f6b03b468273bb93db2aa9b76e330a7e57 introduced 2 ppc_sync
instructions in OP_ATOMIC_CAS_I4/8 *and* OP_ATOMIC_ADD_NEW_I4/8 (mini-ppc64.c).

Accordingly, commit 83a34c40c6a0911a0c27afce63f5ea7ec2bb4b26 updated the maxlength
(+8 bytes) of atomic_cas_i4/8 - *but not* atomic_add_new_i4/8 (cpu-ppc64.md).

Recently, commit b784b866dac0c97780357bf81bf0fa3ebeffa4e made atomic_add_new_i4/8
exercised (as 'atomic_add_i4/8') - with an incorrect/non-updated 20-byte maxlength,
which should actually be 28.

Thus:
	wrong maximal instruction length of instruction atomic_add_i4 (expected 20, got 28)

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Revert "PowerPC64 ELFv2 ABI: cases for in-register parameter passing, return values, and structs"

This reverts commit ba62bdf862560a85e2d637a0762d0e4fdd0db8b0.

Reverting as per discussion with Zoltan Varga (see PR 1409 [1]).
Some rework needed.

[1] https://github.com/mono/mono/pull/1409

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Merge remote-tracking branch 'mfoliveira/ppc64el-v2'

This is a merge of:

https://github.com/mono/mono/pull/1409