mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 03:29:47 +08:00
* config/tc-hppa.c (pa_ip): Change condition args to have '?' prefix.
This commit is contained in:
@ -1,3 +1,7 @@
|
|||||||
|
Thu Aug 5 16:52:51 1999 Jerry Quinn <jquinn@nortelnetworks.com>
|
||||||
|
|
||||||
|
* config/tc-hppa.c (pa_ip): Change condition args to have '?' prefix.
|
||||||
|
|
||||||
Thu Aug 5 23:05:56 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
|
Thu Aug 5 23:05:56 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
|
||||||
|
|
||||||
* config/tc-sh.c (md_assemble): Call as_bad when there are excess
|
* config/tc-sh.c (md_assemble): Call as_bad when there are excess
|
||||||
|
@ -1717,407 +1717,424 @@ pa_ip (str)
|
|||||||
INSERT_FIELD_AND_CONTINUE (opcode, a, 13);
|
INSERT_FIELD_AND_CONTINUE (opcode, a, 13);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle a non-negated compare/stubtract condition. */
|
/* Handle all conditions. */
|
||||||
case '<':
|
|
||||||
cmpltr = pa_parse_nonneg_cmpsub_cmpltr (&s, 1);
|
|
||||||
if (cmpltr < 0)
|
|
||||||
{
|
|
||||||
as_bad (_("Invalid Compare/Subtract Condition: %c"), *s);
|
|
||||||
cmpltr = 0;
|
|
||||||
}
|
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
|
|
||||||
|
|
||||||
/* Handle a negated or non-negated compare/subtract condition. */
|
|
||||||
case '?':
|
case '?':
|
||||||
save_s = s;
|
{
|
||||||
cmpltr = pa_parse_nonneg_cmpsub_cmpltr (&s, 1);
|
args++;
|
||||||
if (cmpltr < 0)
|
switch (*args)
|
||||||
{
|
{
|
||||||
s = save_s;
|
/* Handle FP compare conditions. */
|
||||||
cmpltr = pa_parse_neg_cmpsub_cmpltr (&s, 1);
|
case 'f':
|
||||||
if (cmpltr < 0)
|
cond = pa_parse_fp_cmp_cond (&s);
|
||||||
{
|
INSERT_FIELD_AND_CONTINUE (opcode, cond, 0);
|
||||||
as_bad (_("Invalid Compare/Subtract Condition."));
|
|
||||||
cmpltr = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Negated condition requires an opcode change. */
|
|
||||||
opcode |= 1 << 27;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
|
|
||||||
|
|
||||||
/* Handle non-negated add condition. */
|
/* Handle an add condition. */
|
||||||
case '!':
|
case 'a':
|
||||||
cmpltr = pa_parse_nonneg_add_cmpltr (&s, 1);
|
cmpltr = 0;
|
||||||
if (cmpltr < 0)
|
flag = 0;
|
||||||
{
|
if (*s == ',')
|
||||||
as_bad (_("Invalid Compare/Subtract Condition: %c"), *s);
|
{
|
||||||
cmpltr = 0;
|
s++;
|
||||||
}
|
name = s;
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
|
while (*s != ',' && *s != ' ' && *s != '\t')
|
||||||
|
s += 1;
|
||||||
|
c = *s;
|
||||||
|
*s = 0x00;
|
||||||
|
if (strcmp (name, "=") == 0)
|
||||||
|
cmpltr = 1;
|
||||||
|
else if (strcmp (name, "<") == 0)
|
||||||
|
cmpltr = 2;
|
||||||
|
else if (strcmp (name, "<=") == 0)
|
||||||
|
cmpltr = 3;
|
||||||
|
else if (strcasecmp (name, "nuv") == 0)
|
||||||
|
cmpltr = 4;
|
||||||
|
else if (strcasecmp (name, "znv") == 0)
|
||||||
|
cmpltr = 5;
|
||||||
|
else if (strcasecmp (name, "sv") == 0)
|
||||||
|
cmpltr = 6;
|
||||||
|
else if (strcasecmp (name, "od") == 0)
|
||||||
|
cmpltr = 7;
|
||||||
|
else if (strcasecmp (name, "tr") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 0;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcmp (name, "<>") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 1;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcmp (name, ">=") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 2;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcmp (name, ">") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 3;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcasecmp (name, "uv") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 4;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcasecmp (name, "vnz") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 5;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcasecmp (name, "nsv") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 6;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcasecmp (name, "ev") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 7;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
as_bad (_("Invalid Add Condition: %s"), name);
|
||||||
|
*s = c;
|
||||||
|
}
|
||||||
|
opcode |= cmpltr << 13;
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
|
||||||
|
|
||||||
/* Handle a negated or non-negated add condition. */
|
/* Handle non-negated add and branch condition. */
|
||||||
case '@':
|
case 'd':
|
||||||
save_s = s;
|
cmpltr = pa_parse_nonneg_add_cmpltr (&s, 1);
|
||||||
cmpltr = pa_parse_nonneg_add_cmpltr (&s, 1);
|
if (cmpltr < 0)
|
||||||
if (cmpltr < 0)
|
{
|
||||||
{
|
as_bad (_("Invalid Compare/Subtract Condition: %c"), *s);
|
||||||
s = save_s;
|
cmpltr = 0;
|
||||||
cmpltr = pa_parse_neg_add_cmpltr (&s, 1);
|
}
|
||||||
if (cmpltr < 0)
|
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
|
||||||
{
|
|
||||||
as_bad (_("Invalid Compare/Subtract Condition"));
|
|
||||||
cmpltr = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Negated condition requires an opcode change. */
|
|
||||||
opcode |= 1 << 27;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
|
|
||||||
|
|
||||||
/* Handle a compare/subtract condition. */
|
/* Handle a negated or non-negated add and branch
|
||||||
case 'a':
|
condition. */
|
||||||
cmpltr = 0;
|
case '@':
|
||||||
flag = 0;
|
save_s = s;
|
||||||
if (*s == ',')
|
cmpltr = pa_parse_nonneg_add_cmpltr (&s, 1);
|
||||||
{
|
if (cmpltr < 0)
|
||||||
s++;
|
{
|
||||||
name = s;
|
s = save_s;
|
||||||
while (*s != ',' && *s != ' ' && *s != '\t')
|
cmpltr = pa_parse_neg_add_cmpltr (&s, 1);
|
||||||
s += 1;
|
if (cmpltr < 0)
|
||||||
c = *s;
|
{
|
||||||
*s = 0x00;
|
as_bad (_("Invalid Compare/Subtract Condition"));
|
||||||
if (strcmp (name, "=") == 0)
|
cmpltr = 0;
|
||||||
cmpltr = 1;
|
}
|
||||||
else if (strcmp (name, "<") == 0)
|
else
|
||||||
cmpltr = 2;
|
{
|
||||||
else if (strcmp (name, "<=") == 0)
|
/* Negated condition requires an opcode change. */
|
||||||
cmpltr = 3;
|
opcode |= 1 << 27;
|
||||||
else if (strcasecmp (name, "<<") == 0)
|
}
|
||||||
cmpltr = 4;
|
}
|
||||||
else if (strcasecmp (name, "<<=") == 0)
|
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
|
||||||
cmpltr = 5;
|
|
||||||
else if (strcasecmp (name, "sv") == 0)
|
|
||||||
cmpltr = 6;
|
|
||||||
else if (strcasecmp (name, "od") == 0)
|
|
||||||
cmpltr = 7;
|
|
||||||
else if (strcasecmp (name, "tr") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 0;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcmp (name, "<>") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 1;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcmp (name, ">=") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 2;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcmp (name, ">") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 3;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcasecmp (name, ">>=") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 4;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcasecmp (name, ">>") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 5;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcasecmp (name, "nsv") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 6;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcasecmp (name, "ev") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 7;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
as_bad (_("Invalid Add Condition: %s"), name);
|
|
||||||
*s = c;
|
|
||||||
}
|
|
||||||
opcode |= cmpltr << 13;
|
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
|
|
||||||
|
|
||||||
/* Handle a non-negated add condition. */
|
/* Handle branch on bit conditions. */
|
||||||
case 'd':
|
case 'b':
|
||||||
cmpltr = 0;
|
cmpltr = 0;
|
||||||
flag = 0;
|
if (*s == ',')
|
||||||
if (*s == ',')
|
{
|
||||||
{
|
s++;
|
||||||
s++;
|
if (strncmp (s, "<", 1) == 0)
|
||||||
name = s;
|
{
|
||||||
while (*s != ',' && *s != ' ' && *s != '\t')
|
cmpltr = 0;
|
||||||
s += 1;
|
s++;
|
||||||
c = *s;
|
}
|
||||||
*s = 0x00;
|
else if (strncmp (s, ">=", 2) == 0)
|
||||||
if (strcmp (name, "=") == 0)
|
{
|
||||||
cmpltr = 1;
|
cmpltr = 1;
|
||||||
else if (strcmp (name, "<") == 0)
|
s += 2;
|
||||||
cmpltr = 2;
|
}
|
||||||
else if (strcmp (name, "<=") == 0)
|
else
|
||||||
cmpltr = 3;
|
as_bad (_("Invalid Bit Branch Condition: %c"), *s);
|
||||||
else if (strcasecmp (name, "nuv") == 0)
|
}
|
||||||
cmpltr = 4;
|
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 15);
|
||||||
else if (strcasecmp (name, "znv") == 0)
|
|
||||||
cmpltr = 5;
|
|
||||||
else if (strcasecmp (name, "sv") == 0)
|
|
||||||
cmpltr = 6;
|
|
||||||
else if (strcasecmp (name, "od") == 0)
|
|
||||||
cmpltr = 7;
|
|
||||||
else if (strcasecmp (name, "tr") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 0;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcmp (name, "<>") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 1;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcmp (name, ">=") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 2;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcmp (name, ">") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 3;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcasecmp (name, "uv") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 4;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcasecmp (name, "vnz") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 5;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcasecmp (name, "nsv") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 6;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else if (strcasecmp (name, "ev") == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 7;
|
|
||||||
flag = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
as_bad (_("Invalid Add Condition: %s"), name);
|
|
||||||
*s = c;
|
|
||||||
}
|
|
||||||
opcode |= cmpltr << 13;
|
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
|
|
||||||
|
|
||||||
/* HANDLE a logical instruction condition. */
|
/* Handle a compare/subtract condition. */
|
||||||
case '&':
|
case 's':
|
||||||
cmpltr = 0;
|
cmpltr = 0;
|
||||||
flag = 0;
|
flag = 0;
|
||||||
if (*s == ',')
|
if (*s == ',')
|
||||||
{
|
{
|
||||||
s++;
|
s++;
|
||||||
name = s;
|
name = s;
|
||||||
while (*s != ',' && *s != ' ' && *s != '\t')
|
while (*s != ',' && *s != ' ' && *s != '\t')
|
||||||
s += 1;
|
s += 1;
|
||||||
c = *s;
|
c = *s;
|
||||||
*s = 0x00;
|
*s = 0x00;
|
||||||
|
if (strcmp (name, "=") == 0)
|
||||||
|
cmpltr = 1;
|
||||||
|
else if (strcmp (name, "<") == 0)
|
||||||
|
cmpltr = 2;
|
||||||
|
else if (strcmp (name, "<=") == 0)
|
||||||
|
cmpltr = 3;
|
||||||
|
else if (strcasecmp (name, "<<") == 0)
|
||||||
|
cmpltr = 4;
|
||||||
|
else if (strcasecmp (name, "<<=") == 0)
|
||||||
|
cmpltr = 5;
|
||||||
|
else if (strcasecmp (name, "sv") == 0)
|
||||||
|
cmpltr = 6;
|
||||||
|
else if (strcasecmp (name, "od") == 0)
|
||||||
|
cmpltr = 7;
|
||||||
|
else if (strcasecmp (name, "tr") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 0;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcmp (name, "<>") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 1;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcmp (name, ">=") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 2;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcmp (name, ">") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 3;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcasecmp (name, ">>=") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 4;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcasecmp (name, ">>") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 5;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcasecmp (name, "nsv") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 6;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcasecmp (name, "ev") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 7;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
as_bad (_("Invalid Compare/Subtract Condition: %s"),
|
||||||
|
name);
|
||||||
|
*s = c;
|
||||||
|
}
|
||||||
|
opcode |= cmpltr << 13;
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
|
||||||
|
|
||||||
|
/* Handle a non-negated compare condition. */
|
||||||
|
case 't':
|
||||||
|
cmpltr = pa_parse_nonneg_cmpsub_cmpltr (&s, 1);
|
||||||
|
if (cmpltr < 0)
|
||||||
|
{
|
||||||
|
as_bad (_("Invalid Compare/Subtract Condition: %c"), *s);
|
||||||
|
cmpltr = 0;
|
||||||
|
}
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
|
||||||
|
|
||||||
|
/* Handle a negated or non-negated compare/subtract
|
||||||
|
condition. */
|
||||||
|
case 'n':
|
||||||
|
save_s = s;
|
||||||
|
cmpltr = pa_parse_nonneg_cmpsub_cmpltr (&s, 1);
|
||||||
|
if (cmpltr < 0)
|
||||||
|
{
|
||||||
|
s = save_s;
|
||||||
|
cmpltr = pa_parse_neg_cmpsub_cmpltr (&s, 1);
|
||||||
|
if (cmpltr < 0)
|
||||||
|
{
|
||||||
|
as_bad (_("Invalid Compare/Subtract Condition."));
|
||||||
|
cmpltr = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Negated condition requires an opcode change. */
|
||||||
|
opcode |= 1 << 27;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
|
||||||
|
|
||||||
if (strcmp (name, "=") == 0)
|
/* Handle a logical instruction condition. */
|
||||||
cmpltr = 1;
|
case 'l':
|
||||||
else if (strcmp (name, "<") == 0)
|
cmpltr = 0;
|
||||||
cmpltr = 2;
|
flag = 0;
|
||||||
else if (strcmp (name, "<=") == 0)
|
if (*s == ',')
|
||||||
cmpltr = 3;
|
{
|
||||||
else if (strcasecmp (name, "od") == 0)
|
s++;
|
||||||
cmpltr = 7;
|
name = s;
|
||||||
else if (strcasecmp (name, "tr") == 0)
|
while (*s != ',' && *s != ' ' && *s != '\t')
|
||||||
{
|
s += 1;
|
||||||
cmpltr = 0;
|
c = *s;
|
||||||
flag = 1;
|
*s = 0x00;
|
||||||
}
|
|
||||||
else if (strcmp (name, "<>") == 0)
|
|
||||||
{
|
if (strcmp (name, "=") == 0)
|
||||||
cmpltr = 1;
|
cmpltr = 1;
|
||||||
flag = 1;
|
else if (strcmp (name, "<") == 0)
|
||||||
}
|
cmpltr = 2;
|
||||||
else if (strcmp (name, ">=") == 0)
|
else if (strcmp (name, "<=") == 0)
|
||||||
{
|
cmpltr = 3;
|
||||||
cmpltr = 2;
|
else if (strcasecmp (name, "od") == 0)
|
||||||
flag = 1;
|
cmpltr = 7;
|
||||||
}
|
else if (strcasecmp (name, "tr") == 0)
|
||||||
else if (strcmp (name, ">") == 0)
|
{
|
||||||
{
|
cmpltr = 0;
|
||||||
cmpltr = 3;
|
flag = 1;
|
||||||
flag = 1;
|
}
|
||||||
}
|
else if (strcmp (name, "<>") == 0)
|
||||||
else if (strcasecmp (name, "ev") == 0)
|
{
|
||||||
{
|
cmpltr = 1;
|
||||||
cmpltr = 7;
|
flag = 1;
|
||||||
flag = 1;
|
}
|
||||||
}
|
else if (strcmp (name, ">=") == 0)
|
||||||
else
|
{
|
||||||
as_bad (_("Invalid Logical Instruction Condition."));
|
cmpltr = 2;
|
||||||
*s = c;
|
flag = 1;
|
||||||
}
|
}
|
||||||
opcode |= cmpltr << 13;
|
else if (strcmp (name, ">") == 0)
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
|
{
|
||||||
|
cmpltr = 3;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else if (strcasecmp (name, "ev") == 0)
|
||||||
|
{
|
||||||
|
cmpltr = 7;
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
as_bad (_("Invalid Logical Instruction Condition."));
|
||||||
|
*s = c;
|
||||||
|
}
|
||||||
|
opcode |= cmpltr << 13;
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
|
||||||
|
|
||||||
/* Handle a unit instruction condition. */
|
/* Handle a shift/extract/deposit condition. */
|
||||||
case 'U':
|
case 'x':
|
||||||
cmpltr = 0;
|
case 'y':
|
||||||
flag = 0;
|
cmpltr = 0;
|
||||||
if (*s == ',')
|
if (*s == ',')
|
||||||
{
|
{
|
||||||
s++;
|
save_s = s++;
|
||||||
|
|
||||||
|
name = s;
|
||||||
|
while (*s != ',' && *s != ' ' && *s != '\t')
|
||||||
|
s += 1;
|
||||||
|
c = *s;
|
||||||
|
*s = 0x00;
|
||||||
|
if (strcmp (name, "=") == 0)
|
||||||
|
cmpltr = 1;
|
||||||
|
else if (strcmp (name, "<") == 0)
|
||||||
|
cmpltr = 2;
|
||||||
|
else if (strcasecmp (name, "od") == 0)
|
||||||
|
cmpltr = 3;
|
||||||
|
else if (strcasecmp (name, "tr") == 0)
|
||||||
|
cmpltr = 4;
|
||||||
|
else if (strcmp (name, "<>") == 0)
|
||||||
|
cmpltr = 5;
|
||||||
|
else if (strcmp (name, ">=") == 0)
|
||||||
|
cmpltr = 6;
|
||||||
|
else if (strcasecmp (name, "ev") == 0)
|
||||||
|
cmpltr = 7;
|
||||||
|
/* Handle movb,n. Put things back the way they were.
|
||||||
|
This includes moving s back to where it started. */
|
||||||
|
else if (strcasecmp (name, "n") == 0 && *args == 'y')
|
||||||
|
{
|
||||||
|
*s = c;
|
||||||
|
s = save_s;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
as_bad (_("Invalid Shift/Extract/Deposit Condition."));
|
||||||
|
*s = c;
|
||||||
|
}
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
|
||||||
|
|
||||||
if (strncasecmp (s, "sbz", 3) == 0)
|
/* Handle a unit instruction condition. */
|
||||||
{
|
case 'u': /* unit */
|
||||||
cmpltr = 2;
|
cmpltr = 0;
|
||||||
s += 3;
|
flag = 0;
|
||||||
}
|
if (*s == ',')
|
||||||
else if (strncasecmp (s, "shz", 3) == 0)
|
{
|
||||||
{
|
s++;
|
||||||
cmpltr = 3;
|
|
||||||
s += 3;
|
if (strncasecmp (s, "sbz", 3) == 0)
|
||||||
}
|
{
|
||||||
else if (strncasecmp (s, "sdc", 3) == 0)
|
cmpltr = 2;
|
||||||
{
|
s += 3;
|
||||||
cmpltr = 4;
|
}
|
||||||
s += 3;
|
else if (strncasecmp (s, "shz", 3) == 0)
|
||||||
}
|
{
|
||||||
else if (strncasecmp (s, "sbc", 3) == 0)
|
cmpltr = 3;
|
||||||
{
|
s += 3;
|
||||||
cmpltr = 6;
|
}
|
||||||
s += 3;
|
else if (strncasecmp (s, "sdc", 3) == 0)
|
||||||
}
|
{
|
||||||
else if (strncasecmp (s, "shc", 3) == 0)
|
cmpltr = 4;
|
||||||
{
|
s += 3;
|
||||||
cmpltr = 7;
|
}
|
||||||
s += 3;
|
else if (strncasecmp (s, "sbc", 3) == 0)
|
||||||
}
|
{
|
||||||
else if (strncasecmp (s, "tr", 2) == 0)
|
cmpltr = 6;
|
||||||
{
|
s += 3;
|
||||||
cmpltr = 0;
|
}
|
||||||
flag = 1;
|
else if (strncasecmp (s, "shc", 3) == 0)
|
||||||
s += 2;
|
{
|
||||||
}
|
cmpltr = 7;
|
||||||
else if (strncasecmp (s, "nbz", 3) == 0)
|
s += 3;
|
||||||
{
|
}
|
||||||
cmpltr = 2;
|
else if (strncasecmp (s, "tr", 2) == 0)
|
||||||
flag = 1;
|
{
|
||||||
s += 3;
|
cmpltr = 0;
|
||||||
}
|
flag = 1;
|
||||||
else if (strncasecmp (s, "nhz", 3) == 0)
|
s += 2;
|
||||||
{
|
}
|
||||||
cmpltr = 3;
|
else if (strncasecmp (s, "nbz", 3) == 0)
|
||||||
flag = 1;
|
{
|
||||||
s += 3;
|
cmpltr = 2;
|
||||||
}
|
flag = 1;
|
||||||
else if (strncasecmp (s, "ndc", 3) == 0)
|
s += 3;
|
||||||
{
|
}
|
||||||
cmpltr = 4;
|
else if (strncasecmp (s, "nhz", 3) == 0)
|
||||||
flag = 1;
|
{
|
||||||
s += 3;
|
cmpltr = 3;
|
||||||
}
|
flag = 1;
|
||||||
else if (strncasecmp (s, "nbc", 3) == 0)
|
s += 3;
|
||||||
{
|
}
|
||||||
cmpltr = 6;
|
else if (strncasecmp (s, "ndc", 3) == 0)
|
||||||
flag = 1;
|
{
|
||||||
s += 3;
|
cmpltr = 4;
|
||||||
}
|
flag = 1;
|
||||||
else if (strncasecmp (s, "nhc", 3) == 0)
|
s += 3;
|
||||||
{
|
}
|
||||||
cmpltr = 7;
|
else if (strncasecmp (s, "nbc", 3) == 0)
|
||||||
flag = 1;
|
{
|
||||||
s += 3;
|
cmpltr = 6;
|
||||||
}
|
flag = 1;
|
||||||
else
|
s += 3;
|
||||||
as_bad (_("Invalid Logical Instruction Condition."));
|
}
|
||||||
}
|
else if (strncasecmp (s, "nhc", 3) == 0)
|
||||||
opcode |= cmpltr << 13;
|
{
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
|
cmpltr = 7;
|
||||||
|
flag = 1;
|
||||||
|
s += 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
as_bad (_("Invalid Unit Instruction Condition."));
|
||||||
|
}
|
||||||
|
opcode |= cmpltr << 13;
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 12);
|
||||||
|
|
||||||
/* Handle a shift/extract/deposit condition. */
|
default:
|
||||||
case '|':
|
abort ();
|
||||||
case '>':
|
}
|
||||||
cmpltr = 0;
|
}
|
||||||
if (*s == ',')
|
|
||||||
{
|
|
||||||
save_s = s++;
|
|
||||||
|
|
||||||
|
|
||||||
name = s;
|
|
||||||
while (*s != ',' && *s != ' ' && *s != '\t')
|
|
||||||
s += 1;
|
|
||||||
c = *s;
|
|
||||||
*s = 0x00;
|
|
||||||
if (strcmp (name, "=") == 0)
|
|
||||||
cmpltr = 1;
|
|
||||||
else if (strcmp (name, "<") == 0)
|
|
||||||
cmpltr = 2;
|
|
||||||
else if (strcasecmp (name, "od") == 0)
|
|
||||||
cmpltr = 3;
|
|
||||||
else if (strcasecmp (name, "tr") == 0)
|
|
||||||
cmpltr = 4;
|
|
||||||
else if (strcmp (name, "<>") == 0)
|
|
||||||
cmpltr = 5;
|
|
||||||
else if (strcmp (name, ">=") == 0)
|
|
||||||
cmpltr = 6;
|
|
||||||
else if (strcasecmp (name, "ev") == 0)
|
|
||||||
cmpltr = 7;
|
|
||||||
/* Handle movb,n. Put things back the way they were.
|
|
||||||
This includes moving s back to where it started. */
|
|
||||||
else if (strcasecmp (name, "n") == 0 && *args == '|')
|
|
||||||
{
|
|
||||||
*s = c;
|
|
||||||
s = save_s;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
as_bad (_("Invalid Shift/Extract/Deposit Condition."));
|
|
||||||
*s = c;
|
|
||||||
}
|
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 13);
|
|
||||||
|
|
||||||
/* Handle bvb and bb conditions. */
|
|
||||||
case '~':
|
|
||||||
cmpltr = 0;
|
|
||||||
if (*s == ',')
|
|
||||||
{
|
|
||||||
s++;
|
|
||||||
if (strncmp (s, "<", 1) == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 0;
|
|
||||||
s++;
|
|
||||||
}
|
|
||||||
else if (strncmp (s, ">=", 2) == 0)
|
|
||||||
{
|
|
||||||
cmpltr = 1;
|
|
||||||
s += 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
as_bad (_("Invalid Bit Branch Condition: %c"), *s);
|
|
||||||
}
|
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, cmpltr, 15);
|
|
||||||
|
|
||||||
/* Handle a system control completer. */
|
/* Handle a system control completer. */
|
||||||
case 'Z':
|
case 'Z':
|
||||||
@ -2430,11 +2447,6 @@ pa_ip (str)
|
|||||||
the_insn.fpof2 = flag;
|
the_insn.fpof2 = flag;
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, flag, 13);
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 13);
|
||||||
|
|
||||||
/* Handle FP compare conditions. */
|
|
||||||
case 'M':
|
|
||||||
cond = pa_parse_fp_cmp_cond (&s);
|
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, cond, 0);
|
|
||||||
|
|
||||||
/* Handle L/R register halves like 't'. */
|
/* Handle L/R register halves like 't'. */
|
||||||
case 'v':
|
case 'v':
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user