43 lines
1.1 KiB
C
43 lines
1.1 KiB
C
#include <stdbool.h>
|
|
#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;
|