added doxygen comments
[libfirm] / ir / tv / tv.c
index 92ab9a2..17bce28 100644 (file)
@@ -28,7 +28,9 @@
 
 #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
@@ -46,7 +48,6 @@
 #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"
 
@@ -414,6 +415,15 @@ ir_mode *get_tarval_mode (tarval *tv)       /* get the mode of the tarval */
   return tv->mode;
 }
 
+/*
+void *get_tarval_link (tarval *tv)
+{
+  ANNOUNCE ();
+  assert (tv);
+  return (tv->link);
+}
+*/
+
 /*
  * Special value query functions ============================================
  *
@@ -634,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);
@@ -665,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 ========================================
  */
@@ -1432,19 +1473,19 @@ int tarval_snprintf(char *buf, size_t len, tarval *tv)
     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) {
@@ -1496,7 +1537,7 @@ char *get_tarval_bitpattern(tarval *tv)
     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';