ARMv8/src/decode.h

97 lines
2.9 KiB
C

#include "global.h"
#include "a64instruction/a64instruction.h"
#define HALT_WORD 0x8a000000
#define TYPE_ID_LSB 26
#define TYPE_ID_MSB 29
#define DP_IMM_ID 4
#define BRANCH_ID 5
#define DP_REG_LSB 25
#define DP_REG_MSB 26
#define DP_WIDTH_LSB 31
#define DP_WIDTH_MSB 32
#define DP_OP_LSB 29
#define DP_OP_MSB 31
#define DP_DEST_LSB 0
#define DP_DEST_MSB 5
#define DP_IMM_OPTYPE_LSB 23
#define DP_IMM_OPTYPE_MSB 26
#define DP_IMM_OPTYPE_ARITHM 2
#define DP_IMM_OPTYPE_WIDEMOV 5
#define DP_IMM_ARITHM_SHIFTFLAG_LSB 22
#define DP_IMM_ARITHM_SHIFTFLAG_MSB 23
#define DP_IMM_ARITHM_IMMVAL_LSB 10
#define DP_IMM_ARITHM_IMMVAL_MSB 22
#define DP_IMM_ARITHM_DEST_LSB 5
#define DP_IMM_ARITHM_DEST_MSB 10
#define DP_IMM_WIDEMOV_SHIFTSCALAR_LSB 21
#define DP_IMM_WIDEMOV_SHIFTSCALAR_MSB 23
#define DP_IMM_WIDEMOV_IMMVAL_LSB 5
#define DP_IMM_WIDEMOV_IMMVAL_MSB 21
#define DP_REG_SRC1_LSB 5
#define DP_REG_SRC1_MSB 10
#define DP_REG_SRC2_LSB 16
#define DP_REG_SRC2_MSB 21
#define DP_REG_OPTYPE_LSB 28
#define DP_REG_OPTYPE_MSB 29
#define DP_REG_ARITHMLOGIC_ARITHMFLAG_LSB 24
#define DP_REG_ARITHMLOGIC_ARITHMFLAG_MSB 25
#define DP_REG_ARITHMLOGIC_SHIFTTYPE_LSB 22
#define DP_REG_ARITHMLOGIC_SHIFTTYPE_MSB 24
#define DP_REG_ARITHMLOGIC_NEGSRC2FLAG_LSB 21
#define DP_REG_ARITHMLOGIC_NEGSRC2FLAG_MSB 22
#define DP_REG_ARITHMLOGIC_SHIFTAMOUNT_LSB 10
#define DP_REG_ARITHMLOGIC_SHIFTAMOUNT_MSB 16
#define DP_REG_MULTIPLY_SUMMAND_LSB 10
#define DP_REG_MULTIPLY_SUMMAND_MSB 15
#define DP_REG_MULTIPLY_NEGPROD_LSB 15
#define DP_REG_MULTIPLY_NEGPROD_MSB 16
// Defines the values for fields used for arithmetic/logic DPR instructions
// that are necessary to indicate a multiplication instruction
#define DP_REG_MULTIPLY_PROCESSOP 0
#define DP_REG_MULTIPLY_ARITHMFLAG 1
#define DP_REG_MULTIPLY_SHIFTTYPE 0
#define DP_REG_MULTIPLY_NEGSRC2FLAG 0
#define SDT_OPTYPE_FLAG_LSB 31
#define SDT_OPTYPE_FLAG_MSB 32
#define SDT_REGTYPE_FLAG_LSB 30
#define SDT_REGTYPE_FLAG_MSB 31
#define SDT_TARGET_REG_LSB 0
#define SDT_TARGET_REG_MSB 5
#define SDT_BASE_REG_LSB 5
#define SDT_BASE_REG_MSB 10
#define SDT_OFFSET_LSB 10
#define SDT_OFFSET_MSB 22
#define SDT_TRANSFER_TYPE_LSB 22
#define SDT_TRANSFER_TYPE_MSB 23
#define SDT_UNSIGNED_FLAG_LSB 24
#define SDT_UNSIGNED_FLAG_MSB 25
#define SDT_REGISTER_FLAG_LSB 21
#define SDT_REGISTER_FLAG_MSB 22
#define SDT_REGISTER_REG_LSB 16
#define SDT_REGISTER_REG_MSB 21
#define SDT_INDEXED_ADDRMODE_LSB 11
#define SDT_INDEXED_ADDRMODE_MSB 12
#define SDT_INDEXED_OFFSET_LSB 12
#define SDT_INDEXED_OFFSET_MSB 21
#define SDT_LOAD_LITERAL_OFFSET_LSB 5
#define SDT_LOAD_LITERAL_OFFSET_MSB 24
#define BRANCH_TYPE_LSB 30
#define BRANCH_TYPE_MSB 32
#define BRANCH_UNCONDITIONAL_OFFSET_LSB 0
#define BRANCH_UNCONDITIONAL_OFFSET_MSB 26
#define BRANCH_REGISTER_SRC_LSB 5
#define BRANCH_REGISTER_SRC_MSB 10
#define BRANCH_CONDITIONAL_COND_LSB 0
#define BRANCH_CONDITIONAL_COND_MSB 4
#define BRANCH_CONDITIONAL_OFFSET_LSB 5
#define BRANCH_CONDITIONAL_OFFSET_MSB 24