irmode.h Modes for ir operators.
This module specifies the modes that type the firm nodes. See
-UKA tech report 1999-44 for more information about modes.
+UKA tech report 1999-14 for more information about modes.
@@@ This file is at the level of the original fiasco. It needs to be ported
-to the version of the tech report!!! This will be done with the reimplementation
-of the tarval module.
+to the version of the tech report!!! This will be done with the
+reimplementation of the tarval module.
*/
+/* $Id$ */
+
# ifndef _IRMODE_H_
# define _IRMODE_H_
# define NUM_MODES 20
+#ifndef _TARVAL_TYPEDEF_
+#define _TARVAL_TYPEDEF_
+typedef struct tarval tarval;
+#endif
+
typedef enum { /* irm is short for `ir mode' */
irm_T, /* former irm_N */
- irm_f, irm_d,
- irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L,
- irm_B, irm_b,
+ irm_f, irm_d, /* 1, 2 */
+ irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L, /* 3 .. 10 */
+ irm_B, irm_b, /* 11, 12 */
irm_p,
- irm_s, irm_S,
+ irm_s, irm_S, /* 14, 15 */
irm_X, irm_M, irm_R, irm_Z,
irm_max
- /* according to tech report 1999-44:
+ /* according to tech report 1999-14:
irm_BB, irm_X, // basic block, execution
irm_F, irm_D, irm_E, // float, double, extended
irm_B, irm_Bu, irm_H, irm_Hu, irm_I, irm_Iu, irm_L, irm_Lu,
irm_max */
} modecode;
-typedef struct {
- modecode code;
- ident *name; /* Name of this mode */
- int size; /* size of the mode in Bytes. */
- int ld_align; /* ld means log2 */
- struct tarval *min; /* largest value to be represented by this mode */
- struct tarval *max; /* smallest value to be represented by this mode */
- struct tarval *null; /* Representation of zero in this mode */
- unsigned fsigned:1; /* signedness of this mode */
- unsigned ffloat:1; /* true if this is a float */
-} ir_mode;
+typedef struct ir_mode ir_mode;
extern ir_mode *mode_T; /* tuple (none) */
extern ir_mode *mode_f; /* signed float */
extern ir_mode *mode_Z; /* infinit integers */ /* oblivious */
extern ir_mode *mode_T; /* tuple (none) */
-void init_mode (void);
-
-modecode get_modecode_of_mode (ir_mode *mode);
-/* void set_modecode_of_mode (ir_mode *mode, modecode code); */
-ident *get_ident_of_mode (ir_mode *mode);
-ident *get_mode_ident (ir_mode *mode);
-
-/* void set_ident_of_mode (ir_mode *mode, ident *name); */
-int get_size_of_mode (ir_mode *mode);
-/* void set_size_of_mode (ir_mode *mode, int size); */
-int get_ld_align_of_mode (ir_mode *mode);
-/* void set_ld_align_of_mode (ir_mode *mode, int ld_align); */
-struct tarval *get_min_of_mode (ir_mode *mode);
-/* void set_min_of_mode (ir_mode *mode, struct tarval *min); */
-struct tarval *get_max_of_mode (ir_mode *mode);
-/* void set_max_of_mode (ir_mode *mode, struct tarval *max); */
-struct tarval *get_null_of_mode (ir_mode *mode);
-/* void set_null_of_mode (ir_mode *mode, struct tarval *null); */
-unsigned get_fsigned_of_mode (ir_mode *mode);
-/* void set_fsigned_of_mode (ir_mode *mode, unsigned fsigned); */
-unsigned get_ffloat_of_mode (ir_mode *mode);
-/* void set_ffloat_of_mode (ir_mode *mode, unsigned ffloat); */
+/* An enum for this mode */
+modecode get_mode_modecode (ir_mode *mode);
+/* void set_mode_modecode (ir_mode *mode, modecode code); */
+
+/* The ident of this mode */
+ident *get_mode_ident (ir_mode *mode);
+/* void set_mode_ident (ir_mode *mode, ident *id); */
+
+/* The name of this mode */
+const char *get_mode_name (ir_mode *mode);
+/* void set_mode_name (ir_mode *mode, char *name); */
+
+/* The size of values of the mode in bytes. */
+int get_mode_size (ir_mode *mode);
+/* void set_mode_size (ir_mode *mode, int size); */
+
+/* The alignment of values of the mode. */
+int get_mode_ld_align (ir_mode *mode);
+/* void set_mode_ld_align (ir_mode *mode, int ld_align); */
+
+/* The smallest representable value */
+tarval *get_mode_min (ir_mode *mode);
+/* void set_mode_min (ir_mode *mode, tarval *min); */
+
+/* The biggest representable value */
+tarval *get_mode_max (ir_mode *mode);
+/* void set_mode_max (ir_mode *mode, tarval *max); */
+
+/* The value Zero represented in this mode */
+tarval *get_mode_null (ir_mode *mode);
+/* void set_mode_null (ir_mode *mode, tarval *null); */
+
+/* Returns 1 if mode is signed, else 0. */
+unsigned get_mode_fsigned (ir_mode *mode);
+/* void set_mode_fsigned (ir_mode *mode, unsigned fsigned); */
+
+/* Returns 1 if mode is float, else 0. */
+unsigned get_mode_ffloat (ir_mode *mode);
+/* void set_mode_ffloat (ir_mode *mode, unsigned ffloat); */
+
+/* Test for a certain class of modes. */
int mode_is_signed (ir_mode *mode);
int mode_is_float (ir_mode *mode);
int mode_is_int (ir_mode *mode);