added get_tarval_plus_inf() and get_tarval_minus_inf(), removed get_tarval_inf()
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Wed, 12 Jan 2005 16:47:23 +0000 (16:47 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Wed, 12 Jan 2005 16:47:23 +0000 (16:47 +0000)
[r4882]

ir/ir/irmode.c
ir/tv/tv.c
ir/tv/tv.h

index d1591e3..95a6e55 100644 (file)
@@ -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 *
index 7af7434..17bce28 100644 (file)
@@ -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 ========================================
  */
index 1cb437e..accdad8 100644 (file)
@@ -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 */