===================================================================
@@ -63,6 +63,7 @@ typedef opt_mode<scalar_mode> opt_scalar
typedef opt_mode<scalar_int_mode> opt_scalar_int_mode;
typedef opt_mode<scalar_float_mode> opt_scalar_float_mode;
template<typename> class pod_mode;
+typedef pod_mode<scalar_mode> scalar_mode_pod;
typedef pod_mode<scalar_int_mode> scalar_int_mode_pod;
/* Subclasses of rtx_def, using indentation to show the class
===================================================================
@@ -548,7 +548,8 @@ def build_pretty_printer():
'opt_mode', OptMachineModePrinter)
pp.add_printer_for_regex(r'pod_mode<(\S+)>',
'pod_mode', MachineModePrinter)
- pp.add_printer_for_types(['scalar_int_mode_pod'],
+ pp.add_printer_for_types(['scalar_int_mode_pod',
+ 'scalar_mode_pod'],
'pod_mode', MachineModePrinter)
for mode in 'scalar_mode', 'scalar_int_mode', 'scalar_float_mode':
pp.add_printer_for_types([mode], mode, MachineModePrinter)
===================================================================
@@ -894,4 +894,22 @@ #define FOR_EACH_2XWIDER_MODE(ITERATOR,
mode_iterator::iterate_p (&(ITERATOR)); \
mode_iterator::get_2xwider (&(ITERATOR)))
+template<typename T>
+void
+gt_ggc_mx (pod_mode<T> *)
+{
+}
+
+template<typename T>
+void
+gt_pch_nx (pod_mode<T> *)
+{
+}
+
+template<typename T>
+void
+gt_pch_nx (pod_mode<T> *, void (*) (void *, void *), void *)
+{
+}
+
#endif /* not HAVE_MACHINE_MODES */
===================================================================
@@ -22,8 +22,8 @@ #define GCC_FIXED_VALUE_H
struct GTY(()) fixed_value
{
- double_int data; /* Store data up to 2 wide integers. */
- machine_mode mode; /* Use machine mode to know IBIT and FBIT. */
+ double_int data; /* Store data up to 2 wide integers. */
+ scalar_mode_pod mode; /* Use machine mode to know IBIT and FBIT. */
};
#define FIXED_VALUE_TYPE struct fixed_value
===================================================================
@@ -1952,7 +1952,7 @@ fold_convert_const_int_from_fixed (tree
{
tree t;
double_int temp, temp_trunc;
- machine_mode mode;
+ scalar_mode mode;
/* Right shift FIXED_CST to temp by fbit. */
temp = TREE_FIXED_CST (arg1).data;
===================================================================
@@ -208,7 +208,7 @@ unpack_ts_real_cst_value_fields (struct
unpack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
{
FIXED_VALUE_TYPE *fp = ggc_alloc<fixed_value> ();
- fp->mode = bp_unpack_machine_mode (bp);
+ fp->mode = as_a <scalar_mode> (bp_unpack_machine_mode (bp));
fp->data.low = bp_unpack_var_len_int (bp);
fp->data.high = bp_unpack_var_len_int (bp);
TREE_FIXED_CST_PTR (expr) = fp;