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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dotgnu-pnet-commits] libjit ChangeLog tools/gen-rules-parser.y jit/j...


From: Aleksey Demakov
Subject: [dotgnu-pnet-commits] libjit ChangeLog tools/gen-rules-parser.y jit/j...
Date: Sat, 09 Sep 2006 05:21:03 +0000

CVSROOT:        /sources/dotgnu-pnet
Module name:    libjit
Changes by:     Aleksey Demakov <avd>   06/09/09 05:21:03

Modified files:
        .              : ChangeLog 
        tools          : gen-rules-parser.y 
        jit            : jit-reg-alloc.h jit-reg-alloc.c 

Log message:
        add _JIT_REGS_CLOBBER_STACK flag to be used for "only" rules

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libjit/ChangeLog?cvsroot=dotgnu-pnet&r1=1.267&r2=1.268
http://cvs.savannah.gnu.org/viewcvs/libjit/tools/gen-rules-parser.y?cvsroot=dotgnu-pnet&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-reg-alloc.h?cvsroot=dotgnu-pnet&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-reg-alloc.c?cvsroot=dotgnu-pnet&r1=1.40&r2=1.41

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/ChangeLog,v
retrieving revision 1.267
retrieving revision 1.268
diff -u -b -r1.267 -r1.268
--- ChangeLog   2 Sep 2006 13:46:28 -0000       1.267
+++ ChangeLog   9 Sep 2006 05:21:03 -0000       1.268
@@ -1,3 +1,10 @@
+2006-09-09  Aleksey Demakov  <address@hidden>
+
+       * jit/jit-reg-alloc.h, jit/jit-reg-alloc.c:
+       * tools/gen-rules-parser.y: add _JIT_REGS_CLOBBER_STACK flag and use
+       it in the code genearted for "only" rules instead of the explicit
+       stack top check followed by the _jit_regs_spill_all() call.
+
 2006-09-02  Aleksey Demakov  <address@hidden>
 
        * jit/jit-interp.c (_jit_run_function): 

Index: tools/gen-rules-parser.y
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/tools/gen-rules-parser.y,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- tools/gen-rules-parser.y    30 Aug 2006 18:35:10 -0000      1.11
+++ tools/gen-rules-parser.y    9 Sep 2006 05:21:03 -0000       1.12
@@ -88,11 +88,6 @@
 static int gensel_reserve_more_space = 128;
 
 /*
- * First register in a stack arrangement.
- */
-static int gensel_first_stack_reg = 8; /* st0 under x86 */
-
-/*
  * Maximal number of input values in a pattern.
  */
 #define MAX_INPUT                              3
@@ -1133,17 +1128,6 @@
                        printf("\telse\n\t{\n");
                }
 
-               if(gensel_search_option(options, GENSEL_OPT_STACK)
-                  && gensel_search_option(options, GENSEL_OPT_ONLY))
-               {
-                       printf("\t\tif(!_jit_regs_is_top(gen, insn->value1) 
||\n");
-                       printf("\t\t   _jit_regs_num_used(gen, %d) != 1)\n",
-                              gensel_first_stack_reg);
-                       printf("\t\t{\n");
-                       printf("\t\t\t_jit_regs_spill_all(gen);\n");
-                       printf("\t\t}\n");
-               }
-
                if(gensel_search_option(options, GENSEL_OPT_BINARY_BRANCH)
                   || gensel_search_option(options, GENSEL_OPT_UNARY_BRANCH))
                {
@@ -1228,6 +1212,18 @@
                                }
                                printf("_JIT_REGS_STACK");
                        }
+                       if(gensel_search_option(options, GENSEL_OPT_ONLY))
+                       {
+                               if(seen_option)
+                               {
+                                       printf(" | ");
+                               }
+                               else
+                               {
+                                       seen_option = 1;
+                               }
+                               printf("_JIT_REGS_CLOBBER_STACK");
+                       }
                        if(gensel_search_option(options, GENSEL_OPT_X87ARITH))
                        {
                                if(seen_option)

Index: jit/jit-reg-alloc.h
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-reg-alloc.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- jit/jit-reg-alloc.h 22 Aug 2006 17:30:09 -0000      1.17
+++ jit/jit-reg-alloc.h 9 Sep 2006 05:21:03 -0000       1.18
@@ -86,6 +86,7 @@
 #define _JIT_REGS_COMMUTATIVE          0x0040
 #define _JIT_REGS_REVERSIBLE           0x0080
 #define _JIT_REGS_FREE_DEST            0x0100
+#define _JIT_REGS_CLOBBER_STACK                0x0200
 
 /*
  * Flags for _jit_regs_init_dest(), _jit_regs_init_value1(), and
@@ -140,6 +141,7 @@
 typedef struct
 {
        unsigned        clobber_all : 1;
+       unsigned        clobber_stack : 1;
        unsigned        ternary : 1;
        unsigned        branch : 1;
        unsigned        copy : 1;

Index: jit/jit-reg-alloc.c
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-reg-alloc.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -b -r1.40 -r1.41
--- jit/jit-reg-alloc.c 29 Aug 2006 11:57:13 -0000      1.40
+++ jit/jit-reg-alloc.c 9 Sep 2006 05:21:03 -0000       1.41
@@ -2832,10 +2832,9 @@
        }
 
        /* Choose between pop and no-pop instructions. */
-       if(regs->on_stack && regs->x87_arith
-          && !regs->no_pop && !regs->clobber_all
-          && regs->descs[1].value
-          && regs->descs[2].value)
+       if(regs->on_stack && regs->x87_arith && !regs->no_pop
+          && !regs->clobber_all && !regs->clobber_stack
+          && regs->descs[1].value && regs->descs[2].value)
        {
                /* Determine if we might want to keep either of input values
                   in registers after the instruction completion. */
@@ -3971,6 +3970,7 @@
        int index;
 
        regs->clobber_all = (flags & _JIT_REGS_CLOBBER_ALL) != 0;
+       regs->clobber_stack = (flags & _JIT_REGS_CLOBBER_STACK) != 0;
        regs->ternary = (flags & _JIT_REGS_TERNARY) != 0;
        regs->branch = (flags & _JIT_REGS_BRANCH) != 0;
        regs->copy = (flags & _JIT_REGS_COPY) != 0;
@@ -3998,7 +3998,7 @@
 
        /* Set clobber flags. */
        regs->clobber = jit_regused_init;
-       if(regs->clobber_all)
+       if(regs->clobber_all || regs->clobber_stack)
        {
                for(index = 0; index < JIT_NUM_REGS; index++)
                {
@@ -4007,9 +4007,12 @@
                        {
                                continue;
                        }
+                       if(regs->clobber_all || IS_STACK_REG(index))
+                       {
                        jit_reg_set_used(regs->clobber, index);
                }
        }
+       }
 
        regs->assigned = gen->inhibit;
 




reply via email to

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