Converted documentation to doxygen.
[libfirm] / ir / ir / irmode.c
index 76af6b9..5813677 100644 (file)
@@ -20,6 +20,7 @@
 # include "array.h"
 
 #if 0
+static long long count = 0;
 #  define ANNOUNCE() printf(__FILE__": call no. %lld (%s)\n", count++, __FUNCTION__)
 #else
 #  define ANNOUNCE() ((void)0)
@@ -29,7 +30,6 @@
  * local values
  * * */
 
-static long long count = 0;
 
 /* dynamic array to hold all modes */
 static ir_mode * modes;
@@ -195,7 +195,7 @@ register_mode(ir_mode* new_mode)
 #  undef get_mode_ident
 #  undef get_mode_name
 #  undef get_mode_sort
-#  undef get_mode_size
+#  undef get_mode_size_bits
 #  undef get_mode_align
 #endif
 modecode
@@ -226,13 +226,20 @@ get_mode_sort(ir_mode* mode)
   return mode->sort;
 }
 
-int
-get_mode_size(ir_mode *mode)
+INLINE int
+get_mode_size_bits(ir_mode *mode)
 {
   ANNOUNCE();
   return mode->size;
 }
 
+int get_mode_size_bytes(ir_mode *mode) {
+  ANNOUNCE();
+  int size = get_mode_size_bits(mode);
+  if ((size % 8) != 0) return -1;
+  return size / 8;
+}
+
 int
 get_mode_align (ir_mode *mode)
 {
@@ -244,7 +251,7 @@ get_mode_align (ir_mode *mode)
 #  define get_mode_ident(mode) (mode)->name
 #  define get_mode_name(mode) id_to_str((mode)->name)
 #  define get_mode_sort(mode) (mode)->sort
-#  define get_mode_size(mode) (mode)->size
+#  define get_mode_size_bits(mode) (mode)->size
 #  define get_mode_align(mode) (mode)->align
 #endif
 int
@@ -431,7 +438,7 @@ mode_is_dataM (ir_mode *mode)
 #  define mode_is_dataM(mode) (((mode)->sort == float_number) || ((mode)->sort == int_number) || ((mode)->sort == character) || ((mode)->sort == reference) || ((mode)->code == irm_M))
 #endif
 /* Returns true if sm can be converted to lm without loss. */
-bool
+int
 smaller_mode(ir_mode *sm, ir_mode *lm)
 {
   ANNOUNCE();
@@ -453,15 +460,15 @@ smaller_mode(ir_mode *sm, ir_mode *lm)
            */
           if (mode_is_signed(sm))
           {
-            if ( mode_is_signed(lm) && (get_mode_size(lm) > get_mode_size(sm)) )
+            if ( mode_is_signed(lm) && (get_mode_size_bits(lm) > get_mode_size_bits(sm)) )
               return 1;
           }
           else if (mode_is_signed(lm))
           {
-            if (get_mode_size(lm) > get_mode_size(sm) + 1)
+            if (get_mode_size_bits(lm) > get_mode_size_bits(sm) + 1)
               return 1;
           }
-          else if (get_mode_size(lm) > get_mode_size(sm))
+          else if (get_mode_size_bits(lm) > get_mode_size_bits(sm))
           {
             return 1;
           }
@@ -480,7 +487,7 @@ smaller_mode(ir_mode *sm, ir_mode *lm)
       /* XXX currently only the three standard 32,64,80 bit floats
        * are supported which can safely be converted */
       if ( (get_mode_sort(lm) == float_number)
-           && (get_mode_size(lm) > get_mode_size(sm)) )
+           && (get_mode_size_bits(lm) > get_mode_size_bits(sm)) )
          return 1;
       break;