dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dotgnu-pnet-commits] libjit ChangeLog include/jit/jit-opcode.h jit/j...


From: Aleksey Demakov
Subject: [dotgnu-pnet-commits] libjit ChangeLog include/jit/jit-opcode.h jit/j...
Date: Mon, 28 Aug 2006 19:52:48 +0000

CVSROOT:        /sources/dotgnu-pnet
Module name:    libjit
Changes by:     Aleksey Demakov <avd>   06/08/28 19:52:48

Modified files:
        .              : ChangeLog 
        include/jit    : jit-opcode.h 
        jit            : jit-opcode.c jit-dump.c 

Log message:
        dump jump tables

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libjit/ChangeLog?cvsroot=dotgnu-pnet&r1=1.259&r2=1.260
http://cvs.savannah.gnu.org/viewcvs/libjit/include/jit/jit-opcode.h?cvsroot=dotgnu-pnet&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-opcode.c?cvsroot=dotgnu-pnet&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-dump.c?cvsroot=dotgnu-pnet&r1=1.13&r2=1.14

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/ChangeLog,v
retrieving revision 1.259
retrieving revision 1.260
diff -u -b -r1.259 -r1.260
--- ChangeLog   28 Aug 2006 17:19:06 -0000      1.259
+++ ChangeLog   28 Aug 2006 19:52:48 -0000      1.260
@@ -1,3 +1,11 @@
+2006-08-29  Aleksey Demakov  <address@hidden>
+
+       * include/jit/jit-opcode.h:
+       * jit/jit-opcode.c: add JIT_OPCODE_IS_JUMP_TABLE flag to mark the
+       JIT_OP_JUMP_TABLE opcode.
+
+       * jit/jit-dump.c (jit_dump_insn, dump_interp_code): add jump table
+       dumping.
 
 2006-08-28  Klaus Treichel  <address@hidden>
 

Index: include/jit/jit-opcode.h
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/include/jit/jit-opcode.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- include/jit/jit-opcode.h    10 Jan 2006 21:24:42 -0000      1.13
+++ include/jit/jit-opcode.h    28 Aug 2006 19:52:48 -0000      1.14
@@ -568,6 +568,7 @@
 #define        JIT_OPCODE_IS_CALL_EXTERNAL             0x00004000
 #define        JIT_OPCODE_IS_REG                               0x00008000
 #define        JIT_OPCODE_IS_ADDROF_LABEL              0x00010000
+#define JIT_OPCODE_IS_JUMP_TABLE               0x00020000
 #define        JIT_OPCODE_OPER_MASK                    0x01F00000
 #define        JIT_OPCODE_OPER_NONE                    0x00000000
 #define        JIT_OPCODE_OPER_ADD                             0x00100000

Index: jit/jit-opcode.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-opcode.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- jit/jit-opcode.c    8 Apr 2006 09:26:05 -0000       1.17
+++ jit/jit-opcode.c    28 Aug 2006 19:52:48 -0000      1.18
@@ -539,7 +539,7 @@
        /*
         * Switch statement support.
         */
-       {"jump_table",                                  F_(PTR, PTR, INT)},
+       {"jump_table",                          F_(ANY, PTR, 
INT)|JIT_OPCODE_IS_JUMP_TABLE},
 };
 
 #if defined(JIT_BACKEND_INTERP)

Index: jit/jit-dump.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-dump.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- jit/jit-dump.c      4 May 2006 06:35:45 -0000       1.13
+++ jit/jit-dump.c      28 Aug 2006 19:52:48 -0000      1.14
@@ -419,6 +419,22 @@
                                (long)(jit_insn_get_label(insn)));
                return;
        }
+       else if((flags & JIT_OPCODE_IS_JUMP_TABLE) != 0)
+       {
+               jit_label_t *labels;
+               jit_nint num_labels, label;
+               labels = (jit_label_t 
*)jit_value_get_nint_constant(jit_insn_get_value1(insn));
+               num_labels = 
jit_value_get_nint_constant(jit_insn_get_value2(insn));
+               fprintf(stream, "jump_table ");
+               dump_value(stream, func, jit_insn_get_dest(insn), flags & 
JIT_OPCODE_DEST_MASK);
+               printf(" : {");
+               for(label = 0; label < num_labels; label++)
+               {
+                       printf(" .L%ld", (long) labels[label]);
+               }
+               printf(" }");
+               return;
+       }
 
        /* Output the destination information */
        if((flags & JIT_OPCODE_DEST_MASK) != JIT_OPCODE_DEST_EMPTY &&
@@ -629,6 +645,17 @@
                                                        
(long)(jit_nint)(pc[1]), (long)(jit_nint)(pc[2]));
                                        pc += 3;
                                }
+                               else if((info->flags & 
JIT_OPCODE_IS_JUMP_TABLE) != 0)
+                               {
+                                       jit_nint label, num_labels;
+                                       num_labels = (jit_nint)pc[0];
+                                       for(label = 1; label <= num_labels; 
label++)
+                                       {
+                                               fprintf(stream, " %lX",
+                                                       
(long)(jit_nint)pc[label]);
+                                       }
+                                       pc += 1 + num_labels;
+                               }
                        }
                        break;
                }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]