1 /* Declarations for Target Values.
2 Copyright (C) 1995, 1996 Christian von Roques */
11 #ifndef _TARVAL_TYPEDEF_
12 #define _TARVAL_TYPEDEF_
13 typedef struct tarval tarval;
16 /* #include <gmp.h> Eli can't find gmp.h if it's available in a local
17 search path but not in a standard one known to gcc. */
19 #undef __need_size_t /* erroneously defined by 1.3.2's gmp.h */
20 /* #include "deftab.h" */
22 /* how to represent target types on host */
23 typedef float tarval_f;
24 typedef double tarval_d;
25 typedef long tarval_chil;
26 typedef unsigned long tarval_CHIL;
27 typedef MP_INT tarval_Z;
29 /* if ent then xname is missing or mangled from ent,
30 else if xname then xname is a linker symbol that is not mangled
32 else this is tarval_p_void.
33 if this tarval describes a symbolic address of another tarval, tv points
40 unsigned char *p; /* may contain embedded 0, not 0-terminated */
43 typedef tarval_s tarval_B;
47 tarval_f f; /* float */
48 tarval_d d; /* double */
49 tarval_chil chil; /* signed integral */
50 tarval_CHIL CHIL; /* unsigned integral */
51 tarval_Z Z; /* universal int */
52 tarval_p p; /* pointer */
54 tarval_B B; /* universal bits */
55 tarval_s s; /* string */
60 extern tarval *tarval_bad;
61 extern tarval *tarval_b_false;
62 extern tarval *tarval_b_true;
63 extern tarval *tarval_d_NaN;
64 extern tarval *tarval_d_Inf;
65 extern tarval *tarval_p_void;
66 extern tarval *tarval_mode_null[];
67 extern tarval *tarval_mode_min[];
68 extern tarval *tarval_mode_max[];
70 void tarval_init_1 (void);
71 void tarval_init_2 (void);
73 /* Hash function on tarvals */
74 unsigned tarval_hash (tarval *);
76 /************************* Constructors for tarvals *************************/
77 tarval *tarval_Z_from_str (const char *, size_t, int base);
78 tarval *tarval_B_from_str (const char *, size_t);
79 tarval *tarval_d_from_str (const char *, size_t);
80 tarval *tarval_s_from_str (const char *, size_t);
81 tarval *tarval_S_from_str (const char *, size_t);
82 tarval *tarval_from_long (ir_mode *, long);
83 tarval *tarval_p_from_str (const char *);
84 tarval *tarval_p_from_entity (entity *);
86 tarval *tarval_convert_to (tarval *, ir_mode *);
88 /* Building an irm_C, irm_s, irm_S or irm_B target value step by step. */
89 void tarval_start (void);
90 void tarval_append (const char *, size_t);
91 void tarval_append1 (char);
92 tarval *tarval_finish_as (ir_mode *);
93 tarval *tarval_cancel (void); /* returns tarval_bad */
96 /* The flags for projecting a comparison result */
98 irpn_False=0, /* false */
101 irpn_Le, /* less or equal */
102 irpn_Gt, /* greater */
103 irpn_Ge, /* greater of equal */
104 irpn_Lg, /* less or greater */
105 irpn_Leg, /* less, equal or greater = ordered */
106 irpn_Uo, /* unordered */
107 irpn_Ue, /* unordered or equal */
108 irpn_Ul, /* unordered or less */
109 irpn_Ule, /* unordered, less or equal */
110 irpn_Ug, /* unordered or greater */
111 irpn_Uge, /* unordered, greater or equal */
112 irpn_Ne, /* unordered, less or greater = not equal */
113 irpn_True, /* true */
114 irpn_notmask = irpn_Leg
117 /********************* Arithmethic operations on tarvals *********************/
118 /* Compare a with b and return an ir_pncmp describing the relation
119 between a and b. This is either Uo, Lt, Eq, Gt, or False if a or b
120 are symbolic pointers which can not be compared at all. */
121 ir_pncmp tarval_comp (tarval *a, tarval *b);
123 tarval *tarval_neg (tarval *a);
124 tarval *tarval_add (tarval *, tarval *);
125 tarval *tarval_sub (tarval *, tarval *);
126 tarval *tarval_mul (tarval *, tarval *);
127 tarval *tarval_quo (tarval *, tarval *);
128 tarval *tarval_div (tarval *, tarval *);
129 tarval *tarval_mod (tarval *, tarval *);
130 tarval *tarval_and (tarval *, tarval *);
131 tarval *tarval_or (tarval *, tarval *);
132 tarval *tarval_eor (tarval *, tarval *);
133 tarval *tarval_shl (tarval *, tarval *);
134 tarval *tarval_shr (tarval *, tarval *);
136 /* Identifying some tarvals */
137 long tarval_classify (tarval *);
138 long tarval_ord (tarval *, int *fail);
141 int tarval_print (XP_PAR1, const xprintf_info *, XP_PARN); */
143 /* return a mode-specific value */
145 tarval_f tv_val_f (tarval *tv);
146 tarval_d tv_val_d (tarval *tv);
147 tarval_chil tv_val_chil (tarval *tv);
148 tarval_CHIL tv_val_CHIL (tarval *tv);
149 tarval_Z tv_val_Z (tarval *tv);
150 tarval_p tv_val_p (tarval *tv);
151 bool tv_val_b (tarval *tv);
152 tarval_B tv_val_B (tarval *tv);
153 tarval_s tv_val_s (tarval *tv);
156 #define TARVAL_VRFY(val) ((void)0)
158 #define TARVAL_VRFY(val) _tarval_vrfy ((val))
159 extern void _tarval_vrfy (const tarval *);
163 void tarval_stats (void);
165 #define tarval_stats() ((void)0)
168 ir_mode *get_tv_mode (tarval *tv);