From: Michael Beck Date: Wed, 12 Jan 2005 16:47:23 +0000 (+0000) Subject: added get_tarval_plus_inf() and get_tarval_minus_inf(), removed get_tarval_inf() X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=a94cba60b644054b5f9f1983a6bd9d3f2d6f9142;p=libfirm added get_tarval_plus_inf() and get_tarval_minus_inf(), removed get_tarval_inf() [r4882] --- diff --git a/ir/ir/irmode.c b/ir/ir/irmode.c index d1591e3e5..95a6e55b4 100644 --- a/ir/ir/irmode.c +++ b/ir/ir/irmode.c @@ -492,7 +492,7 @@ get_mode_infinite(ir_mode *mode) assert(get_mode_modecode(mode) < num_modes); assert(mode_is_float(mode)); - return get_tarval_inf(mode); + return get_tarval_plus_inf(mode); } tarval * diff --git a/ir/tv/tv.c b/ir/tv/tv.c index 7af7434e5..17bce28fe 100644 --- a/ir/tv/tv.c +++ b/ir/tv/tv.c @@ -644,7 +644,7 @@ tarval *get_tarval_nan(ir_mode *mode) } } -tarval *get_tarval_inf(ir_mode *mode) +tarval *get_tarval_plus_inf(ir_mode *mode) { ANNOUNCE(); assert(mode); @@ -675,6 +675,37 @@ tarval *get_tarval_inf(ir_mode *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 ======================================== */ diff --git a/ir/tv/tv.h b/ir/tv/tv.h index 1cb437e0e..accdad821 100644 --- a/ir/tv/tv.h +++ b/ir/tv/tv.h @@ -317,9 +317,12 @@ tarval *get_tarval_one(ir_mode *mode); tarval *get_tarval_nan(ir_mode *mode); /** Return +inf for float_number modes. */ -tarval *get_tarval_inf(ir_mode *mode); +tarval *get_tarval_plus_inf(ir_mode *mode); -/* ******************** Arithmethic operations on tarvals ******************** */ +/** Return -inf for float_number modes. */ +tarval *get_tarval_minus_inf(ir_mode *mode); + +/* ******************** Arithmetic operations on tarvals ******************** */ typedef enum _tarval_int_overflow_mode_t { TV_OVERFLOW_BAD, /**< tarval module will return tarval_bad if a overflow occurs */