libFirm 1.20
|
This module specifies the modes that type the firm nodes. More...
Typedefs | |
typedef struct ir_mode | ir_mode |
SSA Value mode. | |
Enumerations | |
enum | ir_mode_arithmetic { irma_uninitialized = 0, irma_none = 1, irma_twos_complement = 2, irma_ieee754 = 256, irma_x86_extended_float, irma_last = irma_x86_extended_float } |
These values represent the different arithmetic operations possible with a mode. More... | |
Functions | |
ir_mode * | new_int_mode (const char *name, ir_mode_arithmetic arithmetic, unsigned bit_size, int sign, unsigned modulo_shift) |
Creates a new mode. | |
ir_mode * | new_reference_mode (const char *name, ir_mode_arithmetic arithmetic, unsigned bit_size, unsigned modulo_shift) |
Create a new reference mode. | |
ir_mode * | new_float_mode (const char *name, ir_mode_arithmetic arithmetic, unsigned exponent_size, unsigned mantissa_size) |
Create a new ieee754 float mode. | |
int | is_mode (const void *thing) |
Checks whether a pointer points to a mode. | |
ident * | get_mode_ident (const ir_mode *mode) |
Returns the ident* of the mode. | |
const char * | get_mode_name (const ir_mode *mode) |
Returns the null-terminated name of this mode. | |
unsigned | get_mode_size_bits (const ir_mode *mode) |
Returns the size of values of the mode in bits. | |
unsigned | get_mode_size_bytes (const ir_mode *mode) |
Returns the size of values of the mode in bytes. | |
int | get_mode_sign (const ir_mode *mode) |
Returns the signess of a mode. | |
ir_mode_arithmetic | get_mode_arithmetic (const ir_mode *mode) |
Returns the arithmetic of a mode. | |
unsigned int | get_mode_modulo_shift (const ir_mode *mode) |
Returns the modulo shift attribute. | |
void * | get_mode_link (const ir_mode *mode) |
Returns the stored intermediate information. | |
void | set_mode_link (ir_mode *mode, void *l) |
Stores new intermediate information. | |
ir_tarval * | get_mode_min (ir_mode *mode) |
Returns the smallest representable value of a given mode. | |
ir_tarval * | get_mode_max (ir_mode *mode) |
Returns the biggest representable value o f a given mode. | |
ir_tarval * | get_mode_null (ir_mode *mode) |
Returns the value Zero represented in this mode. | |
ir_tarval * | get_mode_one (ir_mode *mode) |
Returns the value One, represented in this mode. | |
ir_tarval * | get_mode_minus_one (ir_mode *mode) |
Returns the value Minus One, represented in this mode. | |
ir_tarval * | get_mode_all_one (ir_mode *mode) |
Returns the value where all bits are One, represented in this mode. | |
ir_tarval * | get_mode_infinite (ir_mode *mode) |
Returns the positive infinite value of a mode. | |
ir_tarval * | get_mode_NAN (ir_mode *mode) |
Returns the NAN value of a given mode. | |
ir_mode * | get_modeF (void) |
Returns float mode. | |
ir_mode * | get_modeD (void) |
Returns double mode. | |
ir_mode * | get_modeQ (void) |
Returns quadruple prevision mode. | |
ir_mode * | get_modeBs (void) |
Returns byte signed mode. | |
ir_mode * | get_modeBu (void) |
Returns byte unsigned mode. | |
ir_mode * | get_modeHs (void) |
Returns halfword signed mode. | |
ir_mode * | get_modeHu (void) |
Returns halfword unsigned mode. | |
ir_mode * | get_modeIs (void) |
Returns integer signed mode. | |
ir_mode * | get_modeIu (void) |
Returns integer unsigned mode. | |
ir_mode * | get_modeLs (void) |
Returns long signed mode. | |
ir_mode * | get_modeLu (void) |
Returns long unsigned mode. | |
ir_mode * | get_modeLLs (void) |
Returns long long signed mode. | |
ir_mode * | get_modeLLu (void) |
Returns long long unsigned mode. | |
ir_mode * | get_modeP (void) |
Returns pointer mode. | |
ir_mode * | get_modeb (void) |
Returns internal boolean mode. | |
ir_mode * | get_modeX (void) |
Returns control-flow mode. | |
ir_mode * | get_modeBB (void) |
Returns Basic-Block mode. | |
ir_mode * | get_modeM (void) |
Returns memory mode. | |
ir_mode * | get_modeT (void) |
Returns tuple mode. | |
ir_mode * | get_modeANY (void) |
Returns ANY mode. | |
ir_mode * | get_modeBAD (void) |
Returns BAD mode. | |
ir_mode * | get_modeP_code (void) |
Returns the machine specific pointer mode for code addresses. | |
ir_mode * | get_modeP_data (void) |
Returns the machine specific pointer mode for data addresses. | |
void | set_modeP_code (ir_mode *p) |
Sets the machine specific pointer mode for code addresses. | |
void | set_modeP_data (ir_mode *p) |
Sets the machine specific pointer mode for data addresses. | |
int | mode_is_signed (const ir_mode *mode) |
Returns 1 if mode is signed, 0 otherwise. | |
int | mode_is_float (const ir_mode *mode) |
Returns 1 if mode is for floatingpoint numbers, 0 otherwise. | |
int | mode_is_int (const ir_mode *mode) |
Returns 1 if mode is for integer numbers, 0 otherwise. | |
int | mode_is_reference (const ir_mode *mode) |
Returns 1 if mode is for references/pointers, 0 otherwise. | |
int | mode_is_num (const ir_mode *mode) |
Returns 1 if mode is for numeric values, 0 otherwise. | |
int | mode_is_data (const ir_mode *mode) |
Returns 1 if mode is for data values, 0 otherwise. | |
int | mode_is_datab (const ir_mode *mode) |
Returns 1 if mode is for data values or internal booleans, 0 otherwise. | |
int | mode_is_dataM (const ir_mode *mode) |
Returns 1 if mode is for data values or memory, 0 otherwise. | |
int | smaller_mode (const ir_mode *sm, const ir_mode *lm) |
Returns true if sm can be converted to lm without loss according to firm definition. | |
int | values_in_mode (const ir_mode *sm, const ir_mode *lm) |
Returns true if a value of mode sm can be converted into mode lm and backwards without loss. | |
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. | |
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_honor_signed_zeros (const ir_mode *mode) |
Returns non-zero if the given mode honors signed zero's, i.e., a +0 and a -0 exists and handled differently. | |
int | mode_overflow_on_unary_Minus (const ir_mode *mode) |
Returns non-zero if the given mode might overflow on unary Minus. | |
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. | |
ir_mode * | get_reference_mode_signed_eq (ir_mode *mode) |
Returns the signed integer equivalent mode for an reference mode. | |
void | set_reference_mode_signed_eq (ir_mode *ref_mode, ir_mode *int_mode) |
Sets the signed integer equivalent mode for an reference mode. | |
ir_mode * | get_reference_mode_unsigned_eq (ir_mode *mode) |
Returns the unsigned integer equivalent mode for an reference mode. | |
void | set_reference_mode_unsigned_eq (ir_mode *ref_mode, ir_mode *int_mode) |
Sets the unsigned integer equivalent mode for an reference mode. | |
unsigned | get_mode_mantissa_size (const ir_mode *mode) |
Returns size of mantissa in bits (for float modes) | |
unsigned | get_mode_exponent_size (const ir_mode *mode) |
Returns size of exponent in bits (for float modes) | |
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 (ie. | |
ir_type * | get_type_for_mode (const ir_mode *mode) |
Returns the primitive type matching the given mode. | |
size_t | ir_get_n_modes (void) |
Returns number of known modes. | |
ir_mode * | ir_get_mode (size_t num) |
Returns known mode number num . | |
Variables | |
ir_mode * | mode_M |
memory | |
ir_mode * | mode_F |
ieee754 binary32 float (single precision) | |
ir_mode * | mode_D |
ieee754 binary64 float (double precision) | |
ir_mode * | mode_Q |
ieee754 binary128 float (quadruple precision) | |
ir_mode * | mode_Bs |
int8 | |
ir_mode * | mode_Bu |
uint8 | |
ir_mode * | mode_Hs |
int16 | |
ir_mode * | mode_Hu |
uint16 | |
ir_mode * | mode_Is |
int32 | |
ir_mode * | mode_Iu |
uint32 | |
ir_mode * | mode_Ls |
int64 | |
ir_mode * | mode_Lu |
uint64 | |
ir_mode * | mode_LLs |
int128 | |
ir_mode * | mode_LLu |
uint128 | |
ir_mode * | mode_P |
pointer | |
ir_mode * | mode_P_code |
A pointer mode that is set by the client of libfirm. | |
ir_mode * | mode_P_data |
A pointer mode that is set by the client of libfirm. | |
ir_mode * | mode_b |
internal boolean | |
ir_mode * | mode_X |
execution | |
ir_mode * | mode_BB |
block | |
ir_mode * | mode_T |
tuple (none) | |
ir_mode * | mode_ANY |
undefined mode | |
ir_mode * | mode_BAD |
bad mode |
This module specifies the modes that type the firm nodes.
It defines a datasturcture that describes a mode and implements constructors and access routines to this datastructure. Further it defines a set of predefined modes.
SEE ALSO: UKA tech report 1999-44 for more information about modes.
SSA Value mode.
Definition at line 69 of file firm_types.h.
enum ir_mode_arithmetic |
These values represent the different arithmetic operations possible with a mode.
Returns an integer mode with 2*n bits for a given integer mode with n bits.
Returns NULL if no matching mode exists.
Returns a matching signed mode for a given integer unsigned mode.
Returns NULL if no matching mode exists.
Returns a matching unsigned mode for a given integer signed mode.
Returns NULL if no matching mode exists.
Returns the value where all bits are One, represented in this mode.
All One is defined only for modes integer, reference and boolean modes
ir_mode_arithmetic get_mode_arithmetic | ( | const ir_mode * | mode | ) |
Returns the arithmetic of a mode.
unsigned get_mode_exponent_size | ( | const ir_mode * | mode | ) |
Returns size of exponent in bits (for float modes)
Returns the positive infinite value of a mode.
This is only valid for float_numbers, other modes will result in tarval_bad.
void* get_mode_link | ( | const ir_mode * | mode | ) |
Returns the stored intermediate information.
unsigned get_mode_mantissa_size | ( | const ir_mode * | mode | ) |
Returns size of mantissa in bits (for float modes)
Returns the biggest representable value o f a given mode.
For modes of the sort float_number this is the largest value lower than infinite.
Returns the smallest representable value of a given mode.
For modes of the sort float_number this is the most negative value bigger than -infinite.
Returns the value Minus One, represented in this mode.
Minus One is defined only for modes allowing multiplication with signed values, i.e. signed ints and floats.
unsigned int get_mode_modulo_shift | ( | const ir_mode * | mode | ) |
Returns the modulo shift attribute.
Attribute modulo shift specifies for modes of kind irms_int_number whether shift applies modulo to value of bits to shift. Zero for modes that are not integer.
const char* get_mode_name | ( | const ir_mode * | mode | ) |
Returns the null-terminated name of this mode.
Returns the NAN value of a given mode.
This is only valid for float_numbers, other modes will result in tarval_bad.
Returns the value Zero represented in this mode.
Zero is the additive neutral element and as such is defined only for modes allowing addition, i.e. op_pin_state_floats and ints, and references (NULL-Pointer) else returns tarval_bad.
Returns the value One, represented in this mode.
One, being the multiplicative neutral element, is defined only for modes allowing multiplication, i.e. ints and floats.
int get_mode_sign | ( | const ir_mode * | mode | ) |
Returns the signess of a mode.
Returns the signess of a mode: 1 if mode is signed.
unsigned get_mode_size_bits | ( | const ir_mode * | mode | ) |
Returns the size of values of the mode in bits.
unsigned get_mode_size_bytes | ( | const ir_mode * | mode | ) |
Returns the size of values of the mode in bytes.
If the size is not dividable by 8 returns -1.
ir_mode* get_modeANY | ( | void | ) |
Returns ANY mode.
ir_mode* get_modeb | ( | void | ) |
Returns internal boolean mode.
ir_mode* get_modeBAD | ( | void | ) |
Returns BAD mode.
ir_mode* get_modeBB | ( | void | ) |
Returns Basic-Block mode.
ir_mode* get_modeBs | ( | void | ) |
Returns byte signed mode.
ir_mode* get_modeBu | ( | void | ) |
Returns byte unsigned mode.
ir_mode* get_modeD | ( | void | ) |
Returns double mode.
ir_mode* get_modeF | ( | void | ) |
Returns float mode.
ir_mode* get_modeHs | ( | void | ) |
Returns halfword signed mode.
ir_mode* get_modeHu | ( | void | ) |
Returns halfword unsigned mode.
ir_mode* get_modeIs | ( | void | ) |
Returns integer signed mode.
ir_mode* get_modeIu | ( | void | ) |
Returns integer unsigned mode.
ir_mode* get_modeLLs | ( | void | ) |
Returns long long signed mode.
ir_mode* get_modeLLu | ( | void | ) |
Returns long long unsigned mode.
ir_mode* get_modeLs | ( | void | ) |
Returns long signed mode.
ir_mode* get_modeLu | ( | void | ) |
Returns long unsigned mode.
ir_mode* get_modeM | ( | void | ) |
Returns memory mode.
ir_mode* get_modeP | ( | void | ) |
Returns pointer mode.
ir_mode* get_modeP_code | ( | void | ) |
Returns the machine specific pointer mode for code addresses.
ir_mode* get_modeP_data | ( | void | ) |
Returns the machine specific pointer mode for data addresses.
ir_mode* get_modeQ | ( | void | ) |
Returns quadruple prevision mode.
ir_mode* get_modeT | ( | void | ) |
Returns tuple mode.
ir_mode* get_modeX | ( | void | ) |
Returns control-flow mode.
Returns the signed integer equivalent mode for an reference mode.
Returns the unsigned integer equivalent mode for an reference mode.
Returns the primitive type matching the given mode.
ir_mode* ir_get_mode | ( | size_t | num | ) |
Returns known mode number num
.
size_t ir_get_n_modes | ( | void | ) |
Returns number of known modes.
int is_mode | ( | const void * | thing | ) |
Checks whether a pointer points to a mode.
thing | an arbitrary pointer |
Returns non-zero if the cast from mode src to mode dst is a reinterpret cast (ie.
only the bit pattern is reinterpreted, no conversion is done)
int mode_honor_signed_zeros | ( | const ir_mode * | mode | ) |
Returns non-zero if the given mode honors signed zero's, i.e., a +0 and a -0 exists and handled differently.
int mode_is_data | ( | const ir_mode * | mode | ) |
Returns 1 if mode
is for data values, 0 otherwise.
int mode_is_datab | ( | const ir_mode * | mode | ) |
Returns 1 if mode
is for data values or internal booleans, 0 otherwise.
int mode_is_dataM | ( | const ir_mode * | mode | ) |
Returns 1 if mode
is for data values or memory, 0 otherwise.
int mode_is_float | ( | const ir_mode * | mode | ) |
Returns 1 if mode
is for floatingpoint numbers, 0 otherwise.
int mode_is_int | ( | const ir_mode * | mode | ) |
Returns 1 if mode
is for integer numbers, 0 otherwise.
int mode_is_num | ( | const ir_mode * | mode | ) |
Returns 1 if mode
is for numeric values, 0 otherwise.
int mode_is_reference | ( | const ir_mode * | mode | ) |
Returns 1 if mode
is for references/pointers, 0 otherwise.
int mode_is_signed | ( | const ir_mode * | mode | ) |
Returns 1 if mode
is signed, 0 otherwise.
int mode_overflow_on_unary_Minus | ( | const ir_mode * | mode | ) |
Returns non-zero if the given mode might overflow on unary Minus.
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.
This is normally true for integer modes, not for floating point modes.
ir_mode* new_float_mode | ( | const char * | name, |
ir_mode_arithmetic | arithmetic, | ||
unsigned | exponent_size, | ||
unsigned | mantissa_size | ||
) |
Create a new ieee754 float mode.
float-modes are always signed and have no modulo shift.
name | the name of the mode to be created |
arithmetic | arithmetic/representation of the mode |
exponent_size | size of exponent in bits |
mantissa_size | size of mantissa in bits |
ir_mode* new_int_mode | ( | const char * | name, |
ir_mode_arithmetic | arithmetic, | ||
unsigned | bit_size, | ||
int | sign, | ||
unsigned | modulo_shift | ||
) |
Creates a new mode.
name | the name of the mode to be created |
arithmetic | arithmetic operations possible with a mode |
bit_size | number of bits this mode allocate |
sign | non-zero if this is a signed mode |
modulo_shift | Is ignored for modes other than integer. |
This function constructs a new mode given by the parameters. If the parameters match an already defined mode, this mode is returned (including the default modes).
ir_mode* new_reference_mode | ( | const char * | name, |
ir_mode_arithmetic | arithmetic, | ||
unsigned | bit_size, | ||
unsigned | modulo_shift | ||
) |
Create a new reference mode.
Reference modes are always unsigned.
void set_mode_link | ( | ir_mode * | mode, |
void * | l | ||
) |
Stores new intermediate information.
void set_modeP_code | ( | ir_mode * | p | ) |
Sets the machine specific pointer mode for code addresses.
If not set, the predefined mode mode_P will be used.
void set_modeP_data | ( | ir_mode * | p | ) |
Sets the machine specific pointer mode for data addresses.
If not set, the predefined mode mode_P will be used.
Sets the signed integer equivalent mode for an reference mode.
Sets the unsigned integer equivalent mode for an reference mode.
Returns true if sm can be converted to lm without loss according to firm definition.
Note that mode_Iu is NOT smaller than mode_Is here.
Returns true if a value of mode sm can be converted into mode lm and backwards without loss.
Note that mode_Iu values CAN be converted in mode_Is and back.