git subrepo pull --force deps/lightning
[pcsx_rearmed.git] / deps / lightning / lib / jit_print.c
index 61d9650..a6f9338 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012-2019  Free Software Foundation, Inc.
+ * Copyright (C) 2012-2022  Free Software Foundation, Inc.
  *
  * This file is part of GNU lightning.
  *
 #include <lightning.h>
 #include <lightning/jit_private.h>
 
+#if __WORDSIZE == 32
+#  define MININT                0x80000000
+#else
+#  define MININT                0x8000000000000000
+#endif
+
+
 #define print_chr(value)               fputc(value, print_stream)
-#define print_hex(value)               fprintf(print_stream, "0x%lx", value)
+#define print_hex(value)                                               \
+    do {                                                               \
+       if (value < 0 && value != MININT)                               \
+           fprintf(print_stream, "-0x%lx", -value);                    \
+       else                                                            \
+           fprintf(print_stream, "0x%lx", value);                      \
+    } while (0)
 #define print_dec(value)               fprintf(print_stream, "%ld", value)
 #define print_flt(value)               fprintf(print_stream, "%g", value)
 #define print_str(value)               fprintf(print_stream, "%s", value)
@@ -58,7 +71,7 @@ void
 jit_init_print(void)
 {
     if (!print_stream)
-       print_stream = stderr;
+       print_stream = stdout;
 }
 
 void
@@ -107,7 +120,7 @@ _jit_print_node(jit_state_t *_jit, jit_node_t *node)
        (jit_cc_a0_int|jit_cc_a0_flt|jit_cc_a0_dbl|jit_cc_a0_jmp|
         jit_cc_a0_reg|jit_cc_a0_rlh|jit_cc_a0_arg|
         jit_cc_a1_reg|jit_cc_a1_int|jit_cc_a1_flt|jit_cc_a1_dbl|jit_cc_a1_arg|
-        jit_cc_a2_reg|jit_cc_a2_int|jit_cc_a2_flt|jit_cc_a2_dbl);
+        jit_cc_a2_reg|jit_cc_a2_int|jit_cc_a2_flt|jit_cc_a2_dbl|jit_cc_a2_rlh);
     if (!(node->flag & jit_flag_synth) && ((value & jit_cc_a0_jmp) ||
                                           node->code == jit_code_finishr ||
                                           node->code == jit_code_finishi))
@@ -217,6 +230,18 @@ _jit_print_node(jit_state_t *_jit, jit_node_t *node)
            print_chr(' ');     print_reg(node->u.q.h);
            print_str(") ");    print_reg(node->v.w);
            print_chr(' ');     print_hex(node->w.w);   return;
+       r_r_q:
+           print_chr(' ');     print_reg(node->u.w);
+           print_chr(' ');     print_reg(node->v.w);
+           print_str(" (");    print_reg(node->w.q.l);
+           print_chr(' ');     print_reg(node->w.q.h);
+           print_str(") ");    return;
+       r_w_q:
+           print_chr(' ');     print_reg(node->u.w);
+           print_chr(' ');     print_hex(node->v.w);
+           print_str(" (");    print_reg(node->w.q.l);
+           print_chr(' ');     print_reg(node->w.q.h);
+           print_str(") ");    return;
        r_r_f:
            print_chr(' ');     print_reg(node->u.w);
            print_chr(' ');     print_reg(node->v.w);
@@ -292,12 +317,12 @@ _jit_print_node(jit_state_t *_jit, jit_node_t *node)
        case jit_code_name:
            print_chr(' ');
            if (node->v.p && _jitc->emit)
-               print_str(node->v.n->u.p);
+               print_str((char *)node->v.n->u.p);
            break;
        case jit_code_note:
            print_chr(' ');
            if (node->v.p && _jitc->emit)
-               print_str(node->v.n->u.p);
+               print_str((char *)node->v.n->u.p);
            if (node->v.p && _jitc->emit && node->w.w)
                print_chr(':');
            if (node->w.w)
@@ -357,6 +382,12 @@ _jit_print_node(jit_state_t *_jit, jit_node_t *node)
                case jit_cc_a0_reg|jit_cc_a0_rlh|
                     jit_cc_a1_reg|jit_cc_a2_int:
                    goto q_r_w;
+               case jit_cc_a0_reg|jit_cc_a1_reg|
+                   jit_cc_a2_reg|jit_cc_a2_rlh:
+                   goto r_r_q;
+               case jit_cc_a0_reg|jit_cc_a1_int|
+                   jit_cc_a2_reg|jit_cc_a2_rlh:
+                   goto r_w_q;
                case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_flt:
                    goto r_r_f;
                case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_dbl: