some fixes for xml dumper / still buggy.
[libfirm] / ir / tv / strcalc.h
index d73bfea..ffb81ac 100644 (file)
 #ifndef _STRCALC_H_
 #define _STRCALC_H_
 
-#define BIGGEST_INTEGER_SIZE_IN_BYTES 8
-#define SCDEBUG
+#ifdef STRCALC_DEBUG_ALL             /* switch on all debug options */
+#  ifndef STRCALC_DEBUG
+#    define STRCALC_DEBUG            /* switch on debug output */
+#  endif
+#  ifndef STRCALC_DEBUG_PRINTCOMP    /* print arguments and result of each computation */
+#    define STRCALC_DEBUG_PRINTCOMP
+#  endif
+#  ifndef STRCALC_DEBUG_FULLPRINT
+#    define STRCALC_DEBUG_FULLPRINT  /* print full length of values (e.g. 128 bit instead of 64 bit using default init) */
+#  endif
+#  ifndef STRCALC_DEBUG_GROUPPRINT
+#    define STRCALC_DEBUG_GROUPPRINT /* print spaces after each 8 bits */
+#  endif
+#endif
+
+#ifdef STRCALC_DEBUG
+  /* shortcut output for debugging */
+#  define sc_print_hex(a) sc_print((a), 0, SC_HEX)
+#  define sc_print_dec(a) sc_print((a), 0, SC_DEC)
+#  define sc_print_oct(a) sc_print((a), 0, SC_OCT)
+#  define sc_print_bin(a) sc_print((a), 0, SC_BIN)
+#endif
+
+/*
+ * constants, typedefs, enums
+ */
+
+#define DEFAULT_PRECISION_IN_BYTES 8
 
-/*****************************************************************************
- * typedefs, enums and structs
- *****************************************************************************/
 enum {
   SC_0 = 0,
   SC_1,
@@ -40,7 +63,7 @@ enum {
   SC_C,
   SC_D,
   SC_E,
-  SC_F,
+  SC_F
 };
 
 /**
@@ -60,17 +83,18 @@ enum {
   SC_AND,              /**< Bitwise And */
   SC_OR,               /**< Bitwise Or */
   SC_NOT,              /**< Bitwise Not */
-  SC_XOR,              /**< Bitwise Exclusive Or */
+  SC_XOR               /**< Bitwise Exclusive Or */
 };
 
 /**
  * The output mode for ntger values.
  */
 enum base_t {
-  SC_HEX,      /**< hexadecimal output */
+  SC_hex,      /**< hexadecimal output with small letters */
+  SC_HEX,      /**< hexadecimal output with BIG letters */
   SC_DEC,      /**< decimal output */
   SC_OCT,      /**< octal output */
-  SC_BIN,      /**< binary output */
+  SC_BIN       /**< binary output */
 };
 
 /*
@@ -104,10 +128,15 @@ void sc_min_from_bits(unsigned int num_bits, unsigned int sign);
 void sc_max_from_bits(unsigned int num_bits, unsigned int sign);
 
 void sc_calc(const void *val1, const void *val2, unsigned op);
-void sc_bitcalc(const void *val1, const void *val2, unsigned radius, unsigned sign, unsigned op);
+void sc_bitcalc(const void *val1, const void *val2, int radius, int sign, unsigned op);
 int  sc_comp(const void *val1, const void *val2);
 
-unsigned char sc_sub_bits(const void *val, int len, unsigned byte_ofs);
+int sc_get_highest_set_bit(const void *value);
+int sc_get_lowest_set_bit(const void *value);
+int sc_is_zero(const void *value);
+int sc_is_negative(const void *value);
+int sc_had_carry(void);
+unsigned char sc_sub_bits(const void *value, int len, unsigned byte_ofs);
 
 /**
  * Converts a tarval into a string.
@@ -118,4 +147,7 @@ unsigned char sc_sub_bits(const void *val, int len, unsigned byte_ofs);
  */
 const char *sc_print(const void *val1, unsigned bits, enum base_t base);
 
+void init_strcalc(int precision_in_bytes);
+int get_precision(void);
+
 #endif /* _STRCALC_H_ */