/* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
-** All rights reserved.
-**
-** Authors: Martin Trapp, Christian Schaefer
-**
+* All rights reserved.
+*
+* Authors: Martin Trapp, Christian Schaefer
+*
*/
/* $Id$ */
#endif
# include "irmode_t.h"
-# include <malloc.h>
+# include <stdlib.h>
# include <stddef.h>
# include <string.h>
# include "tv.h"
ir_mode *mode_Ls;
ir_mode *mode_Lu;
ir_mode *mode_C;
+ir_mode *mode_U;
ir_mode *mode_b;
ir_mode *mode_P;
ir_mode *mode_X;
INLINE ir_mode *get_modeLs() { return mode_Ls; }
INLINE ir_mode *get_modeLu() { return mode_Lu; }
INLINE ir_mode *get_modeC() { return mode_C; }
+INLINE ir_mode *get_modeU() { return mode_U; }
INLINE ir_mode *get_modeb() { return mode_b; }
INLINE ir_mode *get_modeP() { return mode_P; }
INLINE ir_mode *get_modeX() { return mode_X; }
mode_Ls = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_Ls, 0, sizeof(ir_mode));
mode_Lu = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_Lu, 0, sizeof(ir_mode));
mode_C = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_C, 0, sizeof(ir_mode));
+ mode_U = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_U, 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_X = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_X, 0, sizeof(ir_mode));
mode_Ls->code = irm_Ls;
mode_Lu->code = irm_Lu;
mode_C->code = irm_C;
+ mode_U->code = irm_U;
mode_b->code = irm_b;
mode_P->code = irm_P;
mode_X->code = irm_X;
mode_C->max = tarval_from_long (mode_Ls, 0x0000007f);
mode_C->null = tarval_from_long (mode_C, 0);
+ /* unicode character */
+ mode_U->name = id_from_str ("U", 1);
+ mode_U->fsigned = 0;
+ mode_U->ffloat = 0;
+ mode_U->ld_align = 1;
+ mode_U->size = 2;
+ mode_U->min = tarval_from_long (mode_Ls, 0xffff8000);
+ mode_U->max = tarval_from_long (mode_Ls, 0x00007fff);
+ mode_U->null = tarval_from_long (mode_U, 0);
+
/* boolean */
mode_b->name = id_from_str ("b", 1);
mode_b->fsigned = 0;
modecode
get_mode_modecode (ir_mode *mode)
{
+ assert(mode && "no mode given");
return mode->code;
}
ident *
get_mode_ident (ir_mode *mode)
{
+ assert(mode && "no mode given");
return mode->name;
}
int
get_mode_size (ir_mode *mode)
{
+ assert(mode && "no mode given");
return mode->size;
}
/*
int
get_mode_ld_align (ir_mode *mode)
{
+ assert(mode && "no mode given");
return mode->ld_align;
}
tarval *
get_mode_min (ir_mode *mode)
{
+ assert(mode && "no mode given");
return mode->min;
}
tarval *
get_mode_max (ir_mode *mode)
{
+ assert(mode && "no mode given");
return mode->max;
}
tarval *
get_mode_null (ir_mode *mode)
{
+ assert(mode && "no mode given");
return mode->null;
}
unsigned
get_mode_fsigned (ir_mode *mode)
{
+ assert(mode && "no mode given");
return mode->fsigned;
}
unsigned
get_mode_ffloat (ir_mode *mode)
{
+ assert(mode && "no mode given");
return mode->ffloat;
}
The set of "data" is defined as:
-------------------------------
data = {irm_F, irm_D, irm_E irm_Bs, irm_Bu, irm_Hs, irm_Hu,
- irm_Is, irm_Iu, irm_Ls, irm_Lu, irm_C, irm_p}
+ irm_Is, irm_Iu, irm_Ls, irm_Lu, irm_C, irm_U, irm_p}
= {num || irm_C || irm_P}
The set of "datab" is defined as:
---------------------------------
datab = {irm_F, irm_D, irm_E, irm_Bs, irm_Bu, irm_Hs, irm_Hu,
- irm_Is, irm_Iu, irm_Ls, irm_Lu, irm_C, irm_P, irm_b}
+ irm_Is, irm_Iu, irm_Ls, irm_Lu, irm_C, irm_U, irm_P, irm_b}
= {data || irm_b }
The set of "dataM" is defined as:
---------------------------------
dataM = {irm_F, irm_D, irm_E, irm_Bs, irm_Bu, irm_Hs, irm_Hu,
- irm_Is, irm_Iu, irm_Ls, irm_Lu, irm_P, irm_M}
+ irm_Is, irm_Iu, irm_Ls, irm_Lu, irm_C, irm_U, irm_P, irm_M}
= {data || irm_M}
*/
int
mode_is_signed (ir_mode *mode)
{
- int res;
- unsigned fsigned;
- fsigned = get_mode_fsigned (mode);
- if (fsigned == 1) {
- res = 1;
- }
- else {
- res = 0;
- }
- return res;
+ int res;
+ unsigned fsigned;
+
+ assert(mode && "no mode given");
+ fsigned = get_mode_fsigned (mode);
+ if (fsigned == 1) {
+ res = 1;
+ }
+ else {
+ res = 0;
+ }
+ return res;
}
-int
+INLINE int
mode_is_float (ir_mode *mode)
{
- int res;
- unsigned ffloat;
- ffloat = get_mode_ffloat (mode);
- if (ffloat == 1) {
- res = 1;
- }
- else {
- res = 0;
- }
- return res;
+ int res;
+ unsigned ffloat;
+
+ assert(mode && "no mode given");
+ ffloat = get_mode_ffloat (mode);
+ if (ffloat == 1) {
+ res = 1;
+ }
+ else {
+ res = 0;
+ }
+ return res;
}
-int
+INLINE int
mode_is_int (ir_mode *mode)
{
- int res;
- modecode code;
- code = get_mode_modecode (mode);
- if ((code >= irm_Bs) && (code <= irm_Lu)) {
- res = 1;
- }
- else {
- res = 0;
- }
- return res;
+ int res;
+ modecode code;
+
+ assert(mode && "no mode given");
+ code = get_mode_modecode (mode);
+ if ((code >= irm_Bs) && (code <= irm_Lu)) {
+ res = 1;
+ }
+ else {
+ res = 0;
+ }
+ return res;
}
-int
+INLINE int
mode_is_num (ir_mode *mode)
{
int res;
+
+ assert(mode && "no mode given");
if (mode_is_int (mode) || mode_is_float (mode)) {
res = 1;
}
return res;
}
-int
+INLINE int
mode_is_data (ir_mode *mode)
{
int res;
modecode code;
+
+ assert(mode && "no mode given");
code = get_mode_modecode (mode);
- if (mode_is_num (mode) || code == irm_C || code == irm_P) {
+ if (mode_is_num (mode) ||
+ code == irm_C || code == irm_U || code == irm_P) {
res = 1;
}
else {
{
int res;
modecode code;
+
+ assert(mode && "no mode given");
code = get_mode_modecode (mode);
if (mode_is_data (mode) || code == irm_b ) {
res = 1;
{
int res;
modecode code;
+
+ assert(mode && "no mode given");
code = get_mode_modecode (mode);
if (mode_is_data (mode) || code == irm_M) {
res = 1;