#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"
}
}
-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;
}
/*