#include #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;