2007-09-06 H.J. Lu <hongjiu.lu@intel.com>

* i386-gen.c (table): New.
	(process_i386_opcodes): Report errno when faied to open
	i386-opc.tbl.  Output opcodes to table.  Close i386-opc.tbl
	before return.
	(process_i386_registers): Report errno when faied to open
	i386-reg.tbl.  Output opcodes to table.  Close i386-reg.tbl
	before return.
	(main): Open i386-tbl.h for output.

	* Makefile.am ($(srcdir)/i386-tbl.h): Remove " > $@".
	* Makefile.in: Regenerated.
This commit is contained in:
H.J. Lu
2007-09-06 21:31:55 +00:00
parent f0027ce269
commit 34edb9ad07
4 changed files with 56 additions and 27 deletions

View File

@ -1,3 +1,17 @@
2007-09-06 H.J. Lu <hongjiu.lu@intel.com>
* i386-gen.c (table): New.
(process_i386_opcodes): Report errno when faied to open
i386-opc.tbl. Output opcodes to table. Close i386-opc.tbl
before return.
(process_i386_registers): Report errno when faied to open
i386-reg.tbl. Output opcodes to table. Close i386-reg.tbl
before return.
(main): Open i386-tbl.h for output.
* Makefile.am ($(srcdir)/i386-tbl.h): Remove " > $@".
* Makefile.in: Regenerated.
2007-09-06 H.J. Lu <hongjiu.lu@intel.com> 2007-09-06 H.J. Lu <hongjiu.lu@intel.com>
* i386-opc.tbl: Correct SVME instructions to allow 32bit register * i386-opc.tbl: Correct SVME instructions to allow 32bit register

View File

@ -576,7 +576,7 @@ i386-gen: i386-gen.o
i386-gen.o: i386-gen.c i386-opc.h i386-gen.o: i386-gen.c i386-opc.h
$(srcdir)/i386-tbl.h: @MAINT@ i386-gen i386-opc.tbl i386-reg.tbl $(srcdir)/i386-tbl.h: @MAINT@ i386-gen i386-opc.tbl i386-reg.tbl
./i386-gen --srcdir $(srcdir) > $@ ./i386-gen --srcdir $(srcdir)
ia64-gen: ia64-gen.o ia64-gen: ia64-gen.o
$(LINK) ia64-gen.o $(LIBIBERTY) $(LINK) ia64-gen.o $(LIBIBERTY)

View File

@ -1127,7 +1127,7 @@ i386-gen: i386-gen.o
i386-gen.o: i386-gen.c i386-opc.h i386-gen.o: i386-gen.c i386-opc.h
$(srcdir)/i386-tbl.h: @MAINT@ i386-gen i386-opc.tbl i386-reg.tbl $(srcdir)/i386-tbl.h: @MAINT@ i386-gen i386-opc.tbl i386-reg.tbl
./i386-gen --srcdir $(srcdir) > $@ ./i386-gen --srcdir $(srcdir)
ia64-gen: ia64-gen.o ia64-gen: ia64-gen.o
$(LINK) ia64-gen.o $(LIBIBERTY) $(LINK) ia64-gen.o $(LIBIBERTY)

View File

@ -33,6 +33,9 @@
static const char *program_name = NULL; static const char *program_name = NULL;
static int debug = 0; static int debug = 0;
/* File of i386 opcode and register tables. */
static FILE *table;
static void static void
fail (const char *message, ...) fail (const char *message, ...)
{ {
@ -106,10 +109,11 @@ process_i386_opcodes (void)
char *cpu_flags, *opcode_modifier, *operand_types [MAX_OPERANDS]; char *cpu_flags, *opcode_modifier, *operand_types [MAX_OPERANDS];
if (fp == NULL) if (fp == NULL)
fail (_("can't find i386-opc.tbl for reading\n")); fail (_("can't find i386-opc.tbl for reading, errno = %s\n"),
strerror (errno));
printf ("\n/* i386 opcode table. */\n\n"); fprintf (table, "\n/* i386 opcode table. */\n\n");
printf ("const template i386_optab[] =\n{\n"); fprintf (table, "const template i386_optab[] =\n{\n");
while (!feof (fp)) while (!feof (fp))
{ {
@ -129,7 +133,7 @@ process_i386_opcodes (void)
switch (p[0]) switch (p[0])
{ {
case '#': case '#':
printf ("%s\n", p); fprintf (table, "%s\n", p);
case '\0': case '\0':
continue; continue;
break; break;
@ -218,13 +222,13 @@ process_i386_opcodes (void)
} }
} }
printf (" { \"%s\", %s, %s, %s, %s,\n", fprintf (table, " { \"%s\", %s, %s, %s, %s,\n",
name, operands, base_opcode, extension_opcode, name, operands, base_opcode, extension_opcode,
cpu_flags); cpu_flags);
printf (" %s,\n", opcode_modifier); fprintf (table, " %s,\n", opcode_modifier);
printf (" { "); fprintf (table, " { ");
for (i = 0; i < ARRAY_SIZE (operand_types); i++) for (i = 0; i < ARRAY_SIZE (operand_types); i++)
{ {
@ -232,20 +236,22 @@ process_i386_opcodes (void)
|| *operand_types[i] == '0') || *operand_types[i] == '0')
{ {
if (i == 0) if (i == 0)
printf ("0"); fprintf (table, "0");
break; break;
} }
if (i != 0) if (i != 0)
printf (",\n "); fprintf (table, ",\n ");
printf ("%s", operand_types[i]); fprintf (table, "%s", operand_types[i]);
} }
printf (" } },\n"); fprintf (table, " } },\n");
} }
printf (" { NULL, 0, 0, 0, 0, 0, { 0 } }\n"); fclose (fp);
printf ("};\n");
fprintf (table, " { NULL, 0, 0, 0, 0, 0, { 0 } }\n");
fprintf (table, "};\n");
} }
static void static void
@ -257,10 +263,11 @@ process_i386_registers (void)
char *reg_name, *reg_type, *reg_flags, *reg_num; char *reg_name, *reg_type, *reg_flags, *reg_num;
if (fp == NULL) if (fp == NULL)
fail (_("can't find i386-reg.tbl for reading\n")); fail (_("can't find i386-reg.tbl for reading, errno = %s\n"),
strerror (errno));
printf ("\n/* i386 register table. */\n\n"); fprintf (table, "\n/* i386 register table. */\n\n");
printf ("const reg_entry i386_regtab[] =\n{\n"); fprintf (table, "const reg_entry i386_regtab[] =\n{\n");
while (!feof (fp)) while (!feof (fp))
{ {
@ -280,7 +287,7 @@ process_i386_registers (void)
switch (p[0]) switch (p[0])
{ {
case '#': case '#':
printf ("%s\n", p); fprintf (table, "%s\n", p);
case '\0': case '\0':
continue; continue;
break; break;
@ -311,13 +318,15 @@ process_i386_registers (void)
/* Find reg_num. */ /* Find reg_num. */
reg_num = next_field (str, &str); reg_num = next_field (str, &str);
printf (" { \"%s\", %s, %s, %s },\n", fprintf (table, " { \"%s\", %s, %s, %s },\n",
reg_name, reg_type, reg_flags, reg_num); reg_name, reg_type, reg_flags, reg_num);
} }
printf ("};\n"); fclose (fp);
printf ("\nconst unsigned int i386_regtab_size = ARRAY_SIZE (i386_regtab);\n"); fprintf (table, "};\n");
fprintf (table, "\nconst unsigned int i386_regtab_size = ARRAY_SIZE (i386_regtab);\n");
} }
/* Program options. */ /* Program options. */
@ -386,8 +395,12 @@ main (int argc, char **argv)
fail (_("unable to change directory to \"%s\", errno = %s\n"), fail (_("unable to change directory to \"%s\", errno = %s\n"),
srcdir, strerror (errno)); srcdir, strerror (errno));
printf ("/* This file is automatically generated by i386-gen. Do not edit! */\n"); table = fopen ("i386-tbl.h", "w");
printf ("/* Copyright 2007 Free Software Foundation, Inc.\n\ if (table == NULL)
fail (_("can't create i386-tbl.h, errno = %s\n"), strerror (errno));
fprintf (table, "/* This file is automatically generated by i386-gen. Do not edit! */\n\
/* Copyright 2007 Free Software Foundation, Inc.\n\
\n\ \n\
This file is part of the GNU opcodes library.\n\ This file is part of the GNU opcodes library.\n\
\n\ \n\
@ -409,5 +422,7 @@ main (int argc, char **argv)
process_i386_opcodes (); process_i386_opcodes ();
process_i386_registers (); process_i386_registers ();
fclose (table);
exit (0); exit (0);
} }