#include <assert.h> /* assertions */
#include <stdlib.h> /* atoi() */
-#include <string.h> /* nice things for strings */
+#ifdef HAVE_STRING_H
+# include <string.h> /* nice things for strings */
+#endif
#ifdef HAVE_STRINGS_H
#include <strings.h> /* strings.h also includes bsd only function strcasecmp */
#endif
#include "entity_t.h" /* needed to store pointers to entities */
#include "irmode_t.h"
#include "irnode.h" /* defines boolean return values (pnc_number)*/
-#include "host.h"
#include "strcalc.h"
#include "fltcalc.h"
ANNOUNCE();
assert(tarval_is_long(tv) && "tarval too big to fit in long");
- return sc_val_to_long(tv->value, get_mode_size_bits(tv->mode), mode_is_signed(tv->mode));
+ return sc_val_to_long(tv->value);
}
tarval *new_tarval_from_double(long double d, ir_mode *mode)
return tv->mode;
}
+/*
+void *get_tarval_link (tarval *tv)
+{
+ ANNOUNCE ();
+ assert (tv);
+ return (tv->link);
+}
+*/
+
/*
* Special value query functions ============================================
*
}
}
-tarval *get_tarval_inf(ir_mode *mode)
+tarval *get_tarval_plus_inf(ir_mode *mode)
{
ANNOUNCE();
assert(mode);
}
}
+tarval *get_tarval_minus_inf(ir_mode *mode)
+{
+ ANNOUNCE();
+ assert(mode);
+
+ if (get_mode_n_vector_elems(mode) > 1) {
+ /* vector arithmetic not implemented yet */
+ return tarval_bad;
+ }
+
+ if (get_mode_sort(mode) == irms_float_number) {
+ switch(get_mode_size_bits(mode))
+ {
+ case 32:
+ fc_get_minusinf(8, 23, NULL);
+ break;
+ case 64:
+ fc_get_minusinf(11, 52, NULL);
+ break;
+ case 80:
+ fc_get_minusinf(15, 64, NULL);
+ break;
+ }
+ return get_tarval(fc_get_buffer(), fc_get_buffer_length(), mode);
+ }
+ else {
+ assert(0 && "tarval is not floating point");
+ return tarval_bad;
+ }
+}
+
/*
* Arithmethic operations on tarvals ========================================
*/
/*
* comparison
*/
-pnc_number tarval_cmp(tarval *a, tarval *b)
+pn_Cmp tarval_cmp(tarval *a, tarval *b)
{
ANNOUNCE();
assert(a);
assert(b);
if (a == tarval_bad || b == tarval_bad) assert(0 && "Comparison with tarval_bad");
- if (a == tarval_undefined || b == tarval_undefined) return False;
- if (a == b) return Eq;
- if (a->mode != b->mode) return False;
+ if (a == tarval_undefined || b == tarval_undefined) return pn_Cmp_False;
+ if (a == b) return pn_Cmp_Eq;
+ if (a->mode != b->mode) return pn_Cmp_False;
if (get_mode_n_vector_elems(a->mode) > 1) {
/* vector arithmetic not implemented yet */
case irms_memory:
case irms_auxiliary:
case irms_reference:
- return False;
+ return pn_Cmp_False;
case irms_float_number:
switch (fc_comp(a->value, b->value)) {
- case -1: return Lt;
- case 0: assert(0 && "different tarvals compare equal"); return Eq;
- case 1: return Gt;
- case 2: return Uo;
- default: return False;
+ case -1: return pn_Cmp_Lt;
+ case 0: assert(0 && "different tarvals compare equal"); return pn_Cmp_Eq;
+ case 1: return pn_Cmp_Gt;
+ case 2: return pn_Cmp_Uo;
+ default: return pn_Cmp_False;
}
case irms_int_number:
case irms_character:
- return (sc_comp(a->value, b->value)==1)?(Gt):(Lt);
+ return sc_comp(a->value, b->value) == 1 ? pn_Cmp_Gt : pn_Cmp_Lt;
case irms_internal_boolean:
- return (a == tarval_b_true)?(Gt):(Lt);
+ return a == tarval_b_true ? pn_Cmp_Gt : pn_Cmp_Lt;
}
- return False;
+ return pn_Cmp_False;
}
/*
case irms_reference:
if (tv == tarval_P_void) return snprintf(buf, len, "NULL");
if (tv->value != NULL){
- if (len > tv->length) {
- memcpy(buf, tv->value, tv->length);
- buf[tv->length] = '\0';
- }
- else {
- /* truncated */
- memcpy(buf, tv->value, len-1);
- buf[len-1] = '\0';
- }
- return tv->length;
+ if (len > tv->length) {
+ memcpy(buf, tv->value, tv->length);
+ buf[tv->length] = '\0';
+ }
+ else {
+ /* truncated */
+ memcpy(buf, tv->value, len-1);
+ buf[len-1] = '\0';
+ }
+ return tv->length;
}
else
- return snprintf(buf, len, "void");
+ return snprintf(buf, len, "void");
case irms_internal_boolean:
switch (mode_info->mode_output) {
byte = get_tarval_sub_bits(tv, i);
for(j = 1; j < 256; j <<= 1)
if(pos < n)
- res[pos++] = j & byte ? '1' : '0';
+ res[pos++] = j & byte ? '1' : '0';
}
res[n] = '\0';