aboutsummaryrefslogtreecommitdiff
path: root/gcc/genmodes.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/genmodes.c')
-rw-r--r--gcc/genmodes.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/genmodes.c b/gcc/genmodes.c
index bd78310..34b52fe 100644
--- a/gcc/genmodes.c
+++ b/gcc/genmodes.c
@@ -358,6 +358,14 @@ complete_mode (struct mode_data *m)
m->component = 0;
break;
+ case MODE_OPAQUE:
+ /* Opaque modes have size and precision. */
+ validate_mode (m, OPTIONAL, SET, UNSET, UNSET, UNSET);
+
+ m->ncomponents = 1;
+ m->component = 0;
+ break;
+
case MODE_PARTIAL_INT:
/* A partial integer mode uses ->component to say what the
corresponding full-size integer mode is, and may also
@@ -588,6 +596,20 @@ make_int_mode (const char *name,
m->precision = precision;
}
+#define OPAQUE_MODE(N, B) \
+ make_opaque_mode (#N, -1U, B, __FILE__, __LINE__)
+
+static void ATTRIBUTE_UNUSED
+make_opaque_mode (const char *name,
+ unsigned int precision,
+ unsigned int bytesize,
+ const char *file, unsigned int line)
+{
+ struct mode_data *m = new_mode (MODE_OPAQUE, name, file, line);
+ m->bytesize = bytesize;
+ m->precision = precision;
+}
+
#define FRACT_MODE(N, Y, F) \
make_fixed_point_mode (MODE_FRACT, #N, Y, 0, F, __FILE__, __LINE__)