aboutsummaryrefslogtreecommitdiff
path: root/include/opcode/arc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/opcode/arc.h')
-rw-r--r--include/opcode/arc.h24
1 files changed, 21 insertions, 3 deletions
diff --git a/include/opcode/arc.h b/include/opcode/arc.h
index a98a2d6..7cd78e4 100644
--- a/include/opcode/arc.h
+++ b/include/opcode/arc.h
@@ -77,15 +77,19 @@ typedef enum
/* Flags class. */
typedef enum
{
- F_CLASS_NONE,
+ F_CLASS_NONE = 0,
/* At most one flag from the set of flags can appear in the
instruction. */
- F_CLASS_OPTIONAL,
+ F_CLASS_OPTIONAL = (1 << 0),
/* Exactly one from from the set of flags must appear in the
instruction. */
- F_CLASS_REQUIRED,
+ F_CLASS_REQUIRED = (1 << 1),
+
+ /* The conditional code can be extended over the standard variants
+ via .extCondCode pseudo-op. */
+ F_CLASS_EXTEND = (1 << 2)
} flag_class_t;
/* The opcode table is an array of struct arc_opcode. */
@@ -132,12 +136,18 @@ struct arc_opcode
extern const struct arc_opcode arc_opcodes[];
/* CPU Availability. */
+#define ARC_OPCODE_NONE 0x0000
#define ARC_OPCODE_ARC600 0x0001 /* ARC 600 specific insns. */
#define ARC_OPCODE_ARC700 0x0002 /* ARC 700 specific insns. */
#define ARC_OPCODE_ARCv2EM 0x0004 /* ARCv2 EM specific insns. */
#define ARC_OPCODE_ARCv2HS 0x0008 /* ARCv2 HS specific insns. */
#define ARC_OPCODE_NPS400 0x0010 /* NPS400 specific insns. */
+/* CPU combi. */
+#define ARC_OPCODE_ARCALL (ARC_OPCODE_ARC600 | ARC_OPCODE_ARC700 \
+ | ARC_OPCODE_ARCv2EM | ARC_OPCODE_ARCv2HS)
+#define ARC_OPCODE_ARCFPX (ARC_OPCODE_ARC700 | ARC_OPCODE_ARCv2EM)
+
/* CPU extensions. */
#define ARC_EA 0x0001
#define ARC_CD 0x0001 /* Mutual exclusive with EA. */
@@ -406,6 +416,11 @@ struct arc_aux_reg
/* Register address. */
int address;
+ /* One bit flags for the opcode. These are primarily used to
+ indicate specific processors and environments support the
+ instructions. */
+ unsigned cpu;
+
/* AUX register subclass. */
insn_subclass_t subclass;
@@ -503,6 +518,9 @@ extern const unsigned arc_num_relax_opcodes;
#define ARC_SUFFIX_COND (1 << 1)
#define ARC_SUFFIX_FLAG (1 << 2)
+#define ARC_REGISTER_READONLY (1 << 0)
+#define ARC_REGISTER_WRITEONLY (1 << 1)
+#define ARC_REGISTER_NOSHORT_CUT (1 << 2)
/* Constants needed to initialize extension instructions. */
extern const unsigned char flags_none[MAX_INSN_FLGS + 1];