48 lines
1.3 KiB
C
48 lines
1.3 KiB
C
/* cpu.h TR3200 cpu-description header-file */
|
|
/* (c) in 2014 by Luis Panadero Guardeno */
|
|
|
|
#define LITTLEENDIAN 1
|
|
#define BIGENDIAN 0
|
|
#define VASM_CPU_TR3200 1
|
|
|
|
/* maximum number of operands in one mnemonic */
|
|
#define MAX_OPERANDS 3
|
|
|
|
/* maximum number of mnemonic-qualifiers per mnemonic */
|
|
#define MAX_QUALIFIERS 0
|
|
|
|
/* 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;
|
|
|
|
/* minimum instruction alignment */
|
|
#define INST_ALIGN 4
|
|
|
|
/* default alignment for n-bit data */
|
|
#define DATA_ALIGN(n) ((n)<=8 ? 1 : ((n)<=16 ? 2 : 4))
|
|
|
|
|
|
/* type to store each operand */
|
|
typedef struct {
|
|
int16_t type; /* type of operand from mnemonic.operand_type */
|
|
uint8_t reg; /* Register number if there is one */
|
|
expr *value; /* single register, immed. val. or branch loc.*/
|
|
} operand;
|
|
|
|
/* operand types */
|
|
#define NO_OP (0)
|
|
#define OP_GPR (1) /* %r0 to %r15 or %y, %bp %sp, %ia %flags */
|
|
#define OP_IMM (2)
|
|
|
|
/* operand class for n-bit data definitions */
|
|
#define DATA_OPERAND(n) OP_IMM
|
|
|
|
#define CPU_ALL (-1)
|
|
|
|
typedef struct {
|
|
unsigned char opcode; /* OpCode */
|
|
unsigned char rn_pos; /* Position of Rn */
|
|
unsigned char available; /* CPU variants were is available */
|
|
} mnemonic_extension;
|