aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>1994-02-05 18:18:49 +0000
committerJeff Law <law@redhat.com>1994-02-05 18:18:49 +0000
commite59f322778472df5cf846224c050aecfd2aa95cf (patch)
tree005198e49bac4468072c524708e0c8ab2f360cb5 /opcodes
parenta2fcbaf22e2be66bf3bb2384294ee9d9cb95ecab (diff)
downloadgdb-e59f322778472df5cf846224c050aecfd2aa95cf.zip
gdb-e59f322778472df5cf846224c050aecfd2aa95cf.tar.gz
gdb-e59f322778472df5cf846224c050aecfd2aa95cf.tar.bz2
* hppa-dis.c (print_insn_hppa): No space before 'H' operand.
Floating point format for 'H' operand is backwards from normal case (0 == double, 1 == single). For '4', '6', '7', '9', and '8' operands (fmpyadd and fmpysub), handle bizarre register translation correctly for single precision format.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/ChangeLog6
-rw-r--r--opcodes/hppa-dis.c55
2 files changed, 48 insertions, 13 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index ca0bc2b..52315a0 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,11 @@
Sat Feb 5 00:04:02 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+ * hppa-dis.c (print_insn_hppa): No space before 'H' operand.
+ Floating point format for 'H' operand is backwards from normal
+ case (0 == double, 1 == single). For '4', '6', '7', '9', and '8'
+ operands (fmpyadd and fmpysub), handle bizarre register
+ translation correctly for single precision format.
+
* hppa-dis.c (print_insn_hppa): Do not emit a space after 'F'
or 'I' operands if the next format specifier is 'M' (fcmp
condition completer).
diff --git a/opcodes/hppa-dis.c b/opcodes/hppa-dis.c
index 57273a3..24d5b7a 100644
--- a/opcodes/hppa-dis.c
+++ b/opcodes/hppa-dis.c
@@ -377,7 +377,7 @@ print_insn_hppa (memaddr, info)
(*info->fprintf_func) (info->stream, "%s", opcode->name);
- if (!strchr ("cfCY<?!@-+&U>~nNZFIMadu|", opcode->args[0]))
+ if (!strchr ("cfCY<?!@-+&U>~nHNZFIMadu|", opcode->args[0]))
(*info->fprintf_func) (info->stream, " ");
for (s = opcode->args; *s != '\0'; ++s)
{
@@ -417,20 +417,45 @@ print_insn_hppa (memaddr, info)
fput_fp_reg (GET_FIELD (insn, 27, 31), info);
break;
case '4':
- fput_fp_reg (GET_FIELD (insn, 6, 10), info);
- break;
+ {
+ int reg = GET_FIELD (insn, 6, 10);
+
+ reg |= (GET_FIELD (insn, 26, 26) << 4);
+ fput_fp_reg (reg, info);
+ break;
+ }
case '6':
- fput_fp_reg (GET_FIELD (insn, 11, 15), info);
- break;
+ {
+ int reg = GET_FIELD (insn, 11, 15);
+
+ reg |= (GET_FIELD (insn, 26, 26) << 4);
+ fput_fp_reg (reg, info);
+ break;
+ }
case '7':
- fput_fp_reg (GET_FIELD (insn, 27, 31), info);
- break;
+ {
+ int reg = GET_FIELD (insn, 27, 31);
+
+ reg |= (GET_FIELD (insn, 26, 26) << 4);
+ fput_fp_reg (reg, info);
+ break;
+ }
case '8':
- fput_fp_reg (GET_FIELD (insn, 16, 20), info);
- break;
+ {
+ int reg = GET_FIELD (insn, 16, 20);
+
+ reg |= (GET_FIELD (insn, 26, 26) << 4);
+ fput_fp_reg (reg, info);
+ break;
+ }
case '9':
- fput_fp_reg (GET_FIELD (insn, 21, 25), info);
- break;
+ {
+ int reg = GET_FIELD (insn, 21, 25);
+
+ reg |= (GET_FIELD (insn, 26, 26) << 4);
+ fput_fp_reg (reg, info);
+ break;
+ }
case '5':
fput_const (extract_5_load (insn), info);
break;
@@ -618,8 +643,12 @@ print_insn_hppa (memaddr, info)
17, 18)]);
break;
case 'H':
- fputs_filtered (float_format_names[GET_FIELD
- (insn, 26, 26)], info);
+ if (GET_FIELD (insn, 26, 26) == 1)
+ (*info->fprintf_func) (info->stream, "%s ",
+ float_format_names[0]);
+ else
+ (*info->fprintf_func) (info->stream, "%s ",
+ float_format_names[1]);
break;
case 'I':
/* if no destination completer and not before a completer