Added is_Const
[libfirm] / ir / ir / irmode.c
index de7ed63..d49b73f 100644 (file)
@@ -9,16 +9,18 @@
  * Copyright:   (c) 1998-2003 Universität Karlsruhe
  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
  */
-
-
 #ifdef HAVE_CONFIG_H
-# include <config.h>
+# include "config.h"
 #endif
 
+#ifdef HAVE_STDLIB_H
 # include <stdlib.h>
-# include <stddef.h>
+#endif
+#ifdef HAVE_STRING_H
 # include <string.h>
-# include <stdbool.h>
+#endif
+
+# include <stddef.h>
 
 # include "irmode_t.h"
 # include "ident.h"
@@ -490,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 *
@@ -911,6 +913,20 @@ ir_mode *find_double_bits_int_mode(const ir_mode *mode) {
   return find_mode(&n);
 }
 
+/*
+ * Returns non-zero if the given mode honors signed zero's, i.e.,
+ * a +0 and a -0 exists and handled differently.
+ */
+int mode_honor_signed_zeros(const ir_mode *mode)
+{
+  /* for floating point, we know that IEEE 754 has +0 and -0,
+   * but always handles it identical.
+   */
+  if (mode->sort == irms_float_number)
+    return mode->arithmetic == irma_ieee754 ? 0 : 1;
+  return 0;
+}
+
 void finish_mode(void) {
   obstack_free(&modes, 0);