xref: /OK3568_Linux_fs/kernel/arch/mips/include/uapi/asm/inst.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Format of an instruction in memory.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This file is subject to the terms and conditions of the GNU General Public
6*4882a593Smuzhiyun  * License.  See the file "COPYING" in the main directory of this archive
7*4882a593Smuzhiyun  * for more details.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * Copyright (C) 1996, 2000 by Ralf Baechle
10*4882a593Smuzhiyun  * Copyright (C) 2006 by Thiemo Seufer
11*4882a593Smuzhiyun  * Copyright (C) 2012 MIPS Technologies, Inc.  All rights reserved.
12*4882a593Smuzhiyun  * Copyright (C) 2014 Imagination Technologies Ltd.
13*4882a593Smuzhiyun  */
14*4882a593Smuzhiyun #ifndef _UAPI_ASM_INST_H
15*4882a593Smuzhiyun #define _UAPI_ASM_INST_H
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #include <asm/bitfield.h>
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun /*
20*4882a593Smuzhiyun  * Major opcodes; before MIPS IV cop1x was called cop3.
21*4882a593Smuzhiyun  */
22*4882a593Smuzhiyun enum major_op {
23*4882a593Smuzhiyun 	spec_op, bcond_op, j_op, jal_op,
24*4882a593Smuzhiyun 	beq_op, bne_op, blez_op, bgtz_op,
25*4882a593Smuzhiyun 	addi_op, pop10_op = addi_op, addiu_op, slti_op, sltiu_op,
26*4882a593Smuzhiyun 	andi_op, ori_op, xori_op, lui_op,
27*4882a593Smuzhiyun 	cop0_op, cop1_op, cop2_op, cop1x_op,
28*4882a593Smuzhiyun 	beql_op, bnel_op, blezl_op, bgtzl_op,
29*4882a593Smuzhiyun 	daddi_op, pop30_op = daddi_op, daddiu_op, ldl_op, ldr_op,
30*4882a593Smuzhiyun 	spec2_op, jalx_op, mdmx_op, msa_op = mdmx_op, spec3_op,
31*4882a593Smuzhiyun 	lb_op, lh_op, lwl_op, lw_op,
32*4882a593Smuzhiyun 	lbu_op, lhu_op, lwr_op, lwu_op,
33*4882a593Smuzhiyun 	sb_op, sh_op, swl_op, sw_op,
34*4882a593Smuzhiyun 	sdl_op, sdr_op, swr_op, cache_op,
35*4882a593Smuzhiyun 	ll_op, lwc1_op, lwc2_op, bc6_op = lwc2_op, pref_op,
36*4882a593Smuzhiyun 	lld_op, ldc1_op, ldc2_op, pop66_op = ldc2_op, ld_op,
37*4882a593Smuzhiyun 	sc_op, swc1_op, swc2_op, balc6_op = swc2_op, major_3b_op,
38*4882a593Smuzhiyun 	scd_op, sdc1_op, sdc2_op, pop76_op = sdc2_op, sd_op
39*4882a593Smuzhiyun };
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun /*
42*4882a593Smuzhiyun  * func field of spec opcode.
43*4882a593Smuzhiyun  */
44*4882a593Smuzhiyun enum spec_op {
45*4882a593Smuzhiyun 	sll_op, movc_op, srl_op, sra_op,
46*4882a593Smuzhiyun 	sllv_op, pmon_op, srlv_op, srav_op,
47*4882a593Smuzhiyun 	jr_op, jalr_op, movz_op, movn_op,
48*4882a593Smuzhiyun 	syscall_op, break_op, spim_op, sync_op,
49*4882a593Smuzhiyun 	mfhi_op, mthi_op, mflo_op, mtlo_op,
50*4882a593Smuzhiyun 	dsllv_op, spec2_unused_op, dsrlv_op, dsrav_op,
51*4882a593Smuzhiyun 	mult_op, multu_op, div_op, divu_op,
52*4882a593Smuzhiyun 	dmult_op, dmultu_op, ddiv_op, ddivu_op,
53*4882a593Smuzhiyun 	add_op, addu_op, sub_op, subu_op,
54*4882a593Smuzhiyun 	and_op, or_op, xor_op, nor_op,
55*4882a593Smuzhiyun 	spec3_unused_op, spec4_unused_op, slt_op, sltu_op,
56*4882a593Smuzhiyun 	dadd_op, daddu_op, dsub_op, dsubu_op,
57*4882a593Smuzhiyun 	tge_op, tgeu_op, tlt_op, tltu_op,
58*4882a593Smuzhiyun 	teq_op, seleqz_op, tne_op, selnez_op,
59*4882a593Smuzhiyun 	dsll_op, spec5_unused_op, dsrl_op, dsra_op,
60*4882a593Smuzhiyun 	dsll32_op, spec6_unused_op, dsrl32_op, dsra32_op
61*4882a593Smuzhiyun };
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /*
64*4882a593Smuzhiyun  * func field of spec2 opcode.
65*4882a593Smuzhiyun  */
66*4882a593Smuzhiyun enum spec2_op {
67*4882a593Smuzhiyun 	madd_op, maddu_op, mul_op, spec2_3_unused_op,
68*4882a593Smuzhiyun 	msub_op, msubu_op, /* more unused ops */
69*4882a593Smuzhiyun 	clz_op = 0x20, clo_op,
70*4882a593Smuzhiyun 	dclz_op = 0x24, dclo_op,
71*4882a593Smuzhiyun 	sdbpp_op = 0x3f
72*4882a593Smuzhiyun };
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun /*
75*4882a593Smuzhiyun  * func field of spec3 opcode.
76*4882a593Smuzhiyun  */
77*4882a593Smuzhiyun enum spec3_op {
78*4882a593Smuzhiyun 	ext_op, dextm_op, dextu_op, dext_op,
79*4882a593Smuzhiyun 	ins_op, dinsm_op, dinsu_op, dins_op,
80*4882a593Smuzhiyun 	yield_op  = 0x09, lx_op     = 0x0a,
81*4882a593Smuzhiyun 	lwle_op   = 0x19, lwre_op   = 0x1a,
82*4882a593Smuzhiyun 	cachee_op = 0x1b, sbe_op    = 0x1c,
83*4882a593Smuzhiyun 	she_op    = 0x1d, sce_op    = 0x1e,
84*4882a593Smuzhiyun 	swe_op    = 0x1f, bshfl_op  = 0x20,
85*4882a593Smuzhiyun 	swle_op   = 0x21, swre_op   = 0x22,
86*4882a593Smuzhiyun 	prefe_op  = 0x23, dbshfl_op = 0x24,
87*4882a593Smuzhiyun 	cache6_op = 0x25, sc6_op    = 0x26,
88*4882a593Smuzhiyun 	scd6_op   = 0x27, lbue_op   = 0x28,
89*4882a593Smuzhiyun 	lhue_op   = 0x29, lbe_op    = 0x2c,
90*4882a593Smuzhiyun 	lhe_op    = 0x2d, lle_op    = 0x2e,
91*4882a593Smuzhiyun 	lwe_op    = 0x2f, pref6_op  = 0x35,
92*4882a593Smuzhiyun 	ll6_op    = 0x36, lld6_op   = 0x37,
93*4882a593Smuzhiyun 	rdhwr_op  = 0x3b
94*4882a593Smuzhiyun };
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun /*
97*4882a593Smuzhiyun  * Bits 10-6 minor opcode for r6 spec mult/div encodings
98*4882a593Smuzhiyun  */
99*4882a593Smuzhiyun enum mult_op {
100*4882a593Smuzhiyun 	mult_mult_op = 0x0,
101*4882a593Smuzhiyun 	mult_mul_op = 0x2,
102*4882a593Smuzhiyun 	mult_muh_op = 0x3,
103*4882a593Smuzhiyun };
104*4882a593Smuzhiyun enum multu_op {
105*4882a593Smuzhiyun 	multu_multu_op = 0x0,
106*4882a593Smuzhiyun 	multu_mulu_op = 0x2,
107*4882a593Smuzhiyun 	multu_muhu_op = 0x3,
108*4882a593Smuzhiyun };
109*4882a593Smuzhiyun enum div_op {
110*4882a593Smuzhiyun 	div_div_op = 0x0,
111*4882a593Smuzhiyun 	div_div6_op = 0x2,
112*4882a593Smuzhiyun 	div_mod_op = 0x3,
113*4882a593Smuzhiyun };
114*4882a593Smuzhiyun enum divu_op {
115*4882a593Smuzhiyun 	divu_divu_op = 0x0,
116*4882a593Smuzhiyun 	divu_divu6_op = 0x2,
117*4882a593Smuzhiyun 	divu_modu_op = 0x3,
118*4882a593Smuzhiyun };
119*4882a593Smuzhiyun enum dmult_op {
120*4882a593Smuzhiyun 	dmult_dmult_op = 0x0,
121*4882a593Smuzhiyun 	dmult_dmul_op = 0x2,
122*4882a593Smuzhiyun 	dmult_dmuh_op = 0x3,
123*4882a593Smuzhiyun };
124*4882a593Smuzhiyun enum dmultu_op {
125*4882a593Smuzhiyun 	dmultu_dmultu_op = 0x0,
126*4882a593Smuzhiyun 	dmultu_dmulu_op = 0x2,
127*4882a593Smuzhiyun 	dmultu_dmuhu_op = 0x3,
128*4882a593Smuzhiyun };
129*4882a593Smuzhiyun enum ddiv_op {
130*4882a593Smuzhiyun 	ddiv_ddiv_op = 0x0,
131*4882a593Smuzhiyun 	ddiv_ddiv6_op = 0x2,
132*4882a593Smuzhiyun 	ddiv_dmod_op = 0x3,
133*4882a593Smuzhiyun };
134*4882a593Smuzhiyun enum ddivu_op {
135*4882a593Smuzhiyun 	ddivu_ddivu_op = 0x0,
136*4882a593Smuzhiyun 	ddivu_ddivu6_op = 0x2,
137*4882a593Smuzhiyun 	ddivu_dmodu_op = 0x3,
138*4882a593Smuzhiyun };
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun /*
141*4882a593Smuzhiyun  * rt field of bcond opcodes.
142*4882a593Smuzhiyun  */
143*4882a593Smuzhiyun enum rt_op {
144*4882a593Smuzhiyun 	bltz_op, bgez_op, bltzl_op, bgezl_op,
145*4882a593Smuzhiyun 	spimi_op, unused_rt_op_0x05, unused_rt_op_0x06, unused_rt_op_0x07,
146*4882a593Smuzhiyun 	tgei_op, tgeiu_op, tlti_op, tltiu_op,
147*4882a593Smuzhiyun 	teqi_op, unused_0x0d_rt_op, tnei_op, unused_0x0f_rt_op,
148*4882a593Smuzhiyun 	bltzal_op, bgezal_op, bltzall_op, bgezall_op,
149*4882a593Smuzhiyun 	rt_op_0x14, rt_op_0x15, rt_op_0x16, rt_op_0x17,
150*4882a593Smuzhiyun 	rt_op_0x18, rt_op_0x19, rt_op_0x1a, rt_op_0x1b,
151*4882a593Smuzhiyun 	bposge32_op, rt_op_0x1d, rt_op_0x1e, synci_op
152*4882a593Smuzhiyun };
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun /*
155*4882a593Smuzhiyun  * rs field of cop opcodes.
156*4882a593Smuzhiyun  */
157*4882a593Smuzhiyun enum cop_op {
158*4882a593Smuzhiyun 	mfc_op	      = 0x00, dmfc_op	    = 0x01,
159*4882a593Smuzhiyun 	cfc_op	      = 0x02, mfhc0_op	    = 0x02,
160*4882a593Smuzhiyun 	mfhc_op       = 0x03, mtc_op	    = 0x04,
161*4882a593Smuzhiyun 	dmtc_op	      = 0x05, ctc_op	    = 0x06,
162*4882a593Smuzhiyun 	mthc0_op      = 0x06, mthc_op	    = 0x07,
163*4882a593Smuzhiyun 	bc_op	      = 0x08, bc1eqz_op     = 0x09,
164*4882a593Smuzhiyun 	mfmc0_op      = 0x0b, bc1nez_op     = 0x0d,
165*4882a593Smuzhiyun 	wrpgpr_op     = 0x0e, cop_op	    = 0x10,
166*4882a593Smuzhiyun 	copm_op	      = 0x18
167*4882a593Smuzhiyun };
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun /*
170*4882a593Smuzhiyun  * rt field of cop.bc_op opcodes
171*4882a593Smuzhiyun  */
172*4882a593Smuzhiyun enum bcop_op {
173*4882a593Smuzhiyun 	bcf_op, bct_op, bcfl_op, bctl_op
174*4882a593Smuzhiyun };
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun /*
177*4882a593Smuzhiyun  * func field of cop0 coi opcodes.
178*4882a593Smuzhiyun  */
179*4882a593Smuzhiyun enum cop0_coi_func {
180*4882a593Smuzhiyun 	tlbr_op	      = 0x01, tlbwi_op	    = 0x02,
181*4882a593Smuzhiyun 	tlbwr_op      = 0x06, tlbp_op	    = 0x08,
182*4882a593Smuzhiyun 	rfe_op	      = 0x10, eret_op	    = 0x18,
183*4882a593Smuzhiyun 	wait_op       = 0x20, hypcall_op    = 0x28
184*4882a593Smuzhiyun };
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun /*
187*4882a593Smuzhiyun  * func field of cop0 com opcodes.
188*4882a593Smuzhiyun  */
189*4882a593Smuzhiyun enum cop0_com_func {
190*4882a593Smuzhiyun 	tlbr1_op      = 0x01, tlbw_op	    = 0x02,
191*4882a593Smuzhiyun 	tlbp1_op      = 0x08, dctr_op	    = 0x09,
192*4882a593Smuzhiyun 	dctw_op	      = 0x0a
193*4882a593Smuzhiyun };
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun /*
196*4882a593Smuzhiyun  * fmt field of cop1 opcodes.
197*4882a593Smuzhiyun  */
198*4882a593Smuzhiyun enum cop1_fmt {
199*4882a593Smuzhiyun 	s_fmt, d_fmt, e_fmt, q_fmt,
200*4882a593Smuzhiyun 	w_fmt, l_fmt
201*4882a593Smuzhiyun };
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun /*
204*4882a593Smuzhiyun  * func field of cop1 instructions using d, s or w format.
205*4882a593Smuzhiyun  */
206*4882a593Smuzhiyun enum cop1_sdw_func {
207*4882a593Smuzhiyun 	fadd_op	     =	0x00, fsub_op	   =  0x01,
208*4882a593Smuzhiyun 	fmul_op	     =	0x02, fdiv_op	   =  0x03,
209*4882a593Smuzhiyun 	fsqrt_op     =	0x04, fabs_op	   =  0x05,
210*4882a593Smuzhiyun 	fmov_op	     =	0x06, fneg_op	   =  0x07,
211*4882a593Smuzhiyun 	froundl_op   =	0x08, ftruncl_op   =  0x09,
212*4882a593Smuzhiyun 	fceill_op    =	0x0a, ffloorl_op   =  0x0b,
213*4882a593Smuzhiyun 	fround_op    =	0x0c, ftrunc_op	   =  0x0d,
214*4882a593Smuzhiyun 	fceil_op     =	0x0e, ffloor_op	   =  0x0f,
215*4882a593Smuzhiyun 	fsel_op      =  0x10,
216*4882a593Smuzhiyun 	fmovc_op     =	0x11, fmovz_op	   =  0x12,
217*4882a593Smuzhiyun 	fmovn_op     =	0x13, fseleqz_op   =  0x14,
218*4882a593Smuzhiyun 	frecip_op    =  0x15, frsqrt_op    =  0x16,
219*4882a593Smuzhiyun 	fselnez_op   =  0x17, fmaddf_op    =  0x18,
220*4882a593Smuzhiyun 	fmsubf_op    =  0x19, frint_op     =  0x1a,
221*4882a593Smuzhiyun 	fclass_op    =  0x1b, fmin_op      =  0x1c,
222*4882a593Smuzhiyun 	fmina_op     =  0x1d, fmax_op      =  0x1e,
223*4882a593Smuzhiyun 	fmaxa_op     =  0x1f, fcvts_op     =  0x20,
224*4882a593Smuzhiyun 	fcvtd_op     =	0x21, fcvte_op	   =  0x22,
225*4882a593Smuzhiyun 	fcvtw_op     =	0x24, fcvtl_op	   =  0x25,
226*4882a593Smuzhiyun 	fcmp_op	     =	0x30
227*4882a593Smuzhiyun };
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun /*
230*4882a593Smuzhiyun  * func field of cop1x opcodes (MIPS IV).
231*4882a593Smuzhiyun  */
232*4882a593Smuzhiyun enum cop1x_func {
233*4882a593Smuzhiyun 	lwxc1_op     =	0x00, ldxc1_op	   =  0x01,
234*4882a593Smuzhiyun 	swxc1_op     =  0x08, sdxc1_op	   =  0x09,
235*4882a593Smuzhiyun 	pfetch_op    =	0x0f, madd_s_op	   =  0x20,
236*4882a593Smuzhiyun 	madd_d_op    =	0x21, madd_e_op	   =  0x22,
237*4882a593Smuzhiyun 	msub_s_op    =	0x28, msub_d_op	   =  0x29,
238*4882a593Smuzhiyun 	msub_e_op    =	0x2a, nmadd_s_op   =  0x30,
239*4882a593Smuzhiyun 	nmadd_d_op   =	0x31, nmadd_e_op   =  0x32,
240*4882a593Smuzhiyun 	nmsub_s_op   =	0x38, nmsub_d_op   =  0x39,
241*4882a593Smuzhiyun 	nmsub_e_op   =	0x3a
242*4882a593Smuzhiyun };
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun /*
245*4882a593Smuzhiyun  * func field for mad opcodes (MIPS IV).
246*4882a593Smuzhiyun  */
247*4882a593Smuzhiyun enum mad_func {
248*4882a593Smuzhiyun 	madd_fp_op	= 0x08, msub_fp_op	= 0x0a,
249*4882a593Smuzhiyun 	nmadd_fp_op	= 0x0c, nmsub_fp_op	= 0x0e
250*4882a593Smuzhiyun };
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun /*
253*4882a593Smuzhiyun  * func field for page table walker (Loongson-3).
254*4882a593Smuzhiyun  */
255*4882a593Smuzhiyun enum ptw_func {
256*4882a593Smuzhiyun 	lwdir_op = 0x00,
257*4882a593Smuzhiyun 	lwpte_op = 0x01,
258*4882a593Smuzhiyun 	lddir_op = 0x02,
259*4882a593Smuzhiyun 	ldpte_op = 0x03,
260*4882a593Smuzhiyun };
261*4882a593Smuzhiyun 
262*4882a593Smuzhiyun /*
263*4882a593Smuzhiyun  * func field for special3 lx opcodes (Cavium Octeon).
264*4882a593Smuzhiyun  */
265*4882a593Smuzhiyun enum lx_func {
266*4882a593Smuzhiyun 	lwx_op	= 0x00,
267*4882a593Smuzhiyun 	lhx_op	= 0x04,
268*4882a593Smuzhiyun 	lbux_op = 0x06,
269*4882a593Smuzhiyun 	ldx_op	= 0x08,
270*4882a593Smuzhiyun 	lwux_op = 0x10,
271*4882a593Smuzhiyun 	lhux_op = 0x14,
272*4882a593Smuzhiyun 	lbx_op	= 0x16,
273*4882a593Smuzhiyun };
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun /*
276*4882a593Smuzhiyun  * BSHFL opcodes
277*4882a593Smuzhiyun  */
278*4882a593Smuzhiyun enum bshfl_func {
279*4882a593Smuzhiyun 	wsbh_op = 0x2,
280*4882a593Smuzhiyun 	seb_op  = 0x10,
281*4882a593Smuzhiyun 	seh_op  = 0x18,
282*4882a593Smuzhiyun };
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun /*
285*4882a593Smuzhiyun  * DBSHFL opcodes
286*4882a593Smuzhiyun  */
287*4882a593Smuzhiyun enum dbshfl_func {
288*4882a593Smuzhiyun 	dsbh_op = 0x2,
289*4882a593Smuzhiyun 	dshd_op = 0x5,
290*4882a593Smuzhiyun };
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun /*
293*4882a593Smuzhiyun  * MSA minor opcodes.
294*4882a593Smuzhiyun  */
295*4882a593Smuzhiyun enum msa_func {
296*4882a593Smuzhiyun 	msa_elm_op = 0x19,
297*4882a593Smuzhiyun };
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun /*
300*4882a593Smuzhiyun  * MSA ELM opcodes.
301*4882a593Smuzhiyun  */
302*4882a593Smuzhiyun enum msa_elm {
303*4882a593Smuzhiyun 	msa_ctc_op = 0x3e,
304*4882a593Smuzhiyun 	msa_cfc_op = 0x7e,
305*4882a593Smuzhiyun };
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun /*
308*4882a593Smuzhiyun  * func field for MSA MI10 format.
309*4882a593Smuzhiyun  */
310*4882a593Smuzhiyun enum msa_mi10_func {
311*4882a593Smuzhiyun 	msa_ld_op = 8,
312*4882a593Smuzhiyun 	msa_st_op = 9,
313*4882a593Smuzhiyun };
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun /*
316*4882a593Smuzhiyun  * MSA 2 bit format fields.
317*4882a593Smuzhiyun  */
318*4882a593Smuzhiyun enum msa_2b_fmt {
319*4882a593Smuzhiyun 	msa_fmt_b = 0,
320*4882a593Smuzhiyun 	msa_fmt_h = 1,
321*4882a593Smuzhiyun 	msa_fmt_w = 2,
322*4882a593Smuzhiyun 	msa_fmt_d = 3,
323*4882a593Smuzhiyun };
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun /*
326*4882a593Smuzhiyun  * (microMIPS) Major opcodes.
327*4882a593Smuzhiyun  */
328*4882a593Smuzhiyun enum mm_major_op {
329*4882a593Smuzhiyun 	mm_pool32a_op, mm_pool16a_op, mm_lbu16_op, mm_move16_op,
330*4882a593Smuzhiyun 	mm_addi32_op, mm_lbu32_op, mm_sb32_op, mm_lb32_op,
331*4882a593Smuzhiyun 	mm_pool32b_op, mm_pool16b_op, mm_lhu16_op, mm_andi16_op,
332*4882a593Smuzhiyun 	mm_addiu32_op, mm_lhu32_op, mm_sh32_op, mm_lh32_op,
333*4882a593Smuzhiyun 	mm_pool32i_op, mm_pool16c_op, mm_lwsp16_op, mm_pool16d_op,
334*4882a593Smuzhiyun 	mm_ori32_op, mm_pool32f_op, mm_pool32s_op, mm_reserved2_op,
335*4882a593Smuzhiyun 	mm_pool32c_op, mm_lwgp16_op, mm_lw16_op, mm_pool16e_op,
336*4882a593Smuzhiyun 	mm_xori32_op, mm_jals32_op, mm_addiupc_op, mm_reserved3_op,
337*4882a593Smuzhiyun 	mm_reserved4_op, mm_pool16f_op, mm_sb16_op, mm_beqz16_op,
338*4882a593Smuzhiyun 	mm_slti32_op, mm_beq32_op, mm_swc132_op, mm_lwc132_op,
339*4882a593Smuzhiyun 	mm_reserved5_op, mm_reserved6_op, mm_sh16_op, mm_bnez16_op,
340*4882a593Smuzhiyun 	mm_sltiu32_op, mm_bne32_op, mm_sdc132_op, mm_ldc132_op,
341*4882a593Smuzhiyun 	mm_reserved7_op, mm_reserved8_op, mm_swsp16_op, mm_b16_op,
342*4882a593Smuzhiyun 	mm_andi32_op, mm_j32_op, mm_sd32_op, mm_ld32_op,
343*4882a593Smuzhiyun 	mm_reserved11_op, mm_reserved12_op, mm_sw16_op, mm_li16_op,
344*4882a593Smuzhiyun 	mm_jalx32_op, mm_jal32_op, mm_sw32_op, mm_lw32_op,
345*4882a593Smuzhiyun };
346*4882a593Smuzhiyun 
347*4882a593Smuzhiyun /*
348*4882a593Smuzhiyun  * (microMIPS) POOL32I minor opcodes.
349*4882a593Smuzhiyun  */
350*4882a593Smuzhiyun enum mm_32i_minor_op {
351*4882a593Smuzhiyun 	mm_bltz_op, mm_bltzal_op, mm_bgez_op, mm_bgezal_op,
352*4882a593Smuzhiyun 	mm_blez_op, mm_bnezc_op, mm_bgtz_op, mm_beqzc_op,
353*4882a593Smuzhiyun 	mm_tlti_op, mm_tgei_op, mm_tltiu_op, mm_tgeiu_op,
354*4882a593Smuzhiyun 	mm_tnei_op, mm_lui_op, mm_teqi_op, mm_reserved13_op,
355*4882a593Smuzhiyun 	mm_synci_op, mm_bltzals_op, mm_reserved14_op, mm_bgezals_op,
356*4882a593Smuzhiyun 	mm_bc2f_op, mm_bc2t_op, mm_reserved15_op, mm_reserved16_op,
357*4882a593Smuzhiyun 	mm_reserved17_op, mm_reserved18_op, mm_bposge64_op, mm_bposge32_op,
358*4882a593Smuzhiyun 	mm_bc1f_op, mm_bc1t_op, mm_reserved19_op, mm_reserved20_op,
359*4882a593Smuzhiyun 	mm_bc1any2f_op, mm_bc1any2t_op, mm_bc1any4f_op, mm_bc1any4t_op,
360*4882a593Smuzhiyun };
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun /*
363*4882a593Smuzhiyun  * (microMIPS) POOL32A minor opcodes.
364*4882a593Smuzhiyun  */
365*4882a593Smuzhiyun enum mm_32a_minor_op {
366*4882a593Smuzhiyun 	mm_sll32_op = 0x000,
367*4882a593Smuzhiyun 	mm_ins_op = 0x00c,
368*4882a593Smuzhiyun 	mm_sllv32_op = 0x010,
369*4882a593Smuzhiyun 	mm_ext_op = 0x02c,
370*4882a593Smuzhiyun 	mm_pool32axf_op = 0x03c,
371*4882a593Smuzhiyun 	mm_srl32_op = 0x040,
372*4882a593Smuzhiyun 	mm_srlv32_op = 0x050,
373*4882a593Smuzhiyun 	mm_sra_op = 0x080,
374*4882a593Smuzhiyun 	mm_srav_op = 0x090,
375*4882a593Smuzhiyun 	mm_rotr_op = 0x0c0,
376*4882a593Smuzhiyun 	mm_lwxs_op = 0x118,
377*4882a593Smuzhiyun 	mm_addu32_op = 0x150,
378*4882a593Smuzhiyun 	mm_subu32_op = 0x1d0,
379*4882a593Smuzhiyun 	mm_wsbh_op = 0x1ec,
380*4882a593Smuzhiyun 	mm_mul_op = 0x210,
381*4882a593Smuzhiyun 	mm_and_op = 0x250,
382*4882a593Smuzhiyun 	mm_or32_op = 0x290,
383*4882a593Smuzhiyun 	mm_xor32_op = 0x310,
384*4882a593Smuzhiyun 	mm_slt_op = 0x350,
385*4882a593Smuzhiyun 	mm_sltu_op = 0x390,
386*4882a593Smuzhiyun };
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun /*
389*4882a593Smuzhiyun  * (microMIPS) POOL32B functions.
390*4882a593Smuzhiyun  */
391*4882a593Smuzhiyun enum mm_32b_func {
392*4882a593Smuzhiyun 	mm_lwc2_func = 0x0,
393*4882a593Smuzhiyun 	mm_lwp_func = 0x1,
394*4882a593Smuzhiyun 	mm_ldc2_func = 0x2,
395*4882a593Smuzhiyun 	mm_ldp_func = 0x4,
396*4882a593Smuzhiyun 	mm_lwm32_func = 0x5,
397*4882a593Smuzhiyun 	mm_cache_func = 0x6,
398*4882a593Smuzhiyun 	mm_ldm_func = 0x7,
399*4882a593Smuzhiyun 	mm_swc2_func = 0x8,
400*4882a593Smuzhiyun 	mm_swp_func = 0x9,
401*4882a593Smuzhiyun 	mm_sdc2_func = 0xa,
402*4882a593Smuzhiyun 	mm_sdp_func = 0xc,
403*4882a593Smuzhiyun 	mm_swm32_func = 0xd,
404*4882a593Smuzhiyun 	mm_sdm_func = 0xf,
405*4882a593Smuzhiyun };
406*4882a593Smuzhiyun 
407*4882a593Smuzhiyun /*
408*4882a593Smuzhiyun  * (microMIPS) POOL32C functions.
409*4882a593Smuzhiyun  */
410*4882a593Smuzhiyun enum mm_32c_func {
411*4882a593Smuzhiyun 	mm_pref_func = 0x2,
412*4882a593Smuzhiyun 	mm_ll_func = 0x3,
413*4882a593Smuzhiyun 	mm_swr_func = 0x9,
414*4882a593Smuzhiyun 	mm_sc_func = 0xb,
415*4882a593Smuzhiyun 	mm_lwu_func = 0xe,
416*4882a593Smuzhiyun };
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun /*
419*4882a593Smuzhiyun  * (microMIPS) POOL32AXF minor opcodes.
420*4882a593Smuzhiyun  */
421*4882a593Smuzhiyun enum mm_32axf_minor_op {
422*4882a593Smuzhiyun 	mm_mfc0_op = 0x003,
423*4882a593Smuzhiyun 	mm_mtc0_op = 0x00b,
424*4882a593Smuzhiyun 	mm_tlbp_op = 0x00d,
425*4882a593Smuzhiyun 	mm_mfhi32_op = 0x035,
426*4882a593Smuzhiyun 	mm_jalr_op = 0x03c,
427*4882a593Smuzhiyun 	mm_tlbr_op = 0x04d,
428*4882a593Smuzhiyun 	mm_mflo32_op = 0x075,
429*4882a593Smuzhiyun 	mm_jalrhb_op = 0x07c,
430*4882a593Smuzhiyun 	mm_tlbwi_op = 0x08d,
431*4882a593Smuzhiyun 	mm_mthi32_op = 0x0b5,
432*4882a593Smuzhiyun 	mm_tlbwr_op = 0x0cd,
433*4882a593Smuzhiyun 	mm_mtlo32_op = 0x0f5,
434*4882a593Smuzhiyun 	mm_di_op = 0x11d,
435*4882a593Smuzhiyun 	mm_jalrs_op = 0x13c,
436*4882a593Smuzhiyun 	mm_jalrshb_op = 0x17c,
437*4882a593Smuzhiyun 	mm_sync_op = 0x1ad,
438*4882a593Smuzhiyun 	mm_syscall_op = 0x22d,
439*4882a593Smuzhiyun 	mm_wait_op = 0x24d,
440*4882a593Smuzhiyun 	mm_eret_op = 0x3cd,
441*4882a593Smuzhiyun 	mm_divu_op = 0x5dc,
442*4882a593Smuzhiyun };
443*4882a593Smuzhiyun 
444*4882a593Smuzhiyun /*
445*4882a593Smuzhiyun  * (microMIPS) POOL32F minor opcodes.
446*4882a593Smuzhiyun  */
447*4882a593Smuzhiyun enum mm_32f_minor_op {
448*4882a593Smuzhiyun 	mm_32f_00_op = 0x00,
449*4882a593Smuzhiyun 	mm_32f_01_op = 0x01,
450*4882a593Smuzhiyun 	mm_32f_02_op = 0x02,
451*4882a593Smuzhiyun 	mm_32f_10_op = 0x08,
452*4882a593Smuzhiyun 	mm_32f_11_op = 0x09,
453*4882a593Smuzhiyun 	mm_32f_12_op = 0x0a,
454*4882a593Smuzhiyun 	mm_32f_20_op = 0x10,
455*4882a593Smuzhiyun 	mm_32f_30_op = 0x18,
456*4882a593Smuzhiyun 	mm_32f_40_op = 0x20,
457*4882a593Smuzhiyun 	mm_32f_41_op = 0x21,
458*4882a593Smuzhiyun 	mm_32f_42_op = 0x22,
459*4882a593Smuzhiyun 	mm_32f_50_op = 0x28,
460*4882a593Smuzhiyun 	mm_32f_51_op = 0x29,
461*4882a593Smuzhiyun 	mm_32f_52_op = 0x2a,
462*4882a593Smuzhiyun 	mm_32f_60_op = 0x30,
463*4882a593Smuzhiyun 	mm_32f_70_op = 0x38,
464*4882a593Smuzhiyun 	mm_32f_73_op = 0x3b,
465*4882a593Smuzhiyun 	mm_32f_74_op = 0x3c,
466*4882a593Smuzhiyun };
467*4882a593Smuzhiyun 
468*4882a593Smuzhiyun /*
469*4882a593Smuzhiyun  * (microMIPS) POOL32F secondary minor opcodes.
470*4882a593Smuzhiyun  */
471*4882a593Smuzhiyun enum mm_32f_10_minor_op {
472*4882a593Smuzhiyun 	mm_lwxc1_op = 0x1,
473*4882a593Smuzhiyun 	mm_swxc1_op,
474*4882a593Smuzhiyun 	mm_ldxc1_op,
475*4882a593Smuzhiyun 	mm_sdxc1_op,
476*4882a593Smuzhiyun 	mm_luxc1_op,
477*4882a593Smuzhiyun 	mm_suxc1_op,
478*4882a593Smuzhiyun };
479*4882a593Smuzhiyun 
480*4882a593Smuzhiyun enum mm_32f_func {
481*4882a593Smuzhiyun 	mm_lwxc1_func = 0x048,
482*4882a593Smuzhiyun 	mm_swxc1_func = 0x088,
483*4882a593Smuzhiyun 	mm_ldxc1_func = 0x0c8,
484*4882a593Smuzhiyun 	mm_sdxc1_func = 0x108,
485*4882a593Smuzhiyun };
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun /*
488*4882a593Smuzhiyun  * (microMIPS) POOL32F secondary minor opcodes.
489*4882a593Smuzhiyun  */
490*4882a593Smuzhiyun enum mm_32f_40_minor_op {
491*4882a593Smuzhiyun 	mm_fmovf_op,
492*4882a593Smuzhiyun 	mm_fmovt_op,
493*4882a593Smuzhiyun };
494*4882a593Smuzhiyun 
495*4882a593Smuzhiyun /*
496*4882a593Smuzhiyun  * (microMIPS) POOL32F secondary minor opcodes.
497*4882a593Smuzhiyun  */
498*4882a593Smuzhiyun enum mm_32f_60_minor_op {
499*4882a593Smuzhiyun 	mm_fadd_op,
500*4882a593Smuzhiyun 	mm_fsub_op,
501*4882a593Smuzhiyun 	mm_fmul_op,
502*4882a593Smuzhiyun 	mm_fdiv_op,
503*4882a593Smuzhiyun };
504*4882a593Smuzhiyun 
505*4882a593Smuzhiyun /*
506*4882a593Smuzhiyun  * (microMIPS) POOL32F secondary minor opcodes.
507*4882a593Smuzhiyun  */
508*4882a593Smuzhiyun enum mm_32f_70_minor_op {
509*4882a593Smuzhiyun 	mm_fmovn_op,
510*4882a593Smuzhiyun 	mm_fmovz_op,
511*4882a593Smuzhiyun };
512*4882a593Smuzhiyun 
513*4882a593Smuzhiyun /*
514*4882a593Smuzhiyun  * (microMIPS) POOL32FXF secondary minor opcodes for POOL32F.
515*4882a593Smuzhiyun  */
516*4882a593Smuzhiyun enum mm_32f_73_minor_op {
517*4882a593Smuzhiyun 	mm_fmov0_op = 0x01,
518*4882a593Smuzhiyun 	mm_fcvtl_op = 0x04,
519*4882a593Smuzhiyun 	mm_movf0_op = 0x05,
520*4882a593Smuzhiyun 	mm_frsqrt_op = 0x08,
521*4882a593Smuzhiyun 	mm_ffloorl_op = 0x0c,
522*4882a593Smuzhiyun 	mm_fabs0_op = 0x0d,
523*4882a593Smuzhiyun 	mm_fcvtw_op = 0x24,
524*4882a593Smuzhiyun 	mm_movt0_op = 0x25,
525*4882a593Smuzhiyun 	mm_fsqrt_op = 0x28,
526*4882a593Smuzhiyun 	mm_ffloorw_op = 0x2c,
527*4882a593Smuzhiyun 	mm_fneg0_op = 0x2d,
528*4882a593Smuzhiyun 	mm_cfc1_op = 0x40,
529*4882a593Smuzhiyun 	mm_frecip_op = 0x48,
530*4882a593Smuzhiyun 	mm_fceill_op = 0x4c,
531*4882a593Smuzhiyun 	mm_fcvtd0_op = 0x4d,
532*4882a593Smuzhiyun 	mm_ctc1_op = 0x60,
533*4882a593Smuzhiyun 	mm_fceilw_op = 0x6c,
534*4882a593Smuzhiyun 	mm_fcvts0_op = 0x6d,
535*4882a593Smuzhiyun 	mm_mfc1_op = 0x80,
536*4882a593Smuzhiyun 	mm_fmov1_op = 0x81,
537*4882a593Smuzhiyun 	mm_movf1_op = 0x85,
538*4882a593Smuzhiyun 	mm_ftruncl_op = 0x8c,
539*4882a593Smuzhiyun 	mm_fabs1_op = 0x8d,
540*4882a593Smuzhiyun 	mm_mtc1_op = 0xa0,
541*4882a593Smuzhiyun 	mm_movt1_op = 0xa5,
542*4882a593Smuzhiyun 	mm_ftruncw_op = 0xac,
543*4882a593Smuzhiyun 	mm_fneg1_op = 0xad,
544*4882a593Smuzhiyun 	mm_mfhc1_op = 0xc0,
545*4882a593Smuzhiyun 	mm_froundl_op = 0xcc,
546*4882a593Smuzhiyun 	mm_fcvtd1_op = 0xcd,
547*4882a593Smuzhiyun 	mm_mthc1_op = 0xe0,
548*4882a593Smuzhiyun 	mm_froundw_op = 0xec,
549*4882a593Smuzhiyun 	mm_fcvts1_op = 0xed,
550*4882a593Smuzhiyun };
551*4882a593Smuzhiyun 
552*4882a593Smuzhiyun /*
553*4882a593Smuzhiyun  * (microMIPS) POOL32S minor opcodes.
554*4882a593Smuzhiyun  */
555*4882a593Smuzhiyun enum mm_32s_minor_op {
556*4882a593Smuzhiyun 	mm_32s_elm_op = 0x16,
557*4882a593Smuzhiyun };
558*4882a593Smuzhiyun 
559*4882a593Smuzhiyun /*
560*4882a593Smuzhiyun  * (microMIPS) POOL16C minor opcodes.
561*4882a593Smuzhiyun  */
562*4882a593Smuzhiyun enum mm_16c_minor_op {
563*4882a593Smuzhiyun 	mm_lwm16_op = 0x04,
564*4882a593Smuzhiyun 	mm_swm16_op = 0x05,
565*4882a593Smuzhiyun 	mm_jr16_op = 0x0c,
566*4882a593Smuzhiyun 	mm_jrc_op = 0x0d,
567*4882a593Smuzhiyun 	mm_jalr16_op = 0x0e,
568*4882a593Smuzhiyun 	mm_jalrs16_op = 0x0f,
569*4882a593Smuzhiyun 	mm_jraddiusp_op = 0x18,
570*4882a593Smuzhiyun };
571*4882a593Smuzhiyun 
572*4882a593Smuzhiyun /*
573*4882a593Smuzhiyun  * (microMIPS) POOL16D minor opcodes.
574*4882a593Smuzhiyun  */
575*4882a593Smuzhiyun enum mm_16d_minor_op {
576*4882a593Smuzhiyun 	mm_addius5_func,
577*4882a593Smuzhiyun 	mm_addiusp_func,
578*4882a593Smuzhiyun };
579*4882a593Smuzhiyun 
580*4882a593Smuzhiyun /*
581*4882a593Smuzhiyun  * (MIPS16e) opcodes.
582*4882a593Smuzhiyun  */
583*4882a593Smuzhiyun enum MIPS16e_ops {
584*4882a593Smuzhiyun 	MIPS16e_jal_op = 003,
585*4882a593Smuzhiyun 	MIPS16e_ld_op = 007,
586*4882a593Smuzhiyun 	MIPS16e_i8_op = 014,
587*4882a593Smuzhiyun 	MIPS16e_sd_op = 017,
588*4882a593Smuzhiyun 	MIPS16e_lb_op = 020,
589*4882a593Smuzhiyun 	MIPS16e_lh_op = 021,
590*4882a593Smuzhiyun 	MIPS16e_lwsp_op = 022,
591*4882a593Smuzhiyun 	MIPS16e_lw_op = 023,
592*4882a593Smuzhiyun 	MIPS16e_lbu_op = 024,
593*4882a593Smuzhiyun 	MIPS16e_lhu_op = 025,
594*4882a593Smuzhiyun 	MIPS16e_lwpc_op = 026,
595*4882a593Smuzhiyun 	MIPS16e_lwu_op = 027,
596*4882a593Smuzhiyun 	MIPS16e_sb_op = 030,
597*4882a593Smuzhiyun 	MIPS16e_sh_op = 031,
598*4882a593Smuzhiyun 	MIPS16e_swsp_op = 032,
599*4882a593Smuzhiyun 	MIPS16e_sw_op = 033,
600*4882a593Smuzhiyun 	MIPS16e_rr_op = 035,
601*4882a593Smuzhiyun 	MIPS16e_extend_op = 036,
602*4882a593Smuzhiyun 	MIPS16e_i64_op = 037,
603*4882a593Smuzhiyun };
604*4882a593Smuzhiyun 
605*4882a593Smuzhiyun enum MIPS16e_i64_func {
606*4882a593Smuzhiyun 	MIPS16e_ldsp_func,
607*4882a593Smuzhiyun 	MIPS16e_sdsp_func,
608*4882a593Smuzhiyun 	MIPS16e_sdrasp_func,
609*4882a593Smuzhiyun 	MIPS16e_dadjsp_func,
610*4882a593Smuzhiyun 	MIPS16e_ldpc_func,
611*4882a593Smuzhiyun };
612*4882a593Smuzhiyun 
613*4882a593Smuzhiyun enum MIPS16e_rr_func {
614*4882a593Smuzhiyun 	MIPS16e_jr_func,
615*4882a593Smuzhiyun };
616*4882a593Smuzhiyun 
617*4882a593Smuzhiyun enum MIPS6e_i8_func {
618*4882a593Smuzhiyun 	MIPS16e_swrasp_func = 02,
619*4882a593Smuzhiyun };
620*4882a593Smuzhiyun 
621*4882a593Smuzhiyun /*
622*4882a593Smuzhiyun  * (microMIPS) NOP instruction.
623*4882a593Smuzhiyun  */
624*4882a593Smuzhiyun #define MM_NOP16	0x0c00
625*4882a593Smuzhiyun 
626*4882a593Smuzhiyun struct j_format {
627*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6, /* Jump format */
628*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int target : 26,
629*4882a593Smuzhiyun 	;))
630*4882a593Smuzhiyun };
631*4882a593Smuzhiyun 
632*4882a593Smuzhiyun struct i_format {			/* signed immediate format */
633*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
634*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 5,
635*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
636*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int simmediate : 16,
637*4882a593Smuzhiyun 	;))))
638*4882a593Smuzhiyun };
639*4882a593Smuzhiyun 
640*4882a593Smuzhiyun struct u_format {			/* unsigned immediate format */
641*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
642*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 5,
643*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
644*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int uimmediate : 16,
645*4882a593Smuzhiyun 	;))))
646*4882a593Smuzhiyun };
647*4882a593Smuzhiyun 
648*4882a593Smuzhiyun struct c_format {			/* Cache (>= R6000) format */
649*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
650*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 5,
651*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int c_op : 3,
652*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int cache : 2,
653*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int simmediate : 16,
654*4882a593Smuzhiyun 	;)))))
655*4882a593Smuzhiyun };
656*4882a593Smuzhiyun 
657*4882a593Smuzhiyun struct r_format {			/* Register format */
658*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
659*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 5,
660*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
661*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rd : 5,
662*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int re : 5,
663*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
664*4882a593Smuzhiyun 	;))))))
665*4882a593Smuzhiyun };
666*4882a593Smuzhiyun 
667*4882a593Smuzhiyun struct c0r_format {			/* C0 register format */
668*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
669*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 5,
670*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
671*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rd : 5,
672*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int z: 8,
673*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int sel : 3,
674*4882a593Smuzhiyun 	;))))))
675*4882a593Smuzhiyun };
676*4882a593Smuzhiyun 
677*4882a593Smuzhiyun struct mfmc0_format {			/* MFMC0 register format */
678*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
679*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 5,
680*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
681*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rd : 5,
682*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int re : 5,
683*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int sc : 1,
684*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int : 2,
685*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int sel : 3,
686*4882a593Smuzhiyun 	;))))))))
687*4882a593Smuzhiyun };
688*4882a593Smuzhiyun 
689*4882a593Smuzhiyun struct co_format {			/* C0 CO format */
690*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
691*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int co : 1,
692*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int code : 19,
693*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
694*4882a593Smuzhiyun 	;))))
695*4882a593Smuzhiyun };
696*4882a593Smuzhiyun 
697*4882a593Smuzhiyun struct p_format {		/* Performance counter format (R10000) */
698*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
699*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 5,
700*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
701*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rd : 5,
702*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int re : 5,
703*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
704*4882a593Smuzhiyun 	;))))))
705*4882a593Smuzhiyun };
706*4882a593Smuzhiyun 
707*4882a593Smuzhiyun struct f_format {			/* FPU register format */
708*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
709*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int : 1,
710*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fmt : 4,
711*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
712*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rd : 5,
713*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int re : 5,
714*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
715*4882a593Smuzhiyun 	;)))))))
716*4882a593Smuzhiyun };
717*4882a593Smuzhiyun 
718*4882a593Smuzhiyun struct ma_format {		/* FPU multiply and add format (MIPS IV) */
719*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
720*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fr : 5,
721*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int ft : 5,
722*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fs : 5,
723*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fd : 5,
724*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 4,
725*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fmt : 2,
726*4882a593Smuzhiyun 	;)))))))
727*4882a593Smuzhiyun };
728*4882a593Smuzhiyun 
729*4882a593Smuzhiyun struct b_format {			/* BREAK and SYSCALL */
730*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
731*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int code : 20,
732*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
733*4882a593Smuzhiyun 	;)))
734*4882a593Smuzhiyun };
735*4882a593Smuzhiyun 
736*4882a593Smuzhiyun struct ps_format {			/* MIPS-3D / paired single format */
737*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
738*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 5,
739*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int ft : 5,
740*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fs : 5,
741*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fd : 5,
742*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
743*4882a593Smuzhiyun 	;))))))
744*4882a593Smuzhiyun };
745*4882a593Smuzhiyun 
746*4882a593Smuzhiyun struct v_format {				/* MDMX vector format */
747*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
748*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int sel : 4,
749*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fmt : 1,
750*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int vt : 5,
751*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int vs : 5,
752*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int vd : 5,
753*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
754*4882a593Smuzhiyun 	;)))))))
755*4882a593Smuzhiyun };
756*4882a593Smuzhiyun 
757*4882a593Smuzhiyun struct msa_mi10_format {		/* MSA MI10 */
758*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
759*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int s10 : 10,
760*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 5,
761*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int wd : 5,
762*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 4,
763*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int df : 2,
764*4882a593Smuzhiyun 	;))))))
765*4882a593Smuzhiyun };
766*4882a593Smuzhiyun 
767*4882a593Smuzhiyun struct dsp_format {		/* SPEC3 DSP format instructions */
768*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
769*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int base : 5,
770*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int index : 5,
771*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rd : 5,
772*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int op : 5,
773*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
774*4882a593Smuzhiyun 	;))))))
775*4882a593Smuzhiyun };
776*4882a593Smuzhiyun 
777*4882a593Smuzhiyun struct spec3_format {   /* SPEC3 */
778*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode:6,
779*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs:5,
780*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt:5,
781*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int simmediate:9,
782*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func:7,
783*4882a593Smuzhiyun 	;)))))
784*4882a593Smuzhiyun };
785*4882a593Smuzhiyun 
786*4882a593Smuzhiyun /*
787*4882a593Smuzhiyun  * microMIPS instruction formats (32-bit length)
788*4882a593Smuzhiyun  *
789*4882a593Smuzhiyun  * NOTE:
790*4882a593Smuzhiyun  *	Parenthesis denote whether the format is a microMIPS instruction or
791*4882a593Smuzhiyun  *	if it is MIPS32 instruction re-encoded for use in the microMIPS ASE.
792*4882a593Smuzhiyun  */
793*4882a593Smuzhiyun struct fb_format {		/* FPU branch format (MIPS32) */
794*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
795*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int bc : 5,
796*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int cc : 3,
797*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int flag : 2,
798*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int simmediate : 16,
799*4882a593Smuzhiyun 	;)))))
800*4882a593Smuzhiyun };
801*4882a593Smuzhiyun 
802*4882a593Smuzhiyun struct fp0_format {		/* FPU multiply and add format (MIPS32) */
803*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
804*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fmt : 5,
805*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int ft : 5,
806*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fs : 5,
807*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fd : 5,
808*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
809*4882a593Smuzhiyun 	;))))))
810*4882a593Smuzhiyun };
811*4882a593Smuzhiyun 
812*4882a593Smuzhiyun struct mm_fp0_format {		/* FPU multiply and add format (microMIPS) */
813*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
814*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int ft : 5,
815*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fs : 5,
816*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fd : 5,
817*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fmt : 3,
818*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int op : 2,
819*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
820*4882a593Smuzhiyun 	;)))))))
821*4882a593Smuzhiyun };
822*4882a593Smuzhiyun 
823*4882a593Smuzhiyun struct fp1_format {		/* FPU mfc1 and cfc1 format (MIPS32) */
824*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
825*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int op : 5,
826*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
827*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fs : 5,
828*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fd : 5,
829*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
830*4882a593Smuzhiyun 	;))))))
831*4882a593Smuzhiyun };
832*4882a593Smuzhiyun 
833*4882a593Smuzhiyun struct mm_fp1_format {		/* FPU mfc1 and cfc1 format (microMIPS) */
834*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
835*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
836*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fs : 5,
837*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fmt : 2,
838*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int op : 8,
839*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
840*4882a593Smuzhiyun 	;))))))
841*4882a593Smuzhiyun };
842*4882a593Smuzhiyun 
843*4882a593Smuzhiyun struct mm_fp2_format {		/* FPU movt and movf format (microMIPS) */
844*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
845*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fd : 5,
846*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fs : 5,
847*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int cc : 3,
848*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int zero : 2,
849*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fmt : 2,
850*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int op : 3,
851*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
852*4882a593Smuzhiyun 	;))))))))
853*4882a593Smuzhiyun };
854*4882a593Smuzhiyun 
855*4882a593Smuzhiyun struct mm_fp3_format {		/* FPU abs and neg format (microMIPS) */
856*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
857*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
858*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fs : 5,
859*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fmt : 3,
860*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int op : 7,
861*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
862*4882a593Smuzhiyun 	;))))))
863*4882a593Smuzhiyun };
864*4882a593Smuzhiyun 
865*4882a593Smuzhiyun struct mm_fp4_format {		/* FPU c.cond format (microMIPS) */
866*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
867*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
868*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fs : 5,
869*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int cc : 3,
870*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fmt : 3,
871*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int cond : 4,
872*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
873*4882a593Smuzhiyun 	;)))))))
874*4882a593Smuzhiyun };
875*4882a593Smuzhiyun 
876*4882a593Smuzhiyun struct mm_fp5_format {		/* FPU lwxc1 and swxc1 format (microMIPS) */
877*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
878*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int index : 5,
879*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int base : 5,
880*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fd : 5,
881*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int op : 5,
882*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
883*4882a593Smuzhiyun 	;))))))
884*4882a593Smuzhiyun };
885*4882a593Smuzhiyun 
886*4882a593Smuzhiyun struct fp6_format {		/* FPU madd and msub format (MIPS IV) */
887*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
888*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fr : 5,
889*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int ft : 5,
890*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fs : 5,
891*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fd : 5,
892*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
893*4882a593Smuzhiyun 	;))))))
894*4882a593Smuzhiyun };
895*4882a593Smuzhiyun 
896*4882a593Smuzhiyun struct mm_fp6_format {		/* FPU madd and msub format (microMIPS) */
897*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
898*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int ft : 5,
899*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fs : 5,
900*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fd : 5,
901*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fr : 5,
902*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
903*4882a593Smuzhiyun 	;))))))
904*4882a593Smuzhiyun };
905*4882a593Smuzhiyun 
906*4882a593Smuzhiyun struct mm_i_format {		/* Immediate format (microMIPS) */
907*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
908*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
909*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 5,
910*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int simmediate : 16,
911*4882a593Smuzhiyun 	;))))
912*4882a593Smuzhiyun };
913*4882a593Smuzhiyun 
914*4882a593Smuzhiyun struct mm_m_format {		/* Multi-word load/store format (microMIPS) */
915*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
916*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rd : 5,
917*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int base : 5,
918*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 4,
919*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int simmediate : 12,
920*4882a593Smuzhiyun 	;)))))
921*4882a593Smuzhiyun };
922*4882a593Smuzhiyun 
923*4882a593Smuzhiyun struct mm_x_format {		/* Scaled indexed load format (microMIPS) */
924*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
925*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int index : 5,
926*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int base : 5,
927*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rd : 5,
928*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 11,
929*4882a593Smuzhiyun 	;)))))
930*4882a593Smuzhiyun };
931*4882a593Smuzhiyun 
932*4882a593Smuzhiyun struct mm_a_format {		/* ADDIUPC format (microMIPS) */
933*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
934*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 3,
935*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int simmediate : 23,
936*4882a593Smuzhiyun 	;)))
937*4882a593Smuzhiyun };
938*4882a593Smuzhiyun 
939*4882a593Smuzhiyun /*
940*4882a593Smuzhiyun  * microMIPS instruction formats (16-bit length)
941*4882a593Smuzhiyun  */
942*4882a593Smuzhiyun struct mm_b0_format {		/* Unconditional branch format (microMIPS) */
943*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
944*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int simmediate : 10,
945*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int : 16, /* Ignored */
946*4882a593Smuzhiyun 	;)))
947*4882a593Smuzhiyun };
948*4882a593Smuzhiyun 
949*4882a593Smuzhiyun struct mm_b1_format {		/* Conditional branch format (microMIPS) */
950*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
951*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 3,
952*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int simmediate : 7,
953*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int : 16, /* Ignored */
954*4882a593Smuzhiyun 	;))))
955*4882a593Smuzhiyun };
956*4882a593Smuzhiyun 
957*4882a593Smuzhiyun struct mm16_m_format {		/* Multi-word load/store format */
958*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
959*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 4,
960*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rlist : 2,
961*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int imm : 4,
962*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int : 16, /* Ignored */
963*4882a593Smuzhiyun 	;)))))
964*4882a593Smuzhiyun };
965*4882a593Smuzhiyun 
966*4882a593Smuzhiyun struct mm16_rb_format {		/* Signed immediate format */
967*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
968*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 3,
969*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int base : 3,
970*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int simmediate : 4,
971*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int : 16, /* Ignored */
972*4882a593Smuzhiyun 	;)))))
973*4882a593Smuzhiyun };
974*4882a593Smuzhiyun 
975*4882a593Smuzhiyun struct mm16_r3_format {		/* Load from global pointer format */
976*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
977*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 3,
978*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int simmediate : 7,
979*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int : 16, /* Ignored */
980*4882a593Smuzhiyun 	;))))
981*4882a593Smuzhiyun };
982*4882a593Smuzhiyun 
983*4882a593Smuzhiyun struct mm16_r5_format {		/* Load/store from stack pointer format */
984*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
985*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
986*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int imm : 5,
987*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int : 16, /* Ignored */
988*4882a593Smuzhiyun 	;))))
989*4882a593Smuzhiyun };
990*4882a593Smuzhiyun 
991*4882a593Smuzhiyun /*
992*4882a593Smuzhiyun  * Loongson-3 overridden COP2 instruction formats (32-bit length)
993*4882a593Smuzhiyun  */
994*4882a593Smuzhiyun struct loongson3_lswc2_format {	/* Loongson-3 overridden lwc2/swc2 Load/Store format */
995*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
996*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int base : 5,
997*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
998*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fr : 1,
999*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int offset : 9,
1000*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int ls : 1,
1001*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rq : 5,
1002*4882a593Smuzhiyun 	;)))))))
1003*4882a593Smuzhiyun };
1004*4882a593Smuzhiyun 
1005*4882a593Smuzhiyun struct loongson3_lsdc2_format {	/* Loongson-3 overridden ldc2/sdc2 Load/Store format */
1006*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
1007*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int base : 5,
1008*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rt : 5,
1009*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int index : 5,
1010*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int offset : 8,
1011*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode1 : 3,
1012*4882a593Smuzhiyun 	;))))))
1013*4882a593Smuzhiyun };
1014*4882a593Smuzhiyun 
1015*4882a593Smuzhiyun struct loongson3_lscsr_format {	/* Loongson-3 CPUCFG&CSR read/write format */
1016*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 6,
1017*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rs : 5,
1018*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fr : 5,
1019*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rd : 5,
1020*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int fd : 5,
1021*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 6,
1022*4882a593Smuzhiyun 	;))))))
1023*4882a593Smuzhiyun };
1024*4882a593Smuzhiyun 
1025*4882a593Smuzhiyun /*
1026*4882a593Smuzhiyun  * MIPS16e instruction formats (16-bit length)
1027*4882a593Smuzhiyun  */
1028*4882a593Smuzhiyun struct m16e_rr {
1029*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 5,
1030*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rx : 3,
1031*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int nd : 1,
1032*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int l : 1,
1033*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int ra : 1,
1034*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 5,
1035*4882a593Smuzhiyun 	;))))))
1036*4882a593Smuzhiyun };
1037*4882a593Smuzhiyun 
1038*4882a593Smuzhiyun struct m16e_jal {
1039*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 5,
1040*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int x : 1,
1041*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int imm20_16 : 5,
1042*4882a593Smuzhiyun 	__BITFIELD_FIELD(signed int imm25_21 : 5,
1043*4882a593Smuzhiyun 	;))))
1044*4882a593Smuzhiyun };
1045*4882a593Smuzhiyun 
1046*4882a593Smuzhiyun struct m16e_i64 {
1047*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 5,
1048*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 3,
1049*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int imm : 8,
1050*4882a593Smuzhiyun 	;)))
1051*4882a593Smuzhiyun };
1052*4882a593Smuzhiyun 
1053*4882a593Smuzhiyun struct m16e_ri64 {
1054*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 5,
1055*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 3,
1056*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int ry : 3,
1057*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int imm : 5,
1058*4882a593Smuzhiyun 	;))))
1059*4882a593Smuzhiyun };
1060*4882a593Smuzhiyun 
1061*4882a593Smuzhiyun struct m16e_ri {
1062*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 5,
1063*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rx : 3,
1064*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int imm : 8,
1065*4882a593Smuzhiyun 	;)))
1066*4882a593Smuzhiyun };
1067*4882a593Smuzhiyun 
1068*4882a593Smuzhiyun struct m16e_rri {
1069*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 5,
1070*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int rx : 3,
1071*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int ry : 3,
1072*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int imm : 5,
1073*4882a593Smuzhiyun 	;))))
1074*4882a593Smuzhiyun };
1075*4882a593Smuzhiyun 
1076*4882a593Smuzhiyun struct m16e_i8 {
1077*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int opcode : 5,
1078*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int func : 3,
1079*4882a593Smuzhiyun 	__BITFIELD_FIELD(unsigned int imm : 8,
1080*4882a593Smuzhiyun 	;)))
1081*4882a593Smuzhiyun };
1082*4882a593Smuzhiyun 
1083*4882a593Smuzhiyun union mips_instruction {
1084*4882a593Smuzhiyun 	unsigned int word;
1085*4882a593Smuzhiyun 	unsigned short halfword[2];
1086*4882a593Smuzhiyun 	unsigned char byte[4];
1087*4882a593Smuzhiyun 	struct j_format j_format;
1088*4882a593Smuzhiyun 	struct i_format i_format;
1089*4882a593Smuzhiyun 	struct u_format u_format;
1090*4882a593Smuzhiyun 	struct c_format c_format;
1091*4882a593Smuzhiyun 	struct r_format r_format;
1092*4882a593Smuzhiyun 	struct c0r_format c0r_format;
1093*4882a593Smuzhiyun 	struct mfmc0_format mfmc0_format;
1094*4882a593Smuzhiyun 	struct co_format co_format;
1095*4882a593Smuzhiyun 	struct p_format p_format;
1096*4882a593Smuzhiyun 	struct f_format f_format;
1097*4882a593Smuzhiyun 	struct ma_format ma_format;
1098*4882a593Smuzhiyun 	struct msa_mi10_format msa_mi10_format;
1099*4882a593Smuzhiyun 	struct b_format b_format;
1100*4882a593Smuzhiyun 	struct ps_format ps_format;
1101*4882a593Smuzhiyun 	struct v_format v_format;
1102*4882a593Smuzhiyun 	struct dsp_format dsp_format;
1103*4882a593Smuzhiyun 	struct spec3_format spec3_format;
1104*4882a593Smuzhiyun 	struct fb_format fb_format;
1105*4882a593Smuzhiyun 	struct fp0_format fp0_format;
1106*4882a593Smuzhiyun 	struct mm_fp0_format mm_fp0_format;
1107*4882a593Smuzhiyun 	struct fp1_format fp1_format;
1108*4882a593Smuzhiyun 	struct mm_fp1_format mm_fp1_format;
1109*4882a593Smuzhiyun 	struct mm_fp2_format mm_fp2_format;
1110*4882a593Smuzhiyun 	struct mm_fp3_format mm_fp3_format;
1111*4882a593Smuzhiyun 	struct mm_fp4_format mm_fp4_format;
1112*4882a593Smuzhiyun 	struct mm_fp5_format mm_fp5_format;
1113*4882a593Smuzhiyun 	struct fp6_format fp6_format;
1114*4882a593Smuzhiyun 	struct mm_fp6_format mm_fp6_format;
1115*4882a593Smuzhiyun 	struct mm_i_format mm_i_format;
1116*4882a593Smuzhiyun 	struct mm_m_format mm_m_format;
1117*4882a593Smuzhiyun 	struct mm_x_format mm_x_format;
1118*4882a593Smuzhiyun 	struct mm_a_format mm_a_format;
1119*4882a593Smuzhiyun 	struct mm_b0_format mm_b0_format;
1120*4882a593Smuzhiyun 	struct mm_b1_format mm_b1_format;
1121*4882a593Smuzhiyun 	struct mm16_m_format mm16_m_format ;
1122*4882a593Smuzhiyun 	struct mm16_rb_format mm16_rb_format;
1123*4882a593Smuzhiyun 	struct mm16_r3_format mm16_r3_format;
1124*4882a593Smuzhiyun 	struct mm16_r5_format mm16_r5_format;
1125*4882a593Smuzhiyun 	struct loongson3_lswc2_format loongson3_lswc2_format;
1126*4882a593Smuzhiyun 	struct loongson3_lsdc2_format loongson3_lsdc2_format;
1127*4882a593Smuzhiyun 	struct loongson3_lscsr_format loongson3_lscsr_format;
1128*4882a593Smuzhiyun };
1129*4882a593Smuzhiyun 
1130*4882a593Smuzhiyun union mips16e_instruction {
1131*4882a593Smuzhiyun 	unsigned int full : 16;
1132*4882a593Smuzhiyun 	struct m16e_rr rr;
1133*4882a593Smuzhiyun 	struct m16e_jal jal;
1134*4882a593Smuzhiyun 	struct m16e_i64 i64;
1135*4882a593Smuzhiyun 	struct m16e_ri64 ri64;
1136*4882a593Smuzhiyun 	struct m16e_ri ri;
1137*4882a593Smuzhiyun 	struct m16e_rri rri;
1138*4882a593Smuzhiyun 	struct m16e_i8 i8;
1139*4882a593Smuzhiyun };
1140*4882a593Smuzhiyun 
1141*4882a593Smuzhiyun #endif /* _UAPI_ASM_INST_H */
1142