-ir_mode *register_mode(ir_mode* new_mode);
-
-/** ********** Access methods to read mode information *********** **/
-
-#ifdef MODE_ACCESS_DEFINES
-# include "irmode_t.h"
-# define get_mode_modecode(mode) (mode)->code
-# define get_mode_ident(mode) (mode)->name
-# define get_mode_name(mode) id_to_str((mode)->name)
-# define get_mode_sort(mode) (mode)->sort
-# define get_mode_size(mode) (mode)->size
-# define get_mode_align(mode) (mode)->align
-#else
-/* The classification of the mode */
-modecode get_mode_modecode(ir_mode *mode);
-
-/* The ident* name of the mode */
-ident *get_mode_ident(ir_mode *mode);
-
-/* The null-terminated name of this mode */
-const char *get_mode_name(ir_mode *mode);
-
-/* A coarse classification of the mode */
-mode_sort get_mode_sort(ir_mode *mode);
-
-/** The size of values of the mode in bits. */
-int get_mode_size_bits(ir_mode *mode);
-/** The size of values of the mode in bytes. If the size is not
- dividable by 8 returns -1. */
-int get_mode_size_bytes(ir_mode *mode);
-
-/* The alignment of values of the mode in bytes. */
-int get_mode_align(ir_mode *mode);
-#endif
+ir_mode *new_ir_mode(const char *name, mode_sort sort, int bit_size, int sign, mode_arithmetic arithmetic, unsigned int modulo_shift);
+
+/**
+ * Creates a new vector mode.
+ *
+ * @param name the name of the mode to be created
+ * @param sort the mode_sort of the mode to be created
+ * @param bit_size number of bits for one element of this mode
+ * @param num_of_elem number of elements in this vector mode
+ * @param sign non-zero if this is a signed mode
+ * @param arithmetic arithmetic operations possible with a mode
+ * @param modulo_shift Is ignored for modes other than integer.
+ *
+ * This function constructs a new vector mode given by the parameters.
+ * If the parameters match an already defined mode, this mode is returned.
+ * If the mode is newly allocated, a new unique mode_code is chosen.
+ * Also, special value tarvals will be calculated such as null,
+ * min, max and can be retrieved using the get_mode_* functions
+ *
+ * @return
+ * The new mode or NULL on error.
+ */
+ir_mode *new_ir_vector_mode(const char *name, mode_sort sort, int bit_size, unsigned num_of_elem, int sign,
+ mode_arithmetic arithmetic, unsigned int modulo_shift );
+
+/**
+ * Checks whether a pointer points to a mode.
+ *
+ * @param thing an arbitrary pointer
+ *
+ * @return
+ * true if the thing is a mode, else false
+ */
+int is_mode(void *thing);
+
+/* ********** Access methods to read mode information *********** */
+
+/** Returns the classification of the mode */
+modecode get_mode_modecode(const ir_mode *mode);
+
+/** Returns the ident* of the mode */
+ident *get_mode_ident(const ir_mode *mode);
+
+/** Returns the null-terminated name of this mode. */
+const char *get_mode_name(const ir_mode *mode);
+
+/** Returns a coarse classification of the mode. */
+mode_sort get_mode_sort(const ir_mode *mode);
+
+/** Returns the size of values of the mode in bits. */
+int get_mode_size_bits(const ir_mode *mode);
+
+/** Returns the size of values of the mode in bytes.
+ * If the size is not dividable by 8 returns -1. */
+int get_mode_size_bytes(const ir_mode *mode);
+
+/** Returns the signess of a mode.
+ *
+ * Returns the signess of a mode: 1 if mode is signed. */
+int get_mode_sign(const ir_mode *mode);
+
+/** Returns the arithmetic of a mode */
+int get_mode_arithmetic(const ir_mode *mode);
+
+/** Get the modulo shift attribute.
+ *
+ * Attribute modulo shift specifies for modes of kind irms_int_number
+ * whether shift applies modulo to value of bits to shift. Zero for
+ * modes that are not integer.
+ */
+unsigned int get_mode_modulo_shift(const ir_mode *mode);
+
+/** Return the number of vector elements.
+ *
+ * Attribute vector_elem specifies the number of vector elements of
+ * a vector mode. For non-vector modes it returns 1 for data and 0
+ * for all other modes
+ */
+unsigned int get_mode_n_vector_elems(const ir_mode *mode);