[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dotgnu-pnet-commits] libjit ./ChangeLog jit/jit-rules-x86.c tools/ge...
From: |
Aleksey Demakov |
Subject: |
[dotgnu-pnet-commits] libjit ./ChangeLog jit/jit-rules-x86.c tools/ge... |
Date: |
Wed, 19 Apr 2006 14:33:22 +0000 |
CVSROOT: /sources/dotgnu-pnet
Module name: libjit
Branch:
Changes by: Aleksey Demakov <address@hidden> 06/04/19 14:33:22
Modified files:
. : ChangeLog
jit : jit-rules-x86.c
tools : gen-rules-scanner.l gen-rules-parser.y
Log message:
fix warning in jit/jit-rules-x86.c;
fix generation of scratch and clobber code;
add `any' keyword.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/libjit/ChangeLog.diff?tr1=1.218&tr2=1.219&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/libjit/jit/jit-rules-x86.c.diff?tr1=1.32&tr2=1.33&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/libjit/tools/gen-rules-scanner.l.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/libjit/tools/gen-rules-parser.y.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
Patches:
Index: libjit/ChangeLog
diff -u libjit/ChangeLog:1.218 libjit/ChangeLog:1.219
--- libjit/ChangeLog:1.218 Tue Apr 18 09:53:23 2006
+++ libjit/ChangeLog Wed Apr 19 14:33:21 2006
@@ -1,3 +1,13 @@
+2006-04-19 Aleksey Demakov <address@hidden>
+
+ * jit/jit-rules-x86.c (_jit_gen_load_value): fix compiler warning.
+
+ * tools/gen-rules-parser.y (gensel_output_clauses): fix generation
+ of clobber and scratch code.
+
+ * tools/gen-rules-scanner.l, tools/gen-rules-parser.y: add `any'
+ keyword.
+
2006-04-18 Aleksey Demakov <address@hidden>
* jit/jit-rules-x86.ins: add instruction selection rules for new
Index: libjit/jit/jit-rules-x86.c
diff -u libjit/jit/jit-rules-x86.c:1.32 libjit/jit/jit-rules-x86.c:1.33
--- libjit/jit/jit-rules-x86.c:1.32 Tue Apr 18 09:53:23 2006
+++ libjit/jit/jit-rules-x86.c Wed Apr 19 14:33:21 2006
@@ -1002,6 +1002,10 @@
{
other_src_reg =
_jit_reg_info[src_reg].other_reg;
}
+ else
+ {
+ other_src_reg = -1;
+ }
}
else
{
Index: libjit/tools/gen-rules-parser.y
diff -u libjit/tools/gen-rules-parser.y:1.3 libjit/tools/gen-rules-parser.y:1.4
--- libjit/tools/gen-rules-parser.y:1.3 Sat Apr 8 07:02:57 2006
+++ libjit/tools/gen-rules-parser.y Wed Apr 19 14:33:22 2006
@@ -140,6 +140,7 @@
#define GENSEL_PATT_CLOBBER 12
#define GENSEL_PATT_IF 13
#define GENSEL_PATT_SPACE 14
+#define GENSEL_PATT_ANY 15
/*
* Register flags.
@@ -298,15 +299,13 @@
int other_regs_mask;
int imms, max_imms;
int have_local;
- int scratch, max_scratch;
+ int scratch, others;
int have_clobber;
- int others;
max_regs = 0;
other_regs_mask = 0;
max_imms = 0;
have_local = 0;
- max_scratch = 0;
have_clobber = 0;
while(clauses != 0)
{
@@ -319,6 +318,10 @@
{
switch(pattern->option)
{
+ case GENSEL_PATT_ANY:
+ ++others;
+ break;
+
case GENSEL_PATT_REG:
case GENSEL_PATT_FREG:
++regs;
@@ -382,31 +385,24 @@
clauses->linenum,
"too many scratch args in the pattern");
}
- if(max_regs < regs)
+ if(max_regs < (regs + scratch))
{
- max_regs = regs;
+ max_regs = regs + scratch;
}
if(max_imms < imms)
{
max_imms = imms;
}
- if(max_scratch < scratch)
- {
- max_scratch = scratch;
- }
clauses = clauses->next;
}
- switch(max_regs)
+ if(max_regs > 0)
{
- case 1:
- printf("\tint reg;\n");
- break;
- case 2:
- printf("\tint reg, reg2;\n");
- break;
- case 3:
- printf("\tint reg, reg2, reg3;\n");
- break;
+ printf("\tint reg");
+ for(scratch = 1; scratch < max_regs; scratch++)
+ {
+ printf(", reg%d", scratch + 1);
+ }
+ printf(";\n");
}
if(other_regs_mask)
{
@@ -425,13 +421,13 @@
printf("\tint other_reg3;\n");
break;
case 5:
- printf("\tint other_reg, othre_reg3;\n");
+ printf("\tint other_reg, other_reg3;\n");
break;
case 6:
- printf("\tint other_reg2, othre_reg3;\n");
+ printf("\tint other_reg2, other_reg3;\n");
break;
case 7:
- printf("\tint other_reg, other_reg2, othre_reg3;\n");
+ printf("\tint other_reg, other_reg2, other_reg3;\n");
break;
}
}
@@ -447,17 +443,6 @@
printf("\tjit_nint imm_value, imm_value2, imm_value3;\n");
break;
}
- for(scratch = 0; scratch < max_scratch; scratch++)
- {
- if((scratch + max_regs) == 0)
- {
- printf("\tint reg;\n");
- }
- else
- {
- printf("\tint reg%d;\n", scratch + max_regs + 1);
- }
- }
if(have_local)
{
printf("\tjit_nint local_offset;\n");
@@ -490,6 +475,10 @@
{
switch(pattern->option)
{
+ case GENSEL_PATT_ANY:
+ ++index;
+ break;
+
case GENSEL_PATT_REG:
case GENSEL_PATT_FREG:
names[index] = gensel_reg_names[regs];
@@ -541,7 +530,7 @@
* Output the code.
*/
static void
-gensel_output_code(gensel_option_t pattern, char *code)
+gensel_output_code(gensel_option_t pattern, char *code, int in_line)
{
char *names[9];
char *other_names[9];
@@ -550,7 +539,10 @@
gensel_build_index(pattern, names, other_names);
/* Output the clause code */
- printf("\t\t");
+ if(!in_line)
+ {
+ printf("\t\t");
+ }
while(*code != '\0')
{
if(*code == '$' && code[1] >= '1' && code[1] <= '9')
@@ -577,7 +569,10 @@
++code;
}
}
- printf("\n");
+ if(!in_line)
+ {
+ printf("\n");
+ }
}
/*
@@ -589,7 +584,7 @@
/* Output the line number information from the original file */
printf("#line %ld \"%s\"\n", clause->linenum, clause->filename);
- gensel_output_code(clause->pattern, clause->code);
+ gensel_output_code(clause->pattern, clause->code, 0);
}
/*
@@ -614,7 +609,7 @@
if(space && space->values && space->values->value)
{
printf("(");
- gensel_output_code(clause->pattern,
space->values->value);
+ gensel_output_code(clause->pattern,
space->values->value, 1);
printf(")");
}
else
@@ -742,10 +737,14 @@
index = 0;
seen_option = 0;
pattern = clause->pattern;
- while(pattern && index < MAX_INPUT)
+ while(pattern)
{
switch(pattern->option)
{
+ case GENSEL_PATT_ANY:
+ ++index;
+ break;
+
case GENSEL_PATT_REG:
case GENSEL_PATT_LREG:
case GENSEL_PATT_FREG:
@@ -849,7 +848,7 @@
printf(" && ");
}
printf("(");
- gensel_output_code(clause->pattern,
pattern->values->value);
+ gensel_output_code(clause->pattern,
pattern->values->value, 1);
printf(")");
seen_option = 1;
break;
@@ -1027,10 +1026,14 @@
regs = 0;
index = 0;
pattern = clause->pattern;
- while(pattern && index < MAX_INPUT)
+ while(pattern)
{
switch(pattern->option)
{
+ case GENSEL_PATT_ANY:
+ ++index;
+ break;
+
case GENSEL_PATT_REG:
case GENSEL_PATT_FREG:
if(pattern->values && pattern->values->value)
@@ -1110,8 +1113,9 @@
{
printf("\t\t%s =
_jit_regs_lookup(\"%s\")];\n",
gensel_reg_names[regs],
- pattern->values->value);
-
printf("\t\t_jit_regs_set_scratch(®s, clobber);\n");
+ values->value);
+
printf("\t\t_jit_regs_set_scratch(®s, %s);\n",
+ gensel_reg_names[regs]);
}
else
{
@@ -1129,8 +1133,8 @@
{
if(values->value &&
strcmp(values->value, "*") != 0)
{
- printf("\t\tclobber =
_jit_regs_lookup(\"%s\")];\n",
- pattern->values->value);
+ printf("\t\tclobber =
_jit_regs_lookup(\"%s\");\n",
+ values->value);
printf("\t\t_jit_regs_set_clobber(®s, clobber);\n");
}
values = values->next;
@@ -1157,10 +1161,14 @@
index = 0;
scratch = 0;
pattern = clause->pattern;
- while(pattern && index < MAX_INPUT)
+ while(pattern)
{
switch(pattern->option)
{
+ case GENSEL_PATT_ANY:
+ ++index;
+ break;
+
case GENSEL_PATT_REG:
case GENSEL_PATT_FREG:
printf("\t\t%s =
_jit_reg_info[_jit_regs_%s(®s)].cpu_reg;\n",
@@ -1329,6 +1337,7 @@
%token CODE_BLOCK "a code block"
%token LITERAL "literal string"
%token K_PTR "`->'"
+%token K_ANY "any variable"
%token K_REG "word register"
%token K_LREG "long register"
%token K_FREG "float register"
@@ -1624,6 +1633,7 @@
| K_IMMS16 { $$ = GENSEL_PATT_IMMS16; }
| K_IMMU16 { $$ = GENSEL_PATT_IMMU16; }
| K_LOCAL { $$ = GENSEL_PATT_LOCAL; }
+ | K_ANY { $$ = GENSEL_PATT_ANY; }
;
RegTag
Index: libjit/tools/gen-rules-scanner.l
diff -u libjit/tools/gen-rules-scanner.l:1.2
libjit/tools/gen-rules-scanner.l:1.3
--- libjit/tools/gen-rules-scanner.l:1.2 Mon Apr 3 05:10:35 2006
+++ libjit/tools/gen-rules-scanner.l Wed Apr 19 14:33:21 2006
@@ -83,6 +83,7 @@
%%
"->" { RETURNTOK(K_PTR); }
+"any" { RETURNTOK(K_ANY); }
"reg" { RETURNTOK(K_REG); }
"lreg" { RETURNTOK(K_LREG); }
"freg" { RETURNTOK(K_FREG); }
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [dotgnu-pnet-commits] libjit ./ChangeLog jit/jit-rules-x86.c tools/ge...,
Aleksey Demakov <=