diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-08-30 11:10:18 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-08-30 11:10:18 +0000 |
commit | bf862c537bfd76233e3938cb3811f0fa2d27de25 (patch) | |
tree | 5fd8f2ebbbbf5d9f4a23b09cb8fb7bf2880aed0a /gcc/machmode.h | |
parent | 501623d42404843e3b737db24bbd575db937ce1d (diff) | |
download | gcc-bf862c537bfd76233e3938cb3811f0fa2d27de25.zip gcc-bf862c537bfd76233e3938cb3811f0fa2d27de25.tar.gz gcc-bf862c537bfd76233e3938cb3811f0fa2d27de25.tar.bz2 |
[16/77] Add scalar_int_mode_pod
This patch adds a POD class for scalar integers, as an instance
of a new pod_mode template. Later patches will use pod_mode in
situations that really do need to be POD; this patch is simply
using PODs to remove load-time initialisation.
2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* coretypes.h (pod_mode): New type.
(scalar_int_mode_pod): New typedef.
* machmode.h (pod_mode): New class.
(int_n_data_t::m): Change type to scalar_int_mode_pod.
* genmodes.c (emit_mode_int_n): Update accordingly.
* lower-subreg.h (target_lower_subreg): Change type to
scalar_int_mode_pod.
* gdbhooks.py (build_pretty_printer): Handle pod_mode and
scalar_int_mode_pod.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251468
Diffstat (limited to 'gcc/machmode.h')
-rw-r--r-- | gcc/machmode.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/gcc/machmode.h b/gcc/machmode.h index dda7c0a..25e72a8 100644 --- a/gcc/machmode.h +++ b/gcc/machmode.h @@ -293,6 +293,19 @@ opt_mode<T>::exists (U *mode) const return false; } +/* A POD version of mode class T. */ + +template<typename T> +struct pod_mode +{ + typedef typename mode_traits<T>::from_int from_int; + + machine_mode m_mode; + ALWAYS_INLINE operator machine_mode () const { return m_mode; } + ALWAYS_INLINE operator T () const { return from_int (m_mode); } + ALWAYS_INLINE pod_mode &operator = (const T &m) { m_mode = m; return *this; } +}; + /* Return true if mode M has type T. */ template<typename T> @@ -647,7 +660,7 @@ extern void init_adjust_machine_modes (void); struct int_n_data_t { /* These parts are initailized by genmodes output */ unsigned int bitsize; - machine_mode m; + scalar_int_mode_pod m; /* RID_* is RID_INTN_BASE + index into this array */ }; |