12bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*  $NetBSD: mips_opcode.h,v 1.12 2005/12/11 12:18:09 christos Exp $    */
22bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
32bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*-
42bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Copyright (c) 1992, 1993
52bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind *  The Regents of the University of California.  All rights reserved.
62bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind *
72bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * This code is derived from software contributed to Berkeley by
82bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Ralph Campbell.
92bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind *
102bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Redistribution and use in source and binary forms, with or without
112bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * modification, are permitted provided that the following conditions
122bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * are met:
132bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * 1. Redistributions of source code must retain the above copyright
142bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind *    notice, this list of conditions and the following disclaimer.
152bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * 2. Redistributions in binary form must reproduce the above copyright
162bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind *    notice, this list of conditions and the following disclaimer in the
172bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind *    documentation and/or other materials provided with the distribution.
182bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * 3. Neither the name of the University nor the names of its contributors
192bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind *    may be used to endorse or promote products derived from this software
202bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind *    without specific prior written permission.
212bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind *
222bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
232bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
242bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
252bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
262bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
272bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
282bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
292bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
302bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
312bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
322bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * SUCH DAMAGE.
332bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind *
342bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind *  @(#)mips_opcode.h   8.1 (Berkeley) 6/10/93
352bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind */
362bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
372bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*
382bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Define the instruction formats and opcode values for the
392bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * MIPS instruction set.
402bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind */
412bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
422bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#include <endian.h>
432bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
442bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*
452bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Define the instruction formats.
462bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind */
472bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lindtypedef union {
482bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    unsigned word;
492bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
502bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#if BYTE_ORDER == LITTLE_ENDIAN
512bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    struct {
522bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned imm: 16;
532bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned rt: 5;
542bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned rs: 5;
552bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned op: 6;
562bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    } IType;
572bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
582bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    struct {
592bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned target: 26;
602bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned op: 6;
612bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    } JType;
622bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
632bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    struct {
642bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned func: 6;
652bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned shamt: 5;
662bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned rd: 5;
672bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned rt: 5;
682bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned rs: 5;
692bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned op: 6;
702bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    } RType;
712bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
722bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    struct {
732bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned func: 6;
742bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned fd: 5;
752bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned fs: 5;
762bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned ft: 5;
772bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned fmt: 4;
782bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned : 1;       /* always '1' */
792bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned op: 6;     /* always '0x11' */
802bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    } FRType;
812bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#endif
822bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#if BYTE_ORDER == BIG_ENDIAN
832bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    struct {
842bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned op: 6;
852bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned rs: 5;
862bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned rt: 5;
872bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned imm: 16;
882bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    } IType;
892bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
902bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    struct {
912bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned op: 6;
922bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned target: 26;
932bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    } JType;
942bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
952bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    struct {
962bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned op: 6;
972bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned rs: 5;
982bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned rt: 5;
992bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned rd: 5;
1002bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned shamt: 5;
1012bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned func: 6;
1022bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    } RType;
1032bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
1042bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    struct {
1052bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned op: 6;     /* always '0x11' */
1062bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned : 1;       /* always '1' */
1072bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned fmt: 4;
1082bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned ft: 5;
1092bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned fs: 5;
1102bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned fd: 5;
1112bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind        unsigned func: 6;
1122bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind    } FRType;
1132bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#endif
1142bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind} InstFmt;
1152bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
1162bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*
1172bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Values for the 'op' field.
1182bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind */
1192bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SPECIAL  000
1202bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BCOND    001
1212bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_J        002
1222bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_JAL      003
1232bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BEQ      004
1242bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BNE      005
1252bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BLEZ     006
1262bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BGTZ     007
1272bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
128606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
1292bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_ADDI     010
130606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#else
131606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_POP10    010
132606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
133606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
1342bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_ADDIU    011
1352bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SLTI     012
1362bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SLTIU    013
1372bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_ANDI     014
1382bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_ORI      015
1392bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_XORI     016
140606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
141606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
1422bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LUI      017
143606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#else
144606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_AUI      017
145606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
1462bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
1472bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_COP0     020
1482bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_COP1     021
1492bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_COP2     022
150606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
151606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
1522bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_COP3     023
153606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_BEQL     024
154606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_BNEL     025
155606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_BLEZL    026
156606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_BGTZL    027
157606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DADDI    030
158606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#else
159606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_POP26    026
160606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_POP27    027
161606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_POP30    030
162606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
1632bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
164606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DADDIU   031
1652bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
166606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
167606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_LDL      032
168606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_LDR      033
169606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SPECIAL2 034
170606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#else
171606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DAUI     035
172606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
173606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
174606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SPECIAL3 037
1752bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
1762bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LB       040
1772bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LH       041
178606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
179606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
1802bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LWL      042
181606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
182606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
1832bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LW       043
1842bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LBU      044
1852bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LHU      045
1862bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LWR      046
1872bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LHU      045
188606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
189606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
1902bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LWR      046
191606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
192606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
193606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_LWU      047
1942bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
1952bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SB       050
1962bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SH       051
197606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
198606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
1992bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SWL      052
200606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
201606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
2022bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SW       053
2037fd121788a892a0dfd4a9594304cad85fe366349Elliott Hughes
204606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
205606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SDL      054
206606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SDR      055
207606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SWR      056
208606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_CACHE    057
2092bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LL       060
210606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_LWC0     OP_LL
2112bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LWC1     061
2122bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LWC2     062
2132bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LWC3     063
214606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_LLD      064
215606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#else
216606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_LWC1     061
217606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_BC       062
218606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
219606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
2202bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_LDC1     065
221606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_LD       067
2222bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
223606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
2242bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SC       070
225606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SWC0     OP_SC
226606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
227606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
2282bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SWC1     071
229606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
230606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
2312bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SWC2     072
2322bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SWC3     073
233606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SCD      074
234606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#else
235606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_BALC     072
236606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
237606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
2382bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SDC1     075
239606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SD       077
2402bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
2412bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*
2422bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Values for the 'func' field when 'op' == OP_SPECIAL.
2432bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind */
2442bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SLL      000
2452bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SRL      002
2462bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SRA      003
2472bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SLLV     004
2482bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SRLV     006
2492bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SRAV     007
2502bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
251606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
2522bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_JR       010
253606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
254606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
2552bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_JALR     011
2562bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SYSCALL  014
2572bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BREAK    015
258606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SYNC     017
2592bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
260606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
2612bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_MFHI     020
2622bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_MTHI     021
2632bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_MFLO     022
2642bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_MTLO     023
265606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#else
266606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_CLZ      020
267606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_CLO      021
268606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DCLZ     022
269606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DCLO     023
270606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
271606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
272606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DSLLV    024
273606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DSRLV    026
274606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DSRAV    027
2752bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
276606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
2772bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_MULT     030
2782bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_MULTU    031
2792bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_DIV      032
2802bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_DIVU     033
281606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DMULT    034
282606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DMULTU   035
283606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DDIV     036
284606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DDIVU    037
285606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#else
286606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SOP30    030
287606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SOP31    031
288606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SOP32    032
289606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SOP33    033
290606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SOP34    034
291606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SOP35    035
292606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SOP36    036
293606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_SOP37    037
294606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
2952bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
2962bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_ADD      040
2972bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_ADDU     041
2982bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SUB      042
2992bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SUBU     043
3002bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_AND      044
3012bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_OR       045
3022bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_XOR      046
3032bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_NOR      047
3042bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
3052bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SLT      052
3062bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SLTU     053
307606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DADD     054
308606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DADDU    055
309606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DSUB     056
310606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DSUBU    057
311606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
312606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TGE      060
313606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TGEU     061
314606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TLT      062
315606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TLTU     063
316606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TEQ      064
317606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TNE      066
318606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
319606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DSLL     070
320606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DSRL     072
321606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DSRA     073
322606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DSLL32   074
323606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DSRL32   076
324606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DSRA32   077
325606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
326606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
3272bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*
3282bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Values for the 'func' field when 'op' == OP_SPECIAL2.
329606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes * OP_SPECIAL2 opcodes are removed in mips32r6
3302bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind */
3312bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_MAD      000     /* QED */
3322bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_MADU     001     /* QED */
3332bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_MUL      002     /* QED */
334606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
3352bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
3362bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*
3372bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Values for the 'func' field when 'op' == OP_SPECIAL3.
3382bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind */
3392bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_EXT      000
340606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DEXTM    001
341606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DEXTU    002
342606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DEXT     003
3432bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_INS      004
344606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DINSM    005
345606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DINSU    006
346606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DINS     007
3472bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BSHFL    040
348606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_RDHWR    073
3492bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
3502bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*
3512bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Values for the 'shamt' field when OP_SPECIAL3 && func OP_BSHFL.
3522bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind */
353606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
3542bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_WSBH     002
3552bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SEB      020
3562bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_SEH      030
3572bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
358606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev == 6
359606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes/*
360606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes * Values for the 'shamt' field when OP_SOP30.
361606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes */
362606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_MUL      002
363606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_MUH      003
364606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
365606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes
3662bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*
3672bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Values for the 'func' field when 'op' == OP_BCOND.
3682bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind */
3692bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BLTZ     000
3702bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BGEZ     001
3712bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
372606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#if __mips_isa_rev < 6
373606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_BLTZL    002
374606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_BGEZL    003
375606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TGEI     010
376606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TGEIU    011
377606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TLTI     012
378606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TLTIU    013
379606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TEQI     014
380606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_TNEI     016
381606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_BLTZAL   020
3822bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BGEZAL   021
3832bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BLTZALL  022
3842bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BGEZALL  023
385606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#else
386606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_NAL      020
387606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_BAL      021
388606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#endif
3892bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
3902bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*
3912bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Values for the 'rs' field when 'op' == OP_COPz.
3922bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind */
3932bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_MF       000
394606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DMF      001
3952bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_MT       004
396606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define OP_DMT      005
3972bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BCx      010
3982bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_BCy      014
3992bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_CF       002
4002bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define OP_CT       006
4012bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind
4022bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind/*
4032bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind * Values for the 'rt' field when 'op' == OP_COPz.
4042bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind */
4052bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define COPz_BC_TF_MASK 0x01
4062bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define COPz_BC_TRUE    0x01
4072bc2b792782b304b15d8c48b54916a9b3fa3a7acPaul Lind#define COPz_BC_FALSE   0x00
408606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define COPz_BCL_TF_MASK    0x02
409606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define COPz_BCL_TRUE   0x02
410606d4aecfb6a1e911dac207caeba617d1379c1f7Elliott Hughes#define COPz_BCL_FALSE  0x00
411