**
*/
-# include "irmode.h"
+# include "irmode_t.h"
# include <malloc.h>
# include <stddef.h>
# include "tv.h"
ir_mode *mode_R;
ir_mode *mode_Z;
-
void
init_mode (void)
{
- /* allocate all modes */
- mode_T = (ir_mode *) malloc (sizeof (ir_mode));
- mode_f = (ir_mode *) malloc (sizeof (ir_mode));
- mode_d = (ir_mode *) malloc (sizeof (ir_mode));
- mode_c = (ir_mode *) malloc (sizeof (ir_mode));
- mode_C = (ir_mode *) malloc (sizeof (ir_mode));
- mode_h = (ir_mode *) malloc (sizeof (ir_mode));
- mode_H = (ir_mode *) malloc (sizeof (ir_mode));
- mode_i = (ir_mode *) malloc (sizeof (ir_mode));
- mode_I = (ir_mode *) malloc (sizeof (ir_mode));
- mode_l = (ir_mode *) malloc (sizeof (ir_mode));
- mode_L = (ir_mode *) malloc (sizeof (ir_mode));
- mode_B = (ir_mode *) malloc (sizeof (ir_mode));
- mode_b = (ir_mode *) malloc (sizeof (ir_mode));
- mode_p = (ir_mode *) malloc (sizeof (ir_mode));
- mode_s = (ir_mode *) malloc (sizeof (ir_mode));
- mode_S = (ir_mode *) malloc (sizeof (ir_mode));
- mode_X = (ir_mode *) malloc (sizeof (ir_mode));
- mode_M = (ir_mode *) malloc (sizeof (ir_mode));
- mode_R = (ir_mode *) malloc (sizeof (ir_mode));
- mode_Z = (ir_mode *) malloc (sizeof (ir_mode));
+ /* allocate all modes. We need to memset them as tarval_vrfy
+ reads fields before they are initialized: It compares to
+ min/max when tarvals for min/max are allocated! */
+ mode_T = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_T, 0, sizeof(ir_mode));
+ mode_f = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_f, 0, sizeof(ir_mode));
+ mode_d = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_d, 0, sizeof(ir_mode));
+ mode_c = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_c, 0, sizeof(ir_mode));
+ mode_C = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_C, 0, sizeof(ir_mode));
+ mode_h = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_h, 0, sizeof(ir_mode));
+ mode_H = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_H, 0, sizeof(ir_mode));
+ mode_i = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_i, 0, sizeof(ir_mode));
+ mode_I = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_I, 0, sizeof(ir_mode));
+ mode_l = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_l, 0, sizeof(ir_mode));
+ mode_L = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_L, 0, sizeof(ir_mode));
+ mode_B = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_B, 0, sizeof(ir_mode));
+ mode_b = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_b, 0, sizeof(ir_mode));
+ mode_p = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_p, 0, sizeof(ir_mode));
+ mode_s = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_s, 0, sizeof(ir_mode));
+ mode_S = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_S, 0, sizeof(ir_mode));
+ mode_X = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_X, 0, sizeof(ir_mode));
+ mode_M = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_M, 0, sizeof(ir_mode));
+ mode_R = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_R, 0, sizeof(ir_mode));
+ mode_Z = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_Z, 0, sizeof(ir_mode));
mode_T->code = irm_T;
mode_f->code = irm_f;
mode_S->fsigned = 0;
mode_S->ffloat = 0;
+ /* Execution */
mode_X->name = id_from_str ("X", 1);
mode_X->fsigned = 0;
mode_X->ffloat = 0;
+ /* Memory */
mode_M->name = id_from_str ("M", 1);
mode_M->fsigned = 0;
mode_M->ffloat = 0;
mode_Z->name = id_from_str ("Z", 1);
mode_Z->fsigned = 1;
mode_Z->ffloat = 0;
-
}
/* Functions for the direct access to all attributes od a ir_mode */
modecode
-get_modecode_of_mode (ir_mode *mode)
+get_mode_modecode (ir_mode *mode)
{
return mode->code;
}
/*
inline void
-set_modecode_of_mode (ir_mode *mode, modecode code)
+set_mode_modecode (ir_mode *mode, modecode code)
{
mode->code = code;
}
/*
inline void
-set_ident_of_mode (ir_mode *mode, ident *name)
+set_mode_ident (ir_mode *mode, ident *name)
{
mode->name = name;
}
*/
+inline const char *
+get_mode_name (ir_mode *mode) {
+ assert(mode);
+ return id_to_str(mode->name);
+}
+/* void set_mode_name (ir_mode *mode, char *name); */
+
int
-get_size_of_mode (ir_mode *mode)
+get_mode_size (ir_mode *mode)
{
return mode->size;
}
/*
inline void
-set_size_of_mode (ir_mode *mode, int size)
+set_mode_size (ir_mode *mode, int size)
{
mode->size = size;
}
*/
int
-get_ld_align_of_mode (ir_mode *mode)
+get_mode_ld_align (ir_mode *mode)
{
return mode->ld_align;
}
/*
inline void
-set_ld_align_of_mode (ir_mode *mode, int ld_align)
+set_mode_ld_align (ir_mode *mode, int ld_align)
{
mode->ld_align = ld_align;
}
*/
tarval *
-get_min_of_mode (ir_mode *mode)
+get_mode_min (ir_mode *mode)
{
return mode->min;
}
/*
inline void
-set_min_of_mode (ir_mode *mode, struct tarval *min)
+set_mode_min (ir_mode *mode, tarval *min)
{
mode->min = min;
}
*/
tarval *
-get_max_of_mode (ir_mode *mode)
+get_mode_max (ir_mode *mode)
{
return mode->max;
}
/*
inline void
-set_max_of_mode (ir_mode *mode, struct tarval *max)
+set_mode_max (ir_mode *mode, tarval *max)
{
mode->max = max;
}
*/
tarval *
-get_null_of_mode (ir_mode *mode)
+get_mode_null (ir_mode *mode)
{
return mode->null;
}
/*
inline void
-set_null_of_mode (ir_mode *mode, struct tarval *null)
+set_mode_null (ir_mode *mode, tarval *null)
{
mode->null = null;
}
*/
unsigned
-get_fsigned_of_mode (ir_mode *mode)
+get_mode_fsigned (ir_mode *mode)
{
return mode->fsigned;
}
/*
inline voida
-set_fsigned_of_mode (ir_mode *mode, unsigned fsigned)
+set_mode_fsigned (ir_mode *mode, unsigned fsigned)
{
mode->fsigned = fsigned;
}
*/
unsigned
-get_ffloat_of_mode (ir_mode *mode)
+get_mode_ffloat (ir_mode *mode)
{
return mode->ffloat;
}
/*
inline void
-set_ffloat_of_mode (ir_mode *mode, unsigned ffloat)
+set_mode_ffloat (ir_mode *mode, unsigned ffloat)
{
mode->ffloat = ffloat;
}
{
int res;
unsigned fsigned;
- fsigned = get_fsigned_of_mode (mode);
+ fsigned = get_mode_fsigned (mode);
if (fsigned == 1) {
res = 1;
}
{
int res;
unsigned ffloat;
- ffloat = get_ffloat_of_mode (mode);
+ ffloat = get_mode_ffloat (mode);
if (ffloat == 1) {
res = 1;
}
{
int res;
modecode code;
- code = get_modecode_of_mode (mode);
+ code = get_mode_modecode (mode);
if ((code >= irm_c) && (code <= irm_L)) {
res = 1;
}
{
int res;
modecode code;
- code = get_modecode_of_mode (mode);
+ code = get_mode_modecode (mode);
if (mode_is_num (mode) || code == irm_p) {
res = 1;
}
{
int res;
modecode code;
- code = get_modecode_of_mode (mode);
+ code = get_mode_modecode (mode);
if (mode_is_data (mode) || code == irm_b || code == irm_B) {
res = 1;
}
{
int res;
modecode code;
- code = get_modecode_of_mode (mode);
+ code = get_mode_modecode (mode);
if (mode_is_data (mode) || code == irm_M) {
res = 1;
}