re PR target/34526 (no-altivec ABI should be fixed or no longer be the default)

PR target/34526
	* config/rs6000/rs6000.c (rs6000_altivec_abi): Clarify comment.
	(rs6000_explicit_options): Split abi into spe_abi and altivec_abi,
	add vrsave.
	(rs6000_override_options): Set altivec_abi as default, not override,
	for 64-bit GNU/Linux; for 32-bit GNU/Linux default to altivec_abi for
	TARGET_ALTIVEC; default to TARGET_ALTIVEC_VRSAVE when AltiVec ABI
	is used; use new member spe_abi.
	(rs6000_handle_option): Set rs6000_explicit_options.vrsave; use
	spe_abi and altivec_abi.

From-SVN: r132537
This commit is contained in:
Janis Johnson 2008-02-22 01:55:40 +00:00 committed by Janis Johnson
parent b3184fd133
commit a2db2771a0
2 changed files with 36 additions and 12 deletions

View File

@ -1,3 +1,16 @@
2008-02-21 Janis Johnson <janis187@us.ibm.com>
PR target/34526
* config/rs6000/rs6000.c (rs6000_altivec_abi): Clarify comment.
(rs6000_explicit_options): Split abi into spe_abi and altivec_abi,
add vrsave.
(rs6000_override_options): Set altivec_abi as default, not override,
for 64-bit GNU/Linux; for 32-bit GNU/Linux default to altivec_abi for
TARGET_ALTIVEC; default to TARGET_ALTIVEC_VRSAVE when AltiVec ABI
is used; use new member spe_abi.
(rs6000_handle_option): Set rs6000_explicit_options.vrsave; use
spe_abi and altivec_abi.
2008-02-22 Tomas Bily <tbily@suse.cz>
* tree-vectorizer.c (vect_is_simple_reduction): Fix comment typo.

View File

@ -171,7 +171,7 @@ int rs6000_long_double_type_size;
/* IEEE quad extended precision long double. */
int rs6000_ieeequad;
/* Whether -mabi=altivec has appeared. */
/* Nonzero to use AltiVec ABI. */
int rs6000_altivec_abi;
/* Nonzero if we want SPE ABI extensions. */
@ -262,12 +262,14 @@ int rs6000_alignment_flags;
struct {
bool aix_struct_ret; /* True if -maix-struct-ret was used. */
bool alignment; /* True if -malign- was used. */
bool abi; /* True if -mabi=spe/nospe was used. */
bool spe_abi; /* True if -mabi=spe/no-spe was used. */
bool altivec_abi; /* True if -mabi=altivec/no-altivec used. */
bool spe; /* True if -mspe= was used. */
bool float_gprs; /* True if -mfloat-gprs= was used. */
bool isel; /* True if -misel was used. */
bool long_double; /* True if -mlong-double- was used. */
bool ieee; /* True if -mabi=ieee/ibmlongdouble used. */
bool vrsave; /* True if -mvrsave was used. */
} rs6000_explicit_options;
struct builtin_description
@ -1590,11 +1592,18 @@ rs6000_override_options (const char *default_cpu)
if (TARGET_XCOFF && TARGET_ALTIVEC)
rs6000_altivec_abi = 1;
/* Set Altivec ABI as default for PowerPC64 Linux. */
if (TARGET_ELF && TARGET_64BIT)
/* The AltiVec ABI is the default for PowerPC-64 GNU/Linux. For
PowerPC-32 GNU/Linux, -maltivec implies the AltiVec ABI. It can
be explicitly overridden in either case. */
if (TARGET_ELF)
{
rs6000_altivec_abi = 1;
TARGET_ALTIVEC_VRSAVE = 1;
if (!rs6000_explicit_options.altivec_abi
&& (TARGET_64BIT || TARGET_ALTIVEC))
rs6000_altivec_abi = 1;
/* Enable VRSAVE for AltiVec ABI, unless explicitly overridden. */
if (!rs6000_explicit_options.vrsave)
TARGET_ALTIVEC_VRSAVE = rs6000_altivec_abi;
}
/* Set the Darwin64 ABI as default for 64-bit Darwin. */
@ -1638,7 +1647,7 @@ rs6000_override_options (const char *default_cpu)
/* For the powerpc-eabispe configuration, we set all these by
default, so let's unset them if we manually set another
CPU that is not the E500. */
if (!rs6000_explicit_options.abi)
if (!rs6000_explicit_options.spe_abi)
rs6000_spe_abi = 0;
if (!rs6000_explicit_options.spe)
rs6000_spe = 0;
@ -2131,6 +2140,7 @@ rs6000_handle_option (size_t code, const char *arg, int value)
break;
case OPT_mvrsave_:
rs6000_explicit_options.vrsave = true;
rs6000_parse_yes_no_option ("vrsave", arg, &(TARGET_ALTIVEC_VRSAVE));
break;
@ -2188,19 +2198,20 @@ rs6000_handle_option (size_t code, const char *arg, int value)
case OPT_mabi_:
if (!strcmp (arg, "altivec"))
{
rs6000_explicit_options.abi = true;
rs6000_explicit_options.altivec_abi = true;
rs6000_altivec_abi = 1;
/* Enabling the AltiVec ABI turns off the SPE ABI. */
rs6000_spe_abi = 0;
}
else if (! strcmp (arg, "no-altivec"))
{
/* ??? Don't set rs6000_explicit_options.abi here, to allow
the default for rs6000_spe_abi to be chosen later. */
rs6000_explicit_options.altivec_abi = true;
rs6000_altivec_abi = 0;
}
else if (! strcmp (arg, "spe"))
{
rs6000_explicit_options.abi = true;
rs6000_explicit_options.spe_abi = true;
rs6000_spe_abi = 1;
rs6000_altivec_abi = 0;
if (!TARGET_SPE_ABI)
@ -2208,7 +2219,7 @@ rs6000_handle_option (size_t code, const char *arg, int value)
}
else if (! strcmp (arg, "no-spe"))
{
rs6000_explicit_options.abi = true;
rs6000_explicit_options.spe_abi = true;
rs6000_spe_abi = 0;
}