The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/mips/include/mips_opcode.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $OpenBSD: mips_opcode.h,v 1.2 1999/01/27 04:46:05 imp Exp $     */
    2 
    3 /*-
    4  * Copyright (c) 1992, 1993
    5  *      The Regents of the University of California.  All rights reserved.
    6  *
    7  * This code is derived from software contributed to Berkeley by
    8  * Ralph Campbell.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  * 4. Neither the name of the University nor the names of its contributors
   19  *    may be used to endorse or promote products derived from this software
   20  *    without specific prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   32  * SUCH DAMAGE.
   33  *
   34  *      from: @(#)mips_opcode.h 8.1 (Berkeley) 6/10/93
   35  *      JNPR: mips_opcode.h,v 1.1 2006/08/07 05:38:57 katta
   36  * $FreeBSD$
   37  */
   38 
   39 #ifndef _MACHINE_MIPS_OPCODE_H_
   40 #define _MACHINE_MIPS_OPCODE_H_
   41 
   42 /*
   43  * Define the instruction formats and opcode values for the
   44  * MIPS instruction set.
   45  */
   46 #include <machine/endian.h>
   47 
   48 /*
   49  * Define the instruction formats.
   50  */
   51 typedef union {
   52         unsigned word;
   53 
   54 #if BYTE_ORDER == BIG_ENDIAN
   55         struct {
   56                 unsigned op: 6;
   57                 unsigned rs: 5;
   58                 unsigned rt: 5;
   59                 unsigned imm: 16;
   60         } IType;
   61 
   62         struct {
   63                 unsigned op: 6;
   64                 unsigned target: 26;
   65         } JType;
   66 
   67         struct {
   68                 unsigned op: 6;
   69                 unsigned rs: 5;
   70                 unsigned rt: 5;
   71                 unsigned rd: 5;
   72                 unsigned shamt: 5;
   73                 unsigned func: 6;
   74         } RType;
   75 
   76         struct {
   77                 unsigned op: 6;         /* always '0x11' */
   78                 unsigned : 1;           /* always '1' */
   79                 unsigned fmt: 4;
   80                 unsigned ft: 5;
   81                 unsigned fs: 5;
   82                 unsigned fd: 5;
   83                 unsigned func: 6;
   84         } FRType;
   85 #endif
   86 #if BYTE_ORDER == LITTLE_ENDIAN
   87         struct {
   88                 unsigned imm: 16;
   89                 unsigned rt: 5;
   90                 unsigned rs: 5;
   91                 unsigned op: 6;
   92         } IType;
   93 
   94         struct {
   95                 unsigned target: 26;
   96                 unsigned op: 6;
   97         } JType;
   98 
   99         struct {
  100                 unsigned func: 6;
  101                 unsigned shamt: 5;
  102                 unsigned rd: 5;
  103                 unsigned rt: 5;
  104                 unsigned rs: 5;
  105                 unsigned op: 6;
  106         } RType;
  107 
  108         struct {
  109                 unsigned func: 6;
  110                 unsigned fd: 5;
  111                 unsigned fs: 5;
  112                 unsigned ft: 5;
  113                 unsigned fmt: 4;
  114                 unsigned : 1;           /* always '1' */
  115                 unsigned op: 6;         /* always '0x11' */
  116         } FRType;
  117 #endif
  118 } InstFmt;
  119 
  120 /* instruction field decoding macros */
  121 #define MIPS_INST_OPCODE(val)   (val >> 26)
  122 #define MIPS_INST_RS(val)       ((val & 0x03e00000) >> 21)
  123 #define MIPS_INST_RT(val)       ((val & 0x001f0000) >> 16)
  124 #define MIPS_INST_IMM(val)      ((val & 0x0000ffff))
  125 
  126 #define MIPS_INST_RD(val)       ((val & 0x0000f800) >> 11)
  127 #define MIPS_INST_SA(val)       ((val & 0x000007c0) >> 6)
  128 #define MIPS_INST_FUNC(val)     (val & 0x0000003f)
  129 
  130 #define MIPS_INST_INDEX(val)    (val & 0x03ffffff)
  131 
  132 /*
  133  * the mips opcode and function table use a 3bit row and 3bit col
  134  * number we define the following macro for easy transcribing
  135  */
  136 
  137 #define MIPS_OPCODE(r, c)       (((r & 0x07) << 3) | (c & 0x07))
  138 
  139 
  140 /*
  141  * Values for the 'op' field.
  142  */
  143 #define OP_SPECIAL      000
  144 #define OP_BCOND        001
  145 #define OP_J            002
  146 #define OP_JAL          003
  147 #define OP_BEQ          004
  148 #define OP_BNE          005
  149 #define OP_BLEZ         006
  150 #define OP_BGTZ         007
  151 
  152 #define OP_REGIMM       OP_BCOND
  153 
  154 #define OP_ADDI         010
  155 #define OP_ADDIU        011
  156 #define OP_SLTI         012
  157 #define OP_SLTIU        013
  158 #define OP_ANDI         014
  159 #define OP_ORI          015
  160 #define OP_XORI         016
  161 #define OP_LUI          017
  162 
  163 #define OP_COP0         020
  164 #define OP_COP1         021
  165 #define OP_COP2         022
  166 #define OP_COP3         023
  167 #define OP_BEQL         024
  168 #define OP_BNEL         025
  169 #define OP_BLEZL        026
  170 #define OP_BGTZL        027
  171 
  172 #define OP_COP1X        OP_COP3
  173 
  174 #define OP_DADDI        030
  175 #define OP_DADDIU       031
  176 #define OP_LDL          032
  177 #define OP_LDR          033
  178 
  179 #define OP_SPECIAL2     034
  180 #define OP_JALX         035
  181 
  182 #define OP_SPECIAL3     037
  183 
  184 #define OP_LB           040
  185 #define OP_LH           041
  186 #define OP_LWL          042
  187 #define OP_LW           043
  188 #define OP_LBU          044
  189 #define OP_LHU          045
  190 #define OP_LWR          046
  191 #define OP_LWU          047
  192 
  193 #define OP_SB           050
  194 #define OP_SH           051
  195 #define OP_SWL          052
  196 #define OP_SW           053
  197 #define OP_SDL          054
  198 #define OP_SDR          055
  199 #define OP_SWR          056
  200 #define OP_CACHE        057
  201 
  202 #define OP_LL           060
  203 #define OP_LWC1         061
  204 #define OP_LWC2         062
  205 #define OP_LWC3         063
  206 #define OP_LLD          064
  207 #define OP_LDC1         065
  208 #define OP_LDC2         066
  209 #define OP_LD           067
  210 
  211 #define OP_PREF         OP_LWC3
  212 
  213 #define OP_SC           070
  214 #define OP_SWC1         071
  215 #define OP_SWC2         072
  216 #define OP_SWC3         073
  217 #define OP_SCD          074
  218 #define OP_SDC1         075
  219 #define OP_SDC2         076
  220 #define OP_SD           077
  221 
  222 /*
  223  * Values for the 'func' field when 'op' == OP_SPECIAL.
  224  */
  225 #define OP_SLL          000
  226 #define OP_MOVCI        001
  227 #define OP_SRL          002
  228 #define OP_SRA          003
  229 #define OP_SLLV         004
  230 #define OP_SRLV         006
  231 #define OP_SRAV         007
  232 
  233 #define OP_F_SLL        OP_SLL
  234 #define OP_F_MOVCI      OP_MOVCI
  235 #define OP_F_SRL        OP_SRL
  236 #define OP_F_SRA        OP_SRA
  237 #define OP_F_SLLV       OP_SLLV
  238 #define OP_F_SRLV       OP_SRLV
  239 #define OP_F_SRAV       OP_SRAV
  240 
  241 #define OP_JR           010
  242 #define OP_JALR         011
  243 #define OP_MOVZ         012
  244 #define OP_MOVN         013
  245 #define OP_SYSCALL      014
  246 #define OP_BREAK        015
  247 #define OP_SYNC         017
  248 
  249 #define OP_F_JR         OP_JR
  250 #define OP_F_JALR       OP_JALR
  251 #define OP_F_MOVZ       OP_MOVZ
  252 #define OP_F_MOVN       OP_MOVN
  253 #define OP_F_SYSCALL    OP_SYSCALL
  254 #define OP_F_BREAK      OP_BREAK
  255 #define OP_F_SYNC       OP_SYNC
  256 
  257 #define OP_MFHI         020
  258 #define OP_MTHI         021
  259 #define OP_MFLO         022
  260 #define OP_MTLO         023
  261 #define OP_DSLLV        024
  262 #define OP_DSRLV        026
  263 #define OP_DSRAV        027
  264 
  265 #define OP_F_MFHI       OP_MFHI
  266 #define OP_F_MTHI       OP_MTHI
  267 #define OP_F_MFLO       OP_MFLO
  268 #define OP_F_MTLO       OP_MTLO
  269 #define OP_F_DSLLV      OP_DSLLV
  270 #define OP_F_DSRLV      OP_DSRLV
  271 #define OP_F_DSRAV      OP_DSRAV
  272 
  273 #define OP_MULT         030
  274 #define OP_MULTU        031
  275 #define OP_DIV          032
  276 #define OP_DIVU         033
  277 #define OP_DMULT        034
  278 #define OP_DMULTU       035
  279 #define OP_DDIV         036
  280 #define OP_DDIVU        037
  281 
  282 #define OP_F_MULT       OP_MULT
  283 #define OP_F_MULTU      OP_MULTU
  284 #define OP_F_DIV        OP_DIV
  285 #define OP_F_DIVU       OP_DIVU
  286 #define OP_F_DMULT      OP_DMULT
  287 #define OP_F_DMULTU     OP_DMULTU
  288 #define OP_F_DDIV       OP_DDIV
  289 #define OP_F_DDIVU      OP_DDIVU
  290 
  291 #define OP_ADD          040
  292 #define OP_ADDU         041
  293 #define OP_SUB          042
  294 #define OP_SUBU         043
  295 #define OP_AND          044
  296 #define OP_OR           045
  297 #define OP_XOR          046
  298 #define OP_NOR          047
  299 
  300 #define OP_F_ADD        OP_ADD
  301 #define OP_F_ADDU       OP_ADDU
  302 #define OP_F_SUB        OP_SUB
  303 #define OP_F_SUBU       OP_SUBU
  304 #define OP_F_AND        OP_AND
  305 #define OP_F_OR         OP_OR
  306 #define OP_F_XOR        OP_XOR
  307 #define OP_F_NOR        OP_NOR
  308 
  309 #define OP_SLT          052
  310 #define OP_SLTU         053
  311 #define OP_DADD         054
  312 #define OP_DADDU        055
  313 #define OP_DSUB         056
  314 #define OP_DSUBU        057
  315 
  316 #define OP_F_SLT        OP_SLT
  317 #define OP_F_SLTU       OP_SLTU
  318 #define OP_F_DADD       OP_DADD
  319 #define OP_F_DADDU      OP_DADDU
  320 #define OP_F_DSUB       OP_DSUB
  321 #define OP_F_DSUBU      OP_DSUBU
  322 
  323 #define OP_TGE          060
  324 #define OP_TGEU         061
  325 #define OP_TLT          062
  326 #define OP_TLTU         063
  327 #define OP_TEQ          064
  328 #define OP_TNE          066
  329 
  330 #define OP_F_TGE        OP_TGE
  331 #define OP_F_TGEU       OP_TGEU
  332 #define OP_F_TLT        OP_TLT
  333 #define OP_F_TLTU       OP_TLTU
  334 #define OP_F_TEQ        OP_TEQ
  335 #define OP_F_TNE        OP_TNE
  336 
  337 #define OP_DSLL         070
  338 #define OP_DSRL         072
  339 #define OP_DSRA         073
  340 #define OP_DSLL32       074
  341 #define OP_DSRL32       076
  342 #define OP_DSRA32       077
  343 
  344 #define OP_F_DSLL       OP_DSLL
  345 #define OP_F_DSRL       OP_DSRL
  346 #define OP_F_DSRA       OP_DSRA
  347 #define OP_F_DSLL32     OP_DSLL32
  348 #define OP_F_DSRL32     OP_DSRL32
  349 #define OP_F_DSRA32     OP_DSRA32
  350 
  351 /*
  352  * The REGIMM - register immediate instructions are further
  353  * decoded using this table that has 2bit row numbers, hence
  354  * a need for a new helper macro.
  355  */
  356 
  357 #define MIPS_ROP(r, c)  ((r & 0x03) << 3) | (c & 0x07)
  358 
  359 /*
  360  * Values for the 'func' field when 'op' == OP_BCOND.
  361  */
  362 #define OP_BLTZ         000
  363 #define OP_BGEZ         001
  364 #define OP_BLTZL        002
  365 #define OP_BGEZL        003
  366 
  367 #define OP_R_BLTZ       OP_BLTZ
  368 #define OP_R_BGEZ       OP_BGEZ
  369 #define OP_R_BLTZL      OP_BLTZL
  370 #define OP_R_BGEZL      OP_BGEZL
  371 
  372 #define OP_TGEI         010
  373 #define OP_TGEIU        011
  374 #define OP_TLTI         012
  375 #define OP_TLTIU        013
  376 #define OP_TEQI         014
  377 #define OP_TNEI         016
  378 
  379 #define OP_R_TGEI       OP_TGEI
  380 #define OP_R_TGEIU      OP_TGEIU
  381 #define OP_R_TLTI       OP_TLTI
  382 #define OP_R_TLTIU      OP_TLTIU
  383 #define OP_R_TEQI       OP_TEQI
  384 #define OP_R_TNEI       OP_TNEI
  385 
  386 #define OP_BLTZAL       020
  387 #define OP_BGEZAL       021
  388 #define OP_BLTZALL      022
  389 #define OP_BGEZALL      023
  390 
  391 #define OP_R_BLTZAL     OP_BLTZAL
  392 #define OP_R_BGEZAL     OP_BGEZAL
  393 #define OP_R_BLTZALL    OP_BLTZALL
  394 #define OP_R_BGEZALL    OP_BGEZALL
  395 
  396 /*
  397  * Values for the 'func' field when 'op' == OP_SPECIAL3.
  398  */
  399 #define OP_RDHWR        073
  400 
  401 /*
  402  * Values for the 'rs' field when 'op' == OP_COPz.
  403  */
  404 #define OP_MF           000
  405 #define OP_DMF          001
  406 #define OP_MT           004
  407 #define OP_DMT          005
  408 #define OP_BCx          010
  409 #define OP_BCy          014
  410 #define OP_CF           002
  411 #define OP_CT           006
  412 
  413 /*
  414  * Values for the 'rt' field when 'op' == OP_COPz.
  415  */
  416 #define COPz_BC_TF_MASK         0x01
  417 #define COPz_BC_TRUE            0x01
  418 #define COPz_BC_FALSE           0x00
  419 #define COPz_BCL_TF_MASK        0x02
  420 #define COPz_BCL_TRUE           0x02
  421 #define COPz_BCL_FALSE          0x00
  422 
  423 #endif /* !_MACHINE_MIPS_OPCODE_H_ */

Cache object: 6b5c6e97313ece941b453426db2fdf81


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.