6502/vasm/cpus/vidcore/cpu.h

143 lines
2.2 KiB
C

/* cpu.h VideoCore IV cpu-description header-file */
/* (c) in 2013 by Volker Barthelmann */
/* maximum number of operands in one mnemonic */
#define MAX_OPERANDS 4
/* maximum number of mnemonic-qualifiers per mnemonic */
#define MAX_QUALIFIERS 2
/* maximum number of additional command-line-flags for this cpu */
/* data type to represent a target-address */
typedef int32_t taddr;
typedef uint32_t utaddr;
#define LITTLEENDIAN 1
#define BIGENDIAN 0
#define VASM_CPU_VC4 1
/* minimum instruction alignment */
#define INST_ALIGN 2
/* default alignment for n-bit data */
#define DATA_ALIGN(n) ((n)<=8?1:(n<=16?2:4))
/* operand class for n-bit data definitions */
#define DATA_OPERAND(n) OP_ABS
#define cc reg
/* type to store each operand */
typedef struct {
int type;
int reg;
int dreg;
long vecmod;
expr *offset;
} operand;
/* vecmod:
0-15: f_i or add-reg for vload/vstore
16-18: rep
20: setf
for 80-bit 'A' registers, 'dreg' is formatted as
0-5: flags
6-9: ra_x
*/
/* operand-types */
enum {
OP_REG=1,
OP_SREG,
OP_PC,
OP_LR,
OP_MREG,
OP_VREG,
OP_VREGA80,
OP_VREGM,
OP_VREGMM,
OP_ABS,
OP_REL,
OP_IMM4,
OP_IMM5,
OP_IMM6,
OP_IMM32M,
OP_IMM32,
OP_REGIND,
OP_IMMINDPC,
OP_IMMINDSP,
OP_IMMINDSD,
OP_IMMINDR0,
OP_IMMINDS,
OP_IMMIND,
OP_PREDEC,
OP_POSTINC,
OP_IND,
OP_VIND,
OP_DISP5,
OP_DISP12,
OP_DISP16,
OP_DISP27,
};
#define CPU_VC4 1
#define CPU_ALL (-1)
enum {
EN_ARITHR16,
EN_ARITHI16,
EN_FIX16,
EN_LEA16,
EN_IBRANCH16,
EN_RBRANCH16,
EN_TABLE16,
EN_MREG16,
EN_MEMSTACK16,
EN_MEMREG16,
EN_MEMDISP16,
EN_CONDR32,
EN_CONDI32,
EN_RBRANCH32,
EN_ADDCMPB32,
EN_MEMREG32,
EN_MEMDISP32,
EN_MEMPREDEC,
EN_MEMPOSTINC,
EN_MEM12DISP32,
EN_MEM16DISP32,
EN_FUNARY32,
EN_ARITHR32,
EN_ARITHI32,
EN_LEA48,
EN_MEM48,
EN_ARITHI48,
EN_ADD48,
EN_VLOAD48,
EN_VSTORE48,
EN_VREAD48,
EN_VWRITE48,
EN_VREADI48,
EN_VWRITEI48,
EN_VARITHR48,
EN_VARITHI48,
EN_ADDCMPB64,
EN_VLOAD80,
EN_VSTORE80,
EN_VREAD80,
EN_VWRITE80,
EN_VREADI80,
EN_VWRITEI80,
EN_VARITHR80,
EN_VARITHI80,
};
typedef struct {
unsigned int encoding;
unsigned int code;
unsigned int available;
} mnemonic_extension;