X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firmode.h;h=09a1eca57ea2ff247612e4e48cc282c4eea4b390;hb=5f8ddee6b08c8040c0a304a347d65045c1141d52;hp=24befb3862774cced50b130f8aa825e7e54c061b;hpb=efbeaff549fcc6015da255ed4d453a95937ff0fd;p=libfirm diff --git a/ir/ir/irmode.h b/ir/ir/irmode.h index 24befb386..09a1eca57 100644 --- a/ir/ir/irmode.h +++ b/ir/ir/irmode.h @@ -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_ @@ -12,11 +21,16 @@ # 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);