Annotation of sys/arch/mips64/include/mips_opcode.h, Revision 1.1.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