-#define print_chr(value) fputc(value, stdout)
-#define print_hex(value) fprintf(stdout, "0x%lx", value)
-#define print_dec(value) fprintf(stdout, "%ld", value)
-#define print_flt(value) fprintf(stdout, "%g", value)
-#define print_str(value) fprintf(stdout, "%s", value)
-#define print_ptr(value) fprintf(stdout, "%p", value)
+#if __WORDSIZE == 32
+# define MININT 0x80000000
+# define DEC_FMT "%d"
+# define HEX_FMT "0x%x"
+#else
+# define MININT 0x8000000000000000
+# define DEC_FMT "%ld"
+# define HEX_FMT "0x%lx"
+#endif
+
+
+#define print_chr(value) fputc(value, print_stream)
+#define print_hex(value) \
+ do { \
+ if (value < 0 && value != MININT) \
+ fprintf(print_stream, "-" HEX_FMT, (jit_uword_t)-value); \
+ else \
+ fprintf(print_stream, HEX_FMT, (jit_uword_t)value); \
+ } while (0)
+#define print_dec(value) fprintf(print_stream, DEC_FMT, value)
+#define print_flt(value) fprintf(print_stream, "%g", value)
+#define print_str(value) fprintf(print_stream, "%s", value)
+#define print_ptr(value) fprintf(print_stream, "%p", value)