#include #include "a64instruction_global.h" #include "a64instruction_DP.h" // Denotes the type of data processing operation typedef enum { a64inst_DPI_ARITHM, a64inst_DPI_WIDEMOV } a64inst_DPIOpType; // Denotes the type of wide move operations supported by the architecture typedef enum { a64inst_MOVN = 0, a64inst_UNDEFINED = 1, a64inst_MOVZ = 2, a64inst_MOVK = 3 } a64inst_wideMovOp; // Holds data specific to arithmetic immediate data processing instructions typedef struct { bool shiftImmediate; uint16_t immediate; a64inst_regSpecifier src; } a64inst_DPImmediate_ArithmData; // Holds data specific to wide move immediate data processing instructions typedef struct { uint8_t shiftScalar; uint16_t immediate; } a64inst_DPImmediate_WideMovData; // Holds data for immediate data processing instructions typedef struct { a64inst_regType regType; a64inst_DPIOpType DPIOpType; unsigned int processOp; union { a64inst_DPImmediate_ArithmData arithmData; a64inst_DPImmediate_WideMovData wideMovData; } processOpData; a64inst_regSpecifier dest; } a64inst_DPImmediateData;