/[gxemul]/trunk/src/include/opcodes_mips.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/src/include/opcodes_mips.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4 - (show annotations)
Mon Oct 8 16:18:00 2007 UTC (16 years, 5 months ago) by dpavlin
File MIME type: text/plain
File size: 14709 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.707 2005/04/27 16:37:33 debug Exp $
20050408	Some minor updates to the wdc. Linux now doesn't complain
		anymore if a disk is non-present.
20050409	Various minor fixes (a bintrans bug, and some other things).
		The wdc seems to work with Playstation2 emulation, but there
		is a _long_ annoying delay when disks are detected.
		Fixing a really important bintrans bug (when devices and RAM
		are mixed within 4KB pages), which was triggered with
		NetBSD/playstation2 kernels.
20050410	Adding a dummy dev_ps2_ether (just so that NetBSD doesn't
		complain as much during bootup).
		Symbols starting with '$' are now ignored.
		Renaming dev_ps2_ohci.c to dev_ohci.c, etc.
20050411	Moving the bintrans-cache-isolation check from cpu_mips.c to
		cpu_mips_coproc.c. (I thought this would give a speedup, but
		it's not noticable.)
		Better playstation2 sbus interrupt code.
		Skip ahead many ticks if the count register is read manually.
		(This increases the speed of delay-loops that simply read
		the count register.)
20050412	Updates to the playstation2 timer/interrupt code.
		Some other minor updates.
20050413	NetBSD/cobalt runs from a disk image :-) including userland;
		updating the documentation on how to install NetBSD/cobalt
		using NetBSD/pmax (!).
		Some minor bintrans updates (no real speed improvement) and
		other minor updates (playstation2 now uses the -o options).
20050414	Adding a dummy x86 (and AMD64) mode.
20050415	Adding some (32-bit and 16-bit) x86 instructions.
		Adding some initial support for non-SCSI, non-IDE floppy
		images. (The x86 mode can boot from these, more or less.)
		Moving the devices/ and include/ directories to src/devices/
		and src/include/, respectively.
20050416	Continuing on the x86 stuff. (Adding pc_bios.c and some simple
		support for software interrupts in 16-bit mode.)
20050417	Ripping out most of the x86 instruction decoding stuff, trying
		to rewrite it in a cleaner way.
		Disabling some of the least working CPU families in the
		configure script (sparc, x86, alpha, hppa), so that they are
		not enabled by default.
20050418	Trying to fix the bug which caused problems when turning on
		and off bintrans interactively, by flushing the bintrans cache
		whenever bintrans is manually (re)enabled.
20050419	Adding the 'lswi' ppc instruction.
		Minor updates to the x86 instruction decoding.
20050420	Renaming x86 register name indices from R_xx to X86_R_xx (this
		makes building on Tru64 nicer).
20050422	Adding a check for duplicate MIPS TLB entries on tlbwr/tlbwi.
20050427	Adding screenshots to guestoses.html.
		Some minor fixes and testing for the next release.

==============  RELEASE 0.3.2  ==============


1 #ifndef OPCODES_H
2 #define OPCODES_H
3
4 /*
5 * Copyright (C) 2003-2005 Anders Gavare. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 *
31 * $Id: opcodes_mips.h,v 1.2 2005/03/15 06:52:15 debug Exp $
32 *
33 * MIPS opcodes, gathered from various sources.
34 */
35
36
37 /* Opcodes: (see page 191 in MIPS_IV_Instruction_Set_v3.2.pdf) */
38
39 #define HI6_NAMES { \
40 "special", "regimm", "j", "jal", "beq", "bne", "blez", "bgtz", /* 0x00 - 0x07 */ \
41 "addi", "addiu", "slti", "sltiu", "andi", "ori", "xori", "lui", /* 0x08 - 0x0f */ \
42 "cop0", "cop1", "cop2", "cop3", "beql", "bnel", "blezl", "bgtzl", /* 0x10 - 0x17 */ \
43 "daddi", "daddiu", "ldl", "ldr", "special2", "opcode_1d", "lq_mdmx", "sq", /* 0x18 - 0x1f */ \
44 "lb", "lh", "lwl", "lw", "lbu", "lhu", "lwr", "lwu", /* 0x20 - 0x27 */ \
45 "sb", "sh", "swl", "sw", "sdl", "sdr", "swr", "cache", /* 0x28 - 0x2f */ \
46 "ll", "lwc1", "lwc2", "lwc3", "lld", "ldc1", "ldc2", "ld", /* 0x30 - 0x37 */ \
47 "sc", "swc1", "swc2", "swc3", "scd", "sdc1", "sdc2", "sd" /* 0x38 - 0x3f */ }
48
49 #define REGIMM_NAMES { \
50 "bltz", "bgez", "bltzl", "bgezl", "regimm_04", "regimm_05", "regimm_06", "regimm_07", /* 0x00 - 0x07 */ \
51 "regimm_08", "regimm_09", "regimm_0a", "regimm_0b", "regimm_0c", "regimm_0d", "regimm_0e", "regimm_0f", /* 0x08 - 0x0f */ \
52 "bltzal", "bgezal", "bltzall", "bgezall", "regimm_14", "regimm_15", "regimm_16", "regimm_17", /* 0x10 - 0x17 */ \
53 "regimm_18", "regimm_19", "regimm_1a", "regimm_1b", "regimm_1c", "regimm_1d", "regimm_1e", "regimm_1f" /* 0x18 - 0x1f */ }
54
55 #define SPECIAL_NAMES { \
56 "sll", "special_01", "srl", "sra", "sllv", "special_05", "srlv", "srav", /* 0x00 - 0x07 */ \
57 "jr", "jalr", "movz", "movn", "syscall", "break", "special_0e", "sync", /* 0x08 - 0x0f */ \
58 "mfhi", "mthi", "mflo", "mtlo", "dsllv", "special_15", "dsrlv", "dsrav", /* 0x10 - 0x17 */ \
59 "mult", "multu", "div", "divu", "dmult", "dmultu", "ddiv", "ddivu", /* 0x18 - 0x1f */ \
60 "add", "addu", "sub", "subu", "and", "or", "xor", "nor", /* 0x20 - 0x27 */ \
61 "mfsa", "mtsa", "slt", "sltu", "special_2c", "daddu", "special_2e", "dsubu", /* 0x28 - 0x2f */ \
62 "special_30", "special_31", "special_32", "special_33", "teq", "special_35", "special_36", "special_37", /* 0x30 - 0x37 */ \
63 "dsll", "special_39", "dsrl", "dsra", "dsll32", "special_3d", "dsrl32", "dsra32"/* 0x38 - 0x3f */ }
64
65 #define SPECIAL2_NAMES { \
66 "madd", "maddu", "mul", "special2_03", "msub", "msubu", "special2_06", "special2_07", /* 0x00 - 0x07 */ \
67 "mov_xxx", "pmfhi_lo", "special2_0a", "special2_0b", "special2_0c", "special2_0d", "special2_0e", "special2_0f", /* 0x08 - 0x0f */ \
68 "special2_10", "special2_11", "special2_12", "special2_13", "special2_14", "special2_15", "special2_16", "special2_17", /* 0x10 - 0x17 */ \
69 "special2_18", "special2_19", "special2_1a", "special2_1b", "special2_1c", "special2_1d", "special2_1e", "special2_1f", /* 0x18 - 0x1f */ \
70 "clz", "clo", "special2_22", "special2_23", "dclz", "dclo", "special2_26", "special2_27", /* 0x20 - 0x27 */ \
71 "special2_28", "por", "special2_2a", "special2_2b", "special2_2c", "special2_2d", "special2_2e", "special2_2f", /* 0x28 - 0x2f */ \
72 "special2_30", "special2_31", "special2_32", "special2_33", "special2_34", "special2_35", "special2_36", "special2_37", /* 0x30 - 0x37 */ \
73 "special2_38", "special2_39", "special2_3a", "special2_3b", "special2_3c", "special2_3d", "special2_3e", "sdbbp" /* 0x38 - 0x3f */ }
74
75 #define HI6_SPECIAL 0x00 /* 000000 */
76 #define SPECIAL_SLL 0x00 /* 000000 */ /* MIPS I */
77 /* 0x01 000001 */
78 #define SPECIAL_SRL 0x02 /* 000010 */ /* MIPS I */
79 #define SPECIAL_SRA 0x03 /* 000011 */ /* MIPS I */
80 #define SPECIAL_SLLV 0x04 /* 000100 */ /* MIPS I */
81 /* 0x05 000101 */
82 #define SPECIAL_SRLV 0x06 /* 000110 */
83 #define SPECIAL_SRAV 0x07 /* 000111 */ /* MIPS I */
84 #define SPECIAL_JR 0x08 /* 001000 */ /* MIPS I */
85 #define SPECIAL_JALR 0x09 /* 001001 */ /* MIPS I */
86 #define SPECIAL_MOVZ 0x0a /* 001010 */ /* MIPS IV */
87 #define SPECIAL_MOVN 0x0b /* 001011 */ /* MIPS IV */
88 #define SPECIAL_SYSCALL 0x0c /* 001100 */ /* MIPS I */
89 #define SPECIAL_BREAK 0x0d /* 001101 */ /* MIPS I */
90 /* 0x0e 001110 */
91 #define SPECIAL_SYNC 0x0f /* 001111 */ /* MIPS II */
92 #define SPECIAL_MFHI 0x10 /* 010000 */ /* MIPS I */
93 #define SPECIAL_MTHI 0x11 /* 010001 */ /* MIPS I */
94 #define SPECIAL_MFLO 0x12 /* 010010 */ /* MIPS I */
95 #define SPECIAL_MTLO 0x13 /* 010011 */ /* MIPS I */
96 #define SPECIAL_DSLLV 0x14 /* 010100 */
97 /* 0x15 010101 */
98 #define SPECIAL_DSRLV 0x16 /* 010110 */ /* MIPS III */
99 #define SPECIAL_DSRAV 0x17 /* 010111 */ /* MIPS III */
100 #define SPECIAL_MULT 0x18 /* 011000 */ /* MIPS I */
101 #define SPECIAL_MULTU 0x19 /* 011001 */ /* MIPS I */
102 #define SPECIAL_DIV 0x1a /* 011010 */ /* MIPS I */
103 #define SPECIAL_DIVU 0x1b /* 011011 */ /* MIPS I */
104 #define SPECIAL_DMULT 0x1c /* 011100 */ /* MIPS III */
105 #define SPECIAL_DMULTU 0x1d /* 011101 */ /* MIPS III */
106 #define SPECIAL_DDIV 0x1e /* 011110 */ /* MIPS III */
107 #define SPECIAL_DDIVU 0x1f /* 011111 */ /* MIPS III */
108 #define SPECIAL_ADD 0x20 /* 100000 */ /* MIPS I */
109 #define SPECIAL_ADDU 0x21 /* 100001 */ /* MIPS I */
110 #define SPECIAL_SUB 0x22 /* 100010 */ /* MIPS I */
111 #define SPECIAL_SUBU 0x23 /* 100011 */ /* MIPS I */
112 #define SPECIAL_AND 0x24 /* 100100 */ /* MIPS I */
113 #define SPECIAL_OR 0x25 /* 100101 */ /* MIPS I */
114 #define SPECIAL_XOR 0x26 /* 100110 */ /* MIPS I */
115 #define SPECIAL_NOR 0x27 /* 100111 */ /* MIPS I */
116 #define SPECIAL_MFSA 0x28 /* 101000 */ /* Undocumented R5900 ? */
117 #define SPECIAL_MTSA 0x29 /* 101001 */ /* Undocumented R5900 ? */
118 #define SPECIAL_SLT 0x2a /* 101010 */ /* MIPS I */
119 #define SPECIAL_SLTU 0x2b /* 101011 */ /* MIPS I */
120 #define SPECIAL_DADD 0x2c /* 101100 */ /* MIPS III */
121 #define SPECIAL_DADDU 0x2d /* 101101 */ /* MIPS III */
122 #define SPECIAL_DSUB 0x2e /* 101110 */
123 #define SPECIAL_DSUBU 0x2f /* 101111 */ /* MIPS III */
124 #define SPECIAL_TGE 0x30 /* 110000 */
125 #define SPECIAL_TGEU 0x31 /* 110001 */
126 #define SPECIAL_TLT 0x32 /* 110010 */
127 #define SPECIAL_TLTU 0x33 /* 110011 */
128 #define SPECIAL_TEQ 0x34 /* 110100 */
129 /* 0x35 110101 */
130 #define SPECIAL_TNE 0x36 /* 110110 */
131 /* 0x37 110111 */
132 #define SPECIAL_DSLL 0x38 /* 111000 */ /* MIPS III */
133 /* 0x39 111001 */
134 #define SPECIAL_DSRL 0x3a /* 111010 */ /* MIPS III */
135 #define SPECIAL_DSRA 0x3b /* 111011 */ /* MIPS III */
136 #define SPECIAL_DSLL32 0x3c /* 111100 */ /* MIPS III */
137 /* 0x3d 111101 */
138 #define SPECIAL_DSRL32 0x3e /* 111110 */ /* MIPS III */
139 #define SPECIAL_DSRA32 0x3f /* 111111 */ /* MIPS III */
140
141 #define HI6_REGIMM 0x01 /* 000001 */
142 #define REGIMM_BLTZ 0x00 /* 00000 */ /* MIPS I */
143 #define REGIMM_BGEZ 0x01 /* 00001 */ /* MIPS I */
144 #define REGIMM_BLTZL 0x02 /* 00010 */ /* MIPS II */
145 #define REGIMM_BGEZL 0x03 /* 00011 */ /* MIPS II */
146 #define REGIMM_BLTZAL 0x10 /* 10000 */
147 #define REGIMM_BGEZAL 0x11 /* 10001 */
148 #define REGIMM_BLTZALL 0x12 /* 10010 */
149 #define REGIMM_BGEZALL 0x13 /* 10011 */
150 /* regimm ............... */
151
152 #define HI6_J 0x02 /* 000010 */ /* MIPS I */
153 #define HI6_JAL 0x03 /* 000011 */ /* MIPS I */
154 #define HI6_BEQ 0x04 /* 000100 */ /* MIPS I */
155 #define HI6_BNE 0x05 /* 000101 */
156 #define HI6_BLEZ 0x06 /* 000110 */ /* MIPS I */
157 #define HI6_BGTZ 0x07 /* 000111 */ /* MIPS I */
158 #define HI6_ADDI 0x08 /* 001000 */ /* MIPS I */
159 #define HI6_ADDIU 0x09 /* 001001 */ /* MIPS I */
160 #define HI6_SLTI 0x0a /* 001010 */ /* MIPS I */
161 #define HI6_SLTIU 0x0b /* 001011 */ /* MIPS I */
162 #define HI6_ANDI 0x0c /* 001100 */ /* MIPS I */
163 #define HI6_ORI 0x0d /* 001101 */ /* MIPS I */
164 #define HI6_XORI 0x0e /* 001110 */ /* MIPS I */
165 #define HI6_LUI 0x0f /* 001111 */ /* MIPS I */
166 #define HI6_COP0 0x10 /* 010000 */
167 #define COPz_MFCz 0x00 /* 00000 */
168 #define COPz_DMFCz 0x01 /* 00001 */
169 #define COPz_MTCz 0x04 /* 00100 */
170 #define COPz_DMTCz 0x05 /* 00101 */
171 /* COP1 fmt codes = bits 25..21 (only if COP1): */
172 #define COPz_CFCz 0x02 /* 00010 */ /* MIPS I */
173 #define COPz_CTCz 0x06 /* 00110 */ /* MIPS I */
174 /* COP0 opcodes = bits 4..0 (only if COP0 and CO=1): */
175 #define COP0_TLBR 0x01 /* 00001 */
176 #define COP0_TLBWI 0x02 /* 00010 */
177 #define COP0_TLBWR 0x06 /* 00110 */
178 #define COP0_TLBP 0x08 /* 01000 */
179 #define COP0_RFE 0x10 /* 10000 */
180 #define COP0_ERET 0x18 /* 11000 */
181 #define COP0_STANDBY 0x21
182 #define COP0_SUSPEND 0x22
183 #define COP0_HIBERNATE 0x23
184 #define HI6_COP1 0x11 /* 010001 */
185 #define HI6_COP2 0x12 /* 010010 */
186 #define HI6_COP3 0x13 /* 010011 */
187 #define HI6_BEQL 0x14 /* 010100 */ /* MIPS II */
188 #define HI6_BNEL 0x15 /* 010101 */
189 #define HI6_BLEZL 0x16 /* 010110 */ /* MIPS II */
190 #define HI6_BGTZL 0x17 /* 010111 */ /* MIPS II */
191 #define HI6_DADDI 0x18 /* 011000 */ /* MIPS III */
192 #define HI6_DADDIU 0x19 /* 011001 */ /* MIPS III */
193 #define HI6_LDL 0x1a /* 011010 */ /* MIPS III */
194 #define HI6_LDR 0x1b /* 011011 */ /* MIPS III */
195 #define HI6_SPECIAL2 0x1c /* 011100 */
196 #define SPECIAL2_MADD 0x00 /* 000000 */ /* MIPS32 (?) TODO */
197 #define SPECIAL2_MADDU 0x01 /* 000001 */ /* MIPS32 (?) TODO */
198 #define SPECIAL2_MUL 0x02 /* 000010 */ /* MIPS32 (?) TODO */
199 #define SPECIAL2_MSUB 0x04 /* 000100 */ /* MIPS32 (?) TODO */
200 #define SPECIAL2_MSUBU 0x05 /* 000001 */ /* MIPS32 (?) TODO */
201 #define SPECIAL2_MOV_XXX 0x08 /* 001000 */ /* Undocumented R5900 ? */
202 #define SPECIAL2_PMFHI 0x09 /* 001001 */ /* Undocumented R5900 ? */
203 #define SPECIAL2_CLZ 0x20 /* 100100 */ /* MIPS32 */
204 #define SPECIAL2_CLO 0x21 /* 100101 */ /* MIPS32 */
205 #define SPECIAL2_DCLZ 0x24 /* 100100 */ /* MIPS64 */
206 #define SPECIAL2_DCLO 0x25 /* 100101 */ /* MIPS64 */
207 #define SPECIAL2_POR 0x29 /* 101001 */ /* Undocumented R5900 ? */
208 #define SPECIAL2_SDBBP 0x3f /* 111111 */ /* EJTAG (?) TODO */
209 /* JALX (TODO) 0x1d 011101 */
210 #define HI6_LQ_MDMX 0x1e /* 011110 */ /* lq on R5900, MDMX on others? */
211 #define HI6_SQ 0x1f /* 011111 */ /* R5900 ? */
212 #define HI6_LB 0x20 /* 100000 */ /* MIPS I */
213 #define HI6_LH 0x21 /* 100001 */ /* MIPS I */
214 #define HI6_LWL 0x22 /* 100010 */ /* MIPS I */
215 #define HI6_LW 0x23 /* 100011 */ /* MIPS I */
216 #define HI6_LBU 0x24 /* 100100 */ /* MIPS I */
217 #define HI6_LHU 0x25 /* 100101 */ /* MIPS I */
218 #define HI6_LWR 0x26 /* 100110 */ /* MIPS I */
219 #define HI6_LWU 0x27 /* 100111 */ /* MIPS III */
220 #define HI6_SB 0x28 /* 101000 */ /* MIPS I */
221 #define HI6_SH 0x29 /* 101001 */ /* MIPS I */
222 #define HI6_SWL 0x2a /* 101010 */ /* MIPS I */
223 #define HI6_SW 0x2b /* 101011 */ /* MIPS I */
224 #define HI6_SDL 0x2c /* 101100 */ /* MIPS III */
225 #define HI6_SDR 0x2d /* 101101 */ /* MIPS III */
226 #define HI6_SWR 0x2e /* 101110 */ /* MIPS I */
227 #define HI6_CACHE 0x2f /* 101111 */ /* ??? R4000 */
228 #define HI6_LL 0x30 /* 110000 */ /* MIPS II */
229 #define HI6_LWC1 0x31 /* 110001 */ /* MIPS I */
230 #define HI6_LWC2 0x32 /* 110010 */ /* MIPS I */
231 #define HI6_LWC3 0x33 /* 110011 */ /* MIPS I */
232 #define HI6_LLD 0x34 /* 110100 */ /* MIPS III */
233 #define HI6_LDC1 0x35 /* 110101 */ /* MIPS II */
234 #define HI6_LDC2 0x36 /* 110110 */ /* MIPS II */
235 #define HI6_LD 0x37 /* 110111 */ /* MIPS III */
236 #define HI6_SC 0x38 /* 111000 */ /* MIPS II */
237 #define HI6_SWC1 0x39 /* 111001 */ /* MIPS I */
238 #define HI6_SWC2 0x3a /* 111010 */ /* MIPS I */
239 #define HI6_SWC3 0x3b /* 111011 */ /* MIPS I */
240 #define HI6_SCD 0x3c /* 111100 */ /* MIPS III */
241 #define HI6_SDC1 0x3d /* 111101 */ /* MIPS II */
242 #define HI6_SDC2 0x3e /* 111110 */ /* MIPS II */
243 #define HI6_SD 0x3f /* 111111 */ /* MIPS III */
244
245
246 #endif /* OPCODES_H */
247

  ViewVC Help
Powered by ViewVC 1.1.26