CVS:
[libfirm] / ir / ir / irmode.h
index 24befb3..09a1eca 100644 (file)
@@ -3,6 +3,15 @@
 **
 ** Authors: Christian Schaefer
 **
+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.
+
+
+@@@ 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.
 */
 
 # ifndef _IRMODE_H_
 
 # define target_bits 8
 
-#define NUM_MODES 20
+# 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_e, */
+  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_p,
@@ -36,17 +50,7 @@ typedef enum { /* irm is short for `ir mode' */
   irm_max */
 } modecode;
 
-typedef struct {
-  modecode code;
-  ident *name;
-  int    size;
-  int    ld_align; /* ld means log2 */
-  struct tarval *min;
-  struct tarval *max;
-  struct tarval *null;
-  unsigned fsigned:1;
-  unsigned ffloat:1;
-} ir_mode;
+typedef struct ir_mode ir_mode;
 
 extern ir_mode *mode_T; /* tuple (none) */
 extern ir_mode *mode_f; /* signed float */
@@ -60,45 +64,64 @@ extern ir_mode *mode_i; /* signed integer */
 extern ir_mode *mode_I; /* unsigned integer */
 extern ir_mode *mode_l; /* signed long integer */
 extern ir_mode *mode_L; /* unsigned long integer */
-extern ir_mode *mode_B; /* bits */             // oblivious
+extern ir_mode *mode_B; /* bits */             /* oblivious */
 /* extern ir_mode *mode_c;  * char */
 extern ir_mode *mode_p; /* pointer */
 extern ir_mode *mode_b; /* internal boolean */
-extern ir_mode *mode_s;                        // oblivious
-extern ir_mode *mode_S;                        // oblivious
+extern ir_mode *mode_s;                        /* oblivious  */
+extern ir_mode *mode_S;                        /* oblivious */
 extern ir_mode *mode_X; /* execution */
 extern ir_mode *mode_M; /* memory */
 extern ir_mode *mode_R; /* block */
-extern ir_mode *mode_Z; /* infinit integers */ // oblivious
+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);
-# define is_chilCHIL(m) ((m) <= irm_L && (m) >= irm_c) // old
+# define is_chilCHIL(m) ((m) <= irm_L && (m) >= irm_c) /* old */
 int mode_is_num (ir_mode *mode);
 int mode_is_data (ir_mode *mode);
 int mode_is_datab (ir_mode *mode);