[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dotgnu-pnet-commits] pnet ./ChangeLog engine/jitc.c engine/jitc_bran...
From: |
Klaus Treichel |
Subject: |
[dotgnu-pnet-commits] pnet ./ChangeLog engine/jitc.c engine/jitc_bran... |
Date: |
Sat, 07 Jan 2006 12:23:42 +0000 |
CVSROOT: /cvsroot/dotgnu-pnet
Module name: pnet
Branch:
Changes by: Klaus Treichel <address@hidden> 06/01/07 12:23:42
Modified files:
. : ChangeLog
engine : jitc.c jitc_branch.c
Log message:
Add support for the switch opcode (krokas).
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/ChangeLog.diff?tr1=1.3271&tr2=1.3272&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/engine/jitc.c.diff?tr1=1.11&tr2=1.12&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnet/engine/jitc_branch.c.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
Patches:
Index: pnet/ChangeLog
diff -u pnet/ChangeLog:1.3271 pnet/ChangeLog:1.3272
--- pnet/ChangeLog:1.3271 Fri Jan 6 17:38:56 2006
+++ pnet/ChangeLog Sat Jan 7 12:23:42 2006
@@ -1,3 +1,8 @@
+2006-01-07 Kirill Kononenko <address@hidden>
+
+ * engine/jitc.c, engine/jitc_branch.c: Implement support for the switch
+ instruction.
+
2006-01-06 Klaus Treichel <address@hidden>
* engine/jitc.c: Add some helper functions for jitc_obj.c
Index: pnet/engine/jitc.c
diff -u pnet/engine/jitc.c:1.11 pnet/engine/jitc.c:1.12
--- pnet/engine/jitc.c:1.11 Fri Jan 6 17:38:56 2006
+++ pnet/engine/jitc.c Sat Jan 7 12:23:42 2006
@@ -134,6 +134,10 @@
ILJITLabel *labelList;
int labelOutOfMemory;
+ /* Handle the switch table. */
+ int numSwitch;
+ int maxSwitch;
+
/* The current jitted function. */
ILJitFunction jitFunction;
};
Index: pnet/engine/jitc_branch.c
diff -u pnet/engine/jitc_branch.c:1.4 pnet/engine/jitc_branch.c:1.5
--- pnet/engine/jitc_branch.c:1.4 Wed Jan 4 18:54:39 2006
+++ pnet/engine/jitc_branch.c Sat Jan 7 12:23:42 2006
@@ -483,6 +483,10 @@
*/
static void JITCoder_SwitchStart(ILCoder *coder, ILUInt32 numEntries)
{
+ ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
+
+ jitCoder->numSwitch = 0;
+ jitCoder->maxSwitch = numEntries;
}
/*
@@ -490,6 +494,24 @@
*/
static void JITCoder_SwitchEntry(ILCoder *_coder, ILUInt32 dest)
{
+ ILJITCoder *jitCoder = _ILCoderToILJITCoder(_coder);
+ ILJITLabel *label = GetLabel(jitCoder, dest);
+
+ jit_value_t constant =
jit_value_create_nint_constant(jitCoder->jitFunction,
+
jit_type_nint,
+
jitCoder->numSwitch);
+
+ jit_value_t temp = jit_insn_eq(jitCoder->jitFunction,
+ jitCoder->jitStack[jitCoder->stackTop -
1],
+ constant);
+
+ jit_insn_branch_if(jitCoder->jitFunction, temp, &(label->label));
+
+ ++jitCoder->numSwitch;
+ if(jitCoder->numSwitch==jitCoder->maxSwitch)
+ {
+ JITC_ADJUST(jitCoder, -1);
+ }
}
/*
- [dotgnu-pnet-commits] pnet ./ChangeLog engine/jitc.c engine/jitc_bran...,
Klaus Treichel <=