aboutsummaryrefslogtreecommitdiff
path: root/include/opcode
diff options
context:
space:
mode:
authorDavid Edelsohn <dje.gcc@gmail.com>1996-01-25 11:09:06 +0000
committerDavid Edelsohn <dje.gcc@gmail.com>1996-01-25 11:09:06 +0000
commit7484896ba2414503c82326649f275180f31c12d7 (patch)
tree4e87fd7ae17f8aa643bb5c62d2018442987ee0ac /include/opcode
parenteb47fd9d71afb93ce0753a5bf3ceb4efcfcc21ff (diff)
downloadgdb-7484896ba2414503c82326649f275180f31c12d7.zip
gdb-7484896ba2414503c82326649f275180f31c12d7.tar.gz
gdb-7484896ba2414503c82326649f275180f31c12d7.tar.bz2
* sparc.h (enum sparc_opcode_arch_val): Replaces sparc_architecture.
(SPARC_OPCODE_CONFLICT_P): Renamed from ARCHITECTURES_CONFLICT_P. (bfd_* defines): Delete. (sparc_opcode_archs): Replaces architecture_pname. (sparc_opcode_lookup_arch): Declare. (NUMOPCODES): Delete.
Diffstat (limited to 'include/opcode')
-rw-r--r--include/opcode/sparc.h59
1 files changed, 35 insertions, 24 deletions
diff --git a/include/opcode/sparc.h b/include/opcode/sparc.h
index 04df2d8..948f2ff 100644
--- a/include/opcode/sparc.h
+++ b/include/opcode/sparc.h
@@ -27,31 +27,44 @@ Boston, MA 02111-1307, USA. */
instruction's name rather than the args. This would make gas faster, pinsn
slower, but would mess up some macros a bit. xoxorich. */
-#define sparc_architecture bfd_sparc_architecture
-#define architecture_pname bfd_sparc_architecture_pname
-#define sparc_opcode bfd_sparc_opcode
-#define sparc_opcodes bfd_sparc_opcodes
+/* List of instruction sets variations.
+ These values are such that each element is either a superset of a
+ preceding one or they conflict in which case SPARC_OPCODE_CONFLICT_P
+ returns non-zero.
+ The values are indices into `sparc_opcode_archs' defined in sparc-opc.c.
+ Don't change this without updating sparc-opc.c. */
+
+enum sparc_opcode_arch_val {
+ SPARC_OPCODE_ARCH_V6 = 0,
+ SPARC_OPCODE_ARCH_V7,
+ SPARC_OPCODE_ARCH_V8,
+ SPARC_OPCODE_ARCH_SPARCLITE,
+ /* v9 variants must appear last */
+ SPARC_OPCODE_ARCH_V9,
+ SPARC_OPCODE_ARCH_V9A, /* v9 with ultrasparc additions */
+ SPARC_OPCODE_ARCH_BAD /* error return from sparc_opcode_lookup_arch */
+};
-/*
- * Structure of an opcode table entry.
- * This enumerator must parallel the architecture_pname array
- * in opcodes/sparc-opc.c.
- */
-enum sparc_architecture {
- v6 = 0,
- v7,
- v8,
- sparclite,
- v9,
- v9a /* v9 with ultrasparc additions */
+/* The highest architecture in the table. */
+#define SPARC_OPCODE_ARCH_MAX (SPARC_OPCODE_ARCH_BAD - 1)
+
+/* Table of cpu variants. */
+
+struct sparc_opcode_arch {
+ const char *name;
+ int conflicts;
};
-extern const char *architecture_pname[];
+extern const struct sparc_opcode_arch sparc_opcode_archs[];
+
+extern enum sparc_opcode_arch_val sparc_opcode_lookup_arch ();
-/* Sparclite and v9 are both supersets of v8; we can't bump between them. */
+/* Non-zero if ARCH1 conflicts with ARCH2. */
-#define ARCHITECTURES_CONFLICT_P(ARCH1, ARCH2) \
-((ARCH1) == sparclite && ((ARCH2) == v9 || (ARCH2) == v9a))
+#define SPARC_OPCODE_CONFLICT_P(ARCH1, ARCH2) \
+((1 << (ARCH1)) & sparc_opcode_archs[ARCH2].conflicts)
+
+/* Structure of an opcode table entry. */
struct sparc_opcode {
const char *name;
@@ -60,7 +73,7 @@ struct sparc_opcode {
const char *args;
/* This was called "delayed" in versions before the flags. */
char flags;
- enum sparc_architecture architecture;
+ enum sparc_opcode_arch_val architecture;
};
#define F_DELAYED 1 /* Delayed branch */
@@ -175,9 +188,7 @@ The following chars are unused: (note: ,[] are used as punctuation)
#define RS2_G0 RS2(~0)
extern struct sparc_opcode sparc_opcodes[];
-extern const int bfd_sparc_num_opcodes;
-
-#define NUMOPCODES bfd_sparc_num_opcodes
+extern const int sparc_num_opcodes;
int sparc_encode_asi ();
char *sparc_decode_asi ();