mirror of https://github.com/xemu-project/xemu.git
target/mips: Extract FPU specific definitions to translate.h
Extract FPU specific definitions that can be used by ISA / ASE / extensions to translate.h header. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20201214183739.500368-16-f4bug@amsat.org>
This commit is contained in:
parent
8758d1b8aa
commit
57eedcf7e3
|
@ -43,7 +43,6 @@ enum {
|
|||
OPC_SPECIAL = (0x00 << 26),
|
||||
OPC_REGIMM = (0x01 << 26),
|
||||
OPC_CP0 = (0x10 << 26),
|
||||
OPC_CP1 = (0x11 << 26),
|
||||
OPC_CP2 = (0x12 << 26),
|
||||
OPC_CP3 = (0x13 << 26),
|
||||
OPC_SPECIAL2 = (0x1C << 26),
|
||||
|
@ -996,75 +995,6 @@ enum {
|
|||
OPC_WAIT = 0x20 | OPC_C0,
|
||||
};
|
||||
|
||||
/* Coprocessor 1 (rs field) */
|
||||
#define MASK_CP1(op) (MASK_OP_MAJOR(op) | (op & (0x1F << 21)))
|
||||
|
||||
/* Values for the fmt field in FP instructions */
|
||||
enum {
|
||||
/* 0 - 15 are reserved */
|
||||
FMT_S = 16, /* single fp */
|
||||
FMT_D = 17, /* double fp */
|
||||
FMT_E = 18, /* extended fp */
|
||||
FMT_Q = 19, /* quad fp */
|
||||
FMT_W = 20, /* 32-bit fixed */
|
||||
FMT_L = 21, /* 64-bit fixed */
|
||||
FMT_PS = 22, /* paired single fp */
|
||||
/* 23 - 31 are reserved */
|
||||
};
|
||||
|
||||
enum {
|
||||
OPC_MFC1 = (0x00 << 21) | OPC_CP1,
|
||||
OPC_DMFC1 = (0x01 << 21) | OPC_CP1,
|
||||
OPC_CFC1 = (0x02 << 21) | OPC_CP1,
|
||||
OPC_MFHC1 = (0x03 << 21) | OPC_CP1,
|
||||
OPC_MTC1 = (0x04 << 21) | OPC_CP1,
|
||||
OPC_DMTC1 = (0x05 << 21) | OPC_CP1,
|
||||
OPC_CTC1 = (0x06 << 21) | OPC_CP1,
|
||||
OPC_MTHC1 = (0x07 << 21) | OPC_CP1,
|
||||
OPC_BC1 = (0x08 << 21) | OPC_CP1, /* bc */
|
||||
OPC_BC1ANY2 = (0x09 << 21) | OPC_CP1,
|
||||
OPC_BC1ANY4 = (0x0A << 21) | OPC_CP1,
|
||||
OPC_BZ_V = (0x0B << 21) | OPC_CP1,
|
||||
OPC_BNZ_V = (0x0F << 21) | OPC_CP1,
|
||||
OPC_S_FMT = (FMT_S << 21) | OPC_CP1,
|
||||
OPC_D_FMT = (FMT_D << 21) | OPC_CP1,
|
||||
OPC_E_FMT = (FMT_E << 21) | OPC_CP1,
|
||||
OPC_Q_FMT = (FMT_Q << 21) | OPC_CP1,
|
||||
OPC_W_FMT = (FMT_W << 21) | OPC_CP1,
|
||||
OPC_L_FMT = (FMT_L << 21) | OPC_CP1,
|
||||
OPC_PS_FMT = (FMT_PS << 21) | OPC_CP1,
|
||||
OPC_BC1EQZ = (0x09 << 21) | OPC_CP1,
|
||||
OPC_BC1NEZ = (0x0D << 21) | OPC_CP1,
|
||||
OPC_BZ_B = (0x18 << 21) | OPC_CP1,
|
||||
OPC_BZ_H = (0x19 << 21) | OPC_CP1,
|
||||
OPC_BZ_W = (0x1A << 21) | OPC_CP1,
|
||||
OPC_BZ_D = (0x1B << 21) | OPC_CP1,
|
||||
OPC_BNZ_B = (0x1C << 21) | OPC_CP1,
|
||||
OPC_BNZ_H = (0x1D << 21) | OPC_CP1,
|
||||
OPC_BNZ_W = (0x1E << 21) | OPC_CP1,
|
||||
OPC_BNZ_D = (0x1F << 21) | OPC_CP1,
|
||||
};
|
||||
|
||||
#define MASK_CP1_FUNC(op) (MASK_CP1(op) | (op & 0x3F))
|
||||
#define MASK_BC1(op) (MASK_CP1(op) | (op & (0x3 << 16)))
|
||||
|
||||
enum {
|
||||
OPC_BC1F = (0x00 << 16) | OPC_BC1,
|
||||
OPC_BC1T = (0x01 << 16) | OPC_BC1,
|
||||
OPC_BC1FL = (0x02 << 16) | OPC_BC1,
|
||||
OPC_BC1TL = (0x03 << 16) | OPC_BC1,
|
||||
};
|
||||
|
||||
enum {
|
||||
OPC_BC1FANY2 = (0x00 << 16) | OPC_BC1ANY2,
|
||||
OPC_BC1TANY2 = (0x01 << 16) | OPC_BC1ANY2,
|
||||
};
|
||||
|
||||
enum {
|
||||
OPC_BC1FANY4 = (0x00 << 16) | OPC_BC1ANY4,
|
||||
OPC_BC1TANY4 = (0x01 << 16) | OPC_BC1ANY4,
|
||||
};
|
||||
|
||||
#define MASK_CP2(op) (MASK_OP_MAJOR(op) | (op & (0x1F << 21)))
|
||||
|
||||
enum {
|
||||
|
|
|
@ -52,6 +52,77 @@ typedef struct DisasContext {
|
|||
/* MIPS major opcodes */
|
||||
#define MASK_OP_MAJOR(op) (op & (0x3F << 26))
|
||||
|
||||
#define OPC_CP1 (0x11 << 26)
|
||||
|
||||
/* Coprocessor 1 (rs field) */
|
||||
#define MASK_CP1(op) (MASK_OP_MAJOR(op) | (op & (0x1F << 21)))
|
||||
|
||||
/* Values for the fmt field in FP instructions */
|
||||
enum {
|
||||
/* 0 - 15 are reserved */
|
||||
FMT_S = 16, /* single fp */
|
||||
FMT_D = 17, /* double fp */
|
||||
FMT_E = 18, /* extended fp */
|
||||
FMT_Q = 19, /* quad fp */
|
||||
FMT_W = 20, /* 32-bit fixed */
|
||||
FMT_L = 21, /* 64-bit fixed */
|
||||
FMT_PS = 22, /* paired single fp */
|
||||
/* 23 - 31 are reserved */
|
||||
};
|
||||
|
||||
enum {
|
||||
OPC_MFC1 = (0x00 << 21) | OPC_CP1,
|
||||
OPC_DMFC1 = (0x01 << 21) | OPC_CP1,
|
||||
OPC_CFC1 = (0x02 << 21) | OPC_CP1,
|
||||
OPC_MFHC1 = (0x03 << 21) | OPC_CP1,
|
||||
OPC_MTC1 = (0x04 << 21) | OPC_CP1,
|
||||
OPC_DMTC1 = (0x05 << 21) | OPC_CP1,
|
||||
OPC_CTC1 = (0x06 << 21) | OPC_CP1,
|
||||
OPC_MTHC1 = (0x07 << 21) | OPC_CP1,
|
||||
OPC_BC1 = (0x08 << 21) | OPC_CP1, /* bc */
|
||||
OPC_BC1ANY2 = (0x09 << 21) | OPC_CP1,
|
||||
OPC_BC1ANY4 = (0x0A << 21) | OPC_CP1,
|
||||
OPC_BZ_V = (0x0B << 21) | OPC_CP1,
|
||||
OPC_BNZ_V = (0x0F << 21) | OPC_CP1,
|
||||
OPC_S_FMT = (FMT_S << 21) | OPC_CP1,
|
||||
OPC_D_FMT = (FMT_D << 21) | OPC_CP1,
|
||||
OPC_E_FMT = (FMT_E << 21) | OPC_CP1,
|
||||
OPC_Q_FMT = (FMT_Q << 21) | OPC_CP1,
|
||||
OPC_W_FMT = (FMT_W << 21) | OPC_CP1,
|
||||
OPC_L_FMT = (FMT_L << 21) | OPC_CP1,
|
||||
OPC_PS_FMT = (FMT_PS << 21) | OPC_CP1,
|
||||
OPC_BC1EQZ = (0x09 << 21) | OPC_CP1,
|
||||
OPC_BC1NEZ = (0x0D << 21) | OPC_CP1,
|
||||
OPC_BZ_B = (0x18 << 21) | OPC_CP1,
|
||||
OPC_BZ_H = (0x19 << 21) | OPC_CP1,
|
||||
OPC_BZ_W = (0x1A << 21) | OPC_CP1,
|
||||
OPC_BZ_D = (0x1B << 21) | OPC_CP1,
|
||||
OPC_BNZ_B = (0x1C << 21) | OPC_CP1,
|
||||
OPC_BNZ_H = (0x1D << 21) | OPC_CP1,
|
||||
OPC_BNZ_W = (0x1E << 21) | OPC_CP1,
|
||||
OPC_BNZ_D = (0x1F << 21) | OPC_CP1,
|
||||
};
|
||||
|
||||
#define MASK_CP1_FUNC(op) (MASK_CP1(op) | (op & 0x3F))
|
||||
#define MASK_BC1(op) (MASK_CP1(op) | (op & (0x3 << 16)))
|
||||
|
||||
enum {
|
||||
OPC_BC1F = (0x00 << 16) | OPC_BC1,
|
||||
OPC_BC1T = (0x01 << 16) | OPC_BC1,
|
||||
OPC_BC1FL = (0x02 << 16) | OPC_BC1,
|
||||
OPC_BC1TL = (0x03 << 16) | OPC_BC1,
|
||||
};
|
||||
|
||||
enum {
|
||||
OPC_BC1FANY2 = (0x00 << 16) | OPC_BC1ANY2,
|
||||
OPC_BC1TANY2 = (0x01 << 16) | OPC_BC1ANY2,
|
||||
};
|
||||
|
||||
enum {
|
||||
OPC_BC1FANY4 = (0x00 << 16) | OPC_BC1ANY4,
|
||||
OPC_BC1TANY4 = (0x01 << 16) | OPC_BC1ANY4,
|
||||
};
|
||||
|
||||
void generate_exception(DisasContext *ctx, int excp);
|
||||
void generate_exception_err(DisasContext *ctx, int excp, int err);
|
||||
void generate_exception_end(DisasContext *ctx, int excp);
|
||||
|
|
Loading…
Reference in New Issue