[RS6000] .gnu.attributes Tag_GNU_Power_ABI_FP
authorAlan Modra <amodra@gmail.com>
Wed, 28 Sep 2016 22:01:48 +0000 (07:31 +0930)
committerAlan Modra <amodra@gcc.gnu.org>
Wed, 28 Sep 2016 22:01:48 +0000 (07:31 +0930)
commite9dda04f0760e78c5834b1beddab39cd562ad7c1
tree7d561e18cf4ecf2d793c4c34f392eac627e6209d
parent91eaca5e32abab6179fba0e2543daf1cc1f64bde
[RS6000] .gnu.attributes Tag_GNU_Power_ABI_FP

Extend this attribute to cover long double ABIs, for 64-bit too.

This patch also corrects an error that crept in to code setting
rs6000_passes_float.  See the added comment.  Passing IEEE128 values
in vsx regs ought to set both Tag_GNU_Power_ABI_FP and
Tag_GNU_Power_ABI_Vector.  Also adds a new option, default on, that
disables output of .gnu_attribute assembly directives.

* config/rs6000/sysv4.opt (mgnu-attribute): New option.
* doc/invoke.texi: Document it.
* config/rs6000/rs6000.c (HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE): Define.
(rs6000_passes_float): Comment.
(rs6000_passes_long_double): New static var.
(call_ABI_of_interest): Return false unless rs6000_gnu_attr is set.
(init_cumulative_args): Set up to emit fp .gnu_attribute for
ELF 64-bit ABIs as well as 32-bit ELF.  Correct rs6000_passes_float
to include fp values returned in vectors.
Set rs6000_passes_long_double.
(rs6000_function_arg_advance_1): Likewise for function args.
(rs6000_elf_file_end): Emit fp .gnu_attribute for ELF 64-bit ABIs,
and SPE.  Emit long double tag value too.
(rs6000_opt_vars): Add gnu-attr.
* configure.ac (HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE): New ppc32 test.
* configure: Regenerate.
* config.in: Regenerate.

From-SVN: r240601
gcc/ChangeLog
gcc/config.in
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/sysv4.opt
gcc/configure
gcc/configure.ac
gcc/doc/invoke.texi