[Top][All Lists]
[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);
}
/*
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] libjit ChangeLog tools/gen-rules-scanner.l tool...,
Aleksey Demakov <=