ARMv8/src/a64instruction/a64instruction_SingleTransfer.h
2024-06-12 19:28:48 +01:00

47 lines
1.1 KiB
C

#include <stdbool.h>
#include "a64instruction_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;