-/*
- * Creates a new vector mode.
- */
-ir_mode *new_ir_vector_mode(const char *name, ir_mode_sort sort, int bit_size, unsigned num_of_elem, int sign,
- ir_mode_arithmetic arithmetic, unsigned int modulo_shift)
-{
- ir_mode mode_tmpl;
- ir_mode *mode = NULL;
-
- mode_tmpl.name = new_id_from_str(name);
- mode_tmpl.sort = sort;
- mode_tmpl.size = bit_size * num_of_elem;
- mode_tmpl.sign = sign ? 1 : 0;
- mode_tmpl.modulo_shift = (mode_tmpl.sort == irms_int_number) ? modulo_shift : 0;
- mode_tmpl.vector_elem = num_of_elem;
- mode_tmpl.arithmetic = arithmetic;
- mode_tmpl.link = NULL;
- mode_tmpl.tv_priv = NULL;
-
- mode = find_mode(&mode_tmpl);
- if (mode) {
- hook_new_mode(&mode_tmpl, mode);
- return mode;
- }
-
- if (num_of_elem <= 1) {
- panic("vector modes should have at least 2 elements");
- }
-
- /* sanity checks */
- switch (sort) {
- case irms_auxiliary:
- case irms_control_flow:
- case irms_memory:
- case irms_internal_boolean:
- panic("internal modes cannot be user defined");
-
- case irms_reference:
- panic("only integer and floating point modes can be vectorized");
-
- case irms_float_number:
- panic("not yet implemented");
-
- case irms_int_number:
- mode = register_mode(&mode_tmpl);
- }
- assert(mode != NULL);
- return mode;
-}
-