diff options
author | Jeff Law <law@redhat.com> | 1994-02-05 18:18:49 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1994-02-05 18:18:49 +0000 |
commit | e59f322778472df5cf846224c050aecfd2aa95cf (patch) | |
tree | 005198e49bac4468072c524708e0c8ab2f360cb5 /opcodes/hppa-dis.c | |
parent | a2fcbaf22e2be66bf3bb2384294ee9d9cb95ecab (diff) | |
download | gdb-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/hppa-dis.c')
-rw-r--r-- | opcodes/hppa-dis.c | 55 |
1 files changed, 42 insertions, 13 deletions
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 |