libFirm
irmode.h
1 /*
2  * This file is part of libFirm.
3  * Copyright (C) 2012 University of Karlsruhe.
4  */
5 
12 #ifndef FIRM_IR_IRMODE_H
13 #define FIRM_IR_IRMODE_H
14 
15 #include "firm_types.h"
16 #include "begin.h"
17 
18 #include <stddef.h>
19 
36 typedef enum ir_mode_arithmetic {
37  irma_none = 1,
42  irma_ieee754 = 256,
48 
65 FIRM_API ir_mode *new_int_mode(const char *name,
66  unsigned bit_size, int sign,
67  unsigned modulo_shift);
68 
74 FIRM_API ir_mode *new_reference_mode(const char *name,
75  unsigned bit_size,
76  unsigned modulo_shift);
77 
89 FIRM_API ir_mode *new_float_mode(const char *name,
90  ir_mode_arithmetic arithmetic,
91  unsigned exponent_size,
92  unsigned mantissa_size,
93  float_int_conversion_overflow_style_t
94  int_conv_overflow);
95 
100 FIRM_API ir_mode *new_non_arithmetic_mode(const char *name, unsigned bit_size);
101 
103 FIRM_API ident *get_mode_ident(const ir_mode *mode);
104 
106 FIRM_API const char *get_mode_name(const ir_mode *mode);
107 
109 FIRM_API unsigned get_mode_size_bits(const ir_mode *mode);
110 
113 FIRM_API unsigned get_mode_size_bytes(const ir_mode *mode);
114 
116 FIRM_API ir_mode_arithmetic get_mode_arithmetic(const ir_mode *mode);
117 
124 FIRM_API unsigned int get_mode_modulo_shift(const ir_mode *mode);
125 
132 FIRM_API ir_tarval *get_mode_min(const ir_mode *mode);
133 
140 FIRM_API ir_tarval *get_mode_max(const ir_mode *mode);
141 
150 FIRM_API ir_tarval *get_mode_null(const ir_mode *mode);
151 
159 FIRM_API ir_tarval *get_mode_one(const ir_mode *mode);
160 
167 FIRM_API ir_tarval *get_mode_all_one(const ir_mode *mode);
168 
176 FIRM_API ir_tarval *get_mode_infinite(const ir_mode *mode);
177 
178 FIRM_API ir_mode *mode_M;
180 FIRM_API ir_mode *mode_F;
181 FIRM_API ir_mode *mode_D;
182 FIRM_API ir_mode *mode_Bs;
183 FIRM_API ir_mode *mode_Bu;
184 FIRM_API ir_mode *mode_Hs;
185 FIRM_API ir_mode *mode_Hu;
186 FIRM_API ir_mode *mode_Is;
187 FIRM_API ir_mode *mode_Iu;
188 FIRM_API ir_mode *mode_Ls;
189 FIRM_API ir_mode *mode_Lu;
190 FIRM_API ir_mode *mode_P;
203 FIRM_API ir_mode *mode_b;
204 
205 FIRM_API ir_mode *mode_X;
206 FIRM_API ir_mode *mode_BB;
208 FIRM_API ir_mode *mode_T;
209 FIRM_API ir_mode *mode_ANY;
210 FIRM_API ir_mode *mode_BAD;
213 FIRM_API ir_mode *get_modeF(void);
215 FIRM_API ir_mode *get_modeD(void);
217 FIRM_API ir_mode *get_modeBs(void);
219 FIRM_API ir_mode *get_modeBu(void);
221 FIRM_API ir_mode *get_modeHs(void);
223 FIRM_API ir_mode *get_modeHu(void);
225 FIRM_API ir_mode *get_modeIs(void);
227 FIRM_API ir_mode *get_modeIu(void);
229 FIRM_API ir_mode *get_modeLs(void);
231 FIRM_API ir_mode *get_modeLu(void);
233 FIRM_API ir_mode *get_modeP(void);
235 FIRM_API ir_mode *get_modeb(void);
237 FIRM_API ir_mode *get_modeX(void);
239 FIRM_API ir_mode *get_modeBB(void);
241 FIRM_API ir_mode *get_modeM(void);
243 FIRM_API ir_mode *get_modeT(void);
245 FIRM_API ir_mode *get_modeANY(void);
247 FIRM_API ir_mode *get_modeBAD(void);
248 
250 FIRM_API void set_modeP(ir_mode *p);
251 
253 FIRM_API int mode_is_signed(const ir_mode *mode);
254 
256 FIRM_API int mode_is_float(const ir_mode *mode);
257 
259 FIRM_API int mode_is_int(const ir_mode *mode);
260 
262 FIRM_API int mode_is_reference(const ir_mode *mode);
263 
269 FIRM_API int mode_is_num(const ir_mode *mode);
270 
277 FIRM_API int mode_is_data(const ir_mode *mode);
278 
290 FIRM_API int smaller_mode(const ir_mode *sm, const ir_mode *lm);
291 
302 FIRM_API int values_in_mode(const ir_mode *sm, const ir_mode *lm);
303 
308 FIRM_API ir_mode *find_unsigned_mode(const ir_mode *mode);
309 
314 FIRM_API ir_mode *find_signed_mode(const ir_mode *mode);
315 
320 FIRM_API ir_mode *find_double_bits_int_mode(const ir_mode *mode);
321 
327 FIRM_API int mode_has_signed_zero(const ir_mode *mode);
328 
332 FIRM_API int mode_overflow_on_unary_Minus(const ir_mode *mode);
333 
340 FIRM_API int mode_wrap_around(const ir_mode *mode);
341 
346 FIRM_API ir_mode *get_reference_offset_mode(const ir_mode *mode);
347 
351 FIRM_API void set_reference_offset_mode(ir_mode *ref_mode, ir_mode *int_mode);
352 
357 FIRM_API unsigned get_mode_mantissa_size(const ir_mode *mode);
358 
362 FIRM_API unsigned get_mode_exponent_size(const ir_mode *mode);
363 
367 FIRM_API float_int_conversion_overflow_style_t get_mode_float_int_overflow(
368  const ir_mode *mode);
369 
375 FIRM_API int is_reinterpret_cast(const ir_mode *src, const ir_mode *dst);
376 
380 FIRM_API ir_type *get_type_for_mode(const ir_mode *mode);
381 
383 FIRM_API size_t ir_get_n_modes(void);
384 
386 FIRM_API ir_mode *ir_get_mode(size_t num);
387 
390 #include "end.h"
391 
392 #endif
const char * get_mode_name(const ir_mode *mode)
Returns the null-terminated name of this mode.
ir_mode * mode_Ls
int64
Definition: irmode.h:188
ir_mode * new_reference_mode(const char *name, unsigned bit_size, unsigned modulo_shift)
Create a new reference mode.
ir_tarval * get_mode_min(const ir_mode *mode)
Returns the smallest representable value of a given mode.
ir_tarval * get_mode_one(const ir_mode *mode)
Returns the value One, represented in this mode.
void set_reference_offset_mode(ir_mode *ref_mode, ir_mode *int_mode)
Sets the (signed) integer equivalent mode for an reference mode.
ir_mode * new_float_mode(const char *name, ir_mode_arithmetic arithmetic, unsigned exponent_size, unsigned mantissa_size, float_int_conversion_overflow_style_t int_conv_overflow)
Create a new ieee754 float mode.
ir_tarval * get_mode_max(const ir_mode *mode)
Returns the biggest representable value of a given mode.
ir_mode * get_modeBu(void)
Returns byte unsigned mode.
ir_mode * get_modeM(void)
Returns memory mode.
ir_mode * mode_Hu
uint16
Definition: irmode.h:185
ir_mode * mode_b
This mode represents (parts of) the processor status flag queried in conditional jumps or predicated ...
Definition: irmode.h:203
ir_mode * mode_X
execution
Definition: irmode.h:205
ir_mode * find_double_bits_int_mode(const ir_mode *mode)
Returns an integer mode with 2*n bits for a given integer mode with n bits.
int mode_overflow_on_unary_Minus(const ir_mode *mode)
Returns non-zero if the given mode might overflow on unary Minus.
ir_mode * get_modeBB(void)
Returns Basic-Block mode.
ir_mode * mode_Lu
uint64
Definition: irmode.h:189
int mode_is_reference(const ir_mode *mode)
Returns 1 if mode is for references/pointers, 0 otherwise.
ir_mode * get_modeLs(void)
Returns long signed mode.
ir_mode * mode_Iu
uint32
Definition: irmode.h:187
int mode_is_num(const ir_mode *mode)
Returns 1 if mode is for numeric values, 0 otherwise.
ir_mode * ir_get_mode(size_t num)
Returns known mode number num.
ir_mode * get_modeX(void)
Returns control-flow mode.
void set_modeP(ir_mode *p)
Sets the machine specific pointer mode.
ir_mode * get_modeBAD(void)
Returns BAD mode.
float_int_conversion_overflow_style_t get_mode_float_int_overflow(const ir_mode *mode)
Returns semantic on float to integer conversion overflow.
ir_tarval * get_mode_null(const ir_mode *mode)
Returns the value Zero represented in this mode.
unsigned get_mode_size_bits(const ir_mode *mode)
Returns the size of values of the mode in bits.
ir_mode * get_modeHu(void)
Returns halfword unsigned mode.
ir_mode * mode_P
pointer
Definition: irmode.h:190
Values of the mode are represented according to ieee754 floating point standard.
Definition: irmode.h:42
unsigned get_mode_size_bytes(const ir_mode *mode)
Returns the size of values of the mode in bytes.
ir_mode * get_modeIu(void)
Returns integer unsigned mode.
ir_mode_arithmetic get_mode_arithmetic(const ir_mode *mode)
Returns the arithmetic of a mode.
int mode_is_float(const ir_mode *mode)
Returns 1 if mode is for floating point numbers, 0 otherwise.
struct ir_tarval ir_tarval
Target Machine Value.
Definition: firm_types.h:68
int mode_is_data(const ir_mode *mode)
Returns 1 if mode is for data values, 0 otherwise.
ir_mode * get_modeLu(void)
Returns long unsigned mode.
ir_mode * mode_BAD
bad mode
Definition: irmode.h:210
ir_mode * get_modeANY(void)
Returns ANY mode.
ir_mode * mode_D
ieee754 binary64 float (double precision)
Definition: irmode.h:181
int mode_wrap_around(const ir_mode *mode)
Returns non-zero if the mode has a reversed wrap-around logic, especially (a + x) - x == a...
int is_reinterpret_cast(const ir_mode *src, const ir_mode *dst)
Returns non-zero if the cast from mode src to mode dst is a reinterpret cast (i.e.
struct ir_mode ir_mode
SSA Value mode.
Definition: firm_types.h:59
ir_mode * mode_Hs
int16
Definition: irmode.h:184
ir_mode * mode_ANY
undefined mode
Definition: irmode.h:209
ir_mode * get_modeT(void)
Returns tuple mode.
ir_mode * get_modeb(void)
Returns internal boolean mode.
ir_mode_arithmetic
These values represent the different arithmetic operations possible with a mode.
Definition: irmode.h:36
const char ident
Identifier.
Definition: firm_types.h:50
ir_type * get_type_for_mode(const ir_mode *mode)
Returns the primitive type matching the given mode.
ir_mode * get_modeBs(void)
Returns byte signed mode.
x86 extended floating point values
Definition: irmode.h:45
ir_mode * new_int_mode(const char *name, unsigned bit_size, int sign, unsigned modulo_shift)
Creates a new mode.
For modes for which no representation is specified.
Definition: irmode.h:37
ir_mode * mode_F
ieee754 binary32 float (single precision)
Definition: irmode.h:180
ir_mode * mode_T
tuple (none)
Definition: irmode.h:208
ir_mode * mode_M
memory
Definition: irmode.h:178
unsigned int get_mode_modulo_shift(const ir_mode *mode)
Returns the modulo shift attribute.
ir_mode * get_modeHs(void)
Returns halfword signed mode.
int smaller_mode(const ir_mode *sm, const ir_mode *lm)
Returns true if a value of mode sm can be converted to mode lm without loss.
ir_tarval * get_mode_infinite(const ir_mode *mode)
Returns a positive infinite value of a mode.
ir_mode * get_reference_offset_mode(const ir_mode *mode)
Returns the integer equivalent mode for an reference mode.
ir_mode * mode_Bu
uint8
Definition: irmode.h:183
int values_in_mode(const ir_mode *sm, const ir_mode *lm)
Returns true if no information is lost when converting a value of mode sm into mode lm (and back to m...
ir_mode * get_modeD(void)
Returns double mode.
ident * get_mode_ident(const ir_mode *mode)
Returns the ident* of the mode.
ir_mode * mode_Is
int32
Definition: irmode.h:186
unsigned get_mode_exponent_size(const ir_mode *mode)
Returns size of exponent in bits (for float modes)
int mode_is_signed(const ir_mode *mode)
Returns 1 if mode is signed, 0 otherwise.
ir_mode * get_modeF(void)
Returns float mode.
size_t ir_get_n_modes(void)
Returns number of known modes.
ir_mode * mode_BB
block
Definition: irmode.h:206
ir_mode * new_non_arithmetic_mode(const char *name, unsigned bit_size)
Creates a new mode for data values which are not used to perform arithmetic.
ir_mode * mode_Bs
int8
Definition: irmode.h:182
unsigned get_mode_mantissa_size(const ir_mode *mode)
Returns size of bits used for to encode the mantissa (for float modes).
Values of the mode are represented as two&#39;s complement.
Definition: irmode.h:39
ir_mode * find_unsigned_mode(const ir_mode *mode)
Returns a matching unsigned mode for a given integer signed mode.
ir_mode * find_signed_mode(const ir_mode *mode)
Returns a matching signed mode for a given integer unsigned mode.
int mode_is_int(const ir_mode *mode)
Returns 1 if mode is for integer numbers, 0 otherwise.
struct ir_type ir_type
Type.
Definition: firm_types.h:71
int mode_has_signed_zero(const ir_mode *mode)
Returns non-zero if the given mode has negative zeros, i.e.
ir_mode * get_modeIs(void)
Returns integer signed mode.
ir_mode * get_modeP(void)
Returns pointer mode.
ir_tarval * get_mode_all_one(const ir_mode *mode)
Returns the value where all bits are One, represented in this mode.