* config/tc-hppa.c (pa_ip): Absorb white space in instructions
between args. Add new completers. Fix bug in 64 bit condition handling.
This commit is contained in:
parent
3b67cf2b51
commit
680ef6de90
2 changed files with 204 additions and 0 deletions
|
@ -4,6 +4,10 @@ Sat Aug 28 01:23:11 1999 Jeffrey A Law (law@cygnus.com)
|
||||||
|
|
||||||
Sat Aug 28 00:26:26 1999 Jerry Quinn <jquinn@nortelnetworks.com>
|
Sat Aug 28 00:26:26 1999 Jerry Quinn <jquinn@nortelnetworks.com>
|
||||||
|
|
||||||
|
* config/tc-hppa.c (pa_ip): Absorb white space in instructions
|
||||||
|
between args.
|
||||||
|
Add new completers. Fix bug in 64 bit condition handling.
|
||||||
|
|
||||||
* config/tc-hppa.c (pa_ip): Add completer codes 'a', 'ch', 'cH',
|
* config/tc-hppa.c (pa_ip): Add completer codes 'a', 'ch', 'cH',
|
||||||
'cS', and 'c*'.
|
'cS', and 'c*'.
|
||||||
|
|
||||||
|
|
|
@ -1534,6 +1534,10 @@ pa_ip (str)
|
||||||
sure that the operands match. */
|
sure that the operands match. */
|
||||||
for (args = insn->args;; ++args)
|
for (args = insn->args;; ++args)
|
||||||
{
|
{
|
||||||
|
/* Absorb white space in instruction. */
|
||||||
|
while (*s == ' ' || *s == '\t')
|
||||||
|
s++;
|
||||||
|
|
||||||
switch (*args)
|
switch (*args)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1645,6 +1649,13 @@ pa_ip (str)
|
||||||
CHECK_FIELD (num, 31, 0, 0);
|
CHECK_FIELD (num, 31, 0, 0);
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, num, 16);
|
INSERT_FIELD_AND_CONTINUE (opcode, num, 16);
|
||||||
|
|
||||||
|
/* Handle an unsigned 10 bit immediate at 15. */
|
||||||
|
case 'U':
|
||||||
|
num = pa_get_absolute_expression (&the_insn, &s);
|
||||||
|
s = expr_end;
|
||||||
|
CHECK_FIELD (num, 1023, 0, 0);
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, num, 16);
|
||||||
|
|
||||||
/* Handle a 2 bit space identifier at 17. */
|
/* Handle a 2 bit space identifier at 17. */
|
||||||
case 's':
|
case 's':
|
||||||
num = pa_parse_number (&s, 0);
|
num = pa_parse_number (&s, 0);
|
||||||
|
@ -1747,6 +1758,47 @@ pa_ip (str)
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, a, 13);
|
INSERT_FIELD_AND_CONTINUE (opcode, a, 13);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Handle a local processor completer. */
|
||||||
|
case 'L':
|
||||||
|
if (strncasecmp (s, ",l", 2) != 0)
|
||||||
|
break;
|
||||||
|
s += 2;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Handle a PROBE read/write completer. */
|
||||||
|
case 'w':
|
||||||
|
flag = 0;
|
||||||
|
if (!strncasecmp (s, ",w", 2))
|
||||||
|
{
|
||||||
|
flag = 1;
|
||||||
|
s += 2;
|
||||||
|
}
|
||||||
|
else if (!strncasecmp (s, ",r", 2))
|
||||||
|
{
|
||||||
|
flag = 0;
|
||||||
|
s += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 6);
|
||||||
|
|
||||||
|
/* Handle MFCTL wide completer. */
|
||||||
|
case 'W':
|
||||||
|
if (strncasecmp (s, ",w", 2) != 0)
|
||||||
|
break;
|
||||||
|
s += 2;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Handle an RFI restore completer. */
|
||||||
|
case 'r':
|
||||||
|
flag = 0;
|
||||||
|
if (!strncasecmp (s, ",r", 2))
|
||||||
|
{
|
||||||
|
flag = 5;
|
||||||
|
s += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 5);
|
||||||
|
|
||||||
/* Handle a system control completer. */
|
/* Handle a system control completer. */
|
||||||
case 'Z':
|
case 'Z':
|
||||||
if (*s == ',' && (*(s + 1) == 'm' || *(s + 1) == 'M'))
|
if (*s == ',' && (*(s + 1) == 'm' || *(s + 1) == 'M'))
|
||||||
|
@ -1759,6 +1811,150 @@ pa_ip (str)
|
||||||
|
|
||||||
INSERT_FIELD_AND_CONTINUE (opcode, flag, 5);
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 5);
|
||||||
|
|
||||||
|
/* Handle intermediate/final completer for DCOR. */
|
||||||
|
case 'i':
|
||||||
|
flag = 0;
|
||||||
|
if (!strncasecmp (s, ",i", 2))
|
||||||
|
{
|
||||||
|
flag = 1;
|
||||||
|
s += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 6);
|
||||||
|
|
||||||
|
/* Handle add completer. */
|
||||||
|
case 'a':
|
||||||
|
flag = 1;
|
||||||
|
if (!strncasecmp (s, ",l", 2))
|
||||||
|
{
|
||||||
|
flag = 2;
|
||||||
|
s += 2;
|
||||||
|
}
|
||||||
|
else if (!strncasecmp (s, ",tsv", 4))
|
||||||
|
{
|
||||||
|
flag = 3;
|
||||||
|
s += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 10);
|
||||||
|
|
||||||
|
/* Handle 64 bit carry for ADD. */
|
||||||
|
case 'Y':
|
||||||
|
flag = 0;
|
||||||
|
if (!strncasecmp (s, ",dc,tsv", 7) ||
|
||||||
|
!strncasecmp (s, ",tsv,dc", 7))
|
||||||
|
{
|
||||||
|
flag = 1;
|
||||||
|
s += 7;
|
||||||
|
}
|
||||||
|
else if (!strncasecmp (s, ",dc", 3))
|
||||||
|
{
|
||||||
|
flag = 0;
|
||||||
|
s += 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);
|
||||||
|
|
||||||
|
/* Handle 32 bit carry for ADD. */
|
||||||
|
case 'y':
|
||||||
|
flag = 0;
|
||||||
|
if (!strncasecmp (s, ",c,tsv", 6) ||
|
||||||
|
!strncasecmp (s, ",tsv,c", 6))
|
||||||
|
{
|
||||||
|
flag = 1;
|
||||||
|
s += 6;
|
||||||
|
}
|
||||||
|
else if (!strncasecmp (s, ",c", 2))
|
||||||
|
{
|
||||||
|
flag = 0;
|
||||||
|
s += 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);
|
||||||
|
|
||||||
|
/* Handle trap on signed overflow. */
|
||||||
|
case 'v':
|
||||||
|
flag = 0;
|
||||||
|
if (!strncasecmp (s, ",tsv", 4))
|
||||||
|
{
|
||||||
|
flag = 1;
|
||||||
|
s += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);
|
||||||
|
|
||||||
|
/* Handle trap on condition and overflow. */
|
||||||
|
case 't':
|
||||||
|
flag = 0;
|
||||||
|
if (!strncasecmp (s, ",tc,tsv", 7) ||
|
||||||
|
!strncasecmp (s, ",tsv,tc", 7))
|
||||||
|
{
|
||||||
|
flag = 1;
|
||||||
|
s += 7;
|
||||||
|
}
|
||||||
|
else if (!strncasecmp (s, ",tc", 3))
|
||||||
|
{
|
||||||
|
flag = 0;
|
||||||
|
s += 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);
|
||||||
|
|
||||||
|
/* Handle 64 bit borrow for SUB. */
|
||||||
|
case 'B':
|
||||||
|
flag = 0;
|
||||||
|
if (!strncasecmp (s, ",db,tsv", 7) ||
|
||||||
|
!strncasecmp (s, ",tsv,db", 7))
|
||||||
|
{
|
||||||
|
flag = 1;
|
||||||
|
s += 7;
|
||||||
|
}
|
||||||
|
else if (!strncasecmp (s, ",db", 3))
|
||||||
|
{
|
||||||
|
flag = 0;
|
||||||
|
s += 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);
|
||||||
|
|
||||||
|
/* Handle 32 bit borrow for SUB. */
|
||||||
|
case 'b':
|
||||||
|
flag = 0;
|
||||||
|
if (!strncasecmp (s, ",b,tsv", 6) ||
|
||||||
|
!strncasecmp (s, ",tsv,b", 6))
|
||||||
|
{
|
||||||
|
flag = 1;
|
||||||
|
s += 6;
|
||||||
|
}
|
||||||
|
else if (!strncasecmp (s, ",b", 2))
|
||||||
|
{
|
||||||
|
flag = 0;
|
||||||
|
s += 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 11);
|
||||||
|
|
||||||
|
/* Handle trap condition completer for UADDCM. */
|
||||||
|
case 'T':
|
||||||
|
flag = 0;
|
||||||
|
if (!strncasecmp (s, ",tc", 3))
|
||||||
|
{
|
||||||
|
flag = 1;
|
||||||
|
s += 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
INSERT_FIELD_AND_CONTINUE (opcode, flag, 6);
|
||||||
|
|
||||||
/* Handle signed/unsigned at 21. */
|
/* Handle signed/unsigned at 21. */
|
||||||
case 'S':
|
case 'S':
|
||||||
{
|
{
|
||||||
|
@ -1885,6 +2081,7 @@ pa_ip (str)
|
||||||
break;
|
break;
|
||||||
name = s;
|
name = s;
|
||||||
|
|
||||||
|
name = s;
|
||||||
while (*s != ',' && *s != ' ' && *s != '\t')
|
while (*s != ',' && *s != ' ' && *s != '\t')
|
||||||
s += 1;
|
s += 1;
|
||||||
c = *s;
|
c = *s;
|
||||||
|
@ -2049,6 +2246,7 @@ pa_ip (str)
|
||||||
break;
|
break;
|
||||||
name = s;
|
name = s;
|
||||||
|
|
||||||
|
name = s;
|
||||||
while (*s != ',' && *s != ' ' && *s != '\t')
|
while (*s != ',' && *s != ' ' && *s != '\t')
|
||||||
s += 1;
|
s += 1;
|
||||||
c = *s;
|
c = *s;
|
||||||
|
@ -2186,6 +2384,7 @@ pa_ip (str)
|
||||||
break;
|
break;
|
||||||
name = s;
|
name = s;
|
||||||
|
|
||||||
|
name = s;
|
||||||
while (*s != ',' && *s != ' ' && *s != '\t')
|
while (*s != ',' && *s != ' ' && *s != '\t')
|
||||||
s += 1;
|
s += 1;
|
||||||
c = *s;
|
c = *s;
|
||||||
|
@ -2254,6 +2453,7 @@ pa_ip (str)
|
||||||
break;
|
break;
|
||||||
name = s;
|
name = s;
|
||||||
|
|
||||||
|
name = s;
|
||||||
while (*s != ',' && *s != ' ' && *s != '\t')
|
while (*s != ',' && *s != ' ' && *s != '\t')
|
||||||
s += 1;
|
s += 1;
|
||||||
c = *s;
|
c = *s;
|
||||||
|
|
Loading…
Add table
Reference in a new issue