|
@@ -196,3 +196,85 @@ TABLE 5
|
|
|
|
|
|
/* Tests for transfer length */
|
|
|
#define TRANSFER_SINGLE 0x00000000
|
|
|
+#define TRANSFER_DOUBLE 0x00008000
|
|
|
+#define TRANSFER_EXTENDED 0x00400000
|
|
|
+#define TRANSFER_PACKED MASK_TRANSFER_LENGTH
|
|
|
+
|
|
|
+/* Get the coprocessor number from the opcode. */
|
|
|
+#define getCoprocessorNumber(opcode) ((opcode & MASK_COPROCESSOR) >> 8)
|
|
|
+
|
|
|
+/* Get the offset from the opcode. */
|
|
|
+#define getOffset(opcode) (opcode & MASK_OFFSET)
|
|
|
+
|
|
|
+/* Tests for specific data transfer load/store opcodes. */
|
|
|
+#define TEST_OPCODE(opcode,mask) (((opcode) & (mask)) == (mask))
|
|
|
+
|
|
|
+#define LOAD_OP(opcode) TEST_OPCODE((opcode),MASK_CPDT | BIT_LOAD)
|
|
|
+#define STORE_OP(opcode) ((opcode & (MASK_CPDT | BIT_LOAD)) == MASK_CPDT)
|
|
|
+
|
|
|
+#define LDF_OP(opcode) (LOAD_OP(opcode) && (getCoprocessorNumber(opcode) == 1))
|
|
|
+#define LFM_OP(opcode) (LOAD_OP(opcode) && (getCoprocessorNumber(opcode) == 2))
|
|
|
+#define STF_OP(opcode) (STORE_OP(opcode) && (getCoprocessorNumber(opcode) == 1))
|
|
|
+#define SFM_OP(opcode) (STORE_OP(opcode) && (getCoprocessorNumber(opcode) == 2))
|
|
|
+
|
|
|
+#define PREINDEXED(opcode) ((opcode & BIT_PREINDEX) != 0)
|
|
|
+#define POSTINDEXED(opcode) ((opcode & BIT_PREINDEX) == 0)
|
|
|
+#define BIT_UP_SET(opcode) ((opcode & BIT_UP) != 0)
|
|
|
+#define BIT_UP_CLEAR(opcode) ((opcode & BIT_DOWN) == 0)
|
|
|
+#define WRITE_BACK(opcode) ((opcode & BIT_WRITE_BACK) != 0)
|
|
|
+#define LOAD(opcode) ((opcode & BIT_LOAD) != 0)
|
|
|
+#define STORE(opcode) ((opcode & BIT_LOAD) == 0)
|
|
|
+
|
|
|
+/*
|
|
|
+===
|
|
|
+=== Definitions for arithmetic instructions
|
|
|
+===
|
|
|
+*/
|
|
|
+/* bit masks */
|
|
|
+#define BIT_MONADIC 0x00008000
|
|
|
+#define BIT_CONSTANT 0x00000008
|
|
|
+
|
|
|
+#define CONSTANT_FM(opcode) ((opcode & BIT_CONSTANT) != 0)
|
|
|
+#define MONADIC_INSTRUCTION(opcode) ((opcode & BIT_MONADIC) != 0)
|
|
|
+
|
|
|
+/* instruction identification masks */
|
|
|
+#define MASK_CPDO 0x0e000000 /* arithmetic opcode */
|
|
|
+#define MASK_ARITHMETIC_OPCODE 0x00f08000
|
|
|
+#define MASK_DESTINATION_SIZE 0x00080080
|
|
|
+
|
|
|
+/* dyadic arithmetic opcodes. */
|
|
|
+#define ADF_CODE 0x00000000
|
|
|
+#define MUF_CODE 0x00100000
|
|
|
+#define SUF_CODE 0x00200000
|
|
|
+#define RSF_CODE 0x00300000
|
|
|
+#define DVF_CODE 0x00400000
|
|
|
+#define RDF_CODE 0x00500000
|
|
|
+#define POW_CODE 0x00600000
|
|
|
+#define RPW_CODE 0x00700000
|
|
|
+#define RMF_CODE 0x00800000
|
|
|
+#define FML_CODE 0x00900000
|
|
|
+#define FDV_CODE 0x00a00000
|
|
|
+#define FRD_CODE 0x00b00000
|
|
|
+#define POL_CODE 0x00c00000
|
|
|
+/* 0x00d00000 is an invalid dyadic arithmetic opcode */
|
|
|
+/* 0x00e00000 is an invalid dyadic arithmetic opcode */
|
|
|
+/* 0x00f00000 is an invalid dyadic arithmetic opcode */
|
|
|
+
|
|
|
+/* monadic arithmetic opcodes. */
|
|
|
+#define MVF_CODE 0x00008000
|
|
|
+#define MNF_CODE 0x00108000
|
|
|
+#define ABS_CODE 0x00208000
|
|
|
+#define RND_CODE 0x00308000
|
|
|
+#define SQT_CODE 0x00408000
|
|
|
+#define LOG_CODE 0x00508000
|
|
|
+#define LGN_CODE 0x00608000
|
|
|
+#define EXP_CODE 0x00708000
|
|
|
+#define SIN_CODE 0x00808000
|
|
|
+#define COS_CODE 0x00908000
|
|
|
+#define TAN_CODE 0x00a08000
|
|
|
+#define ASN_CODE 0x00b08000
|
|
|
+#define ACS_CODE 0x00c08000
|
|
|
+#define ATN_CODE 0x00d08000
|
|
|
+#define URD_CODE 0x00e08000
|
|
|
+#define NRM_CODE 0x00f08000
|
|
|
+
|