From d0286a2112661d2813b8e35df3f398829563e545 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Mon, 17 Jan 1994 08:19:56 +0000 Subject: [PATCH] * config/tc-hppa.c (pa_ip): Handle 'N', 'O', 'o', '0', '1', 'u', and '2' in copr and sfu instruction templates. --- gas/ChangeLog | 5 +++++ gas/config/tc-hppa.c | 52 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 68652700567..f52c7f8cca1 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +Mon Jan 17 00:18:55 1994 Jeffrey A. Law (law@snake.cs.utah.edu) + + * config/tc-hppa.c (pa_ip): Handle 'N', 'O', 'o', '0', '1', 'u', + and '2' in copr and sfu instruction templates. + Sun Jan 16 16:44:23 1994 Jeffrey A. Law (law@snake.cs.utah.edu) * as.h (subseg_force_new): Add prototype. diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c index a86858873c6..53f94b6f01b 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': -- 2.30.2