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