git subrepo pull (merge) --force deps/lightning
[pcsx_rearmed.git] / deps / lightning / lib / jit_print.c
index 61d9650..2244aab 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012-2019  Free Software Foundation, Inc.
+ * Copyright (C) 2012-2023  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
+#  define INT_FMT              "%d"
+#  define DEC_FMT              "%d"
+#  define HEX_FMT              "0x%x"
+#else
+#  define MININT                0x8000000000000000
+#  define INT_FMT              "%d"
+#  define DEC_FMT              "%ld"
+#  define HEX_FMT              "0x%lx"
+#endif
+
+
 #define print_chr(value)               fputc(value, print_stream)
-#define print_hex(value)               fprintf(print_stream, "0x%lx", value)
-#define print_dec(value)               fprintf(print_stream, "%ld", value)
+#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_int(value)               fprintf(print_stream, INT_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)
@@ -58,7 +78,7 @@ void
 jit_init_print(void)
 {
     if (!print_stream)
-       print_stream = stderr;
+       print_stream = stdout;
 }
 
 void
@@ -106,8 +126,9 @@ _jit_print_node(jit_state_t *_jit, jit_node_t *node)
     value = jit_classify(node->code) &
        (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_a1_reg|jit_cc_a1_rlh|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_rlh);
     if (!(node->flag & jit_flag_synth) && ((value & jit_cc_a0_jmp) ||
                                           node->code == jit_code_finishr ||
                                           node->code == jit_code_finishi))
@@ -202,21 +223,64 @@ _jit_print_node(jit_state_t *_jit, jit_node_t *node)
        r_r_r:
            print_chr(' ');     print_reg(node->u.w);
            print_chr(' ');     print_reg(node->v.w);
-           print_chr(' ');     print_reg(node->w.w);   return;
+           print_chr(' ');     print_reg(node->w.w);   return;
        r_r_w:
            print_chr(' ');     print_reg(node->u.w);
            print_chr(' ');     print_reg(node->v.w);
-           print_chr(' ');     print_hex(node->w.w);   return;
+           print_chr(' ');     print_hex(node->w.w);   return;
+       r_w_w:
+           print_chr(' ');     print_reg(node->u.w);
+           print_chr(' ');     print_hex(node->v.w);
+           print_chr(' ');
+           if (node->code == jit_code_movi_ww_d)
+               print_hex(node->w.w);
+           else
+               print_dec(node->w.w);
+           return;
+       w_r_w:
+           print_chr(' ');     print_hex(node->u.w);
+           print_chr(' ');     print_reg(node->v.w);
+           print_chr(' ');     print_dec(node->w.w);   return;
        q_r_r:
            print_str(" (");    print_reg(node->u.q.l);
            print_chr(' ');     print_reg(node->u.q.h);
            print_str(") ");    print_reg(node->v.w);
-           print_chr(' ');     print_reg(node->w.w);   return;
+           print_chr(' ');     print_reg(node->w.w);   return;
        q_r_w:
            print_str(" (");    print_reg(node->u.q.l);
            print_chr(' ');     print_reg(node->u.q.h);
            print_str(") ");    print_reg(node->v.w);
-           print_chr(' ');     print_hex(node->w.w);   return;
+           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_iq:
+           print_chr(' ');     print_reg(node->u.w);
+           print_chr(' ');     print_reg(node->v.w);
+           print_str(" (");    print_int(node->w.q.l);
+           print_chr(' ');     print_int(node->w.q.h);
+           print_str(") ");    return;
+       r_w_iq:
+           print_chr(' ');     print_reg(node->u.w);
+           print_chr(' ');     print_hex(node->v.w);
+           print_str(" (");    print_int(node->w.q.l);
+           print_chr(' ');     print_int(node->w.q.h);
+           print_str(") ");    return;
+       r_q_r:
+           print_chr(' ');     print_reg(node->u.w);
+           print_str(" (");    print_reg(node->v.q.l);
+           print_chr(' ');     print_reg(node->v.q.h);
+           print_str(") ");    print_reg(node->w.w);
+           return;
        r_r_f:
            print_chr(' ');     print_reg(node->u.w);
            print_chr(' ');     print_reg(node->v.w);
@@ -226,6 +290,16 @@ _jit_print_node(jit_state_t *_jit, jit_node_t *node)
            else
                print_flt(node->w.f);
            return;
+       r_q_f:
+           print_chr(' ');     print_reg(node->u.w);
+           print_str(" (");    print_reg(node->v.q.l);
+           print_chr(' ');     print_reg(node->v.q.h);
+           print_str(") ");
+           if (node->flag & jit_flag_data)
+               print_flt(*(jit_float32_t *)node->w.n->u.w);
+           else
+               print_flt(node->w.f);
+           return;
        r_r_d:
            print_chr(' ');     print_reg(node->u.w);
            print_chr(' ');     print_reg(node->v.w);
@@ -235,6 +309,16 @@ _jit_print_node(jit_state_t *_jit, jit_node_t *node)
            else
                print_flt(node->w.d);
            return;
+       r_q_d:
+           print_chr(' ');     print_reg(node->u.w);
+           print_str(" (");    print_reg(node->v.q.l);
+           print_chr(' ');     print_reg(node->v.q.h);
+           print_str(") ");
+           if (node->flag & jit_flag_data)
+               print_flt(*(jit_float64_t *)node->w.n->u.w);
+           else
+               print_flt(node->w.d);
+           return;
        w_r_r:
            print_chr(' ');     print_hex(node->u.w);
            print_chr(' ');     print_reg(node->v.w);
@@ -292,12 +376,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)
@@ -351,12 +435,26 @@ _jit_print_node(jit_state_t *_jit, jit_node_t *node)
                    goto r_r_r;
                case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a2_int:
                    goto r_r_w;
+               case jit_cc_a0_reg|jit_cc_a1_int|jit_cc_a2_int:
+                   goto r_w_w;
+               case jit_cc_a0_int|jit_cc_a1_reg|jit_cc_a2_int:
+                   goto w_r_w;
                case jit_cc_a0_reg|jit_cc_a0_rlh|
                     jit_cc_a1_reg|jit_cc_a2_reg:
                    goto q_r_r;
                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_rlh:
+                   goto r_r_iq;
+               case jit_cc_a0_reg|jit_cc_a1_int|jit_cc_a2_rlh:
+                   goto r_w_iq;
                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:
@@ -371,6 +469,12 @@ _jit_print_node(jit_state_t *_jit, jit_node_t *node)
                    goto n_r_f;
                case jit_cc_a0_jmp|jit_cc_a1_reg|jit_cc_a2_dbl:
                    goto n_r_d;
+               case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a1_rlh|jit_cc_a2_reg:
+                   goto r_q_r;
+               case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a1_rlh|jit_cc_a2_flt:
+                   goto r_q_f;
+               case jit_cc_a0_reg|jit_cc_a1_reg|jit_cc_a1_rlh|jit_cc_a2_dbl:
+                   goto r_q_d;
                default:
                    abort();
            }