48 lines
1.1 KiB
C
48 lines
1.1 KiB
C
#include <stdbool.h>
|
|
#include "a64instruction_global.h"
|
|
#include "global.h"
|
|
|
|
typedef enum {
|
|
a64inst_SINGLE_TRANSFER_SINGLE_DATA_TRANSFER = 1,
|
|
a64inst_SINGLE_TRANSFER_LOAD_LITERAL = 0
|
|
} a64inst_SingleTransferType;
|
|
|
|
typedef enum {
|
|
a64inst_STORE,
|
|
a64inst_LOAD
|
|
} a64inst_TransferType;
|
|
|
|
typedef enum {
|
|
a64inst_REGISTER_OFFSET = 2,
|
|
a64inst_PRE_INDEXED = 1,
|
|
a64inst_POST_INDEXED = 0,
|
|
a64inst_UNSIGNED_OFFSET = 3
|
|
} a64inst_AddressingMode;
|
|
|
|
typedef struct {
|
|
a64inst_TransferType transferType;
|
|
a64inst_AddressingMode addressingMode;
|
|
|
|
union {
|
|
a64inst_regSpecifier offsetReg;
|
|
uint16_t indexedOffset;
|
|
uint16_t unsignedOffset;
|
|
} a64inst_addressingModeData;
|
|
|
|
a64inst_regSpecifier base;
|
|
} a64inst_SingleDataTransferData;
|
|
|
|
typedef struct {
|
|
uint32_t offset;
|
|
} a64inst_LoadLiteralData;
|
|
|
|
typedef struct {
|
|
a64inst_SingleTransferType SingleTransferOpType;
|
|
a64inst_regType regType;
|
|
a64inst_regSpecifier target;
|
|
union {
|
|
a64inst_SingleDataTransferData singleDataTransferData;
|
|
a64inst_LoadLiteralData loadLiteralData;
|
|
} processOpData;
|
|
} a64inst_SingleTransferData;
|