aboutsummaryrefslogtreecommitdiff
path: root/gcc/machmode.h
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2017-08-30 11:10:18 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2017-08-30 11:10:18 +0000
commitbf862c537bfd76233e3938cb3811f0fa2d27de25 (patch)
tree5fd8f2ebbbbf5d9f4a23b09cb8fb7bf2880aed0a /gcc/machmode.h
parent501623d42404843e3b737db24bbd575db937ce1d (diff)
downloadgcc-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.h15
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 */
};