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-scanner.l tool...


From: Aleksey Demakov
Subject: [dotgnu-pnet-commits] libjit ChangeLog tools/gen-rules-scanner.l tool...
Date: Wed, 30 Aug 2006 18:35:10 +0000

CVSROOT:        /sources/dotgnu-pnet
Module name:    libjit
Changes by:     Aleksey Demakov <avd>   06/08/30 18:35:10

Modified files:
        .              : ChangeLog 
        tools          : gen-rules-scanner.l gen-rules-parser.y 
        jit            : jit-rules-x86.ins 

Log message:
        add "frame" keyword to .ins file syntax

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libjit/ChangeLog?cvsroot=dotgnu-pnet&r1=1.263&r2=1.264
http://cvs.savannah.gnu.org/viewcvs/libjit/tools/gen-rules-scanner.l?cvsroot=dotgnu-pnet&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/libjit/tools/gen-rules-parser.y?cvsroot=dotgnu-pnet&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/libjit/jit/jit-rules-x86.ins?cvsroot=dotgnu-pnet&r1=1.12&r2=1.13

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/ChangeLog,v
retrieving revision 1.263
retrieving revision 1.264
diff -u -b -r1.263 -r1.264
--- ChangeLog   30 Aug 2006 13:31:58 -0000      1.263
+++ ChangeLog   30 Aug 2006 18:35:10 -0000      1.264
@@ -1,3 +1,13 @@
+2006-08-31  Aleksey Demakov  <address@hidden>
+
+       * tools/gen-rules-scanner.l, tools/gen-rules-parser.y: add "frame"
+       keyword that is just like "local" but forces the value out from the
+       register into the stack frame.
+
+       * jit/jit-rules-x86.ins: rewrite JIT_OP_COPY_STORE_BYTE,
+       JIT_OP_ADDRESS_OF, and JIT_OP_COPY_STORE_SHORT rules using the
+       "frame" keyword.
+
 2006-08-30  Aleksey Demakov  <address@hidden>
 
        * jit/jit-interp.h, jit/jit-interp.c, jit/jit-opcode.c,

Index: tools/gen-rules-scanner.l
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/tools/gen-rules-scanner.l,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- tools/gen-rules-scanner.l   19 Apr 2006 14:33:21 -0000      1.3
+++ tools/gen-rules-scanner.l   30 Aug 2006 18:35:10 -0000      1.4
@@ -94,6 +94,7 @@
 "imms16"               { RETURNTOK(K_IMMS16); }
 "immu16"               { RETURNTOK(K_IMMU16); }
 "local"                        { RETURNTOK(K_LOCAL); }
+"frame"                        { RETURNTOK(K_FRAME); }
 "binary"               { RETURNTOK(K_BINARY); }
 "unary"                        { RETURNTOK(K_UNARY); }
 "unary_branch"         { RETURNTOK(K_UNARY_BRANCH); }

Index: tools/gen-rules-parser.y
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/tools/gen-rules-parser.y,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- tools/gen-rules-parser.y    29 Jun 2006 13:59:27 -0000      1.10
+++ tools/gen-rules-parser.y    30 Aug 2006 18:35:10 -0000      1.11
@@ -141,11 +141,12 @@
 #define        GENSEL_PATT_IMMS16                      8
 #define        GENSEL_PATT_IMMU16                      9
 #define        GENSEL_PATT_LOCAL                       10
-#define        GENSEL_PATT_SCRATCH                     11
-#define        GENSEL_PATT_CLOBBER                     12
-#define        GENSEL_PATT_IF                          13
-#define        GENSEL_PATT_SPACE                       14
-#define GENSEL_PATT_ANY                                15
+#define        GENSEL_PATT_FRAME                       11
+#define        GENSEL_PATT_SCRATCH                     12
+#define        GENSEL_PATT_CLOBBER                     13
+#define        GENSEL_PATT_IF                          14
+#define        GENSEL_PATT_SPACE                       15
+#define GENSEL_PATT_ANY                                16
 
 /*
  * Register flags.
@@ -434,6 +435,7 @@
                                break;
 
                        case GENSEL_PATT_LOCAL:
+                       case GENSEL_PATT_FRAME:
                                ++locals;
                                break;
 
@@ -586,6 +588,7 @@
                case GENSEL_PATT_FREG:
                case GENSEL_PATT_LREG:
                case GENSEL_PATT_LOCAL:
+               case GENSEL_PATT_FRAME:
                        if(pattern->flags == GENSEL_FLAG_DEST)
                        {
                                if(index != 0)
@@ -659,6 +662,7 @@
                case GENSEL_PATT_FREG:
                case GENSEL_PATT_LREG:
                case GENSEL_PATT_LOCAL:
+               case GENSEL_PATT_FRAME:
                case GENSEL_PATT_IMMZERO:
                case GENSEL_PATT_IMM:
                case GENSEL_PATT_IMMS8:
@@ -709,6 +713,7 @@
                case GENSEL_PATT_FREG:
                case GENSEL_PATT_LREG:
                case GENSEL_PATT_LOCAL:
+               case GENSEL_PATT_FRAME:
                case GENSEL_PATT_IMMZERO:
                        ++index;
                        break;
@@ -794,6 +799,7 @@
                        break;
 
                case GENSEL_PATT_LOCAL:
+               case GENSEL_PATT_FRAME:
                        names[index] = gensel_local_names[locals];
                        ++locals;
                        ++index;
@@ -1077,12 +1083,22 @@
                                        {
                                                printf(" && ");
                                        }
-                                       printf("insn->%s->in_frame && 
!(insn->%s->in_register)",
+                                       printf("insn->%s->in_frame && 
!insn->%s->in_register",
                                               args[index], args[index]);
                                        seen_option = 1;
                                        ++index;
                                        break;
 
+                               case GENSEL_PATT_FRAME:
+                                       if(seen_option)
+                                       {
+                                               printf(" && ");
+                                       }
+                                       printf("!insn->%s->is_constant", 
args[index]);
+                                       seen_option = 1;
+                                       ++index;
+                                       break;
+
                                case GENSEL_PATT_IF:
                                        if(seen_option)
                                        {
@@ -1356,6 +1372,14 @@
                                ++index;
                                break;
 
+                       case GENSEL_PATT_FRAME:
+                               printf("\t\t_jit_regs_force_out(gen, insn->%s, 
%d);\n",
+                                      args[index], (pattern->flags == 
GENSEL_FLAG_DEST));
+                               printf("\t\t_jit_gen_fix_value(insn->%s);\n",
+                                      args[index]);
+                               ++index;
+                               break;
+
                        case GENSEL_PATT_SCRATCH:
                                values = pattern->values;
                                while(values)
@@ -1475,7 +1499,6 @@
                        }
                }
 
-
                regs = 0;
                imms = 0;
                locals = 0;
@@ -1523,6 +1546,7 @@
                                break;
 
                        case GENSEL_PATT_LOCAL:
+                       case GENSEL_PATT_FRAME:
                                printf("\t\t%s = insn->%s->frame_offset;\n",
                                       gensel_local_names[locals], args[index]);
                                ++locals;
@@ -1684,6 +1708,7 @@
 %token K_IMMS16                        "immediate signed 16-bit value"
 %token K_IMMU16                        "immediate unsigned 16-bit value"
 %token K_LOCAL                 "local variable"
+%token K_FRAME                 "local variable forced out into the stack frame"
 %token K_BINARY                        "`binary'"
 %token K_UNARY                 "`unary'"
 %token K_UNARY_BRANCH          "`unary_branch'"
@@ -2017,6 +2042,7 @@
 
 LocalTag
        : K_LOCAL                       { $$ = GENSEL_PATT_LOCAL; }
+       | K_FRAME                       { $$ = GENSEL_PATT_FRAME; }
        ;
 
 RegTag

Index: jit/jit-rules-x86.ins
===================================================================
RCS file: /sources/dotgnu-pnet/libjit/jit/jit-rules-x86.ins,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- jit/jit-rules-x86.ins       22 Aug 2006 17:30:09 -0000      1.12
+++ jit/jit-rules-x86.ins       30 Aug 2006 18:35:10 -0000      1.13
@@ -1629,95 +1629,25 @@
                gen->posn.ptr = inst;
        }
 
-JIT_OP_COPY_STORE_BYTE: manual
-       [] -> {
-               unsigned char *inst;
-               int reg;
-               _jit_regs_force_out(gen, insn->dest, 1);
-               _jit_gen_fix_value(insn->dest);
-               if(!(insn->value1->is_constant))
-               {
-                       reg = _jit_regs_load_value
-                               (gen, insn->value1, 0,
-                                (insn->flags & (JIT_INSN_VALUE1_NEXT_USE |
-                                                                
JIT_INSN_VALUE1_LIVE)));
-                       inst = gen->posn.ptr;
-                       if(!jit_cache_check_for_n(&(gen->posn), 32))
-                       {
-                               jit_cache_mark_full(&(gen->posn));
-                               return;
-                       }
-                       inst = mov_membase_reg_byte
-                               (inst, X86_EBP, insn->dest->frame_offset,
-                                _jit_reg_info[reg].cpu_reg);
-                       gen->posn.ptr = inst;
-               }
-               else
-               {
-                       inst = gen->posn.ptr;
-                       if(!jit_cache_check_for_n(&(gen->posn), 32))
-                       {
-                               jit_cache_mark_full(&(gen->posn));
-                               return;
-                       }
-                       x86_mov_membase_imm(inst, X86_EBP, 
insn->dest->frame_offset,
-                                                               
insn->value1->address, 1);
-                       gen->posn.ptr = inst;
+JIT_OP_COPY_STORE_BYTE:
+       [=frame, imm] -> {
+               x86_mov_membase_imm(inst, X86_EBP, $1, $2, 1);
                }
+       [=frame, reg("eax"|"ecx"|"edx"|"edx")] -> {
+               x86_mov_membase_reg(inst, X86_EBP, $1, $2, 1);
        }
 
-JIT_OP_COPY_STORE_SHORT: manual
-       [] -> {
-               unsigned char *inst;
-               int reg;
-               _jit_regs_force_out(gen, insn->dest, 1);
-               _jit_gen_fix_value(insn->dest);
-               if(!(insn->value1->is_constant))
-               {
-                       reg = _jit_regs_load_value
-                               (gen, insn->value1, 0,
-                                (insn->flags & (JIT_INSN_VALUE1_NEXT_USE |
-                                                                
JIT_INSN_VALUE1_LIVE)));
-                       inst = gen->posn.ptr;
-                       if(!jit_cache_check_for_n(&(gen->posn), 32))
-                       {
-                               jit_cache_mark_full(&(gen->posn));
-                               return;
-                       }
-                       x86_mov_membase_reg(inst, X86_EBP, 
insn->dest->frame_offset,
-                                                               
_jit_reg_info[reg].cpu_reg, 2);
-                       gen->posn.ptr = inst;
-               }
-               else
-               {
-                       inst = gen->posn.ptr;
-                       if(!jit_cache_check_for_n(&(gen->posn), 32))
-                       {
-                               jit_cache_mark_full(&(gen->posn));
-                               return;
-                       }
-                       x86_mov_membase_imm(inst, X86_EBP, 
insn->dest->frame_offset,
-                                                               
insn->value1->address, 2);
-                       gen->posn.ptr = inst;
+JIT_OP_COPY_STORE_SHORT:
+       [=frame, imm] -> {
+               x86_mov_membase_imm(inst, X86_EBP, $1, $2, 2);
                }
+       [=frame, reg] -> {
+               x86_mov_membase_reg(inst, X86_EBP, $1, $2, 2);
        }
 
-JIT_OP_ADDRESS_OF: manual
-       [] -> {
-               unsigned char *inst;
-               int reg;
-               _jit_regs_force_out(gen, insn->value1, 0);
-               _jit_gen_fix_value(insn->value1);
-               reg = _jit_regs_dest_value(gen, insn->dest);
-               inst = gen->posn.ptr;
-               if(!jit_cache_check_for_n(&(gen->posn), 32))
-               {
-                       jit_cache_mark_full(&(gen->posn));
-                       return;
-               }
-               reg = _jit_reg_info[reg].cpu_reg;
-               x86_lea_membase(inst, reg, X86_EBP, insn->value1->frame_offset);
-               gen->posn.ptr = inst;
+JIT_OP_ADDRESS_OF:
+       [=reg, frame] -> {
+               x86_lea_membase(inst, $1, X86_EBP, $2);
        }
 
 /*




reply via email to

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