[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dotgnu-pnet-commits] libjit ./ChangeLog jit/jit-interp.c jit/jit-rul...
From: |
Aleksey Demakov |
Subject: |
[dotgnu-pnet-commits] libjit ./ChangeLog jit/jit-interp.c jit/jit-rul... |
Date: |
Wed, 11 Jan 2006 00:24:43 +0000 |
CVSROOT: /sources/dotgnu-pnet
Module name: libjit
Branch:
Changes by: Aleksey Demakov <address@hidden> 06/01/11 00:24:43
Modified files:
. : ChangeLog
jit : jit-interp.c jit-rules-interp.c
Log message:
implement JIT_OP_JUMP_TABLE in interpreter
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/libjit/ChangeLog.diff?tr1=1.190&tr2=1.191&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/libjit/jit/jit-interp.c.diff?tr1=1.13&tr2=1.14&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/libjit/jit/jit-rules-interp.c.diff?tr1=1.22&tr2=1.23&r1=text&r2=text
Patches:
Index: libjit/ChangeLog
diff -u libjit/ChangeLog:1.190 libjit/ChangeLog:1.191
--- libjit/ChangeLog:1.190 Tue Jan 10 21:24:42 2006
+++ libjit/ChangeLog Wed Jan 11 00:24:42 2006
@@ -5,10 +5,10 @@
* jit/jit-internal.h, jit/jit-function.c, jiy/jit-rules-x86.c:
add fixup_absolute_list field to _jit_block struct for fixing up
absolute address references to a block.
- * include/jit/jit-opcode.h (JIT_OP_JUMP_TABLE),
- * jit/jit-rules-x86.sel (JIT_OP_JUMP_TABLE),
- * include/jit/jit-insn.h, jit/jit-insn.c (jit_insn_jump_table):
- add new opcode.
+ * include/jit/jit-opcode.h, include/jit/jit-insn.h, jit/jit-insn.c
+ (jit_insn_jump_table), jit/jit-rules-x86.sel, jit/jit-rules-interp.c
+ (_jit_gen_insn), jit/jit-interp.c (_jit_run_function):
+ add JIT_OP_JUMP_TABLE opcode.
2006-01-08 Aleksey Demakov <address@hidden>
Index: libjit/jit/jit-interp.c
diff -u libjit/jit/jit-interp.c:1.13 libjit/jit/jit-interp.c:1.14
--- libjit/jit/jit-interp.c:1.13 Thu Nov 18 01:41:54 2004
+++ libjit/jit/jit-interp.c Wed Jan 11 00:24:42 2006
@@ -2045,6 +2045,20 @@
}
VMBREAK;
+ VMCASE(JIT_OP_JUMP_TABLE):
+ {
+ if(VM_STK_INT0 < VM_NINT_ARG && VM_STK_INT0 >= 0)
+ {
+ pc = pc[2 + VM_STK_INT0];
+ VM_MODIFY_STACK(1);
+ }
+ else
+ {
+ VM_MODIFY_PC_AND_STACK(2 + VM_NINT_ARG, 1);
+ }
+ }
+ VMBREAK;
+
/******************************************************************
* Comparison opcodes.
******************************************************************/
Index: libjit/jit/jit-rules-interp.c
diff -u libjit/jit/jit-rules-interp.c:1.22 libjit/jit/jit-rules-interp.c:1.23
--- libjit/jit/jit-rules-interp.c:1.22 Thu Nov 18 01:41:54 2004
+++ libjit/jit/jit-rules-interp.c Wed Jan 11 00:24:43 2006
@@ -1103,6 +1103,47 @@
}
/* Not reached */
+ case JIT_OP_JUMP_TABLE:
+ {
+ jit_label_t *labels;
+ jit_nint num_labels;
+ jit_nint index;
+
+ labels = (jit_label_t *) insn->value1->address;
+ num_labels = insn->value2->address;
+
+ _jit_regs_spill_all(gen);
+ _jit_regs_load_to_top(gen,
+ insn->dest,
+ (insn->flags &
(JIT_INSN_DEST_NEXT_USE |
+
JIT_INSN_DEST_LIVE)),
+ 0);
+
+ jit_cache_opcode(&(gen->posn), insn->opcode);
+ jit_cache_native(&(gen->posn), num_labels);
+ for(index = 0; index < num_labels; index++)
+ {
+ block = jit_block_from_label(func,
labels[index]);
+ if(!block)
+ {
+ return;
+ }
+ if(block->address)
+ {
+ /* We already know the address of the
block */
+ jit_cache_native(&(gen->posn),
block->address);
+ }
+ else
+ {
+ /* Record this position on the block's
fixup list */
+ pc = (void **)(gen->posn.ptr);
+ jit_cache_native(&(gen->posn),
block->fixup_absolute_list);
+ block->fixup_absolute_list = pc;
+ }
+ }
+ }
+ break;
+
case JIT_OP_ADDRESS_OF_LABEL:
{
/* Get the address of a particular label */
@@ -1751,6 +1792,15 @@
}
block->fixup_list = 0;
+ fixup = (void **)(block->fixup_absolute_list);
+ while(fixup != 0)
+ {
+ next = (void **)(fixup[0]);
+ fixup[0] = (void *)(jit_nint)((void **)(block->address));
+ fixup = next;
+ }
+ block->fixup_absolute_list = 0;
+
/* If this is the exception catcher block, then we need to update
the exception cookie for the function to point to here */
if(block->label == block->func->builder->catcher_label &&
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] libjit ./ChangeLog jit/jit-interp.c jit/jit-rul...,
Aleksey Demakov <=