[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dotgnu-pnet-commits] pnet ChangeLog include/il_coder.h engine/cvmc.c...
From: |
Aleksey Demakov |
Subject: |
[dotgnu-pnet-commits] pnet ChangeLog include/il_coder.h engine/cvmc.c... |
Date: |
Sun, 07 Oct 2007 19:20:12 +0000 |
CVSROOT: /sources/dotgnu-pnet
Module name: pnet
Changes by: Aleksey Demakov <avd> 07/10/07 19:20:12
Modified files:
. : ChangeLog
include : il_coder.h
engine : cvmc.c cvmc_branch.c jitc.c jitc_branch.c
jitc_labels.c null_coder.c verify_branch.c
Log message:
add SwitchEnd coder method and use libjit jump table to implement
switch
instruction in jit coder
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pnet/ChangeLog?cvsroot=dotgnu-pnet&r1=1.3500&r2=1.3501
http://cvs.savannah.gnu.org/viewcvs/pnet/include/il_coder.h?cvsroot=dotgnu-pnet&r1=1.56&r2=1.57
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/cvmc.c?cvsroot=dotgnu-pnet&r1=1.57&r2=1.58
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/cvmc_branch.c?cvsroot=dotgnu-pnet&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc.c?cvsroot=dotgnu-pnet&r1=1.75&r2=1.76
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_branch.c?cvsroot=dotgnu-pnet&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/jitc_labels.c?cvsroot=dotgnu-pnet&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/null_coder.c?cvsroot=dotgnu-pnet&r1=1.30&r2=1.31
http://cvs.savannah.gnu.org/viewcvs/pnet/engine/verify_branch.c?cvsroot=dotgnu-pnet&r1=1.16&r2=1.17
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/ChangeLog,v
retrieving revision 1.3500
retrieving revision 1.3501
diff -u -b -r1.3500 -r1.3501
--- ChangeLog 23 Sep 2007 14:40:19 -0000 1.3500
+++ ChangeLog 7 Oct 2007 19:20:10 -0000 1.3501
@@ -1,3 +1,12 @@
+2007-10-08 Aleksey Demakov <address@hidden>
+
+ * include/il_coder.h, engine/verify_branch.c, engine/null_coder.c,
+ * engine/cvmc.c, engine/cvmc_branch.c, engine/jitc.c,
+ * engine/jitc_branch.c, engine/jitc_labels.c: add SwitchEnd coder
+ method, call it at the end of switch instruction handling. Make
+ use of libjit jump tables to generate switch instruction in jit
+ coder.
+
2007-09-23 Klaus Treichel <address@hidden>
* codegen/cg_nodes.tc: Add the member visited to the definitions of
Index: include/il_coder.h
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/include/il_coder.h,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -b -r1.56 -r1.57
--- include/il_coder.h 18 Aug 2007 12:29:33 -0000 1.56
+++ include/il_coder.h 7 Oct 2007 19:20:11 -0000 1.57
@@ -362,6 +362,11 @@
void (*switchEntry)(ILCoder *coder, ILUInt32 dest);
/*
+ * Output the end of a switch statement.
+ */
+ void (*switchEnd)(ILCoder *coder);
+
+ /*
* Output a comparison instruction. If "invertTest" is
* non-zero, then the result of the test should be inverted.
*/
@@ -936,6 +941,9 @@
((*((coder)->classInfo->switchStart))((coder),
(numEntries)))
#define ILCoderSwitchEntry(coder,dest) \
((*((coder)->classInfo->switchEntry))((coder), (dest)))
+#define ILCoderSwitchEnd(coder) \
+ ((*((coder)->classInfo->switchEnd))((coder)))
+
#define ILCoderCompare(coder,opcode,type1,type2,invertTest) \
((*((coder)->classInfo->compare))((coder), (opcode), \
(type1), (type2), (invertTest)))
Index: engine/cvmc.c
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/engine/cvmc.c,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -b -r1.57 -r1.58
--- engine/cvmc.c 14 Sep 2007 00:55:42 -0000 1.57
+++ engine/cvmc.c 7 Oct 2007 19:20:11 -0000 1.58
@@ -538,6 +538,7 @@
CVMCoder_Branch,
CVMCoder_SwitchStart,
CVMCoder_SwitchEntry,
+ CVMCoder_SwitchEnd,
CVMCoder_Compare,
CVMCoder_Conv,
CVMCoder_ToPointer,
Index: engine/cvmc_branch.c
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/engine/cvmc_branch.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- engine/cvmc_branch.c 21 Nov 2003 00:32:14 -0000 1.13
+++ engine/cvmc_branch.c 7 Oct 2007 19:20:11 -0000 1.14
@@ -500,6 +500,13 @@
}
/*
+ * Output the end of a table-based switch statement.
+ */
+static void CVMCoder_SwitchEnd(ILCoder *coder)
+{
+}
+
+/*
* Output a conditional compare opcode.
*/
static void OutputCondCompare(ILCoder *coder, int iopcode, int lopcode,
Index: engine/jitc.c
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/engine/jitc.c,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -b -r1.75 -r1.76
--- engine/jitc.c 14 Sep 2007 09:37:29 -0000 1.75
+++ engine/jitc.c 7 Oct 2007 19:20:12 -0000 1.76
@@ -4642,6 +4642,7 @@
JITCoder_Branch,
JITCoder_SwitchStart,
JITCoder_SwitchEntry,
+ JITCoder_SwitchEnd,
JITCoder_Compare,
JITCoder_Conv,
JITCoder_ToPointer,
Index: engine/jitc_branch.c
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/engine/jitc_branch.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- engine/jitc_branch.c 11 Dec 2006 20:40:11 -0000 1.14
+++ engine/jitc_branch.c 7 Oct 2007 19:20:12 -0000 1.15
@@ -369,6 +369,12 @@
jitCoder->numSwitch = 0;
jitCoder->maxSwitch = numEntries;
jitCoder->switchValue = _ILJitStackItemValue(value);
+
+ jitCoder->switchLabels = ILMalloc(numEntries * sizeof(jit_label_t));
+ if(!jitCoder->switchLabels)
+ {
+ jitCoder->labelOutOfMemory = 1;
+ }
}
/*
@@ -379,20 +385,45 @@
ILJITCoder *jitCoder = _ILCoderToILJITCoder(_coder);
ILJITLabel *label = _ILJitLabelGet(jitCoder, dest,
_IL_JIT_LABEL_NORMAL);
- ILJitValue constant =
jit_value_create_nint_constant(jitCoder->jitFunction,
-
jit_type_nint,
-
jitCoder->numSwitch);
-
- ILJitValue temp = jit_insn_eq(jitCoder->jitFunction,
-
jitCoder->switchValue,
- constant);
+ if (!label)
+ {
+ return;
+ }
- jit_insn_branch_if(jitCoder->jitFunction, temp, &(label->label));
+ if (label->label == jit_label_undefined)
+ {
+ label->label =
jit_function_reserve_label(jitCoder->jitFunction);
+ }
+ jitCoder->switchLabels[jitCoder->numSwitch] = label->label;
++jitCoder->numSwitch;
}
/*
+ * Output the end of a table-based switch statement.
+ */
+static void JITCoder_SwitchEnd(ILCoder *coder)
+{
+ ILJITCoder *jitCoder = _ILCoderToILJITCoder(coder);
+
+ if(!jitCoder->switchLabels)
+ {
+ return;
+ }
+
+ if(!jit_insn_jump_table(jitCoder->jitFunction,
+ jitCoder->switchValue,
+ jitCoder->switchLabels,
+ jitCoder->numSwitch))
+ {
+ jitCoder->labelOutOfMemory = 1;
+ }
+
+ ILFree(jitCoder->switchLabels);
+ jitCoder->switchLabels = NULL;
+}
+
+/*
* Output a comparison instruction.
*/
static void JITCoder_Compare(ILCoder *coder, int opcode,
Index: engine/jitc_labels.c
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/engine/jitc_labels.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- engine/jitc_labels.c 11 Dec 2006 20:40:11 -0000 1.5
+++ engine/jitc_labels.c 7 Oct 2007 19:20:12 -0000 1.6
@@ -55,6 +55,7 @@
ILJitValue switchValue;
int numSwitch;
int maxSwitch;
+ jit_label_t *switchLabels;
#endif /* IL_JITC_CODER_INSTANCE */
@@ -69,11 +70,16 @@
coder->switchValue = 0;
coder->numSwitch = 0;
coder->maxSwitch = 0;
+ coder->switchLabels = NULL;
#endif /* IL_JITC_CODER_INIT */
#ifdef IL_JITC_CODER_DESTROY
+ if(coder->switchLabels)
+ {
+ ILFree(coder->switchLabels);
+ }
ILMemPoolDestroy(&(coder->labelPool));
#endif /* IL_JITC_CODER_DESTROY */
Index: engine/null_coder.c
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/engine/null_coder.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -b -r1.30 -r1.31
--- engine/null_coder.c 17 Aug 2007 19:18:27 -0000 1.30
+++ engine/null_coder.c 7 Oct 2007 19:20:12 -0000 1.31
@@ -150,6 +150,9 @@
static void Coder_SwitchEntry(ILCoder *coder, ILUInt32 dest)
{
}
+static void Coder_SwitchEnd(ILCoder *coder)
+{
+}
static void Coder_Compare(ILCoder *coder, int opcode,
ILEngineType type1,
ILEngineType type2,
int invertTest)
@@ -475,6 +478,7 @@
Coder_Branch,
Coder_SwitchStart,
Coder_SwitchEntry,
+ Coder_SwitchEnd,
Coder_Compare,
Coder_Conv,
Coder_ToPointer,
Index: engine/verify_branch.c
===================================================================
RCS file: /sources/dotgnu-pnet/pnet/engine/verify_branch.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- engine/verify_branch.c 30 May 2004 08:19:27 -0000 1.16
+++ engine/verify_branch.c 7 Oct 2007 19:20:12 -0000 1.17
@@ -639,6 +639,7 @@
ILCoderSwitchEntry(coder, dest);
VALIDATE_BRANCH_STACK(dest);
}
+ ILCoderSwitchEnd(coder);
}
else
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] pnet ChangeLog include/il_coder.h engine/cvmc.c...,
Aleksey Demakov <=