1*53899Smckusick /*- 2*53899Smckusick * Copyright (c) 1992 The Regents of the University of California. 3*53899Smckusick * All rights reserved. 4*53899Smckusick * 5*53899Smckusick * This code is derived from software contributed to Berkeley by 6*53899Smckusick * Ralph Campbell. 7*53899Smckusick * 8*53899Smckusick * %sccs.include.redist.c% 9*53899Smckusick * 10*53899Smckusick * @(#)mips_opcode.h 7.1 (Berkeley) 06/04/92 11*53899Smckusick */ 12*53899Smckusick 13*53899Smckusick /* 14*53899Smckusick * Define the instruction formats and opcode values for the 15*53899Smckusick * MIPS instruction set. 16*53899Smckusick */ 17*53899Smckusick 18*53899Smckusick /* 19*53899Smckusick * Define the instruction formats. 20*53899Smckusick */ 21*53899Smckusick typedef union { 22*53899Smckusick unsigned word; 23*53899Smckusick 24*53899Smckusick #if BYTE_ORDER == LITTLE_ENDIAN 25*53899Smckusick struct { 26*53899Smckusick unsigned imm: 16; 27*53899Smckusick unsigned rt: 5; 28*53899Smckusick unsigned rs: 5; 29*53899Smckusick unsigned op: 6; 30*53899Smckusick } IType; 31*53899Smckusick 32*53899Smckusick struct { 33*53899Smckusick unsigned target: 26; 34*53899Smckusick unsigned op: 6; 35*53899Smckusick } JType; 36*53899Smckusick 37*53899Smckusick struct { 38*53899Smckusick unsigned func: 6; 39*53899Smckusick unsigned shamt: 5; 40*53899Smckusick unsigned rd: 5; 41*53899Smckusick unsigned rt: 5; 42*53899Smckusick unsigned rs: 5; 43*53899Smckusick unsigned op: 6; 44*53899Smckusick } RType; 45*53899Smckusick 46*53899Smckusick struct { 47*53899Smckusick unsigned func: 6; 48*53899Smckusick unsigned fd: 5; 49*53899Smckusick unsigned fs: 5; 50*53899Smckusick unsigned ft: 5; 51*53899Smckusick unsigned fmt: 4; 52*53899Smckusick unsigned : 1; /* always '1' */ 53*53899Smckusick unsigned op: 6; /* always '0x11' */ 54*53899Smckusick } FRType; 55*53899Smckusick #endif 56*53899Smckusick #if BYTE_ORDER == BIG_ENDIAN 57*53899Smckusick struct { 58*53899Smckusick unsigned op: 6; 59*53899Smckusick unsigned rs: 5; 60*53899Smckusick unsigned rt: 5; 61*53899Smckusick unsigned imm: 16; 62*53899Smckusick } IType; 63*53899Smckusick 64*53899Smckusick struct { 65*53899Smckusick unsigned op: 6; 66*53899Smckusick unsigned target: 26; 67*53899Smckusick } JType; 68*53899Smckusick 69*53899Smckusick struct { 70*53899Smckusick unsigned op: 6; 71*53899Smckusick unsigned rs: 5; 72*53899Smckusick unsigned rt: 5; 73*53899Smckusick unsigned rd: 5; 74*53899Smckusick unsigned shamt: 5; 75*53899Smckusick unsigned func: 6; 76*53899Smckusick } RType; 77*53899Smckusick 78*53899Smckusick struct { 79*53899Smckusick unsigned op: 6; /* always '0x11' */ 80*53899Smckusick unsigned : 1; /* always '1' */ 81*53899Smckusick unsigned fmt: 4; 82*53899Smckusick unsigned ft: 5; 83*53899Smckusick unsigned fs: 5; 84*53899Smckusick unsigned fd: 5; 85*53899Smckusick unsigned func: 6; 86*53899Smckusick } FRType; 87*53899Smckusick #endif 88*53899Smckusick } InstFmt; 89*53899Smckusick 90*53899Smckusick /* 91*53899Smckusick * Values for the 'op' field. 92*53899Smckusick */ 93*53899Smckusick #define OP_SPECIAL 000 94*53899Smckusick #define OP_BCOND 001 95*53899Smckusick #define OP_J 002 96*53899Smckusick #define OP_JAL 003 97*53899Smckusick #define OP_BEQ 004 98*53899Smckusick #define OP_BNE 005 99*53899Smckusick #define OP_BLEZ 006 100*53899Smckusick #define OP_BGTZ 007 101*53899Smckusick 102*53899Smckusick #define OP_ADDI 010 103*53899Smckusick #define OP_ADDIU 011 104*53899Smckusick #define OP_SLTI 012 105*53899Smckusick #define OP_SLTIU 013 106*53899Smckusick #define OP_ANDI 014 107*53899Smckusick #define OP_ORI 015 108*53899Smckusick #define OP_XORI 016 109*53899Smckusick #define OP_LUI 017 110*53899Smckusick 111*53899Smckusick #define OP_COP0 020 112*53899Smckusick #define OP_COP1 021 113*53899Smckusick #define OP_COP2 022 114*53899Smckusick #define OP_COP3 023 115*53899Smckusick 116*53899Smckusick #define OP_LB 040 117*53899Smckusick #define OP_LH 041 118*53899Smckusick #define OP_LWL 042 119*53899Smckusick #define OP_LW 043 120*53899Smckusick #define OP_LBU 044 121*53899Smckusick #define OP_LHU 045 122*53899Smckusick #define OP_LWR 046 123*53899Smckusick 124*53899Smckusick #define OP_SB 050 125*53899Smckusick #define OP_SH 051 126*53899Smckusick #define OP_SWL 052 127*53899Smckusick #define OP_SW 053 128*53899Smckusick #define OP_SWR 056 129*53899Smckusick 130*53899Smckusick #define OP_LWC0 060 131*53899Smckusick #define OP_LWC1 061 132*53899Smckusick #define OP_LWC2 062 133*53899Smckusick #define OP_LWC3 063 134*53899Smckusick 135*53899Smckusick #define OP_SWC0 070 136*53899Smckusick #define OP_SWC1 071 137*53899Smckusick #define OP_SWC2 072 138*53899Smckusick #define OP_SWC3 073 139*53899Smckusick 140*53899Smckusick /* 141*53899Smckusick * Values for the 'func' field when 'op' == OP_SPECIAL. 142*53899Smckusick */ 143*53899Smckusick #define OP_SLL 000 144*53899Smckusick #define OP_SRL 002 145*53899Smckusick #define OP_SRA 003 146*53899Smckusick #define OP_SLLV 004 147*53899Smckusick #define OP_SRLV 006 148*53899Smckusick #define OP_SRAV 007 149*53899Smckusick 150*53899Smckusick #define OP_JR 010 151*53899Smckusick #define OP_JALR 011 152*53899Smckusick #define OP_SYSCALL 014 153*53899Smckusick #define OP_BREAK 015 154*53899Smckusick 155*53899Smckusick #define OP_MFHI 020 156*53899Smckusick #define OP_MTHI 021 157*53899Smckusick #define OP_MFLO 022 158*53899Smckusick #define OP_MTLO 023 159*53899Smckusick 160*53899Smckusick #define OP_MULT 030 161*53899Smckusick #define OP_MULTU 031 162*53899Smckusick #define OP_DIV 032 163*53899Smckusick #define OP_DIVU 033 164*53899Smckusick 165*53899Smckusick #define OP_ADD 040 166*53899Smckusick #define OP_ADDU 041 167*53899Smckusick #define OP_SUB 042 168*53899Smckusick #define OP_SUBU 043 169*53899Smckusick #define OP_AND 044 170*53899Smckusick #define OP_OR 045 171*53899Smckusick #define OP_XOR 046 172*53899Smckusick #define OP_NOR 047 173*53899Smckusick 174*53899Smckusick #define OP_SLT 052 175*53899Smckusick #define OP_SLTU 053 176*53899Smckusick 177*53899Smckusick /* 178*53899Smckusick * Values for the 'func' field when 'op' == OP_BCOND. 179*53899Smckusick */ 180*53899Smckusick #define OP_BLTZ 000 181*53899Smckusick #define OP_BGEZ 001 182*53899Smckusick #define OP_BLTZAL 020 183*53899Smckusick #define OP_BGEZAL 021 184*53899Smckusick 185*53899Smckusick /* 186*53899Smckusick * Values for the 'rs' field when 'op' == OP_COPz. 187*53899Smckusick */ 188*53899Smckusick #define OP_MF 000 189*53899Smckusick #define OP_MT 004 190*53899Smckusick #define OP_BCx 010 191*53899Smckusick #define OP_BCy 014 192*53899Smckusick #define OP_CF 002 193*53899Smckusick #define OP_CT 006 194*53899Smckusick 195*53899Smckusick /* 196*53899Smckusick * Values for the 'rt' field when 'op' == OP_COPz. 197*53899Smckusick */ 198*53899Smckusick #define COPz_BC_TF_MASK 0x01 199*53899Smckusick #define COPz_BC_TRUE 0x01 200*53899Smckusick #define COPz_BC_FALSE 0x00 201