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

[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
        {




reply via email to

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