/* ia64-gen.c -- Generate a shrunk set of opcode tables
- Copyright (c) 1999 Free Software Foundation, Inc.
+ Copyright 1999, 2000 Free Software Foundation, Inc.
Written by Bob Manson, Cygnus Solutions, <manson@cygnus.com>
This file is part of GDB, GAS, and the GNU binutils.
int nchks;
int total_chks; /* total #of terminal insns */
int *chks; /* insn classes which read (RAW), write
- (WAW), or write (WAR) this rsrc */ //
+ (WAW), or write (WAR) this rsrc */
int *chknotes; /* dependency notes for each class */
int nregs;
int total_regs; /* total #of terminal insns */
for (i=0;i < count;i++)
set[deps[i]] = 1;
count = 0;
- for (i=0;i < sizeof(set);i++)
+ for (i=0;i < (int)sizeof(set);i++)
if (set[i])
++count;
list = tmalloc(struct deplist);
list->len = count;
list->deps = (unsigned short *)malloc (sizeof(unsigned short) * count);
- for (i=0, count=0;i < sizeof(set);i++)
+ for (i=0, count=0;i < (int)sizeof(set);i++)
{
if (set[i])
{
if ((comment = strchr(name, '[')) != NULL)
is_class = 1;
if ((notestr = strchr(name, '+')) != NULL)
+ is_class = 1;
+
+ /* If it is a composite class, then ignore comments and notes that come after
+ the '\\', since they don't apply to the part we are decoding now. */
+ if (xsect)
+ {
+ if (comment > xsect)
+ comment = 0;
+ if (notestr > xsect)
+ notestr = 0;
+ }
+
+ if (notestr)
{
char *nextnotestr;
- is_class = 1;
note = atoi (notestr + 1);
if ((nextnotestr = strchr (notestr + 1, '+')) != NULL)
{
}
}
- /* if it's a composite class, leave the notes and comments in place so that
- we have a unique name for the composite class */
+ /* If it's a composite class, leave the notes and comments in place so that
+ we have a unique name for the composite class. Otherwise, we remove
+ them. */
if (!xsect)
{
if (notestr)
existing class or terminal with the same name. */
if ((xsect || comment || notestr) && is_class)
{
- // first, populate with the class we're based on
+ /* First, populate with the class we're based on. */
char *subname = name;
if (xsect)
*xsect = 0;
resolved = idesc->operands[0] == IA64_OPND_B2;
else if (strcmp (ic->name, "invala") == 0)
resolved = strcmp (idesc->name, ic->name) == 0;
+ else if (strncmp (idesc->name, "st", 2) == 0
+ && strstr (format, "M5") != NULL)
+ resolved = idesc->flags & IA64_OPCODE_POSTINC;
else
resolved = 0;
}
(int)rdeps[i]->mode, (int)rdeps[i]->semantics, regindex);
if (rdeps[i]->semantics == IA64_DVS_OTHER)
printf ("\"%s\", ", rdeps[i]->extra);
+ else
+ printf ("NULL, ");
printf("},\n");
}
printf ("};\n\n");
int
insert_opcode_dependencies (opc, cmp)
struct ia64_opcode *opc;
- struct completer_entry *cmp;
+ struct completer_entry *cmp ATTRIBUTE_UNUSED;
{
/* note all resources which point to this opcode. rfi has the most chks
(79) and cmpxchng has the most regs (54) so 100 here should be enough */
printf ("static const struct ia64_main_table\nmain_table[] = {\n");
while (ptr != NULL)
{
- printf (" { %d, %d, %d, 0x%llxull, 0x%llxull, { %d, %d, %d, %d, %d }, 0x%x, %d, },\n",
+ printf (" { %d, %d, %d, 0x",
ptr->name->num,
ptr->opcode->type,
- ptr->opcode->num_outputs,
- ptr->opcode->opcode,
- ptr->opcode->mask,
+ ptr->opcode->num_outputs);
+ fprintf_vma (stdout, ptr->opcode->opcode);
+ printf ("ull, 0x");
+ fprintf_vma (stdout, ptr->opcode->mask);
+ printf ("ull, { %d, %d, %d, %d, %d }, 0x%x, %d, },\n",
ptr->opcode->operands[0],
ptr->opcode->operands[1],
ptr->opcode->operands[2],
}
\f
int
-main (int argc, char **argv)
+main (argc, argv)
+ int argc;
+ char **argv ATTRIBUTE_UNUSED;
{
if (argc > 1)
{