Annotation of sys/arch/mips64/include/mips_opcode.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: mips_opcode.h,v 1.2 2005/08/07 07:29:44 miod Exp $ */
! 2:
! 3: /*-
! 4: * Copyright (c) 1992, 1993
! 5: * The Regents of the University of California. All rights reserved.
! 6: *
! 7: * This code is derived from software contributed to Berkeley by
! 8: * Ralph Campbell.
! 9: *
! 10: * Redistribution and use in source and binary forms, with or without
! 11: * modification, are permitted provided that the following conditions
! 12: * are met:
! 13: * 1. Redistributions of source code must retain the above copyright
! 14: * notice, this list of conditions and the following disclaimer.
! 15: * 2. Redistributions in binary form must reproduce the above copyright
! 16: * notice, this list of conditions and the following disclaimer in the
! 17: * documentation and/or other materials provided with the distribution.
! 18: * 3. Neither the name of the University nor the names of its contributors
! 19: * may be used to endorse or promote products derived from this software
! 20: * without specific prior written permission.
! 21: *
! 22: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 23: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 24: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 25: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 26: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 27: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 28: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 29: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 30: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 31: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 32: * SUCH DAMAGE.
! 33: *
! 34: * from: @(#)mips_opcode.h 8.1 (Berkeley) 6/10/93
! 35: */
! 36:
! 37: #ifndef _MIPS_MIPS_OPCODE_H_
! 38: #define _MIPS_MIPS_OPCODE_H_
! 39:
! 40: /*
! 41: * Define the instruction formats and opcode values for the
! 42: * MIPS instruction set.
! 43: */
! 44:
! 45: /*
! 46: * Define the instruction formats.
! 47: */
! 48: typedef union {
! 49: unsigned word;
! 50:
! 51: #if BYTE_ORDER == BIG_ENDIAN
! 52: struct {
! 53: unsigned op: 6;
! 54: unsigned rs: 5;
! 55: unsigned rt: 5;
! 56: unsigned imm: 16;
! 57: } IType;
! 58:
! 59: struct {
! 60: unsigned op: 6;
! 61: unsigned target: 26;
! 62: } JType;
! 63:
! 64: struct {
! 65: unsigned op: 6;
! 66: unsigned rs: 5;
! 67: unsigned rt: 5;
! 68: unsigned rd: 5;
! 69: unsigned shamt: 5;
! 70: unsigned func: 6;
! 71: } RType;
! 72:
! 73: struct {
! 74: unsigned op: 6; /* always '0x11' */
! 75: unsigned : 1; /* always '1' */
! 76: unsigned fmt: 4;
! 77: unsigned ft: 5;
! 78: unsigned fs: 5;
! 79: unsigned fd: 5;
! 80: unsigned func: 6;
! 81: } FRType;
! 82: #endif
! 83: #if BYTE_ORDER == LITTLE_ENDIAN
! 84: struct {
! 85: unsigned imm: 16;
! 86: unsigned rt: 5;
! 87: unsigned rs: 5;
! 88: unsigned op: 6;
! 89: } IType;
! 90:
! 91: struct {
! 92: unsigned target: 26;
! 93: unsigned op: 6;
! 94: } JType;
! 95:
! 96: struct {
! 97: unsigned func: 6;
! 98: unsigned shamt: 5;
! 99: unsigned rd: 5;
! 100: unsigned rt: 5;
! 101: unsigned rs: 5;
! 102: unsigned op: 6;
! 103: } RType;
! 104:
! 105: struct {
! 106: unsigned func: 6;
! 107: unsigned fd: 5;
! 108: unsigned fs: 5;
! 109: unsigned ft: 5;
! 110: unsigned fmt: 4;
! 111: unsigned : 1; /* always '1' */
! 112: unsigned op: 6; /* always '0x11' */
! 113: } FRType;
! 114: #endif
! 115: } InstFmt;
! 116:
! 117: /*
! 118: * Values for the 'op' field.
! 119: */
! 120: #define OP_SPECIAL 000
! 121: #define OP_BCOND 001
! 122: #define OP_J 002
! 123: #define OP_JAL 003
! 124: #define OP_BEQ 004
! 125: #define OP_BNE 005
! 126: #define OP_BLEZ 006
! 127: #define OP_BGTZ 007
! 128:
! 129: #define OP_ADDI 010
! 130: #define OP_ADDIU 011
! 131: #define OP_SLTI 012
! 132: #define OP_SLTIU 013
! 133: #define OP_ANDI 014
! 134: #define OP_ORI 015
! 135: #define OP_XORI 016
! 136: #define OP_LUI 017
! 137:
! 138: #define OP_COP0 020
! 139: #define OP_COP1 021
! 140: #define OP_COP2 022
! 141: #define OP_COP3 023
! 142: #define OP_BEQL 024
! 143: #define OP_BNEL 025
! 144: #define OP_BLEZL 026
! 145: #define OP_BGTZL 027
! 146:
! 147: #define OP_DADDI 030
! 148: #define OP_DADDIU 031
! 149: #define OP_LDL 032
! 150: #define OP_LDR 033
! 151:
! 152: #define OP_LB 040
! 153: #define OP_LH 041
! 154: #define OP_LWL 042
! 155: #define OP_LW 043
! 156: #define OP_LBU 044
! 157: #define OP_LHU 045
! 158: #define OP_LWR 046
! 159: #define OP_LHU 045
! 160: #define OP_LWR 046
! 161: #define OP_LWU 047
! 162:
! 163: #define OP_SB 050
! 164: #define OP_SH 051
! 165: #define OP_SWL 052
! 166: #define OP_SW 053
! 167: #define OP_SDL 054
! 168: #define OP_SDR 055
! 169: #define OP_SWR 056
! 170: #define OP_CACHE 057
! 171:
! 172: #define OP_LL 060
! 173: #define OP_LWC1 061
! 174: #define OP_LWC2 062
! 175: #define OP_LWC3 063
! 176: #define OP_LLD 064
! 177: #define OP_LD 067
! 178:
! 179: #define OP_SC 070
! 180: #define OP_SWC1 071
! 181: #define OP_SWC2 072
! 182: #define OP_SWC3 073
! 183: #define OP_SCD 074
! 184: #define OP_SD 077
! 185:
! 186: /*
! 187: * Values for the 'func' field when 'op' == OP_SPECIAL.
! 188: */
! 189: #define OP_SLL 000
! 190: #define OP_SRL 002
! 191: #define OP_SRA 003
! 192: #define OP_SLLV 004
! 193: #define OP_SRLV 006
! 194: #define OP_SRAV 007
! 195:
! 196: #define OP_JR 010
! 197: #define OP_JALR 011
! 198: #define OP_SYSCALL 014
! 199: #define OP_BREAK 015
! 200: #define OP_SYNC 017
! 201:
! 202: #define OP_MFHI 020
! 203: #define OP_MTHI 021
! 204: #define OP_MFLO 022
! 205: #define OP_MTLO 023
! 206: #define OP_DSLLV 024
! 207: #define OP_DSRLV 026
! 208: #define OP_DSRAV 027
! 209:
! 210: #define OP_MULT 030
! 211: #define OP_MULTU 031
! 212: #define OP_DIV 032
! 213: #define OP_DIVU 033
! 214: #define OP_DMULT 034
! 215: #define OP_DMULTU 035
! 216: #define OP_DDIV 036
! 217: #define OP_DDIVU 037
! 218:
! 219:
! 220: #define OP_ADD 040
! 221: #define OP_ADDU 041
! 222: #define OP_SUB 042
! 223: #define OP_SUBU 043
! 224: #define OP_AND 044
! 225: #define OP_OR 045
! 226: #define OP_XOR 046
! 227: #define OP_NOR 047
! 228:
! 229: #define OP_SLT 052
! 230: #define OP_SLTU 053
! 231: #define OP_DADD 054
! 232: #define OP_DADDU 055
! 233: #define OP_DSUB 056
! 234: #define OP_DSUBU 057
! 235:
! 236: #define OP_TGE 060
! 237: #define OP_TGEU 061
! 238: #define OP_TLT 062
! 239: #define OP_TLTU 063
! 240: #define OP_TEQ 064
! 241: #define OP_TNE 066
! 242:
! 243: #define OP_DSLL 070
! 244: #define OP_DSRL 072
! 245: #define OP_DSRA 073
! 246: #define OP_DSLL32 074
! 247: #define OP_DSRL32 076
! 248: #define OP_DSRA32 077
! 249:
! 250: /*
! 251: * Values for the 'func' field when 'op' == OP_BCOND.
! 252: */
! 253: #define OP_BLTZ 000
! 254: #define OP_BGEZ 001
! 255: #define OP_BLTZL 002
! 256: #define OP_BGEZL 003
! 257:
! 258: #define OP_TGEI 010
! 259: #define OP_TGEIU 011
! 260: #define OP_TLTI 012
! 261: #define OP_TLTIU 013
! 262: #define OP_TEQI 014
! 263: #define OP_TNEI 016
! 264:
! 265: #define OP_BLTZAL 020
! 266: #define OP_BLTZAL 020
! 267: #define OP_BGEZAL 021
! 268: #define OP_BLTZALL 022
! 269: #define OP_BGEZALL 023
! 270:
! 271: /*
! 272: * Values for the 'rs' field when 'op' == OP_COPz.
! 273: */
! 274: #define OP_MF 000
! 275: #define OP_DMF 001
! 276: #define OP_MT 004
! 277: #define OP_DMT 005
! 278: #define OP_BCx 010
! 279: #define OP_BCy 014
! 280: #define OP_CF 002
! 281: #define OP_CT 006
! 282:
! 283: /*
! 284: * Values for the 'rt' field when 'op' == OP_COPz.
! 285: */
! 286: #define COPz_BC_TF_MASK 0x01
! 287: #define COPz_BC_TRUE 0x01
! 288: #define COPz_BC_FALSE 0x00
! 289: #define COPz_BCL_TF_MASK 0x02
! 290: #define COPz_BCL_TRUE 0x02
! 291: #define COPz_BCL_FALSE 0x00
! 292:
! 293: #endif /* !_MIPS_MIPS_OPCODE_H_ */
CVSweb