diff options
-rw-r--r-- | opcodes/ChangeLog | 6 | ||||
-rw-r--r-- | opcodes/hppa-dis.c | 55 |
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 |