+static void export_modes(io_env_t *env)
+{
+ int i, n_modes = get_irp_n_modes();
+
+ fputs("modes {\n", env->file);
+
+ for(i = 0; i < n_modes; i++)
+ {
+ ir_mode *mode = get_irp_mode(i);
+ switch(get_mode_sort(mode))
+ {
+ case irms_auxiliary:
+ case irms_control_flow:
+ case irms_memory:
+ case irms_internal_boolean:
+ // skip "internal" modes, which may not be user defined
+ continue;
+ }
+
+ fprintf(env->file, "\tmode \"%s\" 0x%X %d %d %s %d %d ", get_mode_name(mode),
+ get_mode_sort(mode), get_mode_size_bits(mode), get_mode_sign(mode),
+ get_mode_arithmetic_name(get_mode_arithmetic(mode)), get_mode_modulo_shift(mode),
+ get_mode_n_vector_elems(mode));
+ if(mode_is_reference(mode))
+ {
+ write_mode(env, get_reference_mode_signed_eq(mode));
+ write_mode(env, get_reference_mode_unsigned_eq(mode));
+ }
+ fputc('\n', env->file);
+ }
+
+ fputs("}\n\n", env->file);
+}
+