diff options
-rw-r--r-- | gas/ChangeLog | 2 | ||||
-rw-r--r-- | gas/config/tc-hppa.c | 42 |
2 files changed, 44 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 0386fd2..9523ba5 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,7 @@ Sat Aug 28 00:26:26 1999 Jerry Quinn <jquinn@nortelnetworks.com> + * config/tc-hppa.c (pa_ip): Add cases for '.', '~'. '$'. and '!' + * config/tc-hppa.c (pa_ip): Add case for 'I'. 1999-08-27 Jim Wilson <wilson@cygnus.com> diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c index 39dee7c..f79295c 100644 --- a/gas/config/tc-hppa.c +++ b/gas/config/tc-hppa.c @@ -1569,6 +1569,25 @@ pa_ip (str) CHECK_FIELD (num, 31, 0, 0); INSERT_FIELD_AND_CONTINUE (opcode, num, 21); + /* Handle %sar or %cr11. No bits get set, we just verify that it + is there. */ + case '!': + /* Skip whitespace before register. */ + while (*s == ' ' || *s == '\t') + s = s + 1; + + if (!strncasecmp(s, "%sar", 4)) + { + s += 4; + continue; + } + else if (!strncasecmp(s, "%cr11", 5)) + { + s += 5; + continue; + } + break; + /* Handle a 5 bit register field at 15. */ case 'x': num = pa_parse_number (&s, 0); @@ -2436,6 +2455,13 @@ pa_ip (str) continue; } + /* Handle a 2 bit shift count at 25. */ + case '.': + num = pa_get_absolute_expression (&the_insn, &s); + s = expr_end; + CHECK_FIELD (num, 3, 1, 0); + INSERT_FIELD_AND_CONTINUE (opcode, num, 6); + /* Handle a 5 bit shift count at 26. */ case 'p': num = pa_get_absolute_expression (&the_insn, &s); @@ -2443,6 +2469,15 @@ pa_ip (str) CHECK_FIELD (num, 31, 0, 0); INSERT_FIELD_AND_CONTINUE (opcode, 31 - num, 5); + /* Handle a 6 bit shift count at 20,22:26. */ + case '~': + num = pa_get_absolute_expression (&the_insn, &s); + s = expr_end; + CHECK_FIELD (num, 63, 0, 0); + num = 63 - num; + opcode |= (num & 0x20) << 6; + INSERT_FIELD_AND_CONTINUE (opcode, num & 0x1f, 5); + /* Handle a 5 bit bit position at 26. */ case 'P': num = pa_get_absolute_expression (&the_insn, &s); @@ -2460,6 +2495,13 @@ pa_ip (str) CHECK_FIELD (num, 31, 0, 0); INSERT_FIELD_AND_CONTINUE (opcode, num, 21); + /* Handle a 9 bit immediate at 28. */ + case '$': + num = pa_get_absolute_expression (&the_insn, &s); + s = expr_end; + CHECK_FIELD (num, 511, 1, 0); + INSERT_FIELD_AND_CONTINUE (opcode, num, 3); + /* Handle a 13 bit immediate at 18. */ case 'A': num = pa_get_absolute_expression (&the_insn, &s); |