/* * opcode.h * $Id: opcode.h,v 1.7 2003/10/27 09:46:07 mah Exp $ * Christoph Berg * * 010811 */ // instruction formats from [MP00] pg 520 #define OPCODE(x) (((x) >> 26) & 0x3f) #define RS1(x) (((x) >> 21) & 0x1f) #define RS2(x) (((x) >> 16) & 0x1f) #define RD_I(x) (((x) >> 16) & 0x1f) #define RD_R(x) (((x) >> 11) & 0x1f) #define SA(x) (((x) >> 6) & 0x1f) #define FUNC(x) ((x) & 0x3f) #define IMM_I(x) (((x) << 16) >> 16) // sign-extended #define IMM_J(x) (((x) << 6) >> 6) // sign-extended #define FMT_FR(x) (((x) >> 6) & 0x07) // J type ([MP00] pg 521) #define OP_J 0x02 #define OP_JAL 0x03 #define OP_TRAP 0x3e #define OP_RFE 0x3f // I type ([MP00] pg 523) #define OP_LB 0x20 #define OP_LH 0x21 #define OP_LW 0x23 #define OP_LBU 0x24 #define OP_LHU 0x25 #define OP_SB 0x28 #define OP_SH 0x29 #define OP_SW 0x2b #define OP_ADDIO 0x08 #define OP_ADDI 0x09 #define OP_SUBIO 0x0a #define OP_SUBI 0x0b #define OVF(x) ((x) & 0x01) #define OP_ANDI 0x0c #define OP_ORI 0x0d #define OP_XORI 0x0e #define OP_LHGI 0x0f #define OP_CLRI 0x18 #define OP_SGRI 0x19 #define OP_SEQI 0x1a #define OP_SGEI 0x1b #define OP_SLSI 0x1c #define OP_SNEI 0x1d #define OP_SLEI 0x1e #define OP_SETI 0x1f #define OP_BEQZ 0x04 #define OP_BNEZ 0x05 #define OP_JR 0x16 #define OP_JALR 0x17 // FI type ([MP00] pg 525) #define OP_LOAD_S 0x31 #define OP_LOAD_D 0x35 #define OP_STORE_S 0x39 #define OP_STORE_D 0x3d #define OP_FBEQZ 0x06 #define OP_FBNEZ 0x07 // R type ([MP00] pg 522) #define OP_R 0x00 #define R_SLLI 0x00 #define R_SRLI 0x02 #define R_SRAI 0x03 #define R_SLL 0x04 #define R_SRL 0x06 #define R_SRA 0x07 #define R_ADDO 0x20 #define R_ADD 0x21 #define R_SUBO 0x22 #define R_SUB 0x23 #define R_AND 0x24 #define R_OR 0x25 #define R_XOR 0x26 #define R_LHG 0x27 #define R_CLR 0x28 #define R_SGR 0x29 #define R_SEQ 0x2a #define R_SGE 0x2b #define R_SLS 0x2c #define R_SNE 0x2d #define R_SLE 0x2e #define R_SET 0x2f #define R_MOVS2I 0x10 #define R_MOVI2S 0x11 // FR type ([MP00] pg 526) #define OP_FR 0x11 #define FR_FADD 0x00 #define FR_FSUB 0x01 #define FR_FMUL 0x02 #define FR_FDIV 0x03 #define FR_FNEG 0x04 #define FR_FABS 0x05 #define FR_FSQT 0x06 #define FR_FREM 0x07 #define FR_FC_CON 0x30 #define FR_FC_CON_MASK 0x30 #define FR_FC_CON_OP(x) (OPCODE(x) & 0x0f) #define FR_FMOV 0x08 #define FR_MF2I 0x09 #define FR_MI2F 0x0a #define FR_CVT_S 0x20 #define FR_CVT_D 0x21 #define FR_CVT_I 0x24 #define FMT_S 0x0 #define FMT_D 0x1 #define FMT_I 0x4 #define FR_EQ 0x32 #define FR_NE 0x3d #define FR_LT 0x34 #define FR_GT 0x38 #define FR_LE 0x36 #define FR_GE 0x3a