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

[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);
+       }
 }
 
 /*




reply via email to

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