diff options
author | Jeff Law <law@redhat.com> | 1994-01-17 08:19:56 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1994-01-17 08:19:56 +0000 |
commit | d0286a2112661d2813b8e35df3f398829563e545 (patch) | |
tree | 5320f001889440ab19e9a792bcbf5bcd254daffa /gas/config/tc-hppa.c | |
parent | 43983d3c159a6b61c1fb7b00e22bd0825e373996 (diff) | |
download | gdb-d0286a2112661d2813b8e35df3f398829563e545.zip gdb-d0286a2112661d2813b8e35df3f398829563e545.tar.gz gdb-d0286a2112661d2813b8e35df3f398829563e545.tar.bz2 |
* config/tc-hppa.c (pa_ip): Handle 'N', 'O', 'o', '0', '1', 'u',
and '2' in copr and sfu instruction templates.
Diffstat (limited to 'gas/config/tc-hppa.c')
-rw-r--r-- | gas/config/tc-hppa.c | 52 |
1 files changed, 48 insertions, 4 deletions
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c index a868588..53f94b6 100644 --- a/gas/config/tc-hppa.c +++ b/gas/config/tc-hppa.c @@ -2015,6 +2015,11 @@ pa_ip (str) nullif = pa_parse_nullif (&s); INSERT_FIELD_AND_CONTINUE (opcode, nullif, 1); + /* Handle a nullification completer for copr and spop insns. */ + case 'N': + nullif = pa_parse_nullif (&s); + INSERT_FIELD_AND_CONTINUE (opcode, nullif, 5); + /* Handle a 11 bit immediate at 31. */ case 'i': the_insn.field_selector = pa_chk_field_selector (&s); @@ -2247,12 +2252,51 @@ pa_ip (str) CHECK_FIELD (num, 7, 0, 0); INSERT_FIELD_AND_CONTINUE (opcode, num, 6); - /* We don't support any of these. FIXME. */ + /* Handle a 20 bit SOP field for spop0. */ case 'O': - get_expression (s); + num = pa_get_absolute_expression (&the_insn, &s); s = expr_end; - abort (); - continue; + CHECK_FIELD (num, 1048575, 0, 0); + num = (num & 0x1f) | ((num & 0x000fffe0) << 6); + INSERT_FIELD_AND_CONTINUE (opcode, num, 0); + + /* Handle a 15bit SOP field for spop1. */ + case 'o': + num = pa_get_absolute_expression (&the_insn, &s); + s = expr_end; + CHECK_FIELD (num, 32767, 0, 0); + INSERT_FIELD_AND_CONTINUE (opcode, num, 11); + + /* Handle a 10bit SOP field for spop3. */ + case '0': + num = pa_get_absolute_expression (&the_insn, &s); + s = expr_end; + CHECK_FIELD (num, 1023, 0, 0); + num = (num & 0x1f) | ((num & 0x000003e0) << 6); + INSERT_FIELD_AND_CONTINUE (opcode, num, 0); + + /* Handle a 15 bit SOP field for spop2. */ + case '1': + num = pa_get_absolute_expression (&the_insn, &s); + s = expr_end; + CHECK_FIELD (num, 32767, 0, 0); + num = (num & 0x1f) | ((num & 0x00007fe0) << 6); + INSERT_FIELD_AND_CONTINUE (opcode, num, 0); + + /* Handle a 3-bit co-processor ID field. */ + case 'u': + num = pa_get_absolute_expression (&the_insn, &s); + s = expr_end; + CHECK_FIELD (num, 7, 0, 0); + INSERT_FIELD_AND_CONTINUE (opcode, num, 6); + + /* Handle a 22bit SOP field for copr. */ + case '2': + num = pa_get_absolute_expression (&the_insn, &s); + s = expr_end; + CHECK_FIELD (num, 4194303, 0, 0); + num = (num & 0x1f) | ((num & 0x003fffe0) << 4); + INSERT_FIELD_AND_CONTINUE (opcode, num, 0); /* Handle a source FP operand format completer. */ case 'F': |