1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
4 ** Authors: Christian Schaefer
6 irmode.h Modes for ir operators.
8 This module specifies the modes that type the firm nodes. See
9 UKA tech report 1999-44 for more information about modes.
12 @@@ This file is at the level of the original fiasco. It needs to be ported
13 to the version of the tech report!!! This will be done with the reimplementation
22 # define target_bits 8
26 typedef enum { /* irm is short for `ir mode' */
27 irm_T, /* former irm_N */
28 irm_f, irm_d, /* irm_e, */
29 irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L,
33 irm_X, irm_M, irm_R, irm_Z,
35 /* according to tech report 1999-44:
36 irm_BB, irm_X, // basic block, execution
37 irm_F, irm_D, irm_E, // float, double, extended
38 irm_B, irm_Bu, irm_H, irm_Hu, irm_I, irm_Iu, irm_L, irm_Lu,
39 // byte, short, int, long
42 irm_b, // internal boolean
50 ident *name; /* Name of this mode */
51 int size; /* size of the mode in Bytes. */
52 int ld_align; /* ld means log2 */
53 struct tarval *min; /* largest value to be represented by this mode */
54 struct tarval *max; /* smallest value to be represented by this mode */
55 struct tarval *null; /* Representation of zero in this mode */
56 unsigned fsigned:1; /* signedness of this mode */
57 unsigned ffloat:1; /* true if this is a float */
60 extern ir_mode *mode_T; /* tuple (none) */
61 extern ir_mode *mode_f; /* signed float */
62 extern ir_mode *mode_d; /* signed double */
63 /* extern ir_mode *mode_e; * signed extended */
64 extern ir_mode *mode_c; /* signed byte (former char) */
65 extern ir_mode *mode_C; /* unsigned byte (former char) */
66 extern ir_mode *mode_h; /* signed short integer */
67 extern ir_mode *mode_H; /* unsigened short integer */
68 extern ir_mode *mode_i; /* signed integer */
69 extern ir_mode *mode_I; /* unsigned integer */
70 extern ir_mode *mode_l; /* signed long integer */
71 extern ir_mode *mode_L; /* unsigned long integer */
72 extern ir_mode *mode_B; /* bits */ /* oblivious */
73 /* extern ir_mode *mode_c; * char */
74 extern ir_mode *mode_p; /* pointer */
75 extern ir_mode *mode_b; /* internal boolean */
76 extern ir_mode *mode_s; /* oblivious */
77 extern ir_mode *mode_S; /* oblivious */
78 extern ir_mode *mode_X; /* execution */
79 extern ir_mode *mode_M; /* memory */
80 extern ir_mode *mode_R; /* block */
81 extern ir_mode *mode_Z; /* infinit integers */ /* oblivious */
82 extern ir_mode *mode_T; /* tuple (none) */
84 void init_mode (void);
86 modecode get_modecode_of_mode (ir_mode *mode);
87 /* void set_modecode_of_mode (ir_mode *mode, modecode code); */
88 ident *get_ident_of_mode (ir_mode *mode);
89 ident *get_mode_ident (ir_mode *mode);
91 /* void set_ident_of_mode (ir_mode *mode, ident *name); */
92 int get_size_of_mode (ir_mode *mode);
93 /* void set_size_of_mode (ir_mode *mode, int size); */
94 int get_ld_align_of_mode (ir_mode *mode);
95 /* void set_ld_align_of_mode (ir_mode *mode, int ld_align); */
96 struct tarval *get_min_of_mode (ir_mode *mode);
97 /* void set_min_of_mode (ir_mode *mode, struct tarval *min); */
98 struct tarval *get_max_of_mode (ir_mode *mode);
99 /* void set_max_of_mode (ir_mode *mode, struct tarval *max); */
100 struct tarval *get_null_of_mode (ir_mode *mode);
101 /* void set_null_of_mode (ir_mode *mode, struct tarval *null); */
102 unsigned get_fsigned_of_mode (ir_mode *mode);
103 /* void set_fsigned_of_mode (ir_mode *mode, unsigned fsigned); */
104 unsigned get_ffloat_of_mode (ir_mode *mode);
105 /* void set_ffloat_of_mode (ir_mode *mode, unsigned ffloat); */
107 int mode_is_signed (ir_mode *mode);
108 int mode_is_float (ir_mode *mode);
109 int mode_is_int (ir_mode *mode);
110 # define is_chilCHIL(m) ((m) <= irm_L && (m) >= irm_c) /* old */
111 int mode_is_num (ir_mode *mode);
112 int mode_is_data (ir_mode *mode);
113 int mode_is_datab (ir_mode *mode);
114 int mode_is_dataM (ir_mode *mode);
116 # endif /* _IRMODE_H_ */