libretro: adjust psxclock description
[pcsx_rearmed.git] / deps / lightning / lib / jit_disasm.c
index 856a70b..90d90b0 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.
  *
@@ -54,13 +54,13 @@ static FILE                  *disasm_stream;
 #endif
 
 #if BINUTILS_2_38
-static int fprintf_styled(void *, enum disassembler_style, const char* fmt, ...)
+static int fprintf_styled(void * stream, enum disassembler_style style, const char* fmt, ...)
 {
   va_list args;
   int r;
 
   va_start(args, fmt);
-  r = vprintf(fmt, args);
+  r = vfprintf(disasm_stream, fmt, args);
   va_end(args);
 
   return r;
@@ -71,9 +71,9 @@ static int fprintf_styled(void *, enum disassembler_style, const char* fmt, ...)
  * Implementation
  */
 void
-jit_init_debug(const char *progname)
+jit_init_debug(const char *progname, FILE *stream)
 {
-    jit_init_print();
+    jit_init_print(stream);
 #if DISASSEMBLER
     bfd_init();
 
@@ -89,7 +89,7 @@ jit_init_debug(const char *progname)
     bfd_check_format(disasm_bfd, bfd_object);
     bfd_check_format(disasm_bfd, bfd_archive);
     if (!disasm_stream)
-       disasm_stream = stdout;
+       disasm_stream = stream;
 
 #if BINUTILS_2_38
     INIT_DISASSEMBLE_INFO(disasm_info, disasm_stream, fprintf, fprintf_styled);
@@ -256,7 +256,7 @@ disasm_print_address(bfd_vma addr, struct disassemble_info *info)
     int                         line;
     char                buffer[address_buffer_length];
 
-    sprintf(buffer, address_buffer_format, (long long)addr);
+    sprintf(buffer, address_buffer_format, addr);
     (*info->fprintf_func)(info->stream, "0x%s", buffer);
 
 #  define _jit                         disasm_jit
@@ -319,7 +319,10 @@ _disassemble(jit_state_t *_jit, jit_pointer_t code, jit_int32_t length)
     char               *name, *old_name;
     char               *file, *old_file;
     int                         line,  old_line;
-#if __arm__
+#if __riscv && __WORDSIZE == 64
+    jit_word_t         *vector;
+    jit_int32_t                 offset;
+#elif __arm__
     jit_int32_t                 offset;
     jit_bool_t          data_info;
     jit_int32_t                 data_offset;
@@ -332,6 +335,10 @@ _disassemble(jit_state_t *_jit, jit_pointer_t code, jit_int32_t length)
     jit_uword_t                 prevw;
 #endif
 
+#if __riscv && __WORDSIZE == 64
+    end -= _jitc->consts.hash.count * 8;
+#endif
+
 #if __arm__
     data_info = _jitc && _jitc->data_info.ptr;
     data_offset = 0;
@@ -354,7 +361,7 @@ _disassemble(jit_state_t *_jit, jit_pointer_t code, jit_int32_t length)
        }
        while (node && (jit_uword_t)(prevw + node->offset) == (jit_uword_t)pc) {
            jit_print_node(node);
-           fputc('\n', stdout); 
+           fputc('\n', disasm_stream);
            prevw += node->offset;
            node = node->next;
        }
@@ -399,11 +406,22 @@ _disassemble(jit_state_t *_jit, jit_pointer_t code, jit_int32_t length)
            old_line = line;
        }
 
-       bytes = sprintf(buffer, address_buffer_format, (long long)pc);
+       bytes = sprintf(buffer, address_buffer_format, pc);
        (*disasm_info.fprintf_func)(disasm_stream, "%*c0x%s\t",
                                    16 - bytes, ' ', buffer);
        pc += (*disasm_print)(pc, &disasm_info);
        putc('\n', disasm_stream);
     }
+#if __riscv && __WORDSIZE == 64
+    for (vector = (jit_word_t *)end, offset = 0;
+        offset < _jitc->consts.hash.count; offset++) {
+       bytes = sprintf(buffer, address_buffer_format,
+                       (long long)end + offset * sizeof(jit_word_t));
+       (*disasm_info.fprintf_func)(disasm_stream,
+                                   "%*c0x%s\t.quad\t0x%016lx\t# (%ld)\n",
+                                   16 - bytes, ' ', buffer,
+                                   vector[offset], vector[offset]);
+    }
+#endif
 }
 #endif