diff options
| author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-08-30 11:09:56 +0000 |
|---|---|---|
| committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-08-30 11:09:56 +0000 |
| commit | 1ce87609c91e51d7eee8284c5fe000c7d5b240db (patch) | |
| tree | 546db64fb195401be1446efc42e41df63d77178e /gcc/targhooks.c | |
| parent | 5c20c4af29da29d2bb74b1fdf3c116f564431878 (diff) | |
| download | gcc-1ce87609c91e51d7eee8284c5fe000c7d5b240db.zip gcc-1ce87609c91e51d7eee8284c5fe000c7d5b240db.tar.gz gcc-1ce87609c91e51d7eee8284c5fe000c7d5b240db.tar.bz2 | |
[13/77] Make floatn_mode return an opt_scalar_float_mode
As per subject.
2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* target.def (default_floatn_mode): Return an opt_scalar_float_mode.
* doc/tm.texi: Regenerate.
* config/arm/arm.c (arm_floatn_mode): Return an opt_scalar_float_mode.
* config/powerpcspe/powerpcspe.c (rs6000_floatn_mode): Likewise.
* config/rs6000/rs6000.c (rs6000_floatn_mode): Likewise.
* targhooks.h (default_floatn_mode): Likewise.
* targhooks.c (default_floatn_mode): Likewise.
* tree.c (build_common_tree_nodes): Update accordingly.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251465
Diffstat (limited to 'gcc/targhooks.c')
| -rw-r--r-- | gcc/targhooks.c | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/gcc/targhooks.c b/gcc/targhooks.c index 1be139f..76ef7c9 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -469,12 +469,13 @@ default_libgcc_floating_mode_supported_p (machine_mode mode) /* Return the machine mode to use for the type _FloatN, if EXTENDED is false, or _FloatNx, if EXTENDED is true, or VOIDmode if not supported. */ -machine_mode +opt_scalar_float_mode default_floatn_mode (int n, bool extended) { if (extended) { - machine_mode cand1 = VOIDmode, cand2 = VOIDmode; + opt_scalar_float_mode cand1, cand2; + scalar_float_mode mode; switch (n) { case 32: @@ -499,20 +500,21 @@ default_floatn_mode (int n, bool extended) /* Those are the only valid _FloatNx types. */ gcc_unreachable (); } - if (cand1 != VOIDmode - && REAL_MODE_FORMAT (cand1)->ieee_bits > n - && targetm.scalar_mode_supported_p (cand1) - && targetm.libgcc_floating_mode_supported_p (cand1)) + if (cand1.exists (&mode) + && REAL_MODE_FORMAT (mode)->ieee_bits > n + && targetm.scalar_mode_supported_p (mode) + && targetm.libgcc_floating_mode_supported_p (mode)) return cand1; - if (cand2 != VOIDmode - && REAL_MODE_FORMAT (cand2)->ieee_bits > n - && targetm.scalar_mode_supported_p (cand2) - && targetm.libgcc_floating_mode_supported_p (cand2)) + if (cand2.exists (&mode) + && REAL_MODE_FORMAT (mode)->ieee_bits > n + && targetm.scalar_mode_supported_p (mode) + && targetm.libgcc_floating_mode_supported_p (mode)) return cand2; } else { - machine_mode cand = VOIDmode; + opt_scalar_float_mode cand; + scalar_float_mode mode; switch (n) { case 16: @@ -545,13 +547,13 @@ default_floatn_mode (int n, bool extended) default: break; } - if (cand != VOIDmode - && REAL_MODE_FORMAT (cand)->ieee_bits == n - && targetm.scalar_mode_supported_p (cand) - && targetm.libgcc_floating_mode_supported_p (cand)) + if (cand.exists (&mode) + && REAL_MODE_FORMAT (mode)->ieee_bits == n + && targetm.scalar_mode_supported_p (mode) + && targetm.libgcc_floating_mode_supported_p (mode)) return cand; } - return VOIDmode; + return opt_scalar_float_mode (); } /* Make some target macros useable by target-independent code. */ |
