aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--opcodes/ChangeLog3
-rw-r--r--opcodes/hppa-dis.c186
2 files changed, 97 insertions, 92 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 1cceb1a..b4c9bfa 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,8 @@
Sat Aug 28 00:27:24 1999 Jerry Quinn <jquinn@nortelnetworks.com>
+ * hppa-dis.c (print_insn_hppa): Replace 'f' by 'v'. Prefix float
+ register args by 'f'.
+
* hppa-dis.c (print_insn_hppa): Add args q, %, !, and |.
* hppa-dis.c (MASK_10, read_write_names, add_compl_names,
diff --git a/opcodes/hppa-dis.c b/opcodes/hppa-dis.c
index adbc8c4..7dc8a1e 100644
--- a/opcodes/hppa-dis.c
+++ b/opcodes/hppa-dis.c
@@ -356,12 +356,6 @@ print_insn_hppa (memaddr, info)
case 'x':
fput_reg (GET_FIELD (insn, 11, 15), info);
break;
- case 'X':
- if (GET_FIELD (insn, 25, 25))
- fput_fp_reg_r (GET_FIELD (insn, 11, 15), info);
- else
- fput_fp_reg (GET_FIELD (insn, 11, 15), info);
- break;
case 'a':
case 'b':
fput_reg (GET_FIELD (insn, 6, 10), info);
@@ -369,64 +363,100 @@ print_insn_hppa (memaddr, info)
case '^':
fput_creg (GET_FIELD (insn, 6, 10), info);
break;
- case 'E':
- fput_fp_reg (GET_FIELD (insn, 6, 10), info);
- break;
- case '!':
- fput_creg (11, info);
- break;
case 't':
fput_reg (GET_FIELD (insn, 27, 31), info);
break;
- case 'v':
- if (GET_FIELD (insn, 25, 25))
- fput_fp_reg_r (GET_FIELD (insn, 27, 31), info);
- else
+
+ /* Handle floating point registers. */
+ case 'f':
+ switch (*++s)
+ {
+ case 't':
fput_fp_reg (GET_FIELD (insn, 27, 31), info);
- break;
- case 'y':
- fput_fp_reg (GET_FIELD (insn, 27, 31), info);
- break;
- case '4':
- {
- int reg = GET_FIELD (insn, 6, 10);
+ break;
+ case 'T':
+ if (GET_FIELD (insn, 25, 25))
+ fput_fp_reg_r (GET_FIELD (insn, 27, 31), info);
+ else
+ fput_fp_reg (GET_FIELD (insn, 27, 31), info);
+ break;
+ case 'a':
+ if (GET_FIELD (insn, 25, 25))
+ fput_fp_reg_r (GET_FIELD (insn, 6, 10), info);
+ else
+ fput_fp_reg (GET_FIELD (insn, 6, 10), info);
+ break;
+ case 'A':
+ if (GET_FIELD (insn, 24, 24))
+ fput_fp_reg_r (GET_FIELD (insn, 6, 10), info);
+ else
+ fput_fp_reg (GET_FIELD (insn, 6, 10), info);
+
+ break;
+ case 'b':
+ if (GET_FIELD (insn, 25, 25))
+ fput_fp_reg_r (GET_FIELD (insn, 11, 15), info);
+ else
+ fput_fp_reg (GET_FIELD (insn, 11, 15), info);
+ break;
+ case 'B':
+ if (GET_FIELD (insn, 19, 19))
+ fput_fp_reg_r (GET_FIELD (insn, 11, 15), info);
+ else
+ fput_fp_reg (GET_FIELD (insn, 11, 15), info);
+ break;
+ case 'C':
+ {
+ int reg = GET_FIELD (insn, 21, 22);
+ reg |= GET_FIELD (insn, 16, 18) << 2;
+ if (GET_FIELD (insn, 23, 23) != 0)
+ fput_fp_reg_r (reg, info);
+ else
+ fput_fp_reg (reg, info);
+ break;
+ }
+ case 'i':
+ {
+ int reg = GET_FIELD (insn, 6, 10);
- reg |= (GET_FIELD (insn, 26, 26) << 4);
- fput_fp_reg (reg, info);
- break;
- }
- case '6':
- {
- int reg = GET_FIELD (insn, 11, 15);
+ reg |= (GET_FIELD (insn, 26, 26) << 4);
+ fput_fp_reg (reg, info);
+ break;
+ }
+ case 'j':
+ {
+ int reg = GET_FIELD (insn, 11, 15);
- reg |= (GET_FIELD (insn, 26, 26) << 4);
- fput_fp_reg (reg, info);
- break;
- }
- case '7':
- {
- int reg = GET_FIELD (insn, 27, 31);
+ reg |= (GET_FIELD (insn, 26, 26) << 4);
+ fput_fp_reg (reg, info);
+ break;
+ }
+ case 'k':
+ {
+ int reg = GET_FIELD (insn, 27, 31);
- reg |= (GET_FIELD (insn, 26, 26) << 4);
- fput_fp_reg (reg, info);
- break;
- }
- case '8':
- {
- int reg = GET_FIELD (insn, 16, 20);
+ reg |= (GET_FIELD (insn, 26, 26) << 4);
+ fput_fp_reg (reg, info);
+ break;
+ }
+ case 'l':
+ {
+ int reg = GET_FIELD (insn, 21, 25);
- reg |= (GET_FIELD (insn, 26, 26) << 4);
- fput_fp_reg (reg, info);
- break;
- }
- case '9':
- {
- int reg = GET_FIELD (insn, 21, 25);
+ reg |= (GET_FIELD (insn, 26, 26) << 4);
+ fput_fp_reg (reg, info);
+ break;
+ }
+ case 'm':
+ {
+ int reg = GET_FIELD (insn, 16, 20);
+
+ reg |= (GET_FIELD (insn, 26, 26) << 4);
+ fput_fp_reg (reg, info);
+ break;
+ }
+ }
- reg |= (GET_FIELD (insn, 26, 26) << 4);
- fput_fp_reg (reg, info);
- break;
- }
case '5':
fput_const (extract_5_load (insn), info);
break;
@@ -568,8 +598,7 @@ print_insn_hppa (memaddr, info)
rather than by the 'f' bit (sigh): comb, comib,
addb, addib */
case 't':
- fputs_filtered (compare_cond_names[GET_FIELD (insn, 16,
- 18)],
+ fputs_filtered (compare_cond_names[GET_FIELD (insn, 16, 18)],
info);
break;
case 'T':
@@ -589,8 +618,7 @@ print_insn_hppa (memaddr, info)
info);
break;
case 'n':
- fputs_filtered (compare_cond_names[GET_FIELD (insn, 16,
- 18)
+ fputs_filtered (compare_cond_names[GET_FIELD (insn, 16, 18)
+ GET_FIELD (insn, 4, 4) * 8], info);
break;
case '@':
@@ -615,24 +643,22 @@ print_insn_hppa (memaddr, info)
break;
case 'd':
(*info->fprintf_func) (info->stream, "%s",
- add_cond_names[GET_FIELD (insn,
- 16,
- 18)]);
+ add_cond_names[GET_FIELD (insn, 16, 18)]);
break;
+
case 'D':
(*info->fprintf_func) (info->stream, "%s",
- add_cond_names[GET_FIELD (insn,
- 16, 18)
- + 8]);
+ add_cond_names[GET_FIELD (insn, 16, 18)
+ + 8]);
break;
case 'w':
- (*info->fprintf_func)
+ (*info->fprintf_func)
(info->stream, "%s",
wide_add_cond_names[GET_FIELD (insn, 16, 18)]);
break;
case 'W':
- (*info->fprintf_func)
+ (*info->fprintf_func)
(info->stream, "%s",
wide_add_cond_names[GET_FIELD (insn, 16, 18) + 8]);
break;
@@ -801,7 +827,7 @@ print_insn_hppa (memaddr, info)
case 'D':
fput_const (GET_FIELD (insn, 6, 31), info);
break;
- case 'f':
+ case 'v':
(*info->fprintf_func) (info->stream, ",%d", GET_FIELD (insn, 23, 25));
break;
case 'O':
@@ -811,17 +837,6 @@ print_insn_hppa (memaddr, info)
case 'o':
fput_const (GET_FIELD (insn, 6, 20), info);
break;
- case '3':
- {
- int reg = GET_FIELD (insn, 21, 22);
- reg |= GET_FIELD (insn, 16, 18) << 2;
- if (GET_FIELD (insn, 23, 23) != 0)
- fput_fp_reg_r (reg, info);
- else
- fput_fp_reg (reg, info);
- break;
- }
-
case '2':
fput_const ((GET_FIELD (insn, 6, 22) << 5 |
GET_FIELD (insn, 27, 31)), info);
@@ -872,19 +887,6 @@ print_insn_hppa (memaddr, info)
float_format_names[GET_FIELD
(insn, 20, 20)]);
break;
- case 'J':
- if (GET_FIELD (insn, 24, 24))
- fput_fp_reg_r (GET_FIELD (insn, 6, 10), info);
- else
- fput_fp_reg (GET_FIELD (insn, 6, 10), info);
-
- break;
- case 'K':
- if (GET_FIELD (insn, 19, 19))
- fput_fp_reg_r (GET_FIELD (insn, 11, 15), info);
- else
- fput_fp_reg (GET_FIELD (insn, 11, 15), info);
- break;
default:
(*info->fprintf_func) (info->stream, "%c", *s);
break;