153899Smckusick /*- 2*63306Sbostic * Copyright (c) 1992, 1993 3*63306Sbostic * The Regents of the University of California. All rights reserved. 453899Smckusick * 553899Smckusick * This code is derived from software contributed to Berkeley by 653899Smckusick * Ralph Campbell. 753899Smckusick * 853899Smckusick * %sccs.include.redist.c% 953899Smckusick * 10*63306Sbostic * @(#)mips_opcode.h 8.1 (Berkeley) 06/11/93 1153899Smckusick */ 1253899Smckusick 1353899Smckusick /* 1453899Smckusick * Define the instruction formats and opcode values for the 1553899Smckusick * MIPS instruction set. 1653899Smckusick */ 1753899Smckusick 1853899Smckusick /* 1953899Smckusick * Define the instruction formats. 2053899Smckusick */ 2153899Smckusick typedef union { 2253899Smckusick unsigned word; 2353899Smckusick 2453899Smckusick #if BYTE_ORDER == LITTLE_ENDIAN 2553899Smckusick struct { 2653899Smckusick unsigned imm: 16; 2753899Smckusick unsigned rt: 5; 2853899Smckusick unsigned rs: 5; 2953899Smckusick unsigned op: 6; 3053899Smckusick } IType; 3153899Smckusick 3253899Smckusick struct { 3353899Smckusick unsigned target: 26; 3453899Smckusick unsigned op: 6; 3553899Smckusick } JType; 3653899Smckusick 3753899Smckusick struct { 3853899Smckusick unsigned func: 6; 3953899Smckusick unsigned shamt: 5; 4053899Smckusick unsigned rd: 5; 4153899Smckusick unsigned rt: 5; 4253899Smckusick unsigned rs: 5; 4353899Smckusick unsigned op: 6; 4453899Smckusick } RType; 4553899Smckusick 4653899Smckusick struct { 4753899Smckusick unsigned func: 6; 4853899Smckusick unsigned fd: 5; 4953899Smckusick unsigned fs: 5; 5053899Smckusick unsigned ft: 5; 5153899Smckusick unsigned fmt: 4; 5253899Smckusick unsigned : 1; /* always '1' */ 5353899Smckusick unsigned op: 6; /* always '0x11' */ 5453899Smckusick } FRType; 5553899Smckusick #endif 5653899Smckusick #if BYTE_ORDER == BIG_ENDIAN 5753899Smckusick struct { 5853899Smckusick unsigned op: 6; 5953899Smckusick unsigned rs: 5; 6053899Smckusick unsigned rt: 5; 6153899Smckusick unsigned imm: 16; 6253899Smckusick } IType; 6353899Smckusick 6453899Smckusick struct { 6553899Smckusick unsigned op: 6; 6653899Smckusick unsigned target: 26; 6753899Smckusick } JType; 6853899Smckusick 6953899Smckusick struct { 7053899Smckusick unsigned op: 6; 7153899Smckusick unsigned rs: 5; 7253899Smckusick unsigned rt: 5; 7353899Smckusick unsigned rd: 5; 7453899Smckusick unsigned shamt: 5; 7553899Smckusick unsigned func: 6; 7653899Smckusick } RType; 7753899Smckusick 7853899Smckusick struct { 7953899Smckusick unsigned op: 6; /* always '0x11' */ 8053899Smckusick unsigned : 1; /* always '1' */ 8153899Smckusick unsigned fmt: 4; 8253899Smckusick unsigned ft: 5; 8353899Smckusick unsigned fs: 5; 8453899Smckusick unsigned fd: 5; 8553899Smckusick unsigned func: 6; 8653899Smckusick } FRType; 8753899Smckusick #endif 8853899Smckusick } InstFmt; 8953899Smckusick 9053899Smckusick /* 9153899Smckusick * Values for the 'op' field. 9253899Smckusick */ 9353899Smckusick #define OP_SPECIAL 000 9453899Smckusick #define OP_BCOND 001 9553899Smckusick #define OP_J 002 9653899Smckusick #define OP_JAL 003 9753899Smckusick #define OP_BEQ 004 9853899Smckusick #define OP_BNE 005 9953899Smckusick #define OP_BLEZ 006 10053899Smckusick #define OP_BGTZ 007 10153899Smckusick 10253899Smckusick #define OP_ADDI 010 10353899Smckusick #define OP_ADDIU 011 10453899Smckusick #define OP_SLTI 012 10553899Smckusick #define OP_SLTIU 013 10653899Smckusick #define OP_ANDI 014 10753899Smckusick #define OP_ORI 015 10853899Smckusick #define OP_XORI 016 10953899Smckusick #define OP_LUI 017 11053899Smckusick 11153899Smckusick #define OP_COP0 020 11253899Smckusick #define OP_COP1 021 11353899Smckusick #define OP_COP2 022 11453899Smckusick #define OP_COP3 023 11553899Smckusick 11653899Smckusick #define OP_LB 040 11753899Smckusick #define OP_LH 041 11853899Smckusick #define OP_LWL 042 11953899Smckusick #define OP_LW 043 12053899Smckusick #define OP_LBU 044 12153899Smckusick #define OP_LHU 045 12253899Smckusick #define OP_LWR 046 12353899Smckusick 12453899Smckusick #define OP_SB 050 12553899Smckusick #define OP_SH 051 12653899Smckusick #define OP_SWL 052 12753899Smckusick #define OP_SW 053 12853899Smckusick #define OP_SWR 056 12953899Smckusick 13053899Smckusick #define OP_LWC0 060 13153899Smckusick #define OP_LWC1 061 13253899Smckusick #define OP_LWC2 062 13353899Smckusick #define OP_LWC3 063 13453899Smckusick 13553899Smckusick #define OP_SWC0 070 13653899Smckusick #define OP_SWC1 071 13753899Smckusick #define OP_SWC2 072 13853899Smckusick #define OP_SWC3 073 13953899Smckusick 14053899Smckusick /* 14153899Smckusick * Values for the 'func' field when 'op' == OP_SPECIAL. 14253899Smckusick */ 14353899Smckusick #define OP_SLL 000 14453899Smckusick #define OP_SRL 002 14553899Smckusick #define OP_SRA 003 14653899Smckusick #define OP_SLLV 004 14753899Smckusick #define OP_SRLV 006 14853899Smckusick #define OP_SRAV 007 14953899Smckusick 15053899Smckusick #define OP_JR 010 15153899Smckusick #define OP_JALR 011 15253899Smckusick #define OP_SYSCALL 014 15353899Smckusick #define OP_BREAK 015 15453899Smckusick 15553899Smckusick #define OP_MFHI 020 15653899Smckusick #define OP_MTHI 021 15753899Smckusick #define OP_MFLO 022 15853899Smckusick #define OP_MTLO 023 15953899Smckusick 16053899Smckusick #define OP_MULT 030 16153899Smckusick #define OP_MULTU 031 16253899Smckusick #define OP_DIV 032 16353899Smckusick #define OP_DIVU 033 16453899Smckusick 16553899Smckusick #define OP_ADD 040 16653899Smckusick #define OP_ADDU 041 16753899Smckusick #define OP_SUB 042 16853899Smckusick #define OP_SUBU 043 16953899Smckusick #define OP_AND 044 17053899Smckusick #define OP_OR 045 17153899Smckusick #define OP_XOR 046 17253899Smckusick #define OP_NOR 047 17353899Smckusick 17453899Smckusick #define OP_SLT 052 17553899Smckusick #define OP_SLTU 053 17653899Smckusick 17753899Smckusick /* 17853899Smckusick * Values for the 'func' field when 'op' == OP_BCOND. 17953899Smckusick */ 18053899Smckusick #define OP_BLTZ 000 18153899Smckusick #define OP_BGEZ 001 18253899Smckusick #define OP_BLTZAL 020 18353899Smckusick #define OP_BGEZAL 021 18453899Smckusick 18553899Smckusick /* 18653899Smckusick * Values for the 'rs' field when 'op' == OP_COPz. 18753899Smckusick */ 18853899Smckusick #define OP_MF 000 18953899Smckusick #define OP_MT 004 19053899Smckusick #define OP_BCx 010 19153899Smckusick #define OP_BCy 014 19253899Smckusick #define OP_CF 002 19353899Smckusick #define OP_CT 006 19453899Smckusick 19553899Smckusick /* 19653899Smckusick * Values for the 'rt' field when 'op' == OP_COPz. 19753899Smckusick */ 19853899Smckusick #define COPz_BC_TF_MASK 0x01 19953899Smckusick #define COPz_BC_TRUE 0x01 20053899Smckusick #define COPz_BC_FALSE 0x00 201