diff options
author | David Edelsohn <dje.gcc@gmail.com> | 1996-02-26 18:38:33 +0000 |
---|---|---|
committer | David Edelsohn <dje.gcc@gmail.com> | 1996-02-26 18:38:33 +0000 |
commit | 110b814dbaff397a671fef550ef432a0e0921623 (patch) | |
tree | c372e01f971e87c7f467fae0d2161d4c51532c4f | |
parent | d2d7e896d50d22aef792d1f12a4a8d4db5acd0eb (diff) | |
download | gdb-110b814dbaff397a671fef550ef432a0e0921623.zip gdb-110b814dbaff397a671fef550ef432a0e0921623.tar.gz gdb-110b814dbaff397a671fef550ef432a0e0921623.tar.bz2 |
* config/tc-sparc.c (sparc_ip): Print all architectures that support
the insn on mismatch.
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-sparc.c | 30 |
2 files changed, 30 insertions, 5 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 77c1dc0..cdec488 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +Mon Feb 26 10:34:10 1996 Doug Evans <dje@charmed.cygnus.com> + + * config/tc-sparc.c (sparc_ip): Print all architectures that support + the insn on mismatch. + Fri Feb 23 21:44:39 1996 Rob Savoye <rob@chinadoll.cygnus.com> * configure.in: Add support for a29-coff. diff --git a/gas/config/tc-sparc.c b/gas/config/tc-sparc.c index ad8248b..1c241e6 100644 --- a/gas/config/tc-sparc.c +++ b/gas/config/tc-sparc.c @@ -1828,16 +1828,36 @@ sparc_ip (str) current_architecture = needed_architecture; } /* Conflict. */ + /* ??? This seems to be a bit fragile. What if the next entry in + the opcode table is the one we want and it is supported? + It is possible to arrange the table today so that this can't + happen but what about tomorrow? */ else { - enum sparc_opcode_arch_val needed_architecture = - sparc_ffs (~ SPARC_OPCODE_SUPPORTED (max_architecture) - & needed_arch_mask); + int arch,printed_one_p = 0; + char *p; + char required_archs[SPARC_OPCODE_ARCH_MAX * 16]; + + /* Create a list of the architectures that support the insn. */ + needed_arch_mask &= ~ SPARC_OPCODE_SUPPORTED (max_architecture); + p = required_archs; + arch = sparc_ffs (needed_arch_mask); + while ((1 << arch) <= needed_arch_mask) + { + if ((1 << arch) & needed_arch_mask) + { + if (printed_one_p) + *p++ = '|'; + strcpy (p, sparc_opcode_archs[arch].name); + p += strlen (p); + printed_one_p = 1; + } + ++arch; + } - assert (needed_architecture <= SPARC_OPCODE_ARCH_MAX); as_bad ("Architecture mismatch on \"%s\".", str); as_tsktsk (" (Requires %s; requested architecture is %s.)", - sparc_opcode_archs[needed_architecture].name, + required_archs, sparc_opcode_archs[max_architecture].name); return; } |