* PURPOSE.
*/
-/*
- * Project: libFIRM
- * File name: ir/ir/irmode.c
- * Purpose: Data modes of operations.
- * Author: Martin Trapp, Christian Schaefer
- * Modified by: Goetz Lindenmaier, Mathias Heil
- * Created:
- * CVS-ID: $Id$
- * Copyright: (c) 1998-2003 Universität Karlsruhe
+/**
+ * @file
+ * @brief Data modes of operations.
+ * @author Martin Trapp, Christian Schaefer, Goetz Lindenmaier, Mathias Heil
+ * @version $Id$
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
static struct obstack modes;
/** number of defined modes */
-static int num_modes;
+static int num_modes = 0;
/* * *
* local functions
*/
static void set_mode_values(ir_mode* mode) {
switch (get_mode_sort(mode)) {
- case irms_character:
case irms_int_number:
case irms_float_number:
mode->min = get_tarval_min(mode);
ir_mode *mode_LLs; /* 128 bit */
ir_mode *mode_LLu;
-ir_mode *mode_C;
-ir_mode *mode_U;
ir_mode *mode_b;
ir_mode *mode_P;
ir_mode *get_modeLu(void) { return mode_Lu; }
ir_mode *get_modeLLs(void){ return mode_LLs; }
ir_mode *get_modeLLu(void){ return mode_LLu; }
-ir_mode *get_modeC(void) { return mode_C; }
-ir_mode *get_modeU(void) { return mode_U; }
ir_mode *get_modeb(void) { return mode_b; }
ir_mode *get_modeP(void) { return mode_P; }
ir_mode *get_modeX(void) { return mode_X; }
mode = (ir_mode *)obstack_copy(&modes, new_mode, sizeof(*mode));
mode->kind = k_ir_mode;
- if (num_modes >= irm_max) mode->code = num_modes;
- num_modes++;
+ if (num_modes >= irm_max) {
+ mode->code = num_modes;
+ }
+ num_modes++;
/* add the new mode to the irp list of modes */
add_irp_mode(mode);
case irms_float_number:
case irms_int_number:
case irms_reference:
- case irms_character:
mode = register_mode(&mode_tmpl);
}
return mode;
break;
case irms_reference:
- case irms_character:
assert(0 && "only integer and floating point modes can be vectorized");
break;
return _get_mode_sign(mode);
}
-int
+mode_arithmetic
(get_mode_arithmetic)(const ir_mode *mode) {
return get_mode_arithmetic(mode);
}
tarval *
get_mode_min(ir_mode *mode) {
assert(mode);
- assert(get_mode_modecode(mode) < num_modes);
+ assert(get_mode_modecode(mode) < (modecode) num_modes);
assert(mode_is_data(mode));
return mode->min;
tarval *
get_mode_max(ir_mode *mode) {
assert(mode);
- assert(get_mode_modecode(mode) < num_modes);
+ assert(get_mode_modecode(mode) < (modecode) num_modes);
assert(mode_is_data(mode));
return mode->max;
tarval *
get_mode_null(ir_mode *mode) {
assert(mode);
- assert(get_mode_modecode(mode) < num_modes);
+ assert(get_mode_modecode(mode) < (modecode) num_modes);
assert(mode_is_data(mode));
return mode->null;
tarval *
get_mode_one(ir_mode *mode) {
assert(mode);
- assert(get_mode_modecode(mode) < num_modes);
+ assert(get_mode_modecode(mode) < (modecode) num_modes);
assert(mode_is_data(mode));
return mode->one;
tarval *
get_mode_minus_one(ir_mode *mode) {
assert(mode);
- assert(get_mode_modecode(mode) < num_modes);
+ assert(get_mode_modecode(mode) < (modecode) num_modes);
assert(mode_is_data(mode));
return mode->minus_one;
tarval *
get_mode_infinite(ir_mode *mode) {
assert(mode);
- assert(get_mode_modecode(mode) < num_modes);
+ assert(get_mode_modecode(mode) < (modecode) num_modes);
assert(mode_is_float(mode));
return get_tarval_plus_inf(mode);
tarval *
get_mode_NAN(ir_mode *mode) {
assert(mode);
- assert(get_mode_modecode(mode) < num_modes);
+ assert(get_mode_modecode(mode) < (modecode) num_modes);
assert(mode_is_float(mode));
return get_tarval_nan(mode);
return _mode_is_int(mode);
}
-int
-(mode_is_character)(const ir_mode *mode) {
- return _mode_is_character(mode);
-}
-
int
(mode_is_reference)(const ir_mode *mode) {
return _mode_is_reference(mode);
return _mode_is_num(mode);
}
-int
-(mode_is_numP)(const ir_mode *mode) {
- return _mode_is_numP(mode);
-}
-
int
(mode_is_data)(const ir_mode *mode) {
return _mode_is_data(mode);
mode_LLu = register_mode(&newmode);
- /* Character Modes */
- newmode.sort = irms_character;
- newmode.arithmetic = irma_twos_complement;
- newmode.modulo_shift = 0;
-
- /* Character */
- newmode.name = new_id_from_chars("C", 1);
- newmode.code = irm_C;
- newmode.sign = 0;
- newmode.size = 8;
-
- mode_C = register_mode(&newmode);
-
- /* Unicode character */
- newmode.name = new_id_from_chars("U", 1);
- newmode.code = irm_U;
- newmode.sign = 0;
- newmode.size = 16;
-
- mode_U = register_mode(&newmode);
-
- /* Reference Modes */
- newmode.sort = irms_reference;
+ /* Reference Mode */
+ newmode.sort = irms_reference;
newmode.arithmetic = irma_twos_complement;
/* pointer */
mode_Ls = NULL;
mode_Lu = NULL;
- mode_C = NULL;
- mode_U = NULL;
mode_b = NULL;
- mode_P = NULL;
+ mode_P = NULL;
mode_P_code = NULL;
mode_P_data = NULL;
}