Commit 6edc217d by Bill Schmidt Committed by William Schmidt

invoke.texi: Add -maltivec={be,le} options...

2014-01-09  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* doc/invoke.texi: Add -maltivec={be,le} options, and document
	default element-order behavior for -maltivec.
	* config/rs6000/rs6000.opt: Add -maltivec={be,le} options.
	* config/rs6000/rs6000.c (rs6000_option_override_internal): Ensure
	that -maltivec={le,be} implies -maltivec; disallow -maltivec=le
	when targeting big endian, at least for now.
	* config/rs6000/rs6000.h: Add #define of VECTOR_ELT_ORDER_BIG.

From-SVN: r206494
parent 3396aba5
2014-01-09 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* doc/invoke.texi: Add -maltivec={be,le} options, and document
default element-order behavior for -maltivec.
* config/rs6000/rs6000.opt: Add -maltivec={be,le} options.
* config/rs6000/rs6000.c (rs6000_option_override_internal): Ensure
that -maltivec={le,be} implies -maltivec; disallow -maltivec=le
when targeting big endian, at least for now.
* config/rs6000/rs6000.h: Add #define of VECTOR_ELT_ORDER_BIG.
2014-01-09 Jakub Jelinek <jakub@redhat.com>
PR middle-end/47735
......
......@@ -3238,6 +3238,18 @@ rs6000_option_override_internal (bool global_init_p)
&& !(processor_target_table[tune_index].target_enable & OPTION_MASK_HTM))
rs6000_isa_flags |= ~rs6000_isa_flags_explicit & OPTION_MASK_STRICT_ALIGN;
/* -maltivec={le,be} implies -maltivec. */
if (rs6000_altivec_element_order != 0)
rs6000_isa_flags |= OPTION_MASK_ALTIVEC;
/* Disallow -maltivec=le in big endian mode for now. This is not
known to be useful for anyone. */
if (BYTES_BIG_ENDIAN && rs6000_altivec_element_order == 1)
{
warning (0, N_("-maltivec=le not allowed for big-endian targets"));
rs6000_altivec_element_order = 0;
}
/* Add some warnings for VSX. */
if (TARGET_VSX)
{
......
......@@ -468,6 +468,15 @@ extern int rs6000_vector_align[];
? rs6000_vector_align[(MODE)] \
: (int)GET_MODE_BITSIZE ((MODE)))
/* Determine the element order to use for vector instructions. By
default we use big-endian element order when targeting big-endian,
and little-endian element order when targeting little-endian. For
programs being ported from BE Power to LE Power, it can sometimes
be useful to use big-endian element order when targeting little-endian.
This is set via -maltivec=be, for example. */
#define VECTOR_ELT_ORDER_BIG \
(BYTES_BIG_ENDIAN || (rs6000_altivec_element_order == 2))
/* Alignment options for fields in structures for sub-targets following
AIX-like ABI.
ALIGN_POWER word-aligns FP doubles (default AIX ABI).
......
......@@ -140,6 +140,14 @@ maltivec
Target Report Mask(ALTIVEC) Var(rs6000_isa_flags)
Use AltiVec instructions
maltivec=le
Target Report RejectNegative Var(rs6000_altivec_element_order, 1) Save
Generate Altivec instructions using little-endian element order
maltivec=be
Target Report RejectNegative Var(rs6000_altivec_element_order, 2)
Generate Altivec instructions using big-endian element order
mhard-dfp
Target Report Mask(DFP) Var(rs6000_isa_flags)
Use decimal floating point instructions
......
......@@ -18890,6 +18890,38 @@ the AltiVec instruction set. You may also need to set
@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
enhancements.
When @option{-maltivec} is used, rather than @option{-maltivec=le} or
@option{-maltivec=be}, the element order for Altivec intrinsics such
as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert} will
match array element order corresponding to the endianness of the
target. That is, element zero identifies the leftmost element in a
vector register when targeting a big-endian platform, and identifies
the rightmost element in a vector register when targeting a
little-endian platform.
@item -maltivec=be
@opindex maltivec=be
Generate Altivec instructions using big-endian element order,
regardless of whether the target is big- or little-endian. This is
the default when targeting a big-endian platform.
The element order is used to interpret element numbers in Altivec
intrinsics such as @code{vec_splat}, @code{vec_extract}, and
@code{vec_insert}. By default, these will match array element order
corresponding to the endianness for the target.
@item -maltivec=le
@opindex maltivec=le
Generate Altivec instructions using little-endian element order,
regardless of whether the target is big- or little-endian. This is
the default when targeting a little-endian platform. This option is
currently ignored when targeting a big-endian platform.
The element order is used to interpret element numbers in Altivec
intrinsics such as @code{vec_splat}, @code{vec_extract}, and
@code{vec_insert}. By default, these will match array element order
corresponding to the endianness for the target.
@item -mvrsave
@itemx -mno-vrsave
@opindex mvrsave
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment