Commit df01da37 by David Edelsohn Committed by David Edelsohn

aix.h (TARGET_ALTIVEC_VRSAVE): Delete.

        * config/rs6000/aix.h (TARGET_ALTIVEC_VRSAVE): Delete.
        * config/rs6000/rs6000.c (rs6000_explicit_options): Add
        aix_struct_ret.
        (rs6000_override_options): Do not protect TARGET_ALTIVEC_VRSAVE.
        Modify aix_struct_return variable, not target_flags.
        (rs6000_handle_option): Do not protect TARGET_ALTIVEC_VRSAVE.
        (rs6000_return_in_memory): Test aix_struct_return.
        * config/rs6000/rs6000.opt (maix-struct-return): Convert to
        independent variable.  Report mxl-compat.

From-SVN: r99831
parent 4193ce73
2005-05-17 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/aix.h (TARGET_ALTIVEC_VRSAVE): Delete.
* config/rs6000/rs6000.c (rs6000_explicit_options): Add
aix_struct_ret.
(rs6000_override_options): Do not protect TARGET_ALTIVEC_VRSAVE.
Modify aix_struct_return variable, not target_flags.
(rs6000_handle_option): Do not protect TARGET_ALTIVEC_VRSAVE.
(rs6000_return_in_memory): Test aix_struct_return.
* config/rs6000/rs6000.opt (maix-struct-return): Convert to
independent variable. Report mxl-compat.
2005-05-17 Bernd Schmidt <bernd.schmidt@analog.com> 2005-05-17 Bernd Schmidt <bernd.schmidt@analog.com>
* config/bfin/bfin.md (eh_return): Add missing DONE. * config/bfin/bfin.md (eh_return): Add missing DONE.
......
...@@ -38,8 +38,6 @@ ...@@ -38,8 +38,6 @@
#define TARGET_ALTIVEC 0 #define TARGET_ALTIVEC 0
#undef TARGET_ALTIVEC_ABI #undef TARGET_ALTIVEC_ABI
#define TARGET_ALTIVEC_ABI 0 #define TARGET_ALTIVEC_ABI 0
#undef TARGET_ALTIVEC_VRSAVE
#define TARGET_ALTIVEC_VRSAVE 0
/* The AIX linker will discard static constructors in object files before /* The AIX linker will discard static constructors in object files before
collect has a chance to see them, so scan the object files directly. */ collect has a chance to see them, so scan the object files directly. */
......
...@@ -226,6 +226,7 @@ int rs6000_alignment_flags; ...@@ -226,6 +226,7 @@ int rs6000_alignment_flags;
/* True for any options that were explicitly set. */ /* True for any options that were explicitly set. */
struct { struct {
bool aix_struct_ret; /* True if -maix-struct-ret was used. */
bool alignment; /* True if -malign- was used. */ bool alignment; /* True if -malign- was used. */
bool abi; /* True if -mabi= was used. */ bool abi; /* True if -mabi= was used. */
bool spe; /* True if -mspe= was used. */ bool spe; /* True if -mspe= was used. */
...@@ -1252,9 +1253,7 @@ rs6000_override_options (const char *default_cpu) ...@@ -1252,9 +1253,7 @@ rs6000_override_options (const char *default_cpu)
if (TARGET_ELF && TARGET_64BIT) if (TARGET_ELF && TARGET_64BIT)
{ {
rs6000_altivec_abi = 1; rs6000_altivec_abi = 1;
#if TARGET_ALTIVEC_VRSAVE != 0
TARGET_ALTIVEC_VRSAVE = 1; TARGET_ALTIVEC_VRSAVE = 1;
#endif
} }
/* Set the Darwin64 ABI as default for 64-bit Darwin. */ /* Set the Darwin64 ABI as default for 64-bit Darwin. */
...@@ -1357,16 +1356,11 @@ rs6000_override_options (const char *default_cpu) ...@@ -1357,16 +1356,11 @@ rs6000_override_options (const char *default_cpu)
memcpy (rs6000_reg_names, alt_reg_names, sizeof (rs6000_reg_names)); memcpy (rs6000_reg_names, alt_reg_names, sizeof (rs6000_reg_names));
#endif #endif
/* Set TARGET_AIX_STRUCT_RET last, after the ABI is determined. /* Set aix_struct_return last, after the ABI is determined.
If -maix-struct-return or -msvr4-struct-return was explicitly If -maix-struct-return or -msvr4-struct-return was explicitly
used, don't override with the ABI default. */ used, don't override with the ABI default. */
if ((target_flags_explicit & MASK_AIX_STRUCT_RET) == 0) if (!rs6000_explicit_options.aix_struct_ret)
{ aix_struct_return = (DEFAULT_ABI != ABI_V4 || DRAFT_V4_STRUCT_RET);
if (DEFAULT_ABI == ABI_V4 && !DRAFT_V4_STRUCT_RET)
target_flags = (target_flags & ~MASK_AIX_STRUCT_RET);
else
target_flags |= MASK_AIX_STRUCT_RET;
}
if (TARGET_LONG_DOUBLE_128 if (TARGET_LONG_DOUBLE_128
&& (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN)) && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN))
...@@ -1639,11 +1633,14 @@ rs6000_handle_option (size_t code, const char *arg, int value) ...@@ -1639,11 +1633,14 @@ rs6000_handle_option (size_t code, const char *arg, int value)
} }
break; break;
#if TARGET_ALTIVEC_VRSAVE != 0 case OPT_maix_struct_return:
case OPT_msvr4_struct_return:
rs6000_explicit_options.aix_struct_ret = true;
break;
case OPT_mvrsave_: case OPT_mvrsave_:
rs6000_parse_yes_no_option ("vrsave", arg, &(TARGET_ALTIVEC_VRSAVE)); rs6000_parse_yes_no_option ("vrsave", arg, &(TARGET_ALTIVEC_VRSAVE));
break; break;
#endif
case OPT_misel_: case OPT_misel_:
rs6000_explicit_options.isel = true; rs6000_explicit_options.isel = true;
...@@ -3899,7 +3896,7 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode) ...@@ -3899,7 +3896,7 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
returned in memory. The Darwin ABI does the same. The SVR4 ABI returned in memory. The Darwin ABI does the same. The SVR4 ABI
specifies that structures <= 8 bytes are returned in r3/r4, but a specifies that structures <= 8 bytes are returned in r3/r4, but a
draft put them in memory, and GCC used to implement the draft draft put them in memory, and GCC used to implement the draft
instead of the final standard. Therefore, TARGET_AIX_STRUCT_RET instead of the final standard. Therefore, aix_struct_return
controls this instead of DEFAULT_ABI; V.4 targets needing backward controls this instead of DEFAULT_ABI; V.4 targets needing backward
compatibility can change DRAFT_V4_STRUCT_RET to override the compatibility can change DRAFT_V4_STRUCT_RET to override the
default, and -m switches get the final word. See default, and -m switches get the final word. See
...@@ -3935,7 +3932,7 @@ rs6000_return_in_memory (tree type, tree fntype ATTRIBUTE_UNUSED) ...@@ -3935,7 +3932,7 @@ rs6000_return_in_memory (tree type, tree fntype ATTRIBUTE_UNUSED)
} }
if (AGGREGATE_TYPE_P (type) if (AGGREGATE_TYPE_P (type)
&& (TARGET_AIX_STRUCT_RET && (aix_struct_return
|| (unsigned HOST_WIDE_INT) int_size_in_bytes (type) > 8)) || (unsigned HOST_WIDE_INT) int_size_in_bytes (type) > 8))
return true; return true;
......
...@@ -112,15 +112,15 @@ msched-epilog ...@@ -112,15 +112,15 @@ msched-epilog
Target Undocumented Mask(SCHED_PROLOG) MaskExists Target Undocumented Mask(SCHED_PROLOG) MaskExists
maix-struct-return maix-struct-return
Target Report Mask(AIX_STRUCT_RET) Target Report RejectNegative Var(aix_struct_return)
Return all structures in memory (AIX default) Return all structures in memory (AIX default)
msvr4-struct-return msvr4-struct-return
Target Report InverseMask(AIX_STRUCT_RET) Target Report RejectNegative Var(aix_struct_return,0) VarExists
Return small structures in registers (SVR4 default) Return small structures in registers (SVR4 default)
mxl-compat mxl-compat
Target Var(TARGET_XL_COMPAT) Target Report Var(TARGET_XL_COMPAT)
Conform more closely to IBM XLC semantics Conform more closely to IBM XLC semantics
mno-fp-in-toc mno-fp-in-toc
......
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