diff options
-rw-r--r-- | opcodes/ChangeLog | 5 | ||||
-rw-r--r-- | opcodes/cgen-dis.in | 12 |
2 files changed, 11 insertions, 6 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index fbf3062..02affa8 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2000-11-07 Dave Brolley <brolley@redhat.com> + + * cgen-dis.in (print_insn): All insns which can fit into insn_value + must be loaded there in their entirety. + 2000-10-20 Jakub Jelinek <jakub@redhat.com> * sparc-dis.c (v9a_asr_reg_names): Add v9b ASRs. diff --git a/opcodes/cgen-dis.in b/opcodes/cgen-dis.in index 9fee32a..22cef1f 100644 --- a/opcodes/cgen-dis.in +++ b/opcodes/cgen-dis.in @@ -281,9 +281,10 @@ print_insn (cd, pc, info, buf, buflen) machine insn and extracts the fields. The second pass prints them. */ -#if CGEN_INT_INSN_P - /* Make sure the entire insn is loaded into insn_value. */ - if (CGEN_INSN_BITSIZE (insn) > cd->base_insn_bitsize) + /* Make sure the entire insn is loaded into insn_value, if it + can fit. */ + if (CGEN_INSN_BITSIZE (insn) > cd->base_insn_bitsize && + (CGEN_INSN_BITSIZE (insn) / 8) <= sizeof (unsigned long)) { unsigned long full_insn_value; int rc = read_insn (cd, pc, info, buf, @@ -295,10 +296,9 @@ print_insn (cd, pc, info, buf, buflen) (cd, insn, &ex_info, full_insn_value, &fields, pc); } else -#endif + length = CGEN_EXTRACT_FN (cd, insn) + (cd, insn, &ex_info, insn_value, &fields, pc); - length = CGEN_EXTRACT_FN (cd, insn) - (cd, insn, &ex_info, insn_value, &fields, pc); /* length < 0 -> error */ if (length < 0) return length; |