nios2.c (135076B)
1/* Nios II opcode library for QEMU. 2 Copyright (C) 2012-2016 Free Software Foundation, Inc. 3 Contributed by Nigel Gray (ngray@altera.com). 4 Contributed by Mentor Graphics, Inc. 5 6 This program is free software; you can redistribute it and/or 7 modify it under the terms of the GNU General Public License 8 as published by the Free Software Foundation; either version 2 9 of the License, or (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 Boston, MA 02110-1301, USA. */ 20 21/* This file resembles a concatenation of the following files from 22 binutils: 23 24 include/opcode/nios2.h 25 include/opcode/nios2r1.h 26 include/opcode/nios2r2.h 27 opcodes/nios2-opc.c 28 opcodes/nios2-dis.c 29 30 It has been derived from the original patches which have been 31 relicensed by the contributors as GPL version 2 for inclusion 32 in QEMU. */ 33 34#ifndef _NIOS2_H_ 35#define _NIOS2_H_ 36 37/*#include "bfd.h"*/ 38#include "qemu/osdep.h" 39#include "disas/dis-asm.h" 40 41 42/**************************************************************************** 43 * This file contains structures, bit masks and shift counts used 44 * by the GNU toolchain to define the Nios II instruction set and 45 * access various opcode fields. 46 ****************************************************************************/ 47 48/* Instruction encoding formats. */ 49enum iw_format_type { 50 /* R1 formats. */ 51 iw_i_type, 52 iw_r_type, 53 iw_j_type, 54 iw_custom_type, 55 56 /* 32-bit R2 formats. */ 57 iw_L26_type, 58 iw_F2I16_type, 59 iw_F2X4I12_type, 60 iw_F1X4I12_type, 61 iw_F1X4L17_type, 62 iw_F3X6L5_type, 63 iw_F2X6L10_type, 64 iw_F3X6_type, 65 iw_F3X8_type, 66 67 /* 16-bit R2 formats. */ 68 iw_I10_type, 69 iw_T1I7_type, 70 iw_T2I4_type, 71 iw_T1X1I6_type, 72 iw_X1I7_type, 73 iw_L5I4X1_type, 74 iw_T2X1L3_type, 75 iw_T2X1I3_type, 76 iw_T3X1_type, 77 iw_T2X3_type, 78 iw_F1X1_type, 79 iw_X2L5_type, 80 iw_F1I5_type, 81 iw_F2_type 82}; 83 84/* Identify different overflow situations for error messages. */ 85enum overflow_type 86{ 87 call_target_overflow = 0, 88 branch_target_overflow, 89 address_offset_overflow, 90 signed_immed16_overflow, 91 unsigned_immed16_overflow, 92 unsigned_immed5_overflow, 93 signed_immed12_overflow, 94 custom_opcode_overflow, 95 enumeration_overflow, 96 no_overflow 97}; 98 99/* This structure holds information for a particular instruction. 100 101 The args field is a string describing the operands. The following 102 letters can appear in the args: 103 c - a 5-bit control register index 104 d - a 5-bit destination register index 105 s - a 5-bit left source register index 106 t - a 5-bit right source register index 107 D - a 3-bit encoded destination register 108 S - a 3-bit encoded left source register 109 T - a 3-bit encoded right source register 110 i - a 16-bit signed immediate 111 j - a 5-bit unsigned immediate 112 k - a (second) 5-bit unsigned immediate 113 l - a 8-bit custom instruction constant 114 m - a 26-bit unsigned immediate 115 o - a 16-bit signed pc-relative offset 116 u - a 16-bit unsigned immediate 117 I - a 12-bit signed immediate 118 M - a 6-bit unsigned immediate 119 N - a 6-bit unsigned immediate with 2-bit shift 120 O - a 10-bit signed pc-relative offset with 1-bit shift 121 P - a 7-bit signed pc-relative offset with 1-bit shift 122 U - a 7-bit unsigned immediate with 2-bit shift 123 V - a 5-bit unsigned immediate with 2-bit shift 124 W - a 4-bit unsigned immediate with 2-bit shift 125 X - a 4-bit unsigned immediate with 1-bit shift 126 Y - a 4-bit unsigned immediate 127 e - an immediate coded as an enumeration for addi.n/subi.n 128 f - an immediate coded as an enumeration for slli.n/srli.n 129 g - an immediate coded as an enumeration for andi.n 130 h - an immediate coded as an enumeration for movi.n 131 R - a reglist for ldwm/stwm or push.n/pop.n 132 B - a base register specifier and option list for ldwm/stwm 133 Literal ',', '(', and ')' characters may also appear in the args as 134 delimiters. 135 136 Note that the args describe the semantics and assembly-language syntax 137 of the operands, not their encoding into the instruction word. 138 139 The pinfo field is INSN_MACRO for a macro. Otherwise, it is a collection 140 of bits describing the instruction, notably any relevant hazard 141 information. 142 143 When assembling, the match field contains the opcode template, which 144 is modified by the arguments to produce the actual opcode 145 that is emitted. If pinfo is INSN_MACRO, then this is 0. 146 147 If pinfo is INSN_MACRO, the mask field stores the macro identifier. 148 Otherwise this is a bit mask for the relevant portions of the opcode 149 when disassembling. If the actual opcode anded with the match field 150 equals the opcode field, then we have found the correct instruction. */ 151 152struct nios2_opcode 153{ 154 const char *name; /* The name of the instruction. */ 155 const char *args; /* A string describing the arguments for this 156 instruction. */ 157 const char *args_test; /* Like args, but with an extra argument for 158 the expected opcode. */ 159 unsigned long num_args; /* The number of arguments the instruction 160 takes. */ 161 unsigned size; /* Size in bytes of the instruction. */ 162 enum iw_format_type format; /* Instruction format. */ 163 unsigned long match; /* The basic opcode for the instruction. */ 164 unsigned long mask; /* Mask for the opcode field of the 165 instruction. */ 166 unsigned long pinfo; /* Is this a real instruction or instruction 167 macro? */ 168 enum overflow_type overflow_msg; /* Used to generate informative 169 message when fixup overflows. */ 170}; 171 172/* This value is used in the nios2_opcode.pinfo field to indicate that the 173 instruction is a macro or pseudo-op. This requires special treatment by 174 the assembler, and is used by the disassembler to determine whether to 175 check for a nop. */ 176#define NIOS2_INSN_MACRO 0x80000000 177#define NIOS2_INSN_MACRO_MOV 0x80000001 178#define NIOS2_INSN_MACRO_MOVI 0x80000002 179#define NIOS2_INSN_MACRO_MOVIA 0x80000004 180 181#define NIOS2_INSN_RELAXABLE 0x40000000 182#define NIOS2_INSN_UBRANCH 0x00000010 183#define NIOS2_INSN_CBRANCH 0x00000020 184#define NIOS2_INSN_CALL 0x00000040 185 186#define NIOS2_INSN_OPTARG 0x00000080 187 188/* Register attributes. */ 189#define REG_NORMAL (1<<0) /* Normal registers. */ 190#define REG_CONTROL (1<<1) /* Control registers. */ 191#define REG_COPROCESSOR (1<<2) /* For custom instructions. */ 192#define REG_3BIT (1<<3) /* For R2 CDX instructions. */ 193#define REG_LDWM (1<<4) /* For R2 ldwm/stwm. */ 194#define REG_POP (1<<5) /* For R2 pop.n/push.n. */ 195 196struct nios2_reg 197{ 198 const char *name; 199 const int index; 200 unsigned long regtype; 201}; 202 203/* Pull in the instruction field accessors, opcodes, and masks. */ 204/*#include "nios2r1.h"*/ 205 206#ifndef _NIOS2R1_H_ 207#define _NIOS2R1_H_ 208 209/* R1 fields. */ 210#define IW_R1_OP_LSB 0 211#define IW_R1_OP_SIZE 6 212#define IW_R1_OP_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_R1_OP_SIZE)) 213#define IW_R1_OP_SHIFTED_MASK (IW_R1_OP_UNSHIFTED_MASK << IW_R1_OP_LSB) 214#define GET_IW_R1_OP(W) (((W) >> IW_R1_OP_LSB) & IW_R1_OP_UNSHIFTED_MASK) 215#define SET_IW_R1_OP(V) (((V) & IW_R1_OP_UNSHIFTED_MASK) << IW_R1_OP_LSB) 216 217#define IW_I_A_LSB 27 218#define IW_I_A_SIZE 5 219#define IW_I_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_I_A_SIZE)) 220#define IW_I_A_SHIFTED_MASK (IW_I_A_UNSHIFTED_MASK << IW_I_A_LSB) 221#define GET_IW_I_A(W) (((W) >> IW_I_A_LSB) & IW_I_A_UNSHIFTED_MASK) 222#define SET_IW_I_A(V) (((V) & IW_I_A_UNSHIFTED_MASK) << IW_I_A_LSB) 223 224#define IW_I_B_LSB 22 225#define IW_I_B_SIZE 5 226#define IW_I_B_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_I_B_SIZE)) 227#define IW_I_B_SHIFTED_MASK (IW_I_B_UNSHIFTED_MASK << IW_I_B_LSB) 228#define GET_IW_I_B(W) (((W) >> IW_I_B_LSB) & IW_I_B_UNSHIFTED_MASK) 229#define SET_IW_I_B(V) (((V) & IW_I_B_UNSHIFTED_MASK) << IW_I_B_LSB) 230 231#define IW_I_IMM16_LSB 6 232#define IW_I_IMM16_SIZE 16 233#define IW_I_IMM16_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_I_IMM16_SIZE)) 234#define IW_I_IMM16_SHIFTED_MASK (IW_I_IMM16_UNSHIFTED_MASK << IW_I_IMM16_LSB) 235#define GET_IW_I_IMM16(W) (((W) >> IW_I_IMM16_LSB) & IW_I_IMM16_UNSHIFTED_MASK) 236#define SET_IW_I_IMM16(V) (((V) & IW_I_IMM16_UNSHIFTED_MASK) << IW_I_IMM16_LSB) 237 238#define IW_R_A_LSB 27 239#define IW_R_A_SIZE 5 240#define IW_R_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_R_A_SIZE)) 241#define IW_R_A_SHIFTED_MASK (IW_R_A_UNSHIFTED_MASK << IW_R_A_LSB) 242#define GET_IW_R_A(W) (((W) >> IW_R_A_LSB) & IW_R_A_UNSHIFTED_MASK) 243#define SET_IW_R_A(V) (((V) & IW_R_A_UNSHIFTED_MASK) << IW_R_A_LSB) 244 245#define IW_R_B_LSB 22 246#define IW_R_B_SIZE 5 247#define IW_R_B_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_R_B_SIZE)) 248#define IW_R_B_SHIFTED_MASK (IW_R_B_UNSHIFTED_MASK << IW_R_B_LSB) 249#define GET_IW_R_B(W) (((W) >> IW_R_B_LSB) & IW_R_B_UNSHIFTED_MASK) 250#define SET_IW_R_B(V) (((V) & IW_R_B_UNSHIFTED_MASK) << IW_R_B_LSB) 251 252#define IW_R_C_LSB 17 253#define IW_R_C_SIZE 5 254#define IW_R_C_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_R_C_SIZE)) 255#define IW_R_C_SHIFTED_MASK (IW_R_C_UNSHIFTED_MASK << IW_R_C_LSB) 256#define GET_IW_R_C(W) (((W) >> IW_R_C_LSB) & IW_R_C_UNSHIFTED_MASK) 257#define SET_IW_R_C(V) (((V) & IW_R_C_UNSHIFTED_MASK) << IW_R_C_LSB) 258 259#define IW_R_OPX_LSB 11 260#define IW_R_OPX_SIZE 6 261#define IW_R_OPX_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_R_OPX_SIZE)) 262#define IW_R_OPX_SHIFTED_MASK (IW_R_OPX_UNSHIFTED_MASK << IW_R_OPX_LSB) 263#define GET_IW_R_OPX(W) (((W) >> IW_R_OPX_LSB) & IW_R_OPX_UNSHIFTED_MASK) 264#define SET_IW_R_OPX(V) (((V) & IW_R_OPX_UNSHIFTED_MASK) << IW_R_OPX_LSB) 265 266#define IW_R_IMM5_LSB 6 267#define IW_R_IMM5_SIZE 5 268#define IW_R_IMM5_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_R_IMM5_SIZE)) 269#define IW_R_IMM5_SHIFTED_MASK (IW_R_IMM5_UNSHIFTED_MASK << IW_R_IMM5_LSB) 270#define GET_IW_R_IMM5(W) (((W) >> IW_R_IMM5_LSB) & IW_R_IMM5_UNSHIFTED_MASK) 271#define SET_IW_R_IMM5(V) (((V) & IW_R_IMM5_UNSHIFTED_MASK) << IW_R_IMM5_LSB) 272 273#define IW_J_IMM26_LSB 6 274#define IW_J_IMM26_SIZE 26 275#define IW_J_IMM26_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_J_IMM26_SIZE)) 276#define IW_J_IMM26_SHIFTED_MASK (IW_J_IMM26_UNSHIFTED_MASK << IW_J_IMM26_LSB) 277#define GET_IW_J_IMM26(W) (((W) >> IW_J_IMM26_LSB) & IW_J_IMM26_UNSHIFTED_MASK) 278#define SET_IW_J_IMM26(V) (((V) & IW_J_IMM26_UNSHIFTED_MASK) << IW_J_IMM26_LSB) 279 280#define IW_CUSTOM_A_LSB 27 281#define IW_CUSTOM_A_SIZE 5 282#define IW_CUSTOM_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_CUSTOM_A_SIZE)) 283#define IW_CUSTOM_A_SHIFTED_MASK (IW_CUSTOM_A_UNSHIFTED_MASK << IW_CUSTOM_A_LSB) 284#define GET_IW_CUSTOM_A(W) (((W) >> IW_CUSTOM_A_LSB) & IW_CUSTOM_A_UNSHIFTED_MASK) 285#define SET_IW_CUSTOM_A(V) (((V) & IW_CUSTOM_A_UNSHIFTED_MASK) << IW_CUSTOM_A_LSB) 286 287#define IW_CUSTOM_B_LSB 22 288#define IW_CUSTOM_B_SIZE 5 289#define IW_CUSTOM_B_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_CUSTOM_B_SIZE)) 290#define IW_CUSTOM_B_SHIFTED_MASK (IW_CUSTOM_B_UNSHIFTED_MASK << IW_CUSTOM_B_LSB) 291#define GET_IW_CUSTOM_B(W) (((W) >> IW_CUSTOM_B_LSB) & IW_CUSTOM_B_UNSHIFTED_MASK) 292#define SET_IW_CUSTOM_B(V) (((V) & IW_CUSTOM_B_UNSHIFTED_MASK) << IW_CUSTOM_B_LSB) 293 294#define IW_CUSTOM_C_LSB 17 295#define IW_CUSTOM_C_SIZE 5 296#define IW_CUSTOM_C_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_CUSTOM_C_SIZE)) 297#define IW_CUSTOM_C_SHIFTED_MASK (IW_CUSTOM_C_UNSHIFTED_MASK << IW_CUSTOM_C_LSB) 298#define GET_IW_CUSTOM_C(W) (((W) >> IW_CUSTOM_C_LSB) & IW_CUSTOM_C_UNSHIFTED_MASK) 299#define SET_IW_CUSTOM_C(V) (((V) & IW_CUSTOM_C_UNSHIFTED_MASK) << IW_CUSTOM_C_LSB) 300 301#define IW_CUSTOM_READA_LSB 16 302#define IW_CUSTOM_READA_SIZE 1 303#define IW_CUSTOM_READA_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_CUSTOM_READA_SIZE)) 304#define IW_CUSTOM_READA_SHIFTED_MASK (IW_CUSTOM_READA_UNSHIFTED_MASK << IW_CUSTOM_READA_LSB) 305#define GET_IW_CUSTOM_READA(W) (((W) >> IW_CUSTOM_READA_LSB) & IW_CUSTOM_READA_UNSHIFTED_MASK) 306#define SET_IW_CUSTOM_READA(V) (((V) & IW_CUSTOM_READA_UNSHIFTED_MASK) << IW_CUSTOM_READA_LSB) 307 308#define IW_CUSTOM_READB_LSB 15 309#define IW_CUSTOM_READB_SIZE 1 310#define IW_CUSTOM_READB_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_CUSTOM_READB_SIZE)) 311#define IW_CUSTOM_READB_SHIFTED_MASK (IW_CUSTOM_READB_UNSHIFTED_MASK << IW_CUSTOM_READB_LSB) 312#define GET_IW_CUSTOM_READB(W) (((W) >> IW_CUSTOM_READB_LSB) & IW_CUSTOM_READB_UNSHIFTED_MASK) 313#define SET_IW_CUSTOM_READB(V) (((V) & IW_CUSTOM_READB_UNSHIFTED_MASK) << IW_CUSTOM_READB_LSB) 314 315#define IW_CUSTOM_READC_LSB 14 316#define IW_CUSTOM_READC_SIZE 1 317#define IW_CUSTOM_READC_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_CUSTOM_READC_SIZE)) 318#define IW_CUSTOM_READC_SHIFTED_MASK (IW_CUSTOM_READC_UNSHIFTED_MASK << IW_CUSTOM_READC_LSB) 319#define GET_IW_CUSTOM_READC(W) (((W) >> IW_CUSTOM_READC_LSB) & IW_CUSTOM_READC_UNSHIFTED_MASK) 320#define SET_IW_CUSTOM_READC(V) (((V) & IW_CUSTOM_READC_UNSHIFTED_MASK) << IW_CUSTOM_READC_LSB) 321 322#define IW_CUSTOM_N_LSB 6 323#define IW_CUSTOM_N_SIZE 8 324#define IW_CUSTOM_N_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_CUSTOM_N_SIZE)) 325#define IW_CUSTOM_N_SHIFTED_MASK (IW_CUSTOM_N_UNSHIFTED_MASK << IW_CUSTOM_N_LSB) 326#define GET_IW_CUSTOM_N(W) (((W) >> IW_CUSTOM_N_LSB) & IW_CUSTOM_N_UNSHIFTED_MASK) 327#define SET_IW_CUSTOM_N(V) (((V) & IW_CUSTOM_N_UNSHIFTED_MASK) << IW_CUSTOM_N_LSB) 328 329/* R1 opcodes. */ 330#define R1_OP_CALL 0 331#define R1_OP_JMPI 1 332#define R1_OP_LDBU 3 333#define R1_OP_ADDI 4 334#define R1_OP_STB 5 335#define R1_OP_BR 6 336#define R1_OP_LDB 7 337#define R1_OP_CMPGEI 8 338#define R1_OP_LDHU 11 339#define R1_OP_ANDI 12 340#define R1_OP_STH 13 341#define R1_OP_BGE 14 342#define R1_OP_LDH 15 343#define R1_OP_CMPLTI 16 344#define R1_OP_INITDA 19 345#define R1_OP_ORI 20 346#define R1_OP_STW 21 347#define R1_OP_BLT 22 348#define R1_OP_LDW 23 349#define R1_OP_CMPNEI 24 350#define R1_OP_FLUSHDA 27 351#define R1_OP_XORI 28 352#define R1_OP_BNE 30 353#define R1_OP_CMPEQI 32 354#define R1_OP_LDBUIO 35 355#define R1_OP_MULI 36 356#define R1_OP_STBIO 37 357#define R1_OP_BEQ 38 358#define R1_OP_LDBIO 39 359#define R1_OP_CMPGEUI 40 360#define R1_OP_LDHUIO 43 361#define R1_OP_ANDHI 44 362#define R1_OP_STHIO 45 363#define R1_OP_BGEU 46 364#define R1_OP_LDHIO 47 365#define R1_OP_CMPLTUI 48 366#define R1_OP_CUSTOM 50 367#define R1_OP_INITD 51 368#define R1_OP_ORHI 52 369#define R1_OP_STWIO 53 370#define R1_OP_BLTU 54 371#define R1_OP_LDWIO 55 372#define R1_OP_RDPRS 56 373#define R1_OP_OPX 58 374#define R1_OP_FLUSHD 59 375#define R1_OP_XORHI 60 376 377#define R1_OPX_ERET 1 378#define R1_OPX_ROLI 2 379#define R1_OPX_ROL 3 380#define R1_OPX_FLUSHP 4 381#define R1_OPX_RET 5 382#define R1_OPX_NOR 6 383#define R1_OPX_MULXUU 7 384#define R1_OPX_CMPGE 8 385#define R1_OPX_BRET 9 386#define R1_OPX_ROR 11 387#define R1_OPX_FLUSHI 12 388#define R1_OPX_JMP 13 389#define R1_OPX_AND 14 390#define R1_OPX_CMPLT 16 391#define R1_OPX_SLLI 18 392#define R1_OPX_SLL 19 393#define R1_OPX_WRPRS 20 394#define R1_OPX_OR 22 395#define R1_OPX_MULXSU 23 396#define R1_OPX_CMPNE 24 397#define R1_OPX_SRLI 26 398#define R1_OPX_SRL 27 399#define R1_OPX_NEXTPC 28 400#define R1_OPX_CALLR 29 401#define R1_OPX_XOR 30 402#define R1_OPX_MULXSS 31 403#define R1_OPX_CMPEQ 32 404#define R1_OPX_DIVU 36 405#define R1_OPX_DIV 37 406#define R1_OPX_RDCTL 38 407#define R1_OPX_MUL 39 408#define R1_OPX_CMPGEU 40 409#define R1_OPX_INITI 41 410#define R1_OPX_TRAP 45 411#define R1_OPX_WRCTL 46 412#define R1_OPX_CMPLTU 48 413#define R1_OPX_ADD 49 414#define R1_OPX_BREAK 52 415#define R1_OPX_SYNC 54 416#define R1_OPX_SUB 57 417#define R1_OPX_SRAI 58 418#define R1_OPX_SRA 59 419 420/* Some convenience macros for R1 encodings, for use in instruction tables. 421 MATCH_R1_OPX0(NAME) and MASK_R1_OPX0 are used for R-type instructions 422 with 3 register operands and constant 0 in the immediate field. 423 The general forms are MATCH_R1_OPX(NAME, A, B, C) where the arguments specify 424 constant values and MASK_R1_OPX(A, B, C, N) where the arguments are booleans 425 that are true if the field should be included in the mask. 426 */ 427#define MATCH_R1_OP(NAME) \ 428 (SET_IW_R1_OP (R1_OP_##NAME)) 429#define MASK_R1_OP \ 430 IW_R1_OP_SHIFTED_MASK 431 432#define MATCH_R1_OPX0(NAME) \ 433 (SET_IW_R1_OP (R1_OP_OPX) | SET_IW_R_OPX (R1_OPX_##NAME)) 434#define MASK_R1_OPX0 \ 435 (IW_R1_OP_SHIFTED_MASK | IW_R_OPX_SHIFTED_MASK | IW_R_IMM5_SHIFTED_MASK) 436 437#define MATCH_R1_OPX(NAME, A, B, C) \ 438 (MATCH_R1_OPX0 (NAME) | SET_IW_R_A (A) | SET_IW_R_B (B) | SET_IW_R_C (C)) 439#define MASK_R1_OPX(A, B, C, N) \ 440 (IW_R1_OP_SHIFTED_MASK | IW_R_OPX_SHIFTED_MASK \ 441 | (A ? IW_R_A_SHIFTED_MASK : 0) \ 442 | (B ? IW_R_B_SHIFTED_MASK : 0) \ 443 | (C ? IW_R_C_SHIFTED_MASK : 0) \ 444 | (N ? IW_R_IMM5_SHIFTED_MASK : 0)) 445 446/* And here's the match/mask macros for the R1 instruction set. */ 447#define MATCH_R1_ADD MATCH_R1_OPX0 (ADD) 448#define MASK_R1_ADD MASK_R1_OPX0 449#define MATCH_R1_ADDI MATCH_R1_OP (ADDI) 450#define MASK_R1_ADDI MASK_R1_OP 451#define MATCH_R1_AND MATCH_R1_OPX0 (AND) 452#define MASK_R1_AND MASK_R1_OPX0 453#define MATCH_R1_ANDHI MATCH_R1_OP (ANDHI) 454#define MASK_R1_ANDHI MASK_R1_OP 455#define MATCH_R1_ANDI MATCH_R1_OP (ANDI) 456#define MASK_R1_ANDI MASK_R1_OP 457#define MATCH_R1_BEQ MATCH_R1_OP (BEQ) 458#define MASK_R1_BEQ MASK_R1_OP 459#define MATCH_R1_BGE MATCH_R1_OP (BGE) 460#define MASK_R1_BGE MASK_R1_OP 461#define MATCH_R1_BGEU MATCH_R1_OP (BGEU) 462#define MASK_R1_BGEU MASK_R1_OP 463#define MATCH_R1_BGT MATCH_R1_OP (BLT) 464#define MASK_R1_BGT MASK_R1_OP 465#define MATCH_R1_BGTU MATCH_R1_OP (BLTU) 466#define MASK_R1_BGTU MASK_R1_OP 467#define MATCH_R1_BLE MATCH_R1_OP (BGE) 468#define MASK_R1_BLE MASK_R1_OP 469#define MATCH_R1_BLEU MATCH_R1_OP (BGEU) 470#define MASK_R1_BLEU MASK_R1_OP 471#define MATCH_R1_BLT MATCH_R1_OP (BLT) 472#define MASK_R1_BLT MASK_R1_OP 473#define MATCH_R1_BLTU MATCH_R1_OP (BLTU) 474#define MASK_R1_BLTU MASK_R1_OP 475#define MATCH_R1_BNE MATCH_R1_OP (BNE) 476#define MASK_R1_BNE MASK_R1_OP 477#define MATCH_R1_BR MATCH_R1_OP (BR) 478#define MASK_R1_BR MASK_R1_OP | IW_I_A_SHIFTED_MASK | IW_I_B_SHIFTED_MASK 479#define MATCH_R1_BREAK MATCH_R1_OPX (BREAK, 0, 0, 0x1e) 480#define MASK_R1_BREAK MASK_R1_OPX (1, 1, 1, 0) 481#define MATCH_R1_BRET MATCH_R1_OPX (BRET, 0x1e, 0, 0) 482#define MASK_R1_BRET MASK_R1_OPX (1, 1, 1, 1) 483#define MATCH_R1_CALL MATCH_R1_OP (CALL) 484#define MASK_R1_CALL MASK_R1_OP 485#define MATCH_R1_CALLR MATCH_R1_OPX (CALLR, 0, 0, 0x1f) 486#define MASK_R1_CALLR MASK_R1_OPX (0, 1, 1, 1) 487#define MATCH_R1_CMPEQ MATCH_R1_OPX0 (CMPEQ) 488#define MASK_R1_CMPEQ MASK_R1_OPX0 489#define MATCH_R1_CMPEQI MATCH_R1_OP (CMPEQI) 490#define MASK_R1_CMPEQI MASK_R1_OP 491#define MATCH_R1_CMPGE MATCH_R1_OPX0 (CMPGE) 492#define MASK_R1_CMPGE MASK_R1_OPX0 493#define MATCH_R1_CMPGEI MATCH_R1_OP (CMPGEI) 494#define MASK_R1_CMPGEI MASK_R1_OP 495#define MATCH_R1_CMPGEU MATCH_R1_OPX0 (CMPGEU) 496#define MASK_R1_CMPGEU MASK_R1_OPX0 497#define MATCH_R1_CMPGEUI MATCH_R1_OP (CMPGEUI) 498#define MASK_R1_CMPGEUI MASK_R1_OP 499#define MATCH_R1_CMPGT MATCH_R1_OPX0 (CMPLT) 500#define MASK_R1_CMPGT MASK_R1_OPX0 501#define MATCH_R1_CMPGTI MATCH_R1_OP (CMPGEI) 502#define MASK_R1_CMPGTI MASK_R1_OP 503#define MATCH_R1_CMPGTU MATCH_R1_OPX0 (CMPLTU) 504#define MASK_R1_CMPGTU MASK_R1_OPX0 505#define MATCH_R1_CMPGTUI MATCH_R1_OP (CMPGEUI) 506#define MASK_R1_CMPGTUI MASK_R1_OP 507#define MATCH_R1_CMPLE MATCH_R1_OPX0 (CMPGE) 508#define MASK_R1_CMPLE MASK_R1_OPX0 509#define MATCH_R1_CMPLEI MATCH_R1_OP (CMPLTI) 510#define MASK_R1_CMPLEI MASK_R1_OP 511#define MATCH_R1_CMPLEU MATCH_R1_OPX0 (CMPGEU) 512#define MASK_R1_CMPLEU MASK_R1_OPX0 513#define MATCH_R1_CMPLEUI MATCH_R1_OP (CMPLTUI) 514#define MASK_R1_CMPLEUI MASK_R1_OP 515#define MATCH_R1_CMPLT MATCH_R1_OPX0 (CMPLT) 516#define MASK_R1_CMPLT MASK_R1_OPX0 517#define MATCH_R1_CMPLTI MATCH_R1_OP (CMPLTI) 518#define MASK_R1_CMPLTI MASK_R1_OP 519#define MATCH_R1_CMPLTU MATCH_R1_OPX0 (CMPLTU) 520#define MASK_R1_CMPLTU MASK_R1_OPX0 521#define MATCH_R1_CMPLTUI MATCH_R1_OP (CMPLTUI) 522#define MASK_R1_CMPLTUI MASK_R1_OP 523#define MATCH_R1_CMPNE MATCH_R1_OPX0 (CMPNE) 524#define MASK_R1_CMPNE MASK_R1_OPX0 525#define MATCH_R1_CMPNEI MATCH_R1_OP (CMPNEI) 526#define MASK_R1_CMPNEI MASK_R1_OP 527#define MATCH_R1_CUSTOM MATCH_R1_OP (CUSTOM) 528#define MASK_R1_CUSTOM MASK_R1_OP 529#define MATCH_R1_DIV MATCH_R1_OPX0 (DIV) 530#define MASK_R1_DIV MASK_R1_OPX0 531#define MATCH_R1_DIVU MATCH_R1_OPX0 (DIVU) 532#define MASK_R1_DIVU MASK_R1_OPX0 533#define MATCH_R1_ERET MATCH_R1_OPX (ERET, 0x1d, 0x1e, 0) 534#define MASK_R1_ERET MASK_R1_OPX (1, 1, 1, 1) 535#define MATCH_R1_FLUSHD MATCH_R1_OP (FLUSHD) | SET_IW_I_B (0) 536#define MASK_R1_FLUSHD MASK_R1_OP | IW_I_B_SHIFTED_MASK 537#define MATCH_R1_FLUSHDA MATCH_R1_OP (FLUSHDA) | SET_IW_I_B (0) 538#define MASK_R1_FLUSHDA MASK_R1_OP | IW_I_B_SHIFTED_MASK 539#define MATCH_R1_FLUSHI MATCH_R1_OPX (FLUSHI, 0, 0, 0) 540#define MASK_R1_FLUSHI MASK_R1_OPX (0, 1, 1, 1) 541#define MATCH_R1_FLUSHP MATCH_R1_OPX (FLUSHP, 0, 0, 0) 542#define MASK_R1_FLUSHP MASK_R1_OPX (1, 1, 1, 1) 543#define MATCH_R1_INITD MATCH_R1_OP (INITD) | SET_IW_I_B (0) 544#define MASK_R1_INITD MASK_R1_OP | IW_I_B_SHIFTED_MASK 545#define MATCH_R1_INITDA MATCH_R1_OP (INITDA) | SET_IW_I_B (0) 546#define MASK_R1_INITDA MASK_R1_OP | IW_I_B_SHIFTED_MASK 547#define MATCH_R1_INITI MATCH_R1_OPX (INITI, 0, 0, 0) 548#define MASK_R1_INITI MASK_R1_OPX (0, 1, 1, 1) 549#define MATCH_R1_JMP MATCH_R1_OPX (JMP, 0, 0, 0) 550#define MASK_R1_JMP MASK_R1_OPX (0, 1, 1, 1) 551#define MATCH_R1_JMPI MATCH_R1_OP (JMPI) 552#define MASK_R1_JMPI MASK_R1_OP 553#define MATCH_R1_LDB MATCH_R1_OP (LDB) 554#define MASK_R1_LDB MASK_R1_OP 555#define MATCH_R1_LDBIO MATCH_R1_OP (LDBIO) 556#define MASK_R1_LDBIO MASK_R1_OP 557#define MATCH_R1_LDBU MATCH_R1_OP (LDBU) 558#define MASK_R1_LDBU MASK_R1_OP 559#define MATCH_R1_LDBUIO MATCH_R1_OP (LDBUIO) 560#define MASK_R1_LDBUIO MASK_R1_OP 561#define MATCH_R1_LDH MATCH_R1_OP (LDH) 562#define MASK_R1_LDH MASK_R1_OP 563#define MATCH_R1_LDHIO MATCH_R1_OP (LDHIO) 564#define MASK_R1_LDHIO MASK_R1_OP 565#define MATCH_R1_LDHU MATCH_R1_OP (LDHU) 566#define MASK_R1_LDHU MASK_R1_OP 567#define MATCH_R1_LDHUIO MATCH_R1_OP (LDHUIO) 568#define MASK_R1_LDHUIO MASK_R1_OP 569#define MATCH_R1_LDW MATCH_R1_OP (LDW) 570#define MASK_R1_LDW MASK_R1_OP 571#define MATCH_R1_LDWIO MATCH_R1_OP (LDWIO) 572#define MASK_R1_LDWIO MASK_R1_OP 573#define MATCH_R1_MOV MATCH_R1_OPX (ADD, 0, 0, 0) 574#define MASK_R1_MOV MASK_R1_OPX (0, 1, 0, 1) 575#define MATCH_R1_MOVHI MATCH_R1_OP (ORHI) | SET_IW_I_A (0) 576#define MASK_R1_MOVHI MASK_R1_OP | IW_I_A_SHIFTED_MASK 577#define MATCH_R1_MOVI MATCH_R1_OP (ADDI) | SET_IW_I_A (0) 578#define MASK_R1_MOVI MASK_R1_OP | IW_I_A_SHIFTED_MASK 579#define MATCH_R1_MOVUI MATCH_R1_OP (ORI) | SET_IW_I_A (0) 580#define MASK_R1_MOVUI MASK_R1_OP | IW_I_A_SHIFTED_MASK 581#define MATCH_R1_MUL MATCH_R1_OPX0 (MUL) 582#define MASK_R1_MUL MASK_R1_OPX0 583#define MATCH_R1_MULI MATCH_R1_OP (MULI) 584#define MASK_R1_MULI MASK_R1_OP 585#define MATCH_R1_MULXSS MATCH_R1_OPX0 (MULXSS) 586#define MASK_R1_MULXSS MASK_R1_OPX0 587#define MATCH_R1_MULXSU MATCH_R1_OPX0 (MULXSU) 588#define MASK_R1_MULXSU MASK_R1_OPX0 589#define MATCH_R1_MULXUU MATCH_R1_OPX0 (MULXUU) 590#define MASK_R1_MULXUU MASK_R1_OPX0 591#define MATCH_R1_NEXTPC MATCH_R1_OPX (NEXTPC, 0, 0, 0) 592#define MASK_R1_NEXTPC MASK_R1_OPX (1, 1, 0, 1) 593#define MATCH_R1_NOP MATCH_R1_OPX (ADD, 0, 0, 0) 594#define MASK_R1_NOP MASK_R1_OPX (1, 1, 1, 1) 595#define MATCH_R1_NOR MATCH_R1_OPX0 (NOR) 596#define MASK_R1_NOR MASK_R1_OPX0 597#define MATCH_R1_OR MATCH_R1_OPX0 (OR) 598#define MASK_R1_OR MASK_R1_OPX0 599#define MATCH_R1_ORHI MATCH_R1_OP (ORHI) 600#define MASK_R1_ORHI MASK_R1_OP 601#define MATCH_R1_ORI MATCH_R1_OP (ORI) 602#define MASK_R1_ORI MASK_R1_OP 603#define MATCH_R1_RDCTL MATCH_R1_OPX (RDCTL, 0, 0, 0) 604#define MASK_R1_RDCTL MASK_R1_OPX (1, 1, 0, 0) 605#define MATCH_R1_RDPRS MATCH_R1_OP (RDPRS) 606#define MASK_R1_RDPRS MASK_R1_OP 607#define MATCH_R1_RET MATCH_R1_OPX (RET, 0x1f, 0, 0) 608#define MASK_R1_RET MASK_R1_OPX (1, 1, 1, 1) 609#define MATCH_R1_ROL MATCH_R1_OPX0 (ROL) 610#define MASK_R1_ROL MASK_R1_OPX0 611#define MATCH_R1_ROLI MATCH_R1_OPX (ROLI, 0, 0, 0) 612#define MASK_R1_ROLI MASK_R1_OPX (0, 1, 0, 0) 613#define MATCH_R1_ROR MATCH_R1_OPX0 (ROR) 614#define MASK_R1_ROR MASK_R1_OPX0 615#define MATCH_R1_SLL MATCH_R1_OPX0 (SLL) 616#define MASK_R1_SLL MASK_R1_OPX0 617#define MATCH_R1_SLLI MATCH_R1_OPX (SLLI, 0, 0, 0) 618#define MASK_R1_SLLI MASK_R1_OPX (0, 1, 0, 0) 619#define MATCH_R1_SRA MATCH_R1_OPX0 (SRA) 620#define MASK_R1_SRA MASK_R1_OPX0 621#define MATCH_R1_SRAI MATCH_R1_OPX (SRAI, 0, 0, 0) 622#define MASK_R1_SRAI MASK_R1_OPX (0, 1, 0, 0) 623#define MATCH_R1_SRL MATCH_R1_OPX0 (SRL) 624#define MASK_R1_SRL MASK_R1_OPX0 625#define MATCH_R1_SRLI MATCH_R1_OPX (SRLI, 0, 0, 0) 626#define MASK_R1_SRLI MASK_R1_OPX (0, 1, 0, 0) 627#define MATCH_R1_STB MATCH_R1_OP (STB) 628#define MASK_R1_STB MASK_R1_OP 629#define MATCH_R1_STBIO MATCH_R1_OP (STBIO) 630#define MASK_R1_STBIO MASK_R1_OP 631#define MATCH_R1_STH MATCH_R1_OP (STH) 632#define MASK_R1_STH MASK_R1_OP 633#define MATCH_R1_STHIO MATCH_R1_OP (STHIO) 634#define MASK_R1_STHIO MASK_R1_OP 635#define MATCH_R1_STW MATCH_R1_OP (STW) 636#define MASK_R1_STW MASK_R1_OP 637#define MATCH_R1_STWIO MATCH_R1_OP (STWIO) 638#define MASK_R1_STWIO MASK_R1_OP 639#define MATCH_R1_SUB MATCH_R1_OPX0 (SUB) 640#define MASK_R1_SUB MASK_R1_OPX0 641#define MATCH_R1_SUBI MATCH_R1_OP (ADDI) 642#define MASK_R1_SUBI MASK_R1_OP 643#define MATCH_R1_SYNC MATCH_R1_OPX (SYNC, 0, 0, 0) 644#define MASK_R1_SYNC MASK_R1_OPX (1, 1, 1, 1) 645#define MATCH_R1_TRAP MATCH_R1_OPX (TRAP, 0, 0, 0x1d) 646#define MASK_R1_TRAP MASK_R1_OPX (1, 1, 1, 0) 647#define MATCH_R1_WRCTL MATCH_R1_OPX (WRCTL, 0, 0, 0) 648#define MASK_R1_WRCTL MASK_R1_OPX (0, 1, 1, 0) 649#define MATCH_R1_WRPRS MATCH_R1_OPX (WRPRS, 0, 0, 0) 650#define MASK_R1_WRPRS MASK_R1_OPX (0, 1, 0, 1) 651#define MATCH_R1_XOR MATCH_R1_OPX0 (XOR) 652#define MASK_R1_XOR MASK_R1_OPX0 653#define MATCH_R1_XORHI MATCH_R1_OP (XORHI) 654#define MASK_R1_XORHI MASK_R1_OP 655#define MATCH_R1_XORI MATCH_R1_OP (XORI) 656#define MASK_R1_XORI MASK_R1_OP 657 658#endif /* _NIOS2R1_H */ 659 660/*#include "nios2r2.h"*/ 661 662#ifndef _NIOS2R2_H_ 663#define _NIOS2R2_H_ 664 665/* Fields for 32-bit R2 instructions. */ 666 667#define IW_R2_OP_LSB 0 668#define IW_R2_OP_SIZE 6 669#define IW_R2_OP_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_R2_OP_SIZE)) 670#define IW_R2_OP_SHIFTED_MASK (IW_R2_OP_UNSHIFTED_MASK << IW_R2_OP_LSB) 671#define GET_IW_R2_OP(W) (((W) >> IW_R2_OP_LSB) & IW_R2_OP_UNSHIFTED_MASK) 672#define SET_IW_R2_OP(V) (((V) & IW_R2_OP_UNSHIFTED_MASK) << IW_R2_OP_LSB) 673 674#define IW_L26_IMM26_LSB 6 675#define IW_L26_IMM26_SIZE 26 676#define IW_L26_IMM26_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_L26_IMM26_SIZE)) 677#define IW_L26_IMM26_SHIFTED_MASK (IW_L26_IMM26_UNSHIFTED_MASK << IW_L26_IMM26_LSB) 678#define GET_IW_L26_IMM26(W) (((W) >> IW_L26_IMM26_LSB) & IW_L26_IMM26_UNSHIFTED_MASK) 679#define SET_IW_L26_IMM26(V) (((V) & IW_L26_IMM26_UNSHIFTED_MASK) << IW_L26_IMM26_LSB) 680 681#define IW_F2I16_A_LSB 6 682#define IW_F2I16_A_SIZE 5 683#define IW_F2I16_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2I16_A_SIZE)) 684#define IW_F2I16_A_SHIFTED_MASK (IW_F2I16_A_UNSHIFTED_MASK << IW_F2I16_A_LSB) 685#define GET_IW_F2I16_A(W) (((W) >> IW_F2I16_A_LSB) & IW_F2I16_A_UNSHIFTED_MASK) 686#define SET_IW_F2I16_A(V) (((V) & IW_F2I16_A_UNSHIFTED_MASK) << IW_F2I16_A_LSB) 687 688#define IW_F2I16_B_LSB 11 689#define IW_F2I16_B_SIZE 5 690#define IW_F2I16_B_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2I16_B_SIZE)) 691#define IW_F2I16_B_SHIFTED_MASK (IW_F2I16_B_UNSHIFTED_MASK << IW_F2I16_B_LSB) 692#define GET_IW_F2I16_B(W) (((W) >> IW_F2I16_B_LSB) & IW_F2I16_B_UNSHIFTED_MASK) 693#define SET_IW_F2I16_B(V) (((V) & IW_F2I16_B_UNSHIFTED_MASK) << IW_F2I16_B_LSB) 694 695#define IW_F2I16_IMM16_LSB 16 696#define IW_F2I16_IMM16_SIZE 16 697#define IW_F2I16_IMM16_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2I16_IMM16_SIZE)) 698#define IW_F2I16_IMM16_SHIFTED_MASK (IW_F2I16_IMM16_UNSHIFTED_MASK << IW_F2I16_IMM16_LSB) 699#define GET_IW_F2I16_IMM16(W) (((W) >> IW_F2I16_IMM16_LSB) & IW_F2I16_IMM16_UNSHIFTED_MASK) 700#define SET_IW_F2I16_IMM16(V) (((V) & IW_F2I16_IMM16_UNSHIFTED_MASK) << IW_F2I16_IMM16_LSB) 701 702/* Common to all three I12-group formats F2X4I12, F1X4I12, F1X4L17. */ 703#define IW_I12_X_LSB 28 704#define IW_I12_X_SIZE 4 705#define IW_I12_X_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_I12_X_SIZE)) 706#define IW_I12_X_SHIFTED_MASK (IW_I12_X_UNSHIFTED_MASK << IW_I12_X_LSB) 707#define GET_IW_I12_X(W) (((W) >> IW_I12_X_LSB) & IW_I12_X_UNSHIFTED_MASK) 708#define SET_IW_I12_X(V) (((V) & IW_I12_X_UNSHIFTED_MASK) << IW_I12_X_LSB) 709 710#define IW_F2X4I12_A_LSB 6 711#define IW_F2X4I12_A_SIZE 5 712#define IW_F2X4I12_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2X4I12_A_SIZE)) 713#define IW_F2X4I12_A_SHIFTED_MASK (IW_F2X4I12_A_UNSHIFTED_MASK << IW_F2X4I12_A_LSB) 714#define GET_IW_F2X4I12_A(W) (((W) >> IW_F2X4I12_A_LSB) & IW_F2X4I12_A_UNSHIFTED_MASK) 715#define SET_IW_F2X4I12_A(V) (((V) & IW_F2X4I12_A_UNSHIFTED_MASK) << IW_F2X4I12_A_LSB) 716 717#define IW_F2X4I12_B_LSB 11 718#define IW_F2X4I12_B_SIZE 5 719#define IW_F2X4I12_B_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2X4I12_B_SIZE)) 720#define IW_F2X4I12_B_SHIFTED_MASK (IW_F2X4I12_B_UNSHIFTED_MASK << IW_F2X4I12_B_LSB) 721#define GET_IW_F2X4I12_B(W) (((W) >> IW_F2X4I12_B_LSB) & IW_F2X4I12_B_UNSHIFTED_MASK) 722#define SET_IW_F2X4I12_B(V) (((V) & IW_F2X4I12_B_UNSHIFTED_MASK) << IW_F2X4I12_B_LSB) 723 724#define IW_F2X4I12_IMM12_LSB 16 725#define IW_F2X4I12_IMM12_SIZE 12 726#define IW_F2X4I12_IMM12_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2X4I12_IMM12_SIZE)) 727#define IW_F2X4I12_IMM12_SHIFTED_MASK (IW_F2X4I12_IMM12_UNSHIFTED_MASK << IW_F2X4I12_IMM12_LSB) 728#define GET_IW_F2X4I12_IMM12(W) (((W) >> IW_F2X4I12_IMM12_LSB) & IW_F2X4I12_IMM12_UNSHIFTED_MASK) 729#define SET_IW_F2X4I12_IMM12(V) (((V) & IW_F2X4I12_IMM12_UNSHIFTED_MASK) << IW_F2X4I12_IMM12_LSB) 730 731#define IW_F1X4I12_A_LSB 6 732#define IW_F1X4I12_A_SIZE 5 733#define IW_F1X4I12_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X4I12_A_SIZE)) 734#define IW_F1X4I12_A_SHIFTED_MASK (IW_F1X4I12_A_UNSHIFTED_MASK << IW_F1X4I12_A_LSB) 735#define GET_IW_F1X4I12_A(W) (((W) >> IW_F1X4I12_A_LSB) & IW_F1X4I12_A_UNSHIFTED_MASK) 736#define SET_IW_F1X4I12_A(V) (((V) & IW_F1X4I12_A_UNSHIFTED_MASK) << IW_F1X4I12_A_LSB) 737 738#define IW_F1X4I12_X_LSB 11 739#define IW_F1X4I12_X_SIZE 5 740#define IW_F1X4I12_X_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X4I12_X_SIZE)) 741#define IW_F1X4I12_X_SHIFTED_MASK (IW_F1X4I12_X_UNSHIFTED_MASK << IW_F1X4I12_X_LSB) 742#define GET_IW_F1X4I12_X(W) (((W) >> IW_F1X4I12_X_LSB) & IW_F1X4I12_X_UNSHIFTED_MASK) 743#define SET_IW_F1X4I12_X(V) (((V) & IW_F1X4I12_X_UNSHIFTED_MASK) << IW_F1X4I12_X_LSB) 744 745#define IW_F1X4I12_IMM12_LSB 16 746#define IW_F1X4I12_IMM12_SIZE 12 747#define IW_F1X4I12_IMM12_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X4I12_IMM12_SIZE)) 748#define IW_F1X4I12_IMM12_SHIFTED_MASK (IW_F1X4I12_IMM12_UNSHIFTED_MASK << IW_F1X4I12_IMM12_LSB) 749#define GET_IW_F1X4I12_IMM12(W) (((W) >> IW_F1X4I12_IMM12_LSB) & IW_F1X4I12_IMM12_UNSHIFTED_MASK) 750#define SET_IW_F1X4I12_IMM12(V) (((V) & IW_F1X4I12_IMM12_UNSHIFTED_MASK) << IW_F1X4I12_IMM12_LSB) 751 752#define IW_F1X4L17_A_LSB 6 753#define IW_F1X4L17_A_SIZE 5 754#define IW_F1X4L17_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X4L17_A_SIZE)) 755#define IW_F1X4L17_A_SHIFTED_MASK (IW_F1X4L17_A_UNSHIFTED_MASK << IW_F1X4L17_A_LSB) 756#define GET_IW_F1X4L17_A(W) (((W) >> IW_F1X4L17_A_LSB) & IW_F1X4L17_A_UNSHIFTED_MASK) 757#define SET_IW_F1X4L17_A(V) (((V) & IW_F1X4L17_A_UNSHIFTED_MASK) << IW_F1X4L17_A_LSB) 758 759#define IW_F1X4L17_ID_LSB 11 760#define IW_F1X4L17_ID_SIZE 1 761#define IW_F1X4L17_ID_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X4L17_ID_SIZE)) 762#define IW_F1X4L17_ID_SHIFTED_MASK (IW_F1X4L17_ID_UNSHIFTED_MASK << IW_F1X4L17_ID_LSB) 763#define GET_IW_F1X4L17_ID(W) (((W) >> IW_F1X4L17_ID_LSB) & IW_F1X4L17_ID_UNSHIFTED_MASK) 764#define SET_IW_F1X4L17_ID(V) (((V) & IW_F1X4L17_ID_UNSHIFTED_MASK) << IW_F1X4L17_ID_LSB) 765 766#define IW_F1X4L17_WB_LSB 12 767#define IW_F1X4L17_WB_SIZE 1 768#define IW_F1X4L17_WB_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X4L17_WB_SIZE)) 769#define IW_F1X4L17_WB_SHIFTED_MASK (IW_F1X4L17_WB_UNSHIFTED_MASK << IW_F1X4L17_WB_LSB) 770#define GET_IW_F1X4L17_WB(W) (((W) >> IW_F1X4L17_WB_LSB) & IW_F1X4L17_WB_UNSHIFTED_MASK) 771#define SET_IW_F1X4L17_WB(V) (((V) & IW_F1X4L17_WB_UNSHIFTED_MASK) << IW_F1X4L17_WB_LSB) 772 773#define IW_F1X4L17_RS_LSB 13 774#define IW_F1X4L17_RS_SIZE 1 775#define IW_F1X4L17_RS_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X4L17_RS_SIZE)) 776#define IW_F1X4L17_RS_SHIFTED_MASK (IW_F1X4L17_RS_UNSHIFTED_MASK << IW_F1X4L17_RS_LSB) 777#define GET_IW_F1X4L17_RS(W) (((W) >> IW_F1X4L17_RS_LSB) & IW_F1X4L17_RS_UNSHIFTED_MASK) 778#define SET_IW_F1X4L17_RS(V) (((V) & IW_F1X4L17_RS_UNSHIFTED_MASK) << IW_F1X4L17_RS_LSB) 779 780#define IW_F1X4L17_PC_LSB 14 781#define IW_F1X4L17_PC_SIZE 1 782#define IW_F1X4L17_PC_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X4L17_PC_SIZE)) 783#define IW_F1X4L17_PC_SHIFTED_MASK (IW_F1X4L17_PC_UNSHIFTED_MASK << IW_F1X4L17_PC_LSB) 784#define GET_IW_F1X4L17_PC(W) (((W) >> IW_F1X4L17_PC_LSB) & IW_F1X4L17_PC_UNSHIFTED_MASK) 785#define SET_IW_F1X4L17_PC(V) (((V) & IW_F1X4L17_PC_UNSHIFTED_MASK) << IW_F1X4L17_PC_LSB) 786 787#define IW_F1X4L17_RSV_LSB 15 788#define IW_F1X4L17_RSV_SIZE 1 789#define IW_F1X4L17_RSV_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X4L17_RSV_SIZE)) 790#define IW_F1X4L17_RSV_SHIFTED_MASK (IW_F1X4L17_RSV_UNSHIFTED_MASK << IW_F1X4L17_RSV_LSB) 791#define GET_IW_F1X4L17_RSV(W) (((W) >> IW_F1X4L17_RSV_LSB) & IW_F1X4L17_RSV_UNSHIFTED_MASK) 792#define SET_IW_F1X4L17_RSV(V) (((V) & IW_F1X4L17_RSV_UNSHIFTED_MASK) << IW_F1X4L17_RSV_LSB) 793 794#define IW_F1X4L17_REGMASK_LSB 16 795#define IW_F1X4L17_REGMASK_SIZE 12 796#define IW_F1X4L17_REGMASK_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X4L17_REGMASK_SIZE)) 797#define IW_F1X4L17_REGMASK_SHIFTED_MASK (IW_F1X4L17_REGMASK_UNSHIFTED_MASK << IW_F1X4L17_REGMASK_LSB) 798#define GET_IW_F1X4L17_REGMASK(W) (((W) >> IW_F1X4L17_REGMASK_LSB) & IW_F1X4L17_REGMASK_UNSHIFTED_MASK) 799#define SET_IW_F1X4L17_REGMASK(V) (((V) & IW_F1X4L17_REGMASK_UNSHIFTED_MASK) << IW_F1X4L17_REGMASK_LSB) 800 801/* Shared by OPX-group formats F3X6L5, F2X6L10, F3X6. */ 802#define IW_OPX_X_LSB 26 803#define IW_OPX_X_SIZE 6 804#define IW_OPX_X_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_OPX_X_SIZE)) 805#define IW_OPX_X_SHIFTED_MASK (IW_OPX_X_UNSHIFTED_MASK << IW_OPX_X_LSB) 806#define GET_IW_OPX_X(W) (((W) >> IW_OPX_X_LSB) & IW_OPX_X_UNSHIFTED_MASK) 807#define SET_IW_OPX_X(V) (((V) & IW_OPX_X_UNSHIFTED_MASK) << IW_OPX_X_LSB) 808 809/* F3X6L5 accessors are also used for F3X6 formats. */ 810#define IW_F3X6L5_A_LSB 6 811#define IW_F3X6L5_A_SIZE 5 812#define IW_F3X6L5_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F3X6L5_A_SIZE)) 813#define IW_F3X6L5_A_SHIFTED_MASK (IW_F3X6L5_A_UNSHIFTED_MASK << IW_F3X6L5_A_LSB) 814#define GET_IW_F3X6L5_A(W) (((W) >> IW_F3X6L5_A_LSB) & IW_F3X6L5_A_UNSHIFTED_MASK) 815#define SET_IW_F3X6L5_A(V) (((V) & IW_F3X6L5_A_UNSHIFTED_MASK) << IW_F3X6L5_A_LSB) 816 817#define IW_F3X6L5_B_LSB 11 818#define IW_F3X6L5_B_SIZE 5 819#define IW_F3X6L5_B_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F3X6L5_B_SIZE)) 820#define IW_F3X6L5_B_SHIFTED_MASK (IW_F3X6L5_B_UNSHIFTED_MASK << IW_F3X6L5_B_LSB) 821#define GET_IW_F3X6L5_B(W) (((W) >> IW_F3X6L5_B_LSB) & IW_F3X6L5_B_UNSHIFTED_MASK) 822#define SET_IW_F3X6L5_B(V) (((V) & IW_F3X6L5_B_UNSHIFTED_MASK) << IW_F3X6L5_B_LSB) 823 824#define IW_F3X6L5_C_LSB 16 825#define IW_F3X6L5_C_SIZE 5 826#define IW_F3X6L5_C_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F3X6L5_C_SIZE)) 827#define IW_F3X6L5_C_SHIFTED_MASK (IW_F3X6L5_C_UNSHIFTED_MASK << IW_F3X6L5_C_LSB) 828#define GET_IW_F3X6L5_C(W) (((W) >> IW_F3X6L5_C_LSB) & IW_F3X6L5_C_UNSHIFTED_MASK) 829#define SET_IW_F3X6L5_C(V) (((V) & IW_F3X6L5_C_UNSHIFTED_MASK) << IW_F3X6L5_C_LSB) 830 831#define IW_F3X6L5_IMM5_LSB 21 832#define IW_F3X6L5_IMM5_SIZE 5 833#define IW_F3X6L5_IMM5_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F3X6L5_IMM5_SIZE)) 834#define IW_F3X6L5_IMM5_SHIFTED_MASK (IW_F3X6L5_IMM5_UNSHIFTED_MASK << IW_F3X6L5_IMM5_LSB) 835#define GET_IW_F3X6L5_IMM5(W) (((W) >> IW_F3X6L5_IMM5_LSB) & IW_F3X6L5_IMM5_UNSHIFTED_MASK) 836#define SET_IW_F3X6L5_IMM5(V) (((V) & IW_F3X6L5_IMM5_UNSHIFTED_MASK) << IW_F3X6L5_IMM5_LSB) 837 838#define IW_F2X6L10_A_LSB 6 839#define IW_F2X6L10_A_SIZE 5 840#define IW_F2X6L10_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2X6L10_A_SIZE)) 841#define IW_F2X6L10_A_SHIFTED_MASK (IW_F2X6L10_A_UNSHIFTED_MASK << IW_F2X6L10_A_LSB) 842#define GET_IW_F2X6L10_A(W) (((W) >> IW_F2X6L10_A_LSB) & IW_F2X6L10_A_UNSHIFTED_MASK) 843#define SET_IW_F2X6L10_A(V) (((V) & IW_F2X6L10_A_UNSHIFTED_MASK) << IW_F2X6L10_A_LSB) 844 845#define IW_F2X6L10_B_LSB 11 846#define IW_F2X6L10_B_SIZE 5 847#define IW_F2X6L10_B_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2X6L10_B_SIZE)) 848#define IW_F2X6L10_B_SHIFTED_MASK (IW_F2X6L10_B_UNSHIFTED_MASK << IW_F2X6L10_B_LSB) 849#define GET_IW_F2X6L10_B(W) (((W) >> IW_F2X6L10_B_LSB) & IW_F2X6L10_B_UNSHIFTED_MASK) 850#define SET_IW_F2X6L10_B(V) (((V) & IW_F2X6L10_B_UNSHIFTED_MASK) << IW_F2X6L10_B_LSB) 851 852#define IW_F2X6L10_LSB_LSB 16 853#define IW_F2X6L10_LSB_SIZE 5 854#define IW_F2X6L10_LSB_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2X6L10_LSB_SIZE)) 855#define IW_F2X6L10_LSB_SHIFTED_MASK (IW_F2X6L10_LSB_UNSHIFTED_MASK << IW_F2X6L10_LSB_LSB) 856#define GET_IW_F2X6L10_LSB(W) (((W) >> IW_F2X6L10_LSB_LSB) & IW_F2X6L10_LSB_UNSHIFTED_MASK) 857#define SET_IW_F2X6L10_LSB(V) (((V) & IW_F2X6L10_LSB_UNSHIFTED_MASK) << IW_F2X6L10_LSB_LSB) 858 859#define IW_F2X6L10_MSB_LSB 21 860#define IW_F2X6L10_MSB_SIZE 5 861#define IW_F2X6L10_MSB_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2X6L10_MSB_SIZE)) 862#define IW_F2X6L10_MSB_SHIFTED_MASK (IW_F2X6L10_MSB_UNSHIFTED_MASK << IW_F2X6L10_MSB_LSB) 863#define GET_IW_F2X6L10_MSB(W) (((W) >> IW_F2X6L10_MSB_LSB) & IW_F2X6L10_MSB_UNSHIFTED_MASK) 864#define SET_IW_F2X6L10_MSB(V) (((V) & IW_F2X6L10_MSB_UNSHIFTED_MASK) << IW_F2X6L10_MSB_LSB) 865 866#define IW_F3X8_A_LSB 6 867#define IW_F3X8_A_SIZE 5 868#define IW_F3X8_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F3X8_A_SIZE)) 869#define IW_F3X8_A_SHIFTED_MASK (IW_F3X8_A_UNSHIFTED_MASK << IW_F3X8_A_LSB) 870#define GET_IW_F3X8_A(W) (((W) >> IW_F3X8_A_LSB) & IW_F3X8_A_UNSHIFTED_MASK) 871#define SET_IW_F3X8_A(V) (((V) & IW_F3X8_A_UNSHIFTED_MASK) << IW_F3X8_A_LSB) 872 873#define IW_F3X8_B_LSB 11 874#define IW_F3X8_B_SIZE 5 875#define IW_F3X8_B_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F3X8_B_SIZE)) 876#define IW_F3X8_B_SHIFTED_MASK (IW_F3X8_B_UNSHIFTED_MASK << IW_F3X8_B_LSB) 877#define GET_IW_F3X8_B(W) (((W) >> IW_F3X8_B_LSB) & IW_F3X8_B_UNSHIFTED_MASK) 878#define SET_IW_F3X8_B(V) (((V) & IW_F3X8_B_UNSHIFTED_MASK) << IW_F3X8_B_LSB) 879 880#define IW_F3X8_C_LSB 16 881#define IW_F3X8_C_SIZE 5 882#define IW_F3X8_C_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F3X8_C_SIZE)) 883#define IW_F3X8_C_SHIFTED_MASK (IW_F3X8_C_UNSHIFTED_MASK << IW_F3X8_C_LSB) 884#define GET_IW_F3X8_C(W) (((W) >> IW_F3X8_C_LSB) & IW_F3X8_C_UNSHIFTED_MASK) 885#define SET_IW_F3X8_C(V) (((V) & IW_F3X8_C_UNSHIFTED_MASK) << IW_F3X8_C_LSB) 886 887#define IW_F3X8_READA_LSB 21 888#define IW_F3X8_READA_SIZE 1 889#define IW_F3X8_READA_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F3X8_READA_SIZE)) 890#define IW_F3X8_READA_SHIFTED_MASK (IW_F3X8_READA_UNSHIFTED_MASK << IW_F3X8_READA_LSB) 891#define GET_IW_F3X8_READA(W) (((W) >> IW_F3X8_READA_LSB) & IW_F3X8_READA_UNSHIFTED_MASK) 892#define SET_IW_F3X8_READA(V) (((V) & IW_F3X8_READA_UNSHIFTED_MASK) << IW_F3X8_READA_LSB) 893 894#define IW_F3X8_READB_LSB 22 895#define IW_F3X8_READB_SIZE 1 896#define IW_F3X8_READB_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F3X8_READB_SIZE)) 897#define IW_F3X8_READB_SHIFTED_MASK (IW_F3X8_READB_UNSHIFTED_MASK << IW_F3X8_READB_LSB) 898#define GET_IW_F3X8_READB(W) (((W) >> IW_F3X8_READB_LSB) & IW_F3X8_READB_UNSHIFTED_MASK) 899#define SET_IW_F3X8_READB(V) (((V) & IW_F3X8_READB_UNSHIFTED_MASK) << IW_F3X8_READB_LSB) 900 901#define IW_F3X8_READC_LSB 23 902#define IW_F3X8_READC_SIZE 1 903#define IW_F3X8_READC_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F3X8_READC_SIZE)) 904#define IW_F3X8_READC_SHIFTED_MASK (IW_F3X8_READC_UNSHIFTED_MASK << IW_F3X8_READC_LSB) 905#define GET_IW_F3X8_READC(W) (((W) >> IW_F3X8_READC_LSB) & IW_F3X8_READC_UNSHIFTED_MASK) 906#define SET_IW_F3X8_READC(V) (((V) & IW_F3X8_READC_UNSHIFTED_MASK) << IW_F3X8_READC_LSB) 907 908#define IW_F3X8_N_LSB 24 909#define IW_F3X8_N_SIZE 8 910#define IW_F3X8_N_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F3X8_N_SIZE)) 911#define IW_F3X8_N_SHIFTED_MASK (IW_F3X8_N_UNSHIFTED_MASK << IW_F3X8_N_LSB) 912#define GET_IW_F3X8_N(W) (((W) >> IW_F3X8_N_LSB) & IW_F3X8_N_UNSHIFTED_MASK) 913#define SET_IW_F3X8_N(V) (((V) & IW_F3X8_N_UNSHIFTED_MASK) << IW_F3X8_N_LSB) 914 915/* 16-bit R2 fields. */ 916 917#define IW_I10_IMM10_LSB 6 918#define IW_I10_IMM10_SIZE 10 919#define IW_I10_IMM10_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_I10_IMM10_SIZE)) 920#define IW_I10_IMM10_SHIFTED_MASK (IW_I10_IMM10_UNSHIFTED_MASK << IW_I10_IMM10_LSB) 921#define GET_IW_I10_IMM10(W) (((W) >> IW_I10_IMM10_LSB) & IW_I10_IMM10_UNSHIFTED_MASK) 922#define SET_IW_I10_IMM10(V) (((V) & IW_I10_IMM10_UNSHIFTED_MASK) << IW_I10_IMM10_LSB) 923 924#define IW_T1I7_A3_LSB 6 925#define IW_T1I7_A3_SIZE 3 926#define IW_T1I7_A3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T1I7_A3_SIZE)) 927#define IW_T1I7_A3_SHIFTED_MASK (IW_T1I7_A3_UNSHIFTED_MASK << IW_T1I7_A3_LSB) 928#define GET_IW_T1I7_A3(W) (((W) >> IW_T1I7_A3_LSB) & IW_T1I7_A3_UNSHIFTED_MASK) 929#define SET_IW_T1I7_A3(V) (((V) & IW_T1I7_A3_UNSHIFTED_MASK) << IW_T1I7_A3_LSB) 930 931#define IW_T1I7_IMM7_LSB 9 932#define IW_T1I7_IMM7_SIZE 7 933#define IW_T1I7_IMM7_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T1I7_IMM7_SIZE)) 934#define IW_T1I7_IMM7_SHIFTED_MASK (IW_T1I7_IMM7_UNSHIFTED_MASK << IW_T1I7_IMM7_LSB) 935#define GET_IW_T1I7_IMM7(W) (((W) >> IW_T1I7_IMM7_LSB) & IW_T1I7_IMM7_UNSHIFTED_MASK) 936#define SET_IW_T1I7_IMM7(V) (((V) & IW_T1I7_IMM7_UNSHIFTED_MASK) << IW_T1I7_IMM7_LSB) 937 938#define IW_T2I4_A3_LSB 6 939#define IW_T2I4_A3_SIZE 3 940#define IW_T2I4_A3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2I4_A3_SIZE)) 941#define IW_T2I4_A3_SHIFTED_MASK (IW_T2I4_A3_UNSHIFTED_MASK << IW_T2I4_A3_LSB) 942#define GET_IW_T2I4_A3(W) (((W) >> IW_T2I4_A3_LSB) & IW_T2I4_A3_UNSHIFTED_MASK) 943#define SET_IW_T2I4_A3(V) (((V) & IW_T2I4_A3_UNSHIFTED_MASK) << IW_T2I4_A3_LSB) 944 945#define IW_T2I4_B3_LSB 9 946#define IW_T2I4_B3_SIZE 3 947#define IW_T2I4_B3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2I4_B3_SIZE)) 948#define IW_T2I4_B3_SHIFTED_MASK (IW_T2I4_B3_UNSHIFTED_MASK << IW_T2I4_B3_LSB) 949#define GET_IW_T2I4_B3(W) (((W) >> IW_T2I4_B3_LSB) & IW_T2I4_B3_UNSHIFTED_MASK) 950#define SET_IW_T2I4_B3(V) (((V) & IW_T2I4_B3_UNSHIFTED_MASK) << IW_T2I4_B3_LSB) 951 952#define IW_T2I4_IMM4_LSB 12 953#define IW_T2I4_IMM4_SIZE 4 954#define IW_T2I4_IMM4_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2I4_IMM4_SIZE)) 955#define IW_T2I4_IMM4_SHIFTED_MASK (IW_T2I4_IMM4_UNSHIFTED_MASK << IW_T2I4_IMM4_LSB) 956#define GET_IW_T2I4_IMM4(W) (((W) >> IW_T2I4_IMM4_LSB) & IW_T2I4_IMM4_UNSHIFTED_MASK) 957#define SET_IW_T2I4_IMM4(V) (((V) & IW_T2I4_IMM4_UNSHIFTED_MASK) << IW_T2I4_IMM4_LSB) 958 959#define IW_T1X1I6_A3_LSB 6 960#define IW_T1X1I6_A3_SIZE 3 961#define IW_T1X1I6_A3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T1X1I6_A3_SIZE)) 962#define IW_T1X1I6_A3_SHIFTED_MASK (IW_T1X1I6_A3_UNSHIFTED_MASK << IW_T1X1I6_A3_LSB) 963#define GET_IW_T1X1I6_A3(W) (((W) >> IW_T1X1I6_A3_LSB) & IW_T1X1I6_A3_UNSHIFTED_MASK) 964#define SET_IW_T1X1I6_A3(V) (((V) & IW_T1X1I6_A3_UNSHIFTED_MASK) << IW_T1X1I6_A3_LSB) 965 966#define IW_T1X1I6_IMM6_LSB 9 967#define IW_T1X1I6_IMM6_SIZE 6 968#define IW_T1X1I6_IMM6_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T1X1I6_IMM6_SIZE)) 969#define IW_T1X1I6_IMM6_SHIFTED_MASK (IW_T1X1I6_IMM6_UNSHIFTED_MASK << IW_T1X1I6_IMM6_LSB) 970#define GET_IW_T1X1I6_IMM6(W) (((W) >> IW_T1X1I6_IMM6_LSB) & IW_T1X1I6_IMM6_UNSHIFTED_MASK) 971#define SET_IW_T1X1I6_IMM6(V) (((V) & IW_T1X1I6_IMM6_UNSHIFTED_MASK) << IW_T1X1I6_IMM6_LSB) 972 973#define IW_T1X1I6_X_LSB 15 974#define IW_T1X1I6_X_SIZE 1 975#define IW_T1X1I6_X_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T1X1I6_X_SIZE)) 976#define IW_T1X1I6_X_SHIFTED_MASK (IW_T1X1I6_X_UNSHIFTED_MASK << IW_T1X1I6_X_LSB) 977#define GET_IW_T1X1I6_X(W) (((W) >> IW_T1X1I6_X_LSB) & IW_T1X1I6_X_UNSHIFTED_MASK) 978#define SET_IW_T1X1I6_X(V) (((V) & IW_T1X1I6_X_UNSHIFTED_MASK) << IW_T1X1I6_X_LSB) 979 980#define IW_X1I7_IMM7_LSB 6 981#define IW_X1I7_IMM7_SIZE 7 982#define IW_X1I7_IMM7_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_X1I7_IMM7_SIZE)) 983#define IW_X1I7_IMM7_SHIFTED_MASK (IW_X1I7_IMM7_UNSHIFTED_MASK << IW_X1I7_IMM7_LSB) 984#define GET_IW_X1I7_IMM7(W) (((W) >> IW_X1I7_IMM7_LSB) & IW_X1I7_IMM7_UNSHIFTED_MASK) 985#define SET_IW_X1I7_IMM7(V) (((V) & IW_X1I7_IMM7_UNSHIFTED_MASK) << IW_X1I7_IMM7_LSB) 986 987#define IW_X1I7_RSV_LSB 13 988#define IW_X1I7_RSV_SIZE 2 989#define IW_X1I7_RSV_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_X1I7_RSV_SIZE)) 990#define IW_X1I7_RSV_SHIFTED_MASK (IW_X1I7_RSV_UNSHIFTED_MASK << IW_X1I7_RSV_LSB) 991#define GET_IW_X1I7_RSV(W) (((W) >> IW_X1I7_RSV_LSB) & IW_X1I7_RSV_UNSHIFTED_MASK) 992#define SET_IW_X1I7_RSV(V) (((V) & IW_X1I7_RSV_UNSHIFTED_MASK) << IW_X1I7_RSV_LSB) 993 994#define IW_X1I7_X_LSB 15 995#define IW_X1I7_X_SIZE 1 996#define IW_X1I7_X_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_X1I7_X_SIZE)) 997#define IW_X1I7_X_SHIFTED_MASK (IW_X1I7_X_UNSHIFTED_MASK << IW_X1I7_X_LSB) 998#define GET_IW_X1I7_X(W) (((W) >> IW_X1I7_X_LSB) & IW_X1I7_X_UNSHIFTED_MASK) 999#define SET_IW_X1I7_X(V) (((V) & IW_X1I7_X_UNSHIFTED_MASK) << IW_X1I7_X_LSB) 1000 1001#define IW_L5I4X1_IMM4_LSB 6 1002#define IW_L5I4X1_IMM4_SIZE 4 1003#define IW_L5I4X1_IMM4_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_L5I4X1_IMM4_SIZE)) 1004#define IW_L5I4X1_IMM4_SHIFTED_MASK (IW_L5I4X1_IMM4_UNSHIFTED_MASK << IW_L5I4X1_IMM4_LSB) 1005#define GET_IW_L5I4X1_IMM4(W) (((W) >> IW_L5I4X1_IMM4_LSB) & IW_L5I4X1_IMM4_UNSHIFTED_MASK) 1006#define SET_IW_L5I4X1_IMM4(V) (((V) & IW_L5I4X1_IMM4_UNSHIFTED_MASK) << IW_L5I4X1_IMM4_LSB) 1007 1008#define IW_L5I4X1_REGRANGE_LSB 10 1009#define IW_L5I4X1_REGRANGE_SIZE 3 1010#define IW_L5I4X1_REGRANGE_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_L5I4X1_REGRANGE_SIZE)) 1011#define IW_L5I4X1_REGRANGE_SHIFTED_MASK (IW_L5I4X1_REGRANGE_UNSHIFTED_MASK << IW_L5I4X1_REGRANGE_LSB) 1012#define GET_IW_L5I4X1_REGRANGE(W) (((W) >> IW_L5I4X1_REGRANGE_LSB) & IW_L5I4X1_REGRANGE_UNSHIFTED_MASK) 1013#define SET_IW_L5I4X1_REGRANGE(V) (((V) & IW_L5I4X1_REGRANGE_UNSHIFTED_MASK) << IW_L5I4X1_REGRANGE_LSB) 1014 1015#define IW_L5I4X1_FP_LSB 13 1016#define IW_L5I4X1_FP_SIZE 1 1017#define IW_L5I4X1_FP_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_L5I4X1_FP_SIZE)) 1018#define IW_L5I4X1_FP_SHIFTED_MASK (IW_L5I4X1_FP_UNSHIFTED_MASK << IW_L5I4X1_FP_LSB) 1019#define GET_IW_L5I4X1_FP(W) (((W) >> IW_L5I4X1_FP_LSB) & IW_L5I4X1_FP_UNSHIFTED_MASK) 1020#define SET_IW_L5I4X1_FP(V) (((V) & IW_L5I4X1_FP_UNSHIFTED_MASK) << IW_L5I4X1_FP_LSB) 1021 1022#define IW_L5I4X1_CS_LSB 14 1023#define IW_L5I4X1_CS_SIZE 1 1024#define IW_L5I4X1_CS_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_L5I4X1_CS_SIZE)) 1025#define IW_L5I4X1_CS_SHIFTED_MASK (IW_L5I4X1_CS_UNSHIFTED_MASK << IW_L5I4X1_CS_LSB) 1026#define GET_IW_L5I4X1_CS(W) (((W) >> IW_L5I4X1_CS_LSB) & IW_L5I4X1_CS_UNSHIFTED_MASK) 1027#define SET_IW_L5I4X1_CS(V) (((V) & IW_L5I4X1_CS_UNSHIFTED_MASK) << IW_L5I4X1_CS_LSB) 1028 1029#define IW_L5I4X1_X_LSB 15 1030#define IW_L5I4X1_X_SIZE 1 1031#define IW_L5I4X1_X_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_L5I4X1_X_SIZE)) 1032#define IW_L5I4X1_X_SHIFTED_MASK (IW_L5I4X1_X_UNSHIFTED_MASK << IW_L5I4X1_X_LSB) 1033#define GET_IW_L5I4X1_X(W) (((W) >> IW_L5I4X1_X_LSB) & IW_L5I4X1_X_UNSHIFTED_MASK) 1034#define SET_IW_L5I4X1_X(V) (((V) & IW_L5I4X1_X_UNSHIFTED_MASK) << IW_L5I4X1_X_LSB) 1035 1036#define IW_T2X1L3_A3_LSB 6 1037#define IW_T2X1L3_A3_SIZE 3 1038#define IW_T2X1L3_A3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2X1L3_A3_SIZE)) 1039#define IW_T2X1L3_A3_SHIFTED_MASK (IW_T2X1L3_A3_UNSHIFTED_MASK << IW_T2X1L3_A3_LSB) 1040#define GET_IW_T2X1L3_A3(W) (((W) >> IW_T2X1L3_A3_LSB) & IW_T2X1L3_A3_UNSHIFTED_MASK) 1041#define SET_IW_T2X1L3_A3(V) (((V) & IW_T2X1L3_A3_UNSHIFTED_MASK) << IW_T2X1L3_A3_LSB) 1042 1043#define IW_T2X1L3_B3_LSB 9 1044#define IW_T2X1L3_B3_SIZE 3 1045#define IW_T2X1L3_B3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2X1L3_B3_SIZE)) 1046#define IW_T2X1L3_B3_SHIFTED_MASK (IW_T2X1L3_B3_UNSHIFTED_MASK << IW_T2X1L3_B3_LSB) 1047#define GET_IW_T2X1L3_B3(W) (((W) >> IW_T2X1L3_B3_LSB) & IW_T2X1L3_B3_UNSHIFTED_MASK) 1048#define SET_IW_T2X1L3_B3(V) (((V) & IW_T2X1L3_B3_UNSHIFTED_MASK) << IW_T2X1L3_B3_LSB) 1049 1050#define IW_T2X1L3_SHAMT_LSB 12 1051#define IW_T2X1L3_SHAMT_SIZE 3 1052#define IW_T2X1L3_SHAMT_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2X1L3_SHAMT_SIZE)) 1053#define IW_T2X1L3_SHAMT_SHIFTED_MASK (IW_T2X1L3_SHAMT_UNSHIFTED_MASK << IW_T2X1L3_SHAMT_LSB) 1054#define GET_IW_T2X1L3_SHAMT(W) (((W) >> IW_T2X1L3_SHAMT_LSB) & IW_T2X1L3_SHAMT_UNSHIFTED_MASK) 1055#define SET_IW_T2X1L3_SHAMT(V) (((V) & IW_T2X1L3_SHAMT_UNSHIFTED_MASK) << IW_T2X1L3_SHAMT_LSB) 1056 1057#define IW_T2X1L3_X_LSB 15 1058#define IW_T2X1L3_X_SIZE 1 1059#define IW_T2X1L3_X_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2X1L3_X_SIZE)) 1060#define IW_T2X1L3_X_SHIFTED_MASK (IW_T2X1L3_X_UNSHIFTED_MASK << IW_T2X1L3_X_LSB) 1061#define GET_IW_T2X1L3_X(W) (((W) >> IW_T2X1L3_X_LSB) & IW_T2X1L3_X_UNSHIFTED_MASK) 1062#define SET_IW_T2X1L3_X(V) (((V) & IW_T2X1L3_X_UNSHIFTED_MASK) << IW_T2X1L3_X_LSB) 1063 1064#define IW_T2X1I3_A3_LSB 6 1065#define IW_T2X1I3_A3_SIZE 3 1066#define IW_T2X1I3_A3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2X1I3_A3_SIZE)) 1067#define IW_T2X1I3_A3_SHIFTED_MASK (IW_T2X1I3_A3_UNSHIFTED_MASK << IW_T2X1I3_A3_LSB) 1068#define GET_IW_T2X1I3_A3(W) (((W) >> IW_T2X1I3_A3_LSB) & IW_T2X1I3_A3_UNSHIFTED_MASK) 1069#define SET_IW_T2X1I3_A3(V) (((V) & IW_T2X1I3_A3_UNSHIFTED_MASK) << IW_T2X1I3_A3_LSB) 1070 1071#define IW_T2X1I3_B3_LSB 9 1072#define IW_T2X1I3_B3_SIZE 3 1073#define IW_T2X1I3_B3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2X1I3_B3_SIZE)) 1074#define IW_T2X1I3_B3_SHIFTED_MASK (IW_T2X1I3_B3_UNSHIFTED_MASK << IW_T2X1I3_B3_LSB) 1075#define GET_IW_T2X1I3_B3(W) (((W) >> IW_T2X1I3_B3_LSB) & IW_T2X1I3_B3_UNSHIFTED_MASK) 1076#define SET_IW_T2X1I3_B3(V) (((V) & IW_T2X1I3_B3_UNSHIFTED_MASK) << IW_T2X1I3_B3_LSB) 1077 1078#define IW_T2X1I3_IMM3_LSB 12 1079#define IW_T2X1I3_IMM3_SIZE 3 1080#define IW_T2X1I3_IMM3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2X1I3_IMM3_SIZE)) 1081#define IW_T2X1I3_IMM3_SHIFTED_MASK (IW_T2X1I3_IMM3_UNSHIFTED_MASK << IW_T2X1I3_IMM3_LSB) 1082#define GET_IW_T2X1I3_IMM3(W) (((W) >> IW_T2X1I3_IMM3_LSB) & IW_T2X1I3_IMM3_UNSHIFTED_MASK) 1083#define SET_IW_T2X1I3_IMM3(V) (((V) & IW_T2X1I3_IMM3_UNSHIFTED_MASK) << IW_T2X1I3_IMM3_LSB) 1084 1085#define IW_T2X1I3_X_LSB 15 1086#define IW_T2X1I3_X_SIZE 1 1087#define IW_T2X1I3_X_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2X1I3_X_SIZE)) 1088#define IW_T2X1I3_X_SHIFTED_MASK (IW_T2X1I3_X_UNSHIFTED_MASK << IW_T2X1I3_X_LSB) 1089#define GET_IW_T2X1I3_X(W) (((W) >> IW_T2X1I3_X_LSB) & IW_T2X1I3_X_UNSHIFTED_MASK) 1090#define SET_IW_T2X1I3_X(V) (((V) & IW_T2X1I3_X_UNSHIFTED_MASK) << IW_T2X1I3_X_LSB) 1091 1092#define IW_T3X1_A3_LSB 6 1093#define IW_T3X1_A3_SIZE 3 1094#define IW_T3X1_A3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T3X1_A3_SIZE)) 1095#define IW_T3X1_A3_SHIFTED_MASK (IW_T3X1_A3_UNSHIFTED_MASK << IW_T3X1_A3_LSB) 1096#define GET_IW_T3X1_A3(W) (((W) >> IW_T3X1_A3_LSB) & IW_T3X1_A3_UNSHIFTED_MASK) 1097#define SET_IW_T3X1_A3(V) (((V) & IW_T3X1_A3_UNSHIFTED_MASK) << IW_T3X1_A3_LSB) 1098 1099#define IW_T3X1_B3_LSB 9 1100#define IW_T3X1_B3_SIZE 3 1101#define IW_T3X1_B3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T3X1_B3_SIZE)) 1102#define IW_T3X1_B3_SHIFTED_MASK (IW_T3X1_B3_UNSHIFTED_MASK << IW_T3X1_B3_LSB) 1103#define GET_IW_T3X1_B3(W) (((W) >> IW_T3X1_B3_LSB) & IW_T3X1_B3_UNSHIFTED_MASK) 1104#define SET_IW_T3X1_B3(V) (((V) & IW_T3X1_B3_UNSHIFTED_MASK) << IW_T3X1_B3_LSB) 1105 1106#define IW_T3X1_C3_LSB 12 1107#define IW_T3X1_C3_SIZE 3 1108#define IW_T3X1_C3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T3X1_C3_SIZE)) 1109#define IW_T3X1_C3_SHIFTED_MASK (IW_T3X1_C3_UNSHIFTED_MASK << IW_T3X1_C3_LSB) 1110#define GET_IW_T3X1_C3(W) (((W) >> IW_T3X1_C3_LSB) & IW_T3X1_C3_UNSHIFTED_MASK) 1111#define SET_IW_T3X1_C3(V) (((V) & IW_T3X1_C3_UNSHIFTED_MASK) << IW_T3X1_C3_LSB) 1112 1113#define IW_T3X1_X_LSB 15 1114#define IW_T3X1_X_SIZE 1 1115#define IW_T3X1_X_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T3X1_X_SIZE)) 1116#define IW_T3X1_X_SHIFTED_MASK (IW_T3X1_X_UNSHIFTED_MASK << IW_T3X1_X_LSB) 1117#define GET_IW_T3X1_X(W) (((W) >> IW_T3X1_X_LSB) & IW_T3X1_X_UNSHIFTED_MASK) 1118#define SET_IW_T3X1_X(V) (((V) & IW_T3X1_X_UNSHIFTED_MASK) << IW_T3X1_X_LSB) 1119 1120/* The X field for all three R.N-class instruction formats is represented 1121 here as 4 bits, including the bits defined as constant 0 or 1 that 1122 determine which of the formats T2X3, F1X1, or X2L5 it is. */ 1123#define IW_R_N_X_LSB 12 1124#define IW_R_N_X_SIZE 4 1125#define IW_R_N_X_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_R_N_X_SIZE)) 1126#define IW_R_N_X_SHIFTED_MASK (IW_R_N_X_UNSHIFTED_MASK << IW_R_N_X_LSB) 1127#define GET_IW_R_N_X(W) (((W) >> IW_R_N_X_LSB) & IW_R_N_X_UNSHIFTED_MASK) 1128#define SET_IW_R_N_X(V) (((V) & IW_R_N_X_UNSHIFTED_MASK) << IW_R_N_X_LSB) 1129 1130#define IW_T2X3_A3_LSB 6 1131#define IW_T2X3_A3_SIZE 3 1132#define IW_T2X3_A3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2X3_A3_SIZE)) 1133#define IW_T2X3_A3_SHIFTED_MASK (IW_T2X3_A3_UNSHIFTED_MASK << IW_T2X3_A3_LSB) 1134#define GET_IW_T2X3_A3(W) (((W) >> IW_T2X3_A3_LSB) & IW_T2X3_A3_UNSHIFTED_MASK) 1135#define SET_IW_T2X3_A3(V) (((V) & IW_T2X3_A3_UNSHIFTED_MASK) << IW_T2X3_A3_LSB) 1136 1137#define IW_T2X3_B3_LSB 9 1138#define IW_T2X3_B3_SIZE 3 1139#define IW_T2X3_B3_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_T2X3_B3_SIZE)) 1140#define IW_T2X3_B3_SHIFTED_MASK (IW_T2X3_B3_UNSHIFTED_MASK << IW_T2X3_B3_LSB) 1141#define GET_IW_T2X3_B3(W) (((W) >> IW_T2X3_B3_LSB) & IW_T2X3_B3_UNSHIFTED_MASK) 1142#define SET_IW_T2X3_B3(V) (((V) & IW_T2X3_B3_UNSHIFTED_MASK) << IW_T2X3_B3_LSB) 1143 1144#define IW_F1X1_A_LSB 6 1145#define IW_F1X1_A_SIZE 5 1146#define IW_F1X1_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X1_A_SIZE)) 1147#define IW_F1X1_A_SHIFTED_MASK (IW_F1X1_A_UNSHIFTED_MASK << IW_F1X1_A_LSB) 1148#define GET_IW_F1X1_A(W) (((W) >> IW_F1X1_A_LSB) & IW_F1X1_A_UNSHIFTED_MASK) 1149#define SET_IW_F1X1_A(V) (((V) & IW_F1X1_A_UNSHIFTED_MASK) << IW_F1X1_A_LSB) 1150 1151#define IW_F1X1_RSV_LSB 11 1152#define IW_F1X1_RSV_SIZE 1 1153#define IW_F1X1_RSV_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1X1_RSV_SIZE)) 1154#define IW_F1X1_RSV_SHIFTED_MASK (IW_F1X1_RSV_UNSHIFTED_MASK << IW_F1X1_RSV_LSB) 1155#define GET_IW_F1X1_RSV(W) (((W) >> IW_F1X1_RSV_LSB) & IW_F1X1_RSV_UNSHIFTED_MASK) 1156#define SET_IW_F1X1_RSV(V) (((V) & IW_F1X1_RSV_UNSHIFTED_MASK) << IW_F1X1_RSV_LSB) 1157 1158#define IW_X2L5_IMM5_LSB 6 1159#define IW_X2L5_IMM5_SIZE 5 1160#define IW_X2L5_IMM5_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_X2L5_IMM5_SIZE)) 1161#define IW_X2L5_IMM5_SHIFTED_MASK (IW_X2L5_IMM5_UNSHIFTED_MASK << IW_X2L5_IMM5_LSB) 1162#define GET_IW_X2L5_IMM5(W) (((W) >> IW_X2L5_IMM5_LSB) & IW_X2L5_IMM5_UNSHIFTED_MASK) 1163#define SET_IW_X2L5_IMM5(V) (((V) & IW_X2L5_IMM5_UNSHIFTED_MASK) << IW_X2L5_IMM5_LSB) 1164 1165#define IW_X2L5_RSV_LSB 11 1166#define IW_X2L5_RSV_SIZE 1 1167#define IW_X2L5_RSV_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_X2L5_RSV_SIZE)) 1168#define IW_X2L5_RSV_SHIFTED_MASK (IW_X2L5_RSV_UNSHIFTED_MASK << IW_X2L5_RSV_LSB) 1169#define GET_IW_X2L5_RSV(W) (((W) >> IW_X2L5_RSV_LSB) & IW_X2L5_RSV_UNSHIFTED_MASK) 1170#define SET_IW_X2L5_RSV(V) (((V) & IW_X2L5_RSV_UNSHIFTED_MASK) << IW_X2L5_RSV_LSB) 1171 1172#define IW_F1I5_IMM5_LSB 6 1173#define IW_F1I5_IMM5_SIZE 5 1174#define IW_F1I5_IMM5_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1I5_IMM5_SIZE)) 1175#define IW_F1I5_IMM5_SHIFTED_MASK (IW_F1I5_IMM5_UNSHIFTED_MASK << IW_F1I5_IMM5_LSB) 1176#define GET_IW_F1I5_IMM5(W) (((W) >> IW_F1I5_IMM5_LSB) & IW_F1I5_IMM5_UNSHIFTED_MASK) 1177#define SET_IW_F1I5_IMM5(V) (((V) & IW_F1I5_IMM5_UNSHIFTED_MASK) << IW_F1I5_IMM5_LSB) 1178 1179#define IW_F1I5_B_LSB 11 1180#define IW_F1I5_B_SIZE 5 1181#define IW_F1I5_B_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F1I5_B_SIZE)) 1182#define IW_F1I5_B_SHIFTED_MASK (IW_F1I5_B_UNSHIFTED_MASK << IW_F1I5_B_LSB) 1183#define GET_IW_F1I5_B(W) (((W) >> IW_F1I5_B_LSB) & IW_F1I5_B_UNSHIFTED_MASK) 1184#define SET_IW_F1I5_B(V) (((V) & IW_F1I5_B_UNSHIFTED_MASK) << IW_F1I5_B_LSB) 1185 1186#define IW_F2_A_LSB 6 1187#define IW_F2_A_SIZE 5 1188#define IW_F2_A_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2_A_SIZE)) 1189#define IW_F2_A_SHIFTED_MASK (IW_F2_A_UNSHIFTED_MASK << IW_F2_A_LSB) 1190#define GET_IW_F2_A(W) (((W) >> IW_F2_A_LSB) & IW_F2_A_UNSHIFTED_MASK) 1191#define SET_IW_F2_A(V) (((V) & IW_F2_A_UNSHIFTED_MASK) << IW_F2_A_LSB) 1192 1193#define IW_F2_B_LSB 11 1194#define IW_F2_B_SIZE 5 1195#define IW_F2_B_UNSHIFTED_MASK (0xffffffffu >> (32 - IW_F2_B_SIZE)) 1196#define IW_F2_B_SHIFTED_MASK (IW_F2_B_UNSHIFTED_MASK << IW_F2_B_LSB) 1197#define GET_IW_F2_B(W) (((W) >> IW_F2_B_LSB) & IW_F2_B_UNSHIFTED_MASK) 1198#define SET_IW_F2_B(V) (((V) & IW_F2_B_UNSHIFTED_MASK) << IW_F2_B_LSB) 1199 1200/* R2 opcodes. */ 1201#define R2_OP_CALL 0 1202#define R2_OP_AS_N 1 1203#define R2_OP_BR 2 1204#define R2_OP_BR_N 3 1205#define R2_OP_ADDI 4 1206#define R2_OP_LDBU_N 5 1207#define R2_OP_LDBU 6 1208#define R2_OP_LDB 7 1209#define R2_OP_JMPI 8 1210#define R2_OP_R_N 9 1211#define R2_OP_ANDI_N 11 1212#define R2_OP_ANDI 12 1213#define R2_OP_LDHU_N 13 1214#define R2_OP_LDHU 14 1215#define R2_OP_LDH 15 1216#define R2_OP_ASI_N 17 1217#define R2_OP_BGE 18 1218#define R2_OP_LDWSP_N 19 1219#define R2_OP_ORI 20 1220#define R2_OP_LDW_N 21 1221#define R2_OP_CMPGEI 22 1222#define R2_OP_LDW 23 1223#define R2_OP_SHI_N 25 1224#define R2_OP_BLT 26 1225#define R2_OP_MOVI_N 27 1226#define R2_OP_XORI 28 1227#define R2_OP_STZ_N 29 1228#define R2_OP_CMPLTI 30 1229#define R2_OP_ANDCI 31 1230#define R2_OP_OPX 32 1231#define R2_OP_PP_N 33 1232#define R2_OP_BNE 34 1233#define R2_OP_BNEZ_N 35 1234#define R2_OP_MULI 36 1235#define R2_OP_STB_N 37 1236#define R2_OP_CMPNEI 38 1237#define R2_OP_STB 39 1238#define R2_OP_I12 40 1239#define R2_OP_SPI_N 41 1240#define R2_OP_BEQ 42 1241#define R2_OP_BEQZ_N 43 1242#define R2_OP_ANDHI 44 1243#define R2_OP_STH_N 45 1244#define R2_OP_CMPEQI 46 1245#define R2_OP_STH 47 1246#define R2_OP_CUSTOM 48 1247#define R2_OP_BGEU 50 1248#define R2_OP_STWSP_N 51 1249#define R2_OP_ORHI 52 1250#define R2_OP_STW_N 53 1251#define R2_OP_CMPGEUI 54 1252#define R2_OP_STW 55 1253#define R2_OP_BLTU 58 1254#define R2_OP_MOV_N 59 1255#define R2_OP_XORHI 60 1256#define R2_OP_SPADDI_N 61 1257#define R2_OP_CMPLTUI 62 1258#define R2_OP_ANDCHI 63 1259 1260#define R2_OPX_WRPIE 0 1261#define R2_OPX_ERET 1 1262#define R2_OPX_ROLI 2 1263#define R2_OPX_ROL 3 1264#define R2_OPX_FLUSHP 4 1265#define R2_OPX_RET 5 1266#define R2_OPX_NOR 6 1267#define R2_OPX_MULXUU 7 1268#define R2_OPX_ENI 8 1269#define R2_OPX_BRET 9 1270#define R2_OPX_ROR 11 1271#define R2_OPX_FLUSHI 12 1272#define R2_OPX_JMP 13 1273#define R2_OPX_AND 14 1274#define R2_OPX_CMPGE 16 1275#define R2_OPX_SLLI 18 1276#define R2_OPX_SLL 19 1277#define R2_OPX_WRPRS 20 1278#define R2_OPX_OR 22 1279#define R2_OPX_MULXSU 23 1280#define R2_OPX_CMPLT 24 1281#define R2_OPX_SRLI 26 1282#define R2_OPX_SRL 27 1283#define R2_OPX_NEXTPC 28 1284#define R2_OPX_CALLR 29 1285#define R2_OPX_XOR 30 1286#define R2_OPX_MULXSS 31 1287#define R2_OPX_CMPNE 32 1288#define R2_OPX_INSERT 35 1289#define R2_OPX_DIVU 36 1290#define R2_OPX_DIV 37 1291#define R2_OPX_RDCTL 38 1292#define R2_OPX_MUL 39 1293#define R2_OPX_CMPEQ 40 1294#define R2_OPX_INITI 41 1295#define R2_OPX_MERGE 43 1296#define R2_OPX_HBREAK 44 1297#define R2_OPX_TRAP 45 1298#define R2_OPX_WRCTL 46 1299#define R2_OPX_CMPGEU 48 1300#define R2_OPX_ADD 49 1301#define R2_OPX_EXTRACT 51 1302#define R2_OPX_BREAK 52 1303#define R2_OPX_LDEX 53 1304#define R2_OPX_SYNC 54 1305#define R2_OPX_LDSEX 55 1306#define R2_OPX_CMPLTU 56 1307#define R2_OPX_SUB 57 1308#define R2_OPX_SRAI 58 1309#define R2_OPX_SRA 59 1310#define R2_OPX_STEX 61 1311#define R2_OPX_STSEX 63 1312 1313#define R2_I12_LDBIO 0 1314#define R2_I12_STBIO 1 1315#define R2_I12_LDBUIO 2 1316#define R2_I12_DCACHE 3 1317#define R2_I12_LDHIO 4 1318#define R2_I12_STHIO 5 1319#define R2_I12_LDHUIO 6 1320#define R2_I12_RDPRS 7 1321#define R2_I12_LDWIO 8 1322#define R2_I12_STWIO 9 1323#define R2_I12_LDWM 12 1324#define R2_I12_STWM 13 1325 1326#define R2_DCACHE_INITD 0 1327#define R2_DCACHE_INITDA 1 1328#define R2_DCACHE_FLUSHD 2 1329#define R2_DCACHE_FLUSHDA 3 1330 1331#define R2_AS_N_ADD_N 0 1332#define R2_AS_N_SUB_N 1 1333 1334#define R2_R_N_AND_N 0 1335#define R2_R_N_OR_N 2 1336#define R2_R_N_XOR_N 3 1337#define R2_R_N_SLL_N 4 1338#define R2_R_N_SRL_N 5 1339#define R2_R_N_NOT_N 6 1340#define R2_R_N_NEG_N 7 1341#define R2_R_N_CALLR_N 8 1342#define R2_R_N_JMPR_N 10 1343#define R2_R_N_BREAK_N 12 1344#define R2_R_N_TRAP_N 13 1345#define R2_R_N_RET_N 14 1346 1347#define R2_SPI_N_SPINCI_N 0 1348#define R2_SPI_N_SPDECI_N 1 1349 1350#define R2_ASI_N_ADDI_N 0 1351#define R2_ASI_N_SUBI_N 1 1352 1353#define R2_SHI_N_SLLI_N 0 1354#define R2_SHI_N_SRLI_N 1 1355 1356#define R2_PP_N_POP_N 0 1357#define R2_PP_N_PUSH_N 1 1358 1359#define R2_STZ_N_STWZ_N 0 1360#define R2_STZ_N_STBZ_N 1 1361 1362/* Convenience macros for R2 encodings. */ 1363 1364#define MATCH_R2_OP(NAME) \ 1365 (SET_IW_R2_OP (R2_OP_##NAME)) 1366#define MASK_R2_OP \ 1367 IW_R2_OP_SHIFTED_MASK 1368 1369#define MATCH_R2_OPX0(NAME) \ 1370 (SET_IW_R2_OP (R2_OP_OPX) | SET_IW_OPX_X (R2_OPX_##NAME)) 1371#define MASK_R2_OPX0 \ 1372 (IW_R2_OP_SHIFTED_MASK | IW_OPX_X_SHIFTED_MASK \ 1373 | IW_F3X6L5_IMM5_SHIFTED_MASK) 1374 1375#define MATCH_R2_OPX(NAME, A, B, C) \ 1376 (MATCH_R2_OPX0 (NAME) | SET_IW_F3X6L5_A (A) | SET_IW_F3X6L5_B (B) \ 1377 | SET_IW_F3X6L5_C (C)) 1378#define MASK_R2_OPX(A, B, C, N) \ 1379 (IW_R2_OP_SHIFTED_MASK | IW_OPX_X_SHIFTED_MASK \ 1380 | (A ? IW_F3X6L5_A_SHIFTED_MASK : 0) \ 1381 | (B ? IW_F3X6L5_B_SHIFTED_MASK : 0) \ 1382 | (C ? IW_F3X6L5_C_SHIFTED_MASK : 0) \ 1383 | (N ? IW_F3X6L5_IMM5_SHIFTED_MASK : 0)) 1384 1385#define MATCH_R2_I12(NAME) \ 1386 (SET_IW_R2_OP (R2_OP_I12) | SET_IW_I12_X (R2_I12_##NAME)) 1387#define MASK_R2_I12 \ 1388 (IW_R2_OP_SHIFTED_MASK | IW_I12_X_SHIFTED_MASK ) 1389 1390#define MATCH_R2_DCACHE(NAME) \ 1391 (MATCH_R2_I12(DCACHE) | SET_IW_F1X4I12_X (R2_DCACHE_##NAME)) 1392#define MASK_R2_DCACHE \ 1393 (MASK_R2_I12 | IW_F1X4I12_X_SHIFTED_MASK) 1394 1395#define MATCH_R2_R_N(NAME) \ 1396 (SET_IW_R2_OP (R2_OP_R_N) | SET_IW_R_N_X (R2_R_N_##NAME)) 1397#define MASK_R2_R_N \ 1398 (IW_R2_OP_SHIFTED_MASK | IW_R_N_X_SHIFTED_MASK ) 1399 1400/* Match/mask macros for R2 instructions. */ 1401 1402#define MATCH_R2_ADD MATCH_R2_OPX0 (ADD) 1403#define MASK_R2_ADD MASK_R2_OPX0 1404#define MATCH_R2_ADDI MATCH_R2_OP (ADDI) 1405#define MASK_R2_ADDI MASK_R2_OP 1406#define MATCH_R2_ADD_N (MATCH_R2_OP (AS_N) | SET_IW_T3X1_X (R2_AS_N_ADD_N)) 1407#define MASK_R2_ADD_N (MASK_R2_OP | IW_T3X1_X_SHIFTED_MASK) 1408#define MATCH_R2_ADDI_N (MATCH_R2_OP (ASI_N) | SET_IW_T2X1I3_X (R2_ASI_N_ADDI_N)) 1409#define MASK_R2_ADDI_N (MASK_R2_OP | IW_T2X1I3_X_SHIFTED_MASK) 1410#define MATCH_R2_AND MATCH_R2_OPX0 (AND) 1411#define MASK_R2_AND MASK_R2_OPX0 1412#define MATCH_R2_ANDCHI MATCH_R2_OP (ANDCHI) 1413#define MASK_R2_ANDCHI MASK_R2_OP 1414#define MATCH_R2_ANDCI MATCH_R2_OP (ANDCI) 1415#define MASK_R2_ANDCI MASK_R2_OP 1416#define MATCH_R2_ANDHI MATCH_R2_OP (ANDHI) 1417#define MASK_R2_ANDHI MASK_R2_OP 1418#define MATCH_R2_ANDI MATCH_R2_OP (ANDI) 1419#define MASK_R2_ANDI MASK_R2_OP 1420#define MATCH_R2_ANDI_N MATCH_R2_OP (ANDI_N) 1421#define MASK_R2_ANDI_N MASK_R2_OP 1422#define MATCH_R2_AND_N MATCH_R2_R_N (AND_N) 1423#define MASK_R2_AND_N MASK_R2_R_N 1424#define MATCH_R2_BEQ MATCH_R2_OP (BEQ) 1425#define MASK_R2_BEQ MASK_R2_OP 1426#define MATCH_R2_BEQZ_N MATCH_R2_OP (BEQZ_N) 1427#define MASK_R2_BEQZ_N MASK_R2_OP 1428#define MATCH_R2_BGE MATCH_R2_OP (BGE) 1429#define MASK_R2_BGE MASK_R2_OP 1430#define MATCH_R2_BGEU MATCH_R2_OP (BGEU) 1431#define MASK_R2_BGEU MASK_R2_OP 1432#define MATCH_R2_BGT MATCH_R2_OP (BLT) 1433#define MASK_R2_BGT MASK_R2_OP 1434#define MATCH_R2_BGTU MATCH_R2_OP (BLTU) 1435#define MASK_R2_BGTU MASK_R2_OP 1436#define MATCH_R2_BLE MATCH_R2_OP (BGE) 1437#define MASK_R2_BLE MASK_R2_OP 1438#define MATCH_R2_BLEU MATCH_R2_OP (BGEU) 1439#define MASK_R2_BLEU MASK_R2_OP 1440#define MATCH_R2_BLT MATCH_R2_OP (BLT) 1441#define MASK_R2_BLT MASK_R2_OP 1442#define MATCH_R2_BLTU MATCH_R2_OP (BLTU) 1443#define MASK_R2_BLTU MASK_R2_OP 1444#define MATCH_R2_BNE MATCH_R2_OP (BNE) 1445#define MASK_R2_BNE MASK_R2_OP 1446#define MATCH_R2_BNEZ_N MATCH_R2_OP (BNEZ_N) 1447#define MASK_R2_BNEZ_N MASK_R2_OP 1448#define MATCH_R2_BR MATCH_R2_OP (BR) 1449#define MASK_R2_BR MASK_R2_OP | IW_F2I16_A_SHIFTED_MASK | IW_F2I16_B_SHIFTED_MASK 1450#define MATCH_R2_BREAK MATCH_R2_OPX (BREAK, 0, 0, 0x1e) 1451#define MASK_R2_BREAK MASK_R2_OPX (1, 1, 1, 0) 1452#define MATCH_R2_BREAK_N MATCH_R2_R_N (BREAK_N) 1453#define MASK_R2_BREAK_N MASK_R2_R_N 1454#define MATCH_R2_BRET MATCH_R2_OPX (BRET, 0x1e, 0, 0) 1455#define MASK_R2_BRET MASK_R2_OPX (1, 1, 1, 1) 1456#define MATCH_R2_BR_N MATCH_R2_OP (BR_N) 1457#define MASK_R2_BR_N MASK_R2_OP 1458#define MATCH_R2_CALL MATCH_R2_OP (CALL) 1459#define MASK_R2_CALL MASK_R2_OP 1460#define MATCH_R2_CALLR MATCH_R2_OPX (CALLR, 0, 0, 0x1f) 1461#define MASK_R2_CALLR MASK_R2_OPX (0, 1, 1, 1) 1462#define MATCH_R2_CALLR_N MATCH_R2_R_N (CALLR_N) 1463#define MASK_R2_CALLR_N MASK_R2_R_N 1464#define MATCH_R2_CMPEQ MATCH_R2_OPX0 (CMPEQ) 1465#define MASK_R2_CMPEQ MASK_R2_OPX0 1466#define MATCH_R2_CMPEQI MATCH_R2_OP (CMPEQI) 1467#define MASK_R2_CMPEQI MASK_R2_OP 1468#define MATCH_R2_CMPGE MATCH_R2_OPX0 (CMPGE) 1469#define MASK_R2_CMPGE MASK_R2_OPX0 1470#define MATCH_R2_CMPGEI MATCH_R2_OP (CMPGEI) 1471#define MASK_R2_CMPGEI MASK_R2_OP 1472#define MATCH_R2_CMPGEU MATCH_R2_OPX0 (CMPGEU) 1473#define MASK_R2_CMPGEU MASK_R2_OPX0 1474#define MATCH_R2_CMPGEUI MATCH_R2_OP (CMPGEUI) 1475#define MASK_R2_CMPGEUI MASK_R2_OP 1476#define MATCH_R2_CMPGT MATCH_R2_OPX0 (CMPLT) 1477#define MASK_R2_CMPGT MASK_R2_OPX0 1478#define MATCH_R2_CMPGTI MATCH_R2_OP (CMPGEI) 1479#define MASK_R2_CMPGTI MASK_R2_OP 1480#define MATCH_R2_CMPGTU MATCH_R2_OPX0 (CMPLTU) 1481#define MASK_R2_CMPGTU MASK_R2_OPX0 1482#define MATCH_R2_CMPGTUI MATCH_R2_OP (CMPGEUI) 1483#define MASK_R2_CMPGTUI MASK_R2_OP 1484#define MATCH_R2_CMPLE MATCH_R2_OPX0 (CMPGE) 1485#define MASK_R2_CMPLE MASK_R2_OPX0 1486#define MATCH_R2_CMPLEI MATCH_R2_OP (CMPLTI) 1487#define MASK_R2_CMPLEI MASK_R2_OP 1488#define MATCH_R2_CMPLEU MATCH_R2_OPX0 (CMPGEU) 1489#define MASK_R2_CMPLEU MASK_R2_OPX0 1490#define MATCH_R2_CMPLEUI MATCH_R2_OP (CMPLTUI) 1491#define MASK_R2_CMPLEUI MASK_R2_OP 1492#define MATCH_R2_CMPLT MATCH_R2_OPX0 (CMPLT) 1493#define MASK_R2_CMPLT MASK_R2_OPX0 1494#define MATCH_R2_CMPLTI MATCH_R2_OP (CMPLTI) 1495#define MASK_R2_CMPLTI MASK_R2_OP 1496#define MATCH_R2_CMPLTU MATCH_R2_OPX0 (CMPLTU) 1497#define MASK_R2_CMPLTU MASK_R2_OPX0 1498#define MATCH_R2_CMPLTUI MATCH_R2_OP (CMPLTUI) 1499#define MASK_R2_CMPLTUI MASK_R2_OP 1500#define MATCH_R2_CMPNE MATCH_R2_OPX0 (CMPNE) 1501#define MASK_R2_CMPNE MASK_R2_OPX0 1502#define MATCH_R2_CMPNEI MATCH_R2_OP (CMPNEI) 1503#define MASK_R2_CMPNEI MASK_R2_OP 1504#define MATCH_R2_CUSTOM MATCH_R2_OP (CUSTOM) 1505#define MASK_R2_CUSTOM MASK_R2_OP 1506#define MATCH_R2_DIV MATCH_R2_OPX0 (DIV) 1507#define MASK_R2_DIV MASK_R2_OPX0 1508#define MATCH_R2_DIVU MATCH_R2_OPX0 (DIVU) 1509#define MASK_R2_DIVU MASK_R2_OPX0 1510#define MATCH_R2_ENI MATCH_R2_OPX (ENI, 0, 0, 0) 1511#define MASK_R2_ENI MASK_R2_OPX (1, 1, 1, 0) 1512#define MATCH_R2_ERET MATCH_R2_OPX (ERET, 0x1d, 0x1e, 0) 1513#define MASK_R2_ERET MASK_R2_OPX (1, 1, 1, 1) 1514#define MATCH_R2_EXTRACT MATCH_R2_OPX (EXTRACT, 0, 0, 0) 1515#define MASK_R2_EXTRACT MASK_R2_OPX (0, 0, 0, 0) 1516#define MATCH_R2_FLUSHD MATCH_R2_DCACHE (FLUSHD) 1517#define MASK_R2_FLUSHD MASK_R2_DCACHE 1518#define MATCH_R2_FLUSHDA MATCH_R2_DCACHE (FLUSHDA) 1519#define MASK_R2_FLUSHDA MASK_R2_DCACHE 1520#define MATCH_R2_FLUSHI MATCH_R2_OPX (FLUSHI, 0, 0, 0) 1521#define MASK_R2_FLUSHI MASK_R2_OPX (0, 1, 1, 1) 1522#define MATCH_R2_FLUSHP MATCH_R2_OPX (FLUSHP, 0, 0, 0) 1523#define MASK_R2_FLUSHP MASK_R2_OPX (1, 1, 1, 1) 1524#define MATCH_R2_INITD MATCH_R2_DCACHE (INITD) 1525#define MASK_R2_INITD MASK_R2_DCACHE 1526#define MATCH_R2_INITDA MATCH_R2_DCACHE (INITDA) 1527#define MASK_R2_INITDA MASK_R2_DCACHE 1528#define MATCH_R2_INITI MATCH_R2_OPX (INITI, 0, 0, 0) 1529#define MASK_R2_INITI MASK_R2_OPX (0, 1, 1, 1) 1530#define MATCH_R2_INSERT MATCH_R2_OPX (INSERT, 0, 0, 0) 1531#define MASK_R2_INSERT MASK_R2_OPX (0, 0, 0, 0) 1532#define MATCH_R2_JMP MATCH_R2_OPX (JMP, 0, 0, 0) 1533#define MASK_R2_JMP MASK_R2_OPX (0, 1, 1, 1) 1534#define MATCH_R2_JMPI MATCH_R2_OP (JMPI) 1535#define MASK_R2_JMPI MASK_R2_OP 1536#define MATCH_R2_JMPR_N MATCH_R2_R_N (JMPR_N) 1537#define MASK_R2_JMPR_N MASK_R2_R_N 1538#define MATCH_R2_LDB MATCH_R2_OP (LDB) 1539#define MASK_R2_LDB MASK_R2_OP 1540#define MATCH_R2_LDBIO MATCH_R2_I12 (LDBIO) 1541#define MASK_R2_LDBIO MASK_R2_I12 1542#define MATCH_R2_LDBU MATCH_R2_OP (LDBU) 1543#define MASK_R2_LDBU MASK_R2_OP 1544#define MATCH_R2_LDBUIO MATCH_R2_I12 (LDBUIO) 1545#define MASK_R2_LDBUIO MASK_R2_I12 1546#define MATCH_R2_LDBU_N MATCH_R2_OP (LDBU_N) 1547#define MASK_R2_LDBU_N MASK_R2_OP 1548#define MATCH_R2_LDEX MATCH_R2_OPX (LDEX, 0, 0, 0) 1549#define MASK_R2_LDEX MASK_R2_OPX (0, 1, 0, 1) 1550#define MATCH_R2_LDH MATCH_R2_OP (LDH) 1551#define MASK_R2_LDH MASK_R2_OP 1552#define MATCH_R2_LDHIO MATCH_R2_I12 (LDHIO) 1553#define MASK_R2_LDHIO MASK_R2_I12 1554#define MATCH_R2_LDHU MATCH_R2_OP (LDHU) 1555#define MASK_R2_LDHU MASK_R2_OP 1556#define MATCH_R2_LDHUIO MATCH_R2_I12 (LDHUIO) 1557#define MASK_R2_LDHUIO MASK_R2_I12 1558#define MATCH_R2_LDHU_N MATCH_R2_OP (LDHU_N) 1559#define MASK_R2_LDHU_N MASK_R2_OP 1560#define MATCH_R2_LDSEX MATCH_R2_OPX (LDSEX, 0, 0, 0) 1561#define MASK_R2_LDSEX MASK_R2_OPX (0, 1, 0, 1) 1562#define MATCH_R2_LDW MATCH_R2_OP (LDW) 1563#define MASK_R2_LDW MASK_R2_OP 1564#define MATCH_R2_LDWIO MATCH_R2_I12 (LDWIO) 1565#define MASK_R2_LDWIO MASK_R2_I12 1566#define MATCH_R2_LDWM MATCH_R2_I12 (LDWM) 1567#define MASK_R2_LDWM MASK_R2_I12 1568#define MATCH_R2_LDWSP_N MATCH_R2_OP (LDWSP_N) 1569#define MASK_R2_LDWSP_N MASK_R2_OP 1570#define MATCH_R2_LDW_N MATCH_R2_OP (LDW_N) 1571#define MASK_R2_LDW_N MASK_R2_OP 1572#define MATCH_R2_MERGE MATCH_R2_OPX (MERGE, 0, 0, 0) 1573#define MASK_R2_MERGE MASK_R2_OPX (0, 0, 0, 0) 1574#define MATCH_R2_MOV MATCH_R2_OPX (ADD, 0, 0, 0) 1575#define MASK_R2_MOV MASK_R2_OPX (0, 1, 0, 1) 1576#define MATCH_R2_MOVHI MATCH_R2_OP (ORHI) | SET_IW_F2I16_A (0) 1577#define MASK_R2_MOVHI MASK_R2_OP | IW_F2I16_A_SHIFTED_MASK 1578#define MATCH_R2_MOVI MATCH_R2_OP (ADDI) | SET_IW_F2I16_A (0) 1579#define MASK_R2_MOVI MASK_R2_OP | IW_F2I16_A_SHIFTED_MASK 1580#define MATCH_R2_MOVUI MATCH_R2_OP (ORI) | SET_IW_F2I16_A (0) 1581#define MASK_R2_MOVUI MASK_R2_OP | IW_F2I16_A_SHIFTED_MASK 1582#define MATCH_R2_MOV_N MATCH_R2_OP (MOV_N) 1583#define MASK_R2_MOV_N MASK_R2_OP 1584#define MATCH_R2_MOVI_N MATCH_R2_OP (MOVI_N) 1585#define MASK_R2_MOVI_N MASK_R2_OP 1586#define MATCH_R2_MUL MATCH_R2_OPX0 (MUL) 1587#define MASK_R2_MUL MASK_R2_OPX0 1588#define MATCH_R2_MULI MATCH_R2_OP (MULI) 1589#define MASK_R2_MULI MASK_R2_OP 1590#define MATCH_R2_MULXSS MATCH_R2_OPX0 (MULXSS) 1591#define MASK_R2_MULXSS MASK_R2_OPX0 1592#define MATCH_R2_MULXSU MATCH_R2_OPX0 (MULXSU) 1593#define MASK_R2_MULXSU MASK_R2_OPX0 1594#define MATCH_R2_MULXUU MATCH_R2_OPX0 (MULXUU) 1595#define MASK_R2_MULXUU MASK_R2_OPX0 1596#define MATCH_R2_NEG_N MATCH_R2_R_N (NEG_N) 1597#define MASK_R2_NEG_N MASK_R2_R_N 1598#define MATCH_R2_NEXTPC MATCH_R2_OPX (NEXTPC, 0, 0, 0) 1599#define MASK_R2_NEXTPC MASK_R2_OPX (1, 1, 0, 1) 1600#define MATCH_R2_NOP MATCH_R2_OPX (ADD, 0, 0, 0) 1601#define MASK_R2_NOP MASK_R2_OPX (1, 1, 1, 1) 1602#define MATCH_R2_NOP_N (MATCH_R2_OP (MOV_N) | SET_IW_F2_A (0) | SET_IW_F2_B (0)) 1603#define MASK_R2_NOP_N (MASK_R2_OP | IW_F2_A_SHIFTED_MASK | IW_F2_B_SHIFTED_MASK) 1604#define MATCH_R2_NOR MATCH_R2_OPX0 (NOR) 1605#define MASK_R2_NOR MASK_R2_OPX0 1606#define MATCH_R2_NOT_N MATCH_R2_R_N (NOT_N) 1607#define MASK_R2_NOT_N MASK_R2_R_N 1608#define MATCH_R2_OR MATCH_R2_OPX0 (OR) 1609#define MASK_R2_OR MASK_R2_OPX0 1610#define MATCH_R2_OR_N MATCH_R2_R_N (OR_N) 1611#define MASK_R2_OR_N MASK_R2_R_N 1612#define MATCH_R2_ORHI MATCH_R2_OP (ORHI) 1613#define MASK_R2_ORHI MASK_R2_OP 1614#define MATCH_R2_ORI MATCH_R2_OP (ORI) 1615#define MASK_R2_ORI MASK_R2_OP 1616#define MATCH_R2_POP_N (MATCH_R2_OP (PP_N) | SET_IW_L5I4X1_X (R2_PP_N_POP_N)) 1617#define MASK_R2_POP_N (MASK_R2_OP | IW_L5I4X1_X_SHIFTED_MASK) 1618#define MATCH_R2_PUSH_N (MATCH_R2_OP (PP_N) | SET_IW_L5I4X1_X (R2_PP_N_PUSH_N)) 1619#define MASK_R2_PUSH_N (MASK_R2_OP | IW_L5I4X1_X_SHIFTED_MASK) 1620#define MATCH_R2_RDCTL MATCH_R2_OPX (RDCTL, 0, 0, 0) 1621#define MASK_R2_RDCTL MASK_R2_OPX (1, 1, 0, 0) 1622#define MATCH_R2_RDPRS MATCH_R2_I12 (RDPRS) 1623#define MASK_R2_RDPRS MASK_R2_I12 1624#define MATCH_R2_RET MATCH_R2_OPX (RET, 0x1f, 0, 0) 1625#define MASK_R2_RET MASK_R2_OPX (1, 1, 1, 1) 1626#define MATCH_R2_RET_N (MATCH_R2_R_N (RET_N) | SET_IW_X2L5_IMM5 (0)) 1627#define MASK_R2_RET_N (MASK_R2_R_N | IW_X2L5_IMM5_SHIFTED_MASK) 1628#define MATCH_R2_ROL MATCH_R2_OPX0 (ROL) 1629#define MASK_R2_ROL MASK_R2_OPX0 1630#define MATCH_R2_ROLI MATCH_R2_OPX (ROLI, 0, 0, 0) 1631#define MASK_R2_ROLI MASK_R2_OPX (0, 1, 0, 0) 1632#define MATCH_R2_ROR MATCH_R2_OPX0 (ROR) 1633#define MASK_R2_ROR MASK_R2_OPX0 1634#define MATCH_R2_SLL MATCH_R2_OPX0 (SLL) 1635#define MASK_R2_SLL MASK_R2_OPX0 1636#define MATCH_R2_SLLI MATCH_R2_OPX (SLLI, 0, 0, 0) 1637#define MASK_R2_SLLI MASK_R2_OPX (0, 1, 0, 0) 1638#define MATCH_R2_SLL_N MATCH_R2_R_N (SLL_N) 1639#define MASK_R2_SLL_N MASK_R2_R_N 1640#define MATCH_R2_SLLI_N (MATCH_R2_OP (SHI_N) | SET_IW_T2X1L3_X (R2_SHI_N_SLLI_N)) 1641#define MASK_R2_SLLI_N (MASK_R2_OP | IW_T2X1L3_X_SHIFTED_MASK) 1642#define MATCH_R2_SPADDI_N MATCH_R2_OP (SPADDI_N) 1643#define MASK_R2_SPADDI_N MASK_R2_OP 1644#define MATCH_R2_SPDECI_N (MATCH_R2_OP (SPI_N) | SET_IW_X1I7_X (R2_SPI_N_SPDECI_N)) 1645#define MASK_R2_SPDECI_N (MASK_R2_OP | IW_X1I7_X_SHIFTED_MASK) 1646#define MATCH_R2_SPINCI_N (MATCH_R2_OP (SPI_N) | SET_IW_X1I7_X (R2_SPI_N_SPINCI_N)) 1647#define MASK_R2_SPINCI_N (MASK_R2_OP | IW_X1I7_X_SHIFTED_MASK) 1648#define MATCH_R2_SRA MATCH_R2_OPX0 (SRA) 1649#define MASK_R2_SRA MASK_R2_OPX0 1650#define MATCH_R2_SRAI MATCH_R2_OPX (SRAI, 0, 0, 0) 1651#define MASK_R2_SRAI MASK_R2_OPX (0, 1, 0, 0) 1652#define MATCH_R2_SRL MATCH_R2_OPX0 (SRL) 1653#define MASK_R2_SRL MASK_R2_OPX0 1654#define MATCH_R2_SRLI MATCH_R2_OPX (SRLI, 0, 0, 0) 1655#define MASK_R2_SRLI MASK_R2_OPX (0, 1, 0, 0) 1656#define MATCH_R2_SRL_N MATCH_R2_R_N (SRL_N) 1657#define MASK_R2_SRL_N MASK_R2_R_N 1658#define MATCH_R2_SRLI_N (MATCH_R2_OP (SHI_N) | SET_IW_T2X1L3_X (R2_SHI_N_SRLI_N)) 1659#define MASK_R2_SRLI_N (MASK_R2_OP | IW_T2X1L3_X_SHIFTED_MASK) 1660#define MATCH_R2_STB MATCH_R2_OP (STB) 1661#define MASK_R2_STB MASK_R2_OP 1662#define MATCH_R2_STBIO MATCH_R2_I12 (STBIO) 1663#define MASK_R2_STBIO MASK_R2_I12 1664#define MATCH_R2_STB_N MATCH_R2_OP (STB_N) 1665#define MASK_R2_STB_N MASK_R2_OP 1666#define MATCH_R2_STBZ_N (MATCH_R2_OP (STZ_N) | SET_IW_T1X1I6_X (R2_STZ_N_STBZ_N)) 1667#define MASK_R2_STBZ_N (MASK_R2_OP | IW_T1X1I6_X_SHIFTED_MASK) 1668#define MATCH_R2_STEX MATCH_R2_OPX0 (STEX) 1669#define MASK_R2_STEX MASK_R2_OPX0 1670#define MATCH_R2_STH MATCH_R2_OP (STH) 1671#define MASK_R2_STH MASK_R2_OP 1672#define MATCH_R2_STHIO MATCH_R2_I12 (STHIO) 1673#define MASK_R2_STHIO MASK_R2_I12 1674#define MATCH_R2_STH_N MATCH_R2_OP (STH_N) 1675#define MASK_R2_STH_N MASK_R2_OP 1676#define MATCH_R2_STSEX MATCH_R2_OPX0 (STSEX) 1677#define MASK_R2_STSEX MASK_R2_OPX0 1678#define MATCH_R2_STW MATCH_R2_OP (STW) 1679#define MASK_R2_STW MASK_R2_OP 1680#define MATCH_R2_STWIO MATCH_R2_I12 (STWIO) 1681#define MASK_R2_STWIO MASK_R2_I12 1682#define MATCH_R2_STWM MATCH_R2_I12 (STWM) 1683#define MASK_R2_STWM MASK_R2_I12 1684#define MATCH_R2_STWSP_N MATCH_R2_OP (STWSP_N) 1685#define MASK_R2_STWSP_N MASK_R2_OP 1686#define MATCH_R2_STW_N MATCH_R2_OP (STW_N) 1687#define MASK_R2_STW_N MASK_R2_OP 1688#define MATCH_R2_STWZ_N MATCH_R2_OP (STZ_N) 1689#define MASK_R2_STWZ_N MASK_R2_OP 1690#define MATCH_R2_SUB MATCH_R2_OPX0 (SUB) 1691#define MASK_R2_SUB MASK_R2_OPX0 1692#define MATCH_R2_SUBI MATCH_R2_OP (ADDI) 1693#define MASK_R2_SUBI MASK_R2_OP 1694#define MATCH_R2_SUB_N (MATCH_R2_OP (AS_N) | SET_IW_T3X1_X (R2_AS_N_SUB_N)) 1695#define MASK_R2_SUB_N (MASK_R2_OP | IW_T3X1_X_SHIFTED_MASK) 1696#define MATCH_R2_SUBI_N (MATCH_R2_OP (ASI_N) | SET_IW_T2X1I3_X (R2_ASI_N_SUBI_N)) 1697#define MASK_R2_SUBI_N (MASK_R2_OP | IW_T2X1I3_X_SHIFTED_MASK) 1698#define MATCH_R2_SYNC MATCH_R2_OPX (SYNC, 0, 0, 0) 1699#define MASK_R2_SYNC MASK_R2_OPX (1, 1, 1, 1) 1700#define MATCH_R2_TRAP MATCH_R2_OPX (TRAP, 0, 0, 0x1d) 1701#define MASK_R2_TRAP MASK_R2_OPX (1, 1, 1, 0) 1702#define MATCH_R2_TRAP_N MATCH_R2_R_N (TRAP_N) 1703#define MASK_R2_TRAP_N MASK_R2_R_N 1704#define MATCH_R2_WRCTL MATCH_R2_OPX (WRCTL, 0, 0, 0) 1705#define MASK_R2_WRCTL MASK_R2_OPX (0, 1, 1, 0) 1706#define MATCH_R2_WRPIE MATCH_R2_OPX (WRPIE, 0, 0, 0) 1707#define MASK_R2_WRPIE MASK_R2_OPX (0, 1, 0, 1) 1708#define MATCH_R2_WRPRS MATCH_R2_OPX (WRPRS, 0, 0, 0) 1709#define MASK_R2_WRPRS MASK_R2_OPX (0, 1, 0, 1) 1710#define MATCH_R2_XOR MATCH_R2_OPX0 (XOR) 1711#define MASK_R2_XOR MASK_R2_OPX0 1712#define MATCH_R2_XORHI MATCH_R2_OP (XORHI) 1713#define MASK_R2_XORHI MASK_R2_OP 1714#define MATCH_R2_XORI MATCH_R2_OP (XORI) 1715#define MASK_R2_XORI MASK_R2_OP 1716#define MATCH_R2_XOR_N MATCH_R2_R_N (XOR_N) 1717#define MASK_R2_XOR_N MASK_R2_R_N 1718 1719#endif /* _NIOS2R2_H */ 1720 1721 1722/* These are the data structures used to hold the instruction information. */ 1723extern const struct nios2_opcode nios2_r1_opcodes[]; 1724extern const int nios2_num_r1_opcodes; 1725extern const struct nios2_opcode nios2_r2_opcodes[]; 1726extern const int nios2_num_r2_opcodes; 1727extern struct nios2_opcode *nios2_opcodes; 1728extern int nios2_num_opcodes; 1729 1730/* These are the data structures used to hold the register information. */ 1731extern const struct nios2_reg nios2_builtin_regs[]; 1732extern struct nios2_reg *nios2_regs; 1733extern const int nios2_num_builtin_regs; 1734extern int nios2_num_regs; 1735 1736/* Return the opcode descriptor for a single instruction. */ 1737extern const struct nios2_opcode * 1738nios2_find_opcode_hash (unsigned long, unsigned long); 1739 1740/* Lookup tables for R2 immediate decodings. */ 1741extern unsigned int nios2_r2_asi_n_mappings[]; 1742extern const int nios2_num_r2_asi_n_mappings; 1743extern unsigned int nios2_r2_shi_n_mappings[]; 1744extern const int nios2_num_r2_shi_n_mappings; 1745extern unsigned int nios2_r2_andi_n_mappings[]; 1746extern const int nios2_num_r2_andi_n_mappings; 1747 1748/* Lookup table for 3-bit register decodings. */ 1749extern int nios2_r2_reg3_mappings[]; 1750extern const int nios2_num_r2_reg3_mappings; 1751 1752/* Lookup table for REG_RANGE value list decodings. */ 1753extern unsigned long nios2_r2_reg_range_mappings[]; 1754extern const int nios2_num_r2_reg_range_mappings; 1755 1756#endif /* _NIOS2_H */ 1757 1758/*#include "sysdep.h" 1759#include "opcode/nios2.h" 1760*/ 1761/* Register string table */ 1762 1763const struct nios2_reg nios2_builtin_regs[] = { 1764 /* Standard register names. */ 1765 {"zero", 0, REG_NORMAL}, 1766 {"at", 1, REG_NORMAL}, /* assembler temporary */ 1767 {"r2", 2, REG_NORMAL | REG_3BIT | REG_LDWM}, 1768 {"r3", 3, REG_NORMAL | REG_3BIT | REG_LDWM}, 1769 {"r4", 4, REG_NORMAL | REG_3BIT | REG_LDWM}, 1770 {"r5", 5, REG_NORMAL | REG_3BIT | REG_LDWM}, 1771 {"r6", 6, REG_NORMAL | REG_3BIT | REG_LDWM}, 1772 {"r7", 7, REG_NORMAL | REG_3BIT | REG_LDWM}, 1773 {"r8", 8, REG_NORMAL | REG_LDWM}, 1774 {"r9", 9, REG_NORMAL | REG_LDWM}, 1775 {"r10", 10, REG_NORMAL | REG_LDWM}, 1776 {"r11", 11, REG_NORMAL | REG_LDWM}, 1777 {"r12", 12, REG_NORMAL | REG_LDWM}, 1778 {"r13", 13, REG_NORMAL | REG_LDWM}, 1779 {"r14", 14, REG_NORMAL | REG_LDWM}, 1780 {"r15", 15, REG_NORMAL | REG_LDWM}, 1781 {"r16", 16, REG_NORMAL | REG_3BIT | REG_LDWM | REG_POP}, 1782 {"r17", 17, REG_NORMAL | REG_3BIT | REG_LDWM | REG_POP}, 1783 {"r18", 18, REG_NORMAL | REG_LDWM | REG_POP}, 1784 {"r19", 19, REG_NORMAL | REG_LDWM | REG_POP}, 1785 {"r20", 20, REG_NORMAL | REG_LDWM | REG_POP}, 1786 {"r21", 21, REG_NORMAL | REG_LDWM | REG_POP}, 1787 {"r22", 22, REG_NORMAL | REG_LDWM | REG_POP}, 1788 {"r23", 23, REG_NORMAL | REG_LDWM | REG_POP}, 1789 {"et", 24, REG_NORMAL}, 1790 {"bt", 25, REG_NORMAL}, 1791 {"gp", 26, REG_NORMAL}, /* global pointer */ 1792 {"sp", 27, REG_NORMAL}, /* stack pointer */ 1793 {"fp", 28, REG_NORMAL | REG_LDWM | REG_POP}, /* frame pointer */ 1794 {"ea", 29, REG_NORMAL}, /* exception return address */ 1795 {"sstatus", 30, REG_NORMAL}, /* saved processor status */ 1796 {"ra", 31, REG_NORMAL | REG_LDWM | REG_POP}, /* return address */ 1797 1798 /* Alternative names for special registers. */ 1799 {"r0", 0, REG_NORMAL}, 1800 {"r1", 1, REG_NORMAL}, 1801 {"r24", 24, REG_NORMAL}, 1802 {"r25", 25, REG_NORMAL}, 1803 {"r26", 26, REG_NORMAL}, 1804 {"r27", 27, REG_NORMAL}, 1805 {"r28", 28, REG_NORMAL | REG_LDWM | REG_POP}, 1806 {"r29", 29, REG_NORMAL}, 1807 {"r30", 30, REG_NORMAL}, 1808 {"ba", 30, REG_NORMAL}, /* breakpoint return address */ 1809 {"r31", 31, REG_NORMAL | REG_LDWM | REG_POP}, 1810 1811 /* Control register names. */ 1812 {"status", 0, REG_CONTROL}, 1813 {"estatus", 1, REG_CONTROL}, 1814 {"bstatus", 2, REG_CONTROL}, 1815 {"ienable", 3, REG_CONTROL}, 1816 {"ipending", 4, REG_CONTROL}, 1817 {"cpuid", 5, REG_CONTROL}, 1818 {"ctl6", 6, REG_CONTROL}, 1819 {"exception", 7, REG_CONTROL}, 1820 {"pteaddr", 8, REG_CONTROL}, 1821 {"tlbacc", 9, REG_CONTROL}, 1822 {"tlbmisc", 10, REG_CONTROL}, 1823 {"eccinj", 11, REG_CONTROL}, 1824 {"badaddr", 12, REG_CONTROL}, 1825 {"config", 13, REG_CONTROL}, 1826 {"mpubase", 14, REG_CONTROL}, 1827 {"mpuacc", 15, REG_CONTROL}, 1828 {"ctl16", 16, REG_CONTROL}, 1829 {"ctl17", 17, REG_CONTROL}, 1830 {"ctl18", 18, REG_CONTROL}, 1831 {"ctl19", 19, REG_CONTROL}, 1832 {"ctl20", 20, REG_CONTROL}, 1833 {"ctl21", 21, REG_CONTROL}, 1834 {"ctl22", 22, REG_CONTROL}, 1835 {"ctl23", 23, REG_CONTROL}, 1836 {"ctl24", 24, REG_CONTROL}, 1837 {"ctl25", 25, REG_CONTROL}, 1838 {"ctl26", 26, REG_CONTROL}, 1839 {"ctl27", 27, REG_CONTROL}, 1840 {"ctl28", 28, REG_CONTROL}, 1841 {"ctl29", 29, REG_CONTROL}, 1842 {"ctl30", 30, REG_CONTROL}, 1843 {"ctl31", 31, REG_CONTROL}, 1844 1845 /* Alternative names for special control registers. */ 1846 {"ctl0", 0, REG_CONTROL}, 1847 {"ctl1", 1, REG_CONTROL}, 1848 {"ctl2", 2, REG_CONTROL}, 1849 {"ctl3", 3, REG_CONTROL}, 1850 {"ctl4", 4, REG_CONTROL}, 1851 {"ctl5", 5, REG_CONTROL}, 1852 {"ctl7", 7, REG_CONTROL}, 1853 {"ctl8", 8, REG_CONTROL}, 1854 {"ctl9", 9, REG_CONTROL}, 1855 {"ctl10", 10, REG_CONTROL}, 1856 {"ctl11", 11, REG_CONTROL}, 1857 {"ctl12", 12, REG_CONTROL}, 1858 {"ctl13", 13, REG_CONTROL}, 1859 {"ctl14", 14, REG_CONTROL}, 1860 {"ctl15", 15, REG_CONTROL}, 1861 1862 /* Coprocessor register names. */ 1863 {"c0", 0, REG_COPROCESSOR}, 1864 {"c1", 1, REG_COPROCESSOR}, 1865 {"c2", 2, REG_COPROCESSOR}, 1866 {"c3", 3, REG_COPROCESSOR}, 1867 {"c4", 4, REG_COPROCESSOR}, 1868 {"c5", 5, REG_COPROCESSOR}, 1869 {"c6", 6, REG_COPROCESSOR}, 1870 {"c7", 7, REG_COPROCESSOR}, 1871 {"c8", 8, REG_COPROCESSOR}, 1872 {"c9", 9, REG_COPROCESSOR}, 1873 {"c10", 10, REG_COPROCESSOR}, 1874 {"c11", 11, REG_COPROCESSOR}, 1875 {"c12", 12, REG_COPROCESSOR}, 1876 {"c13", 13, REG_COPROCESSOR}, 1877 {"c14", 14, REG_COPROCESSOR}, 1878 {"c15", 15, REG_COPROCESSOR}, 1879 {"c16", 16, REG_COPROCESSOR}, 1880 {"c17", 17, REG_COPROCESSOR}, 1881 {"c18", 18, REG_COPROCESSOR}, 1882 {"c19", 19, REG_COPROCESSOR}, 1883 {"c20", 20, REG_COPROCESSOR}, 1884 {"c21", 21, REG_COPROCESSOR}, 1885 {"c22", 22, REG_COPROCESSOR}, 1886 {"c23", 23, REG_COPROCESSOR}, 1887 {"c24", 24, REG_COPROCESSOR}, 1888 {"c25", 25, REG_COPROCESSOR}, 1889 {"c26", 26, REG_COPROCESSOR}, 1890 {"c27", 27, REG_COPROCESSOR}, 1891 {"c28", 28, REG_COPROCESSOR}, 1892 {"c29", 29, REG_COPROCESSOR}, 1893 {"c30", 30, REG_COPROCESSOR}, 1894 {"c31", 31, REG_COPROCESSOR}, 1895}; 1896 1897#define NIOS2_NUM_REGS \ 1898 ((sizeof nios2_builtin_regs) / (sizeof (nios2_builtin_regs[0]))) 1899const int nios2_num_builtin_regs = NIOS2_NUM_REGS; 1900 1901/* This is not const in order to allow for dynamic extensions to the 1902 built-in instruction set. */ 1903struct nios2_reg *nios2_regs = (struct nios2_reg *) nios2_builtin_regs; 1904int nios2_num_regs = NIOS2_NUM_REGS; 1905#undef NIOS2_NUM_REGS 1906 1907/* This is the opcode table used by the Nios II GNU as, disassembler 1908 and GDB. */ 1909const struct nios2_opcode nios2_r1_opcodes[] = 1910{ 1911 /* { name, args, args_test, num_args, size, format, 1912 match, mask, pinfo, overflow } */ 1913 {"add", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1914 MATCH_R1_ADD, MASK_R1_ADD, 0, no_overflow}, 1915 {"addi", "t,s,i", "t,s,i,E", 3, 4, iw_i_type, 1916 MATCH_R1_ADDI, MASK_R1_ADDI, 0, signed_immed16_overflow}, 1917 {"and", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1918 MATCH_R1_AND, MASK_R1_AND, 0, no_overflow}, 1919 {"andhi", "t,s,u", "t,s,u,E", 3, 4, iw_i_type, 1920 MATCH_R1_ANDHI, MASK_R1_ANDHI, 0, unsigned_immed16_overflow}, 1921 {"andi", "t,s,u", "t,s,u,E", 3, 4, iw_i_type, 1922 MATCH_R1_ANDI, MASK_R1_ANDI, 0, unsigned_immed16_overflow}, 1923 {"beq", "s,t,o", "s,t,o,E", 3, 4, iw_i_type, 1924 MATCH_R1_BEQ, MASK_R1_BEQ, NIOS2_INSN_CBRANCH, branch_target_overflow}, 1925 {"bge", "s,t,o", "s,t,o,E", 3, 4, iw_i_type, 1926 MATCH_R1_BGE, MASK_R1_BGE, NIOS2_INSN_CBRANCH, branch_target_overflow}, 1927 {"bgeu", "s,t,o", "s,t,o,E", 3, 4, iw_i_type, 1928 MATCH_R1_BGEU, MASK_R1_BGEU, NIOS2_INSN_CBRANCH, branch_target_overflow}, 1929 {"bgt", "s,t,o", "s,t,o,E", 3, 4, iw_i_type, 1930 MATCH_R1_BGT, MASK_R1_BGT, 1931 NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow}, 1932 {"bgtu", "s,t,o", "s,t,o,E", 3, 4, iw_i_type, 1933 MATCH_R1_BGTU, MASK_R1_BGTU, 1934 NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow}, 1935 {"ble", "s,t,o", "s,t,o,E", 3, 4, iw_i_type, 1936 MATCH_R1_BLE, MASK_R1_BLE, 1937 NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow}, 1938 {"bleu", "s,t,o", "s,t,o,E", 3, 4, iw_i_type, 1939 MATCH_R1_BLEU, MASK_R1_BLEU, 1940 NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow}, 1941 {"blt", "s,t,o", "s,t,o,E", 3, 4, iw_i_type, 1942 MATCH_R1_BLT, MASK_R1_BLT, NIOS2_INSN_CBRANCH, branch_target_overflow}, 1943 {"bltu", "s,t,o", "s,t,o,E", 3, 4, iw_i_type, 1944 MATCH_R1_BLTU, MASK_R1_BLTU, NIOS2_INSN_CBRANCH, branch_target_overflow}, 1945 {"bne", "s,t,o", "s,t,o,E", 3, 4, iw_i_type, 1946 MATCH_R1_BNE, MASK_R1_BNE, NIOS2_INSN_CBRANCH, branch_target_overflow}, 1947 {"br", "o", "o,E", 1, 4, iw_i_type, 1948 MATCH_R1_BR, MASK_R1_BR, NIOS2_INSN_UBRANCH, branch_target_overflow}, 1949 {"break", "j", "j,E", 1, 4, iw_r_type, 1950 MATCH_R1_BREAK, MASK_R1_BREAK, NIOS2_INSN_OPTARG, no_overflow}, 1951 {"bret", "", "E", 0, 4, iw_r_type, 1952 MATCH_R1_BRET, MASK_R1_BRET, 0, no_overflow}, 1953 {"call", "m", "m,E", 1, 4, iw_j_type, 1954 MATCH_R1_CALL, MASK_R1_CALL, NIOS2_INSN_CALL, call_target_overflow}, 1955 {"callr", "s", "s,E", 1, 4, iw_r_type, 1956 MATCH_R1_CALLR, MASK_R1_CALLR, 0, no_overflow}, 1957 {"cmpeq", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1958 MATCH_R1_CMPEQ, MASK_R1_CMPEQ, 0, no_overflow}, 1959 {"cmpeqi", "t,s,i", "t,s,i,E", 3, 4, iw_i_type, 1960 MATCH_R1_CMPEQI, MASK_R1_CMPEQI, 0, signed_immed16_overflow}, 1961 {"cmpge", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1962 MATCH_R1_CMPGE, MASK_R1_CMPGE, 0, no_overflow}, 1963 {"cmpgei", "t,s,i", "t,s,i,E", 3, 4, iw_i_type, 1964 MATCH_R1_CMPGEI, MASK_R1_CMPGEI, 0, signed_immed16_overflow}, 1965 {"cmpgeu", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1966 MATCH_R1_CMPGEU, MASK_R1_CMPGEU, 0, no_overflow}, 1967 {"cmpgeui", "t,s,u", "t,s,u,E", 3, 4, iw_i_type, 1968 MATCH_R1_CMPGEUI, MASK_R1_CMPGEUI, 0, unsigned_immed16_overflow}, 1969 {"cmpgt", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1970 MATCH_R1_CMPGT, MASK_R1_CMPGT, NIOS2_INSN_MACRO, no_overflow}, 1971 {"cmpgti", "t,s,i", "t,s,i,E", 3, 4, iw_i_type, 1972 MATCH_R1_CMPGTI, MASK_R1_CMPGTI, NIOS2_INSN_MACRO, signed_immed16_overflow}, 1973 {"cmpgtu", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1974 MATCH_R1_CMPGTU, MASK_R1_CMPGTU, NIOS2_INSN_MACRO, no_overflow}, 1975 {"cmpgtui", "t,s,u", "t,s,u,E", 3, 4, iw_i_type, 1976 MATCH_R1_CMPGTUI, MASK_R1_CMPGTUI, 1977 NIOS2_INSN_MACRO, unsigned_immed16_overflow}, 1978 {"cmple", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1979 MATCH_R1_CMPLE, MASK_R1_CMPLE, NIOS2_INSN_MACRO, no_overflow}, 1980 {"cmplei", "t,s,i", "t,s,i,E", 3, 4, iw_i_type, 1981 MATCH_R1_CMPLEI, MASK_R1_CMPLEI, NIOS2_INSN_MACRO, signed_immed16_overflow}, 1982 {"cmpleu", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1983 MATCH_R1_CMPLEU, MASK_R1_CMPLEU, NIOS2_INSN_MACRO, no_overflow}, 1984 {"cmpleui", "t,s,u", "t,s,u,E", 3, 4, iw_i_type, 1985 MATCH_R1_CMPLEUI, MASK_R1_CMPLEUI, 1986 NIOS2_INSN_MACRO, unsigned_immed16_overflow}, 1987 {"cmplt", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1988 MATCH_R1_CMPLT, MASK_R1_CMPLT, 0, no_overflow}, 1989 {"cmplti", "t,s,i", "t,s,i,E", 3, 4, iw_i_type, 1990 MATCH_R1_CMPLTI, MASK_R1_CMPLTI, 0, signed_immed16_overflow}, 1991 {"cmpltu", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1992 MATCH_R1_CMPLTU, MASK_R1_CMPLTU, 0, no_overflow}, 1993 {"cmpltui", "t,s,u", "t,s,u,E", 3, 4, iw_i_type, 1994 MATCH_R1_CMPLTUI, MASK_R1_CMPLTUI, 0, unsigned_immed16_overflow}, 1995 {"cmpne", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 1996 MATCH_R1_CMPNE, MASK_R1_CMPNE, 0, no_overflow}, 1997 {"cmpnei", "t,s,i", "t,s,i,E", 3, 4, iw_i_type, 1998 MATCH_R1_CMPNEI, MASK_R1_CMPNEI, 0, signed_immed16_overflow}, 1999 {"custom", "l,d,s,t", "l,d,s,t,E", 4, 4, iw_custom_type, 2000 MATCH_R1_CUSTOM, MASK_R1_CUSTOM, 0, custom_opcode_overflow}, 2001 {"div", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2002 MATCH_R1_DIV, MASK_R1_DIV, 0, no_overflow}, 2003 {"divu", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2004 MATCH_R1_DIVU, MASK_R1_DIVU, 0, no_overflow}, 2005 {"eret", "", "E", 0, 4, iw_r_type, 2006 MATCH_R1_ERET, MASK_R1_ERET, 0, no_overflow}, 2007 {"flushd", "i(s)", "i(s),E", 2, 4, iw_i_type, 2008 MATCH_R1_FLUSHD, MASK_R1_FLUSHD, 0, address_offset_overflow}, 2009 {"flushda", "i(s)", "i(s),E", 2, 4, iw_i_type, 2010 MATCH_R1_FLUSHDA, MASK_R1_FLUSHDA, 0, address_offset_overflow}, 2011 {"flushi", "s", "s,E", 1, 4, iw_r_type, 2012 MATCH_R1_FLUSHI, MASK_R1_FLUSHI, 0, no_overflow}, 2013 {"flushp", "", "E", 0, 4, iw_r_type, 2014 MATCH_R1_FLUSHP, MASK_R1_FLUSHP, 0, no_overflow}, 2015 {"initd", "i(s)", "i(s),E", 2, 4, iw_i_type, 2016 MATCH_R1_INITD, MASK_R1_INITD, 0, address_offset_overflow}, 2017 {"initda", "i(s)", "i(s),E", 2, 4, iw_i_type, 2018 MATCH_R1_INITDA, MASK_R1_INITDA, 0, address_offset_overflow}, 2019 {"initi", "s", "s,E", 1, 4, iw_r_type, 2020 MATCH_R1_INITI, MASK_R1_INITI, 0, no_overflow}, 2021 {"jmp", "s", "s,E", 1, 4, iw_r_type, 2022 MATCH_R1_JMP, MASK_R1_JMP, 0, no_overflow}, 2023 {"jmpi", "m", "m,E", 1, 4, iw_j_type, 2024 MATCH_R1_JMPI, MASK_R1_JMPI, 0, call_target_overflow}, 2025 {"ldb", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2026 MATCH_R1_LDB, MASK_R1_LDB, 0, address_offset_overflow}, 2027 {"ldbio", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2028 MATCH_R1_LDBIO, MASK_R1_LDBIO, 0, address_offset_overflow}, 2029 {"ldbu", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2030 MATCH_R1_LDBU, MASK_R1_LDBU, 0, address_offset_overflow}, 2031 {"ldbuio", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2032 MATCH_R1_LDBUIO, MASK_R1_LDBUIO, 0, address_offset_overflow}, 2033 {"ldh", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2034 MATCH_R1_LDH, MASK_R1_LDH, 0, address_offset_overflow}, 2035 {"ldhio", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2036 MATCH_R1_LDHIO, MASK_R1_LDHIO, 0, address_offset_overflow}, 2037 {"ldhu", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2038 MATCH_R1_LDHU, MASK_R1_LDHU, 0, address_offset_overflow}, 2039 {"ldhuio", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2040 MATCH_R1_LDHUIO, MASK_R1_LDHUIO, 0, address_offset_overflow}, 2041 {"ldw", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2042 MATCH_R1_LDW, MASK_R1_LDW, 0, address_offset_overflow}, 2043 {"ldwio", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2044 MATCH_R1_LDWIO, MASK_R1_LDWIO, 0, address_offset_overflow}, 2045 {"mov", "d,s", "d,s,E", 2, 4, iw_r_type, 2046 MATCH_R1_MOV, MASK_R1_MOV, NIOS2_INSN_MACRO_MOV, no_overflow}, 2047 {"movhi", "t,u", "t,u,E", 2, 4, iw_i_type, 2048 MATCH_R1_MOVHI, MASK_R1_MOVHI, 2049 NIOS2_INSN_MACRO_MOVI, unsigned_immed16_overflow}, 2050 {"movi", "t,i", "t,i,E", 2, 4, iw_i_type, 2051 MATCH_R1_MOVI, MASK_R1_MOVI, NIOS2_INSN_MACRO_MOVI, signed_immed16_overflow}, 2052 {"movia", "t,o", "t,o,E", 2, 4, iw_i_type, 2053 MATCH_R1_ORHI, MASK_R1_ORHI, NIOS2_INSN_MACRO_MOVIA, no_overflow}, 2054 {"movui", "t,u", "t,u,E", 2, 4, iw_i_type, 2055 MATCH_R1_MOVUI, MASK_R1_MOVUI, 2056 NIOS2_INSN_MACRO_MOVI, unsigned_immed16_overflow}, 2057 {"mul", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2058 MATCH_R1_MUL, MASK_R1_MUL, 0, no_overflow}, 2059 {"muli", "t,s,i", "t,s,i,E", 3, 4, iw_i_type, 2060 MATCH_R1_MULI, MASK_R1_MULI, 0, signed_immed16_overflow}, 2061 {"mulxss", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2062 MATCH_R1_MULXSS, MASK_R1_MULXSS, 0, no_overflow}, 2063 {"mulxsu", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2064 MATCH_R1_MULXSU, MASK_R1_MULXSU, 0, no_overflow}, 2065 {"mulxuu", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2066 MATCH_R1_MULXUU, MASK_R1_MULXUU, 0, no_overflow}, 2067 {"nextpc", "d", "d,E", 1, 4, iw_r_type, 2068 MATCH_R1_NEXTPC, MASK_R1_NEXTPC, 0, no_overflow}, 2069 {"nop", "", "E", 0, 4, iw_r_type, 2070 MATCH_R1_NOP, MASK_R1_NOP, NIOS2_INSN_MACRO_MOV, no_overflow}, 2071 {"nor", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2072 MATCH_R1_NOR, MASK_R1_NOR, 0, no_overflow}, 2073 {"or", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2074 MATCH_R1_OR, MASK_R1_OR, 0, no_overflow}, 2075 {"orhi", "t,s,u", "t,s,u,E", 3, 4, iw_i_type, 2076 MATCH_R1_ORHI, MASK_R1_ORHI, 0, unsigned_immed16_overflow}, 2077 {"ori", "t,s,u", "t,s,u,E", 3, 4, iw_i_type, 2078 MATCH_R1_ORI, MASK_R1_ORI, 0, unsigned_immed16_overflow}, 2079 {"rdctl", "d,c", "d,c,E", 2, 4, iw_r_type, 2080 MATCH_R1_RDCTL, MASK_R1_RDCTL, 0, no_overflow}, 2081 {"rdprs", "t,s,i", "t,s,i,E", 3, 4, iw_i_type, 2082 MATCH_R1_RDPRS, MASK_R1_RDPRS, 0, signed_immed16_overflow}, 2083 {"ret", "", "E", 0, 4, iw_r_type, 2084 MATCH_R1_RET, MASK_R1_RET, 0, no_overflow}, 2085 {"rol", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2086 MATCH_R1_ROL, MASK_R1_ROL, 0, no_overflow}, 2087 {"roli", "d,s,j", "d,s,j,E", 3, 4, iw_r_type, 2088 MATCH_R1_ROLI, MASK_R1_ROLI, 0, unsigned_immed5_overflow}, 2089 {"ror", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2090 MATCH_R1_ROR, MASK_R1_ROR, 0, no_overflow}, 2091 {"sll", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2092 MATCH_R1_SLL, MASK_R1_SLL, 0, no_overflow}, 2093 {"slli", "d,s,j", "d,s,j,E", 3, 4, iw_r_type, 2094 MATCH_R1_SLLI, MASK_R1_SLLI, 0, unsigned_immed5_overflow}, 2095 {"sra", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2096 MATCH_R1_SRA, MASK_R1_SRA, 0, no_overflow}, 2097 {"srai", "d,s,j", "d,s,j,E", 3, 4, iw_r_type, 2098 MATCH_R1_SRAI, MASK_R1_SRAI, 0, unsigned_immed5_overflow}, 2099 {"srl", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2100 MATCH_R1_SRL, MASK_R1_SRL, 0, no_overflow}, 2101 {"srli", "d,s,j", "d,s,j,E", 3, 4, iw_r_type, 2102 MATCH_R1_SRLI, MASK_R1_SRLI, 0, unsigned_immed5_overflow}, 2103 {"stb", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2104 MATCH_R1_STB, MASK_R1_STB, 0, address_offset_overflow}, 2105 {"stbio", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2106 MATCH_R1_STBIO, MASK_R1_STBIO, 0, address_offset_overflow}, 2107 {"sth", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2108 MATCH_R1_STH, MASK_R1_STH, 0, address_offset_overflow}, 2109 {"sthio", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2110 MATCH_R1_STHIO, MASK_R1_STHIO, 0, address_offset_overflow}, 2111 {"stw", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2112 MATCH_R1_STW, MASK_R1_STW, 0, address_offset_overflow}, 2113 {"stwio", "t,i(s)", "t,i(s),E", 3, 4, iw_i_type, 2114 MATCH_R1_STWIO, MASK_R1_STWIO, 0, address_offset_overflow}, 2115 {"sub", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2116 MATCH_R1_SUB, MASK_R1_SUB, 0, no_overflow}, 2117 {"subi", "t,s,i", "t,s,i,E", 3, 4, iw_i_type, 2118 MATCH_R1_SUBI, MASK_R1_SUBI, NIOS2_INSN_MACRO, signed_immed16_overflow}, 2119 {"sync", "", "E", 0, 4, iw_r_type, 2120 MATCH_R1_SYNC, MASK_R1_SYNC, 0, no_overflow}, 2121 {"trap", "j", "j,E", 1, 4, iw_r_type, 2122 MATCH_R1_TRAP, MASK_R1_TRAP, NIOS2_INSN_OPTARG, no_overflow}, 2123 {"wrctl", "c,s", "c,s,E", 2, 4, iw_r_type, 2124 MATCH_R1_WRCTL, MASK_R1_WRCTL, 0, no_overflow}, 2125 {"wrprs", "d,s", "d,s,E", 2, 4, iw_r_type, 2126 MATCH_R1_WRPRS, MASK_R1_WRPRS, 0, no_overflow}, 2127 {"xor", "d,s,t", "d,s,t,E", 3, 4, iw_r_type, 2128 MATCH_R1_XOR, MASK_R1_XOR, 0, no_overflow}, 2129 {"xorhi", "t,s,u", "t,s,u,E", 3, 4, iw_i_type, 2130 MATCH_R1_XORHI, MASK_R1_XORHI, 0, unsigned_immed16_overflow}, 2131 {"xori", "t,s,u", "t,s,u,E", 3, 4, iw_i_type, 2132 MATCH_R1_XORI, MASK_R1_XORI, 0, unsigned_immed16_overflow} 2133}; 2134 2135#define NIOS2_NUM_R1_OPCODES \ 2136 ((sizeof nios2_r1_opcodes) / (sizeof (nios2_r1_opcodes[0]))) 2137const int nios2_num_r1_opcodes = NIOS2_NUM_R1_OPCODES; 2138 2139 2140const struct nios2_opcode nios2_r2_opcodes[] = 2141{ 2142 /* { name, args, args_test, num_args, size, format, 2143 match, mask, pinfo, overflow } */ 2144 {"add", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2145 MATCH_R2_ADD, MASK_R2_ADD, 0, no_overflow}, 2146 {"addi", "t,s,i", "t,s,i,E", 3, 4, iw_F2I16_type, 2147 MATCH_R2_ADDI, MASK_R2_ADDI, 0, signed_immed16_overflow}, 2148 {"add.n", "D,S,T", "D,S,T,E", 3, 2, iw_T3X1_type, 2149 MATCH_R2_ADD_N, MASK_R2_ADD_N, 0, no_overflow}, 2150 {"addi.n", "D,S,e", "D,S,e,E", 3, 2, iw_T2X1I3_type, 2151 MATCH_R2_ADDI_N, MASK_R2_ADDI_N, 0, enumeration_overflow}, 2152 {"and", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2153 MATCH_R2_AND, MASK_R2_AND, 0, no_overflow}, 2154 {"andchi", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2155 MATCH_R2_ANDCHI, MASK_R2_ANDCHI, 0, unsigned_immed16_overflow}, 2156 {"andci", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2157 MATCH_R2_ANDCI, MASK_R2_ANDCI, 0, unsigned_immed16_overflow}, 2158 {"andhi", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2159 MATCH_R2_ANDHI, MASK_R2_ANDHI, 0, unsigned_immed16_overflow}, 2160 {"andi", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2161 MATCH_R2_ANDI, MASK_R2_ANDI, 0, unsigned_immed16_overflow}, 2162 {"andi.n", "T,S,g", "T,S,g,E", 3, 2, iw_T2I4_type, 2163 MATCH_R2_ANDI_N, MASK_R2_ANDI_N, 0, enumeration_overflow}, 2164 {"and.n", "D,S,T", "D,S,T,E", 3, 2, iw_T2X3_type, 2165 MATCH_R2_AND_N, MASK_R2_AND_N, 0, no_overflow}, 2166 {"beq", "s,t,o", "s,t,o,E", 3, 4, iw_F2I16_type, 2167 MATCH_R2_BEQ, MASK_R2_BEQ, NIOS2_INSN_CBRANCH, branch_target_overflow}, 2168 {"beqz.n", "S,P", "S,P,E", 2, 2, iw_T1I7_type, 2169 MATCH_R2_BEQZ_N, MASK_R2_BEQZ_N, NIOS2_INSN_CBRANCH, branch_target_overflow}, 2170 {"bge", "s,t,o", "s,t,o,E", 3, 4, iw_F2I16_type, 2171 MATCH_R2_BGE, MASK_R2_BGE, NIOS2_INSN_CBRANCH, branch_target_overflow}, 2172 {"bgeu", "s,t,o", "s,t,o,E", 3, 4, iw_F2I16_type, 2173 MATCH_R2_BGEU, MASK_R2_BGEU, NIOS2_INSN_CBRANCH, branch_target_overflow}, 2174 {"bgt", "s,t,o", "s,t,o,E", 3, 4, iw_F2I16_type, 2175 MATCH_R2_BGT, MASK_R2_BGT, 2176 NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow}, 2177 {"bgtu", "s,t,o", "s,t,o,E", 3, 4, iw_F2I16_type, 2178 MATCH_R2_BGTU, MASK_R2_BGTU, 2179 NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow}, 2180 {"ble", "s,t,o", "s,t,o,E", 3, 4, iw_F2I16_type, 2181 MATCH_R2_BLE, MASK_R2_BLE, 2182 NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow}, 2183 {"bleu", "s,t,o", "s,t,o,E", 3, 4, iw_F2I16_type, 2184 MATCH_R2_BLEU, MASK_R2_BLEU, 2185 NIOS2_INSN_MACRO|NIOS2_INSN_CBRANCH, branch_target_overflow}, 2186 {"blt", "s,t,o", "s,t,o,E", 3, 4, iw_F2I16_type, 2187 MATCH_R2_BLT, MASK_R2_BLT, NIOS2_INSN_CBRANCH, branch_target_overflow}, 2188 {"bltu", "s,t,o", "s,t,o,E", 3, 4, iw_F2I16_type, 2189 MATCH_R2_BLTU, MASK_R2_BLTU, NIOS2_INSN_CBRANCH, branch_target_overflow}, 2190 {"bne", "s,t,o", "s,t,o,E", 3, 4, iw_F2I16_type, 2191 MATCH_R2_BNE, MASK_R2_BNE, NIOS2_INSN_CBRANCH, branch_target_overflow}, 2192 {"bnez.n", "S,P", "S,P,E", 2, 2, iw_T1I7_type, 2193 MATCH_R2_BNEZ_N, MASK_R2_BNEZ_N, NIOS2_INSN_CBRANCH, branch_target_overflow}, 2194 {"br", "o", "o,E", 1, 4, iw_F2I16_type, 2195 MATCH_R2_BR, MASK_R2_BR, NIOS2_INSN_UBRANCH, branch_target_overflow}, 2196 {"break", "j", "j,E", 1, 4, iw_F3X6L5_type, 2197 MATCH_R2_BREAK, MASK_R2_BREAK, NIOS2_INSN_OPTARG, no_overflow}, 2198 {"break.n", "j", "j,E", 1, 2, iw_X2L5_type, 2199 MATCH_R2_BREAK_N, MASK_R2_BREAK_N, NIOS2_INSN_OPTARG, no_overflow}, 2200 {"bret", "", "E", 0, 4, iw_F3X6_type, 2201 MATCH_R2_BRET, MASK_R2_BRET, 0, no_overflow}, 2202 {"br.n", "O", "O,E", 1, 2, iw_I10_type, 2203 MATCH_R2_BR_N, MASK_R2_BR_N, NIOS2_INSN_UBRANCH, branch_target_overflow}, 2204 {"call", "m", "m,E", 1, 4, iw_L26_type, 2205 MATCH_R2_CALL, MASK_R2_CALL, NIOS2_INSN_CALL, call_target_overflow}, 2206 {"callr", "s", "s,E", 1, 4, iw_F3X6_type, 2207 MATCH_R2_CALLR, MASK_R2_CALLR, 0, no_overflow}, 2208 {"callr.n", "s", "s,E", 1, 2, iw_F1X1_type, 2209 MATCH_R2_CALLR_N, MASK_R2_CALLR_N, 0, no_overflow}, 2210 {"cmpeq", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2211 MATCH_R2_CMPEQ, MASK_R2_CMPEQ, 0, no_overflow}, 2212 {"cmpeqi", "t,s,i", "t,s,i,E", 3, 4, iw_F2I16_type, 2213 MATCH_R2_CMPEQI, MASK_R2_CMPEQI, 0, signed_immed16_overflow}, 2214 {"cmpge", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2215 MATCH_R2_CMPGE, MASK_R2_CMPGE, 0, no_overflow}, 2216 {"cmpgei", "t,s,i", "t,s,i,E", 3, 4, iw_F2I16_type, 2217 MATCH_R2_CMPGEI, MASK_R2_CMPGEI, 0, signed_immed16_overflow}, 2218 {"cmpgeu", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2219 MATCH_R2_CMPGEU, MASK_R2_CMPGEU, 0, no_overflow}, 2220 {"cmpgeui", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2221 MATCH_R2_CMPGEUI, MASK_R2_CMPGEUI, 0, unsigned_immed16_overflow}, 2222 {"cmpgt", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2223 MATCH_R2_CMPGT, MASK_R2_CMPGT, NIOS2_INSN_MACRO, no_overflow}, 2224 {"cmpgti", "t,s,i", "t,s,i,E", 3, 4, iw_F2I16_type, 2225 MATCH_R2_CMPGTI, MASK_R2_CMPGTI, NIOS2_INSN_MACRO, signed_immed16_overflow}, 2226 {"cmpgtu", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2227 MATCH_R2_CMPGTU, MASK_R2_CMPGTU, NIOS2_INSN_MACRO, no_overflow}, 2228 {"cmpgtui", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2229 MATCH_R2_CMPGTUI, MASK_R2_CMPGTUI, 2230 NIOS2_INSN_MACRO, unsigned_immed16_overflow}, 2231 {"cmple", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2232 MATCH_R2_CMPLE, MASK_R2_CMPLE, NIOS2_INSN_MACRO, no_overflow}, 2233 {"cmplei", "t,s,i", "t,s,i,E", 3, 4, iw_F2I16_type, 2234 MATCH_R2_CMPLEI, MASK_R2_CMPLEI, NIOS2_INSN_MACRO, signed_immed16_overflow}, 2235 {"cmpleu", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2236 MATCH_R2_CMPLEU, MASK_R2_CMPLEU, NIOS2_INSN_MACRO, no_overflow}, 2237 {"cmpleui", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2238 MATCH_R2_CMPLEUI, MASK_R2_CMPLEUI, 2239 NIOS2_INSN_MACRO, unsigned_immed16_overflow}, 2240 {"cmplt", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2241 MATCH_R2_CMPLT, MASK_R2_CMPLT, 0, no_overflow}, 2242 {"cmplti", "t,s,i", "t,s,i,E", 3, 4, iw_F2I16_type, 2243 MATCH_R2_CMPLTI, MASK_R2_CMPLTI, 0, signed_immed16_overflow}, 2244 {"cmpltu", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2245 MATCH_R2_CMPLTU, MASK_R2_CMPLTU, 0, no_overflow}, 2246 {"cmpltui", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2247 MATCH_R2_CMPLTUI, MASK_R2_CMPLTUI, 0, unsigned_immed16_overflow}, 2248 {"cmpne", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2249 MATCH_R2_CMPNE, MASK_R2_CMPNE, 0, no_overflow}, 2250 {"cmpnei", "t,s,i", "t,s,i,E", 3, 4, iw_F2I16_type, 2251 MATCH_R2_CMPNEI, MASK_R2_CMPNEI, 0, signed_immed16_overflow}, 2252 {"custom", "l,d,s,t", "l,d,s,t,E", 4, 4, iw_F3X8_type, 2253 MATCH_R2_CUSTOM, MASK_R2_CUSTOM, 0, custom_opcode_overflow}, 2254 {"div", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2255 MATCH_R2_DIV, MASK_R2_DIV, 0, no_overflow}, 2256 {"divu", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2257 MATCH_R2_DIVU, MASK_R2_DIVU, 0, no_overflow}, 2258 {"eni", "j", "j,E", 1, 4, iw_F3X6L5_type, 2259 MATCH_R2_ENI, MASK_R2_ENI, NIOS2_INSN_OPTARG, no_overflow}, 2260 {"eret", "", "E", 0, 4, iw_F3X6_type, 2261 MATCH_R2_ERET, MASK_R2_ERET, 0, no_overflow}, 2262 {"extract", "t,s,j,k", "t,s,j,k,E", 4, 4, iw_F2X6L10_type, 2263 MATCH_R2_EXTRACT, MASK_R2_EXTRACT, 0, no_overflow}, 2264 {"flushd", "I(s)", "I(s),E", 2, 4, iw_F1X4I12_type, 2265 MATCH_R2_FLUSHD, MASK_R2_FLUSHD, 0, address_offset_overflow}, 2266 {"flushda", "I(s)", "I(s),E", 2, 4, iw_F1X4I12_type, 2267 MATCH_R2_FLUSHDA, MASK_R2_FLUSHDA, 0, address_offset_overflow}, 2268 {"flushi", "s", "s,E", 1, 4, iw_F3X6_type, 2269 MATCH_R2_FLUSHI, MASK_R2_FLUSHI, 0, no_overflow}, 2270 {"flushp", "", "E", 0, 4, iw_F3X6_type, 2271 MATCH_R2_FLUSHP, MASK_R2_FLUSHP, 0, no_overflow}, 2272 {"initd", "I(s)", "I(s),E", 2, 4, iw_F1X4I12_type, 2273 MATCH_R2_INITD, MASK_R2_INITD, 0, address_offset_overflow}, 2274 {"initda", "I(s)", "I(s),E", 2, 4, iw_F1X4I12_type, 2275 MATCH_R2_INITDA, MASK_R2_INITDA, 0, address_offset_overflow}, 2276 {"initi", "s", "s,E", 1, 4, iw_F3X6_type, 2277 MATCH_R2_INITI, MASK_R2_INITI, 0, no_overflow}, 2278 {"insert", "t,s,j,k", "t,s,j,k,E", 4, 4, iw_F2X6L10_type, 2279 MATCH_R2_INSERT, MASK_R2_INSERT, 0, no_overflow}, 2280 {"jmp", "s", "s,E", 1, 4, iw_F3X6_type, 2281 MATCH_R2_JMP, MASK_R2_JMP, 0, no_overflow}, 2282 {"jmpi", "m", "m,E", 1, 4, iw_L26_type, 2283 MATCH_R2_JMPI, MASK_R2_JMPI, 0, call_target_overflow}, 2284 {"jmpr.n", "s", "s,E", 1, 2, iw_F1X1_type, 2285 MATCH_R2_JMPR_N, MASK_R2_JMPR_N, 0, no_overflow}, 2286 {"ldb", "t,i(s)", "t,i(s),E", 3, 4, iw_F2I16_type, 2287 MATCH_R2_LDB, MASK_R2_LDB, 0, address_offset_overflow}, 2288 {"ldbio", "t,I(s)", "t,I(s),E", 3, 4, iw_F2X4I12_type, 2289 MATCH_R2_LDBIO, MASK_R2_LDBIO, 0, signed_immed12_overflow}, 2290 {"ldbu", "t,i(s)", "t,i(s),E", 3, 4, iw_F2I16_type, 2291 MATCH_R2_LDBU, MASK_R2_LDBU, 0, address_offset_overflow}, 2292 {"ldbuio", "t,I(s)", "t,I(s),E", 3, 4, iw_F2X4I12_type, 2293 MATCH_R2_LDBUIO, MASK_R2_LDBUIO, 0, signed_immed12_overflow}, 2294 {"ldbu.n", "T,Y(S)", "T,Y(S),E", 3, 2, iw_T2I4_type, 2295 MATCH_R2_LDBU_N, MASK_R2_LDBU_N, 0, address_offset_overflow}, 2296 {"ldex", "d,(s)", "d,(s),E", 2, 4, iw_F3X6_type, 2297 MATCH_R2_LDEX, MASK_R2_LDEX, 0, no_overflow}, 2298 {"ldh", "t,i(s)", "t,i(s),E", 3, 4, iw_F2I16_type, 2299 MATCH_R2_LDH, MASK_R2_LDH, 0, address_offset_overflow}, 2300 {"ldhio", "t,I(s)", "t,I(s),E", 3, 4, iw_F2X4I12_type, 2301 MATCH_R2_LDHIO, MASK_R2_LDHIO, 0, signed_immed12_overflow}, 2302 {"ldhu", "t,i(s)", "t,i(s),E", 3, 4, iw_F2I16_type, 2303 MATCH_R2_LDHU, MASK_R2_LDHU, 0, address_offset_overflow}, 2304 {"ldhuio", "t,I(s)", "t,I(s),E", 3, 4, iw_F2X4I12_type, 2305 MATCH_R2_LDHUIO, MASK_R2_LDHUIO, 0, signed_immed12_overflow}, 2306 {"ldhu.n", "T,X(S)", "T,X(S),E", 3, 2, iw_T2I4_type, 2307 MATCH_R2_LDHU_N, MASK_R2_LDHU_N, 0, address_offset_overflow}, 2308 {"ldsex", "d,(s)", "d,(s),E", 2, 4, iw_F3X6_type, 2309 MATCH_R2_LDSEX, MASK_R2_LDSEX, 0, no_overflow}, 2310 {"ldw", "t,i(s)", "t,i(s),E", 3, 4, iw_F2I16_type, 2311 MATCH_R2_LDW, MASK_R2_LDW, 0, address_offset_overflow}, 2312 {"ldwio", "t,I(s)", "t,I(s),E", 3, 4, iw_F2X4I12_type, 2313 MATCH_R2_LDWIO, MASK_R2_LDWIO, 0, signed_immed12_overflow}, 2314 {"ldwm", "R,B", "R,B,E", 2, 4, iw_F1X4L17_type, 2315 MATCH_R2_LDWM, MASK_R2_LDWM, 0, no_overflow}, 2316 {"ldw.n", "T,W(S)", "T,W(S),E", 3, 2, iw_T2I4_type, 2317 MATCH_R2_LDW_N, MASK_R2_LDW_N, 0, address_offset_overflow}, 2318 {"ldwsp.n", "t,V(s)", "t,V(s),E", 3, 2, iw_F1I5_type, 2319 MATCH_R2_LDWSP_N, MASK_R2_LDWSP_N, 0, address_offset_overflow}, 2320 {"merge", "t,s,j,k", "t,s,j,k,E", 4, 4, iw_F2X6L10_type, 2321 MATCH_R2_MERGE, MASK_R2_MERGE, 0, no_overflow}, 2322 {"mov", "d,s", "d,s,E", 2, 4, iw_F3X6_type, 2323 MATCH_R2_MOV, MASK_R2_MOV, NIOS2_INSN_MACRO_MOV, no_overflow}, 2324 {"mov.n", "d,s", "d,s,E", 2, 2, iw_F2_type, 2325 MATCH_R2_MOV_N, MASK_R2_MOV_N, 0, no_overflow}, 2326 {"movi.n", "D,h", "D,h,E", 2, 2, iw_T1I7_type, 2327 MATCH_R2_MOVI_N, MASK_R2_MOVI_N, 0, enumeration_overflow}, 2328 {"movhi", "t,u", "t,u,E", 2, 4, iw_F2I16_type, 2329 MATCH_R2_MOVHI, MASK_R2_MOVHI, 2330 NIOS2_INSN_MACRO_MOVI, unsigned_immed16_overflow}, 2331 {"movi", "t,i", "t,i,E", 2, 4, iw_F2I16_type, 2332 MATCH_R2_MOVI, MASK_R2_MOVI, NIOS2_INSN_MACRO_MOVI, signed_immed16_overflow}, 2333 {"movia", "t,o", "t,o,E", 2, 4, iw_F2I16_type, 2334 MATCH_R2_ORHI, MASK_R2_ORHI, NIOS2_INSN_MACRO_MOVIA, no_overflow}, 2335 {"movui", "t,u", "t,u,E", 2, 4, iw_F2I16_type, 2336 MATCH_R2_MOVUI, MASK_R2_MOVUI, 2337 NIOS2_INSN_MACRO_MOVI, unsigned_immed16_overflow}, 2338 {"mul", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2339 MATCH_R2_MUL, MASK_R2_MUL, 0, no_overflow}, 2340 {"muli", "t,s,i", "t,s,i,E", 3, 4, iw_F2I16_type, 2341 MATCH_R2_MULI, MASK_R2_MULI, 0, signed_immed16_overflow}, 2342 {"mulxss", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2343 MATCH_R2_MULXSS, MASK_R2_MULXSS, 0, no_overflow}, 2344 {"mulxsu", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2345 MATCH_R2_MULXSU, MASK_R2_MULXSU, 0, no_overflow}, 2346 {"mulxuu", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2347 MATCH_R2_MULXUU, MASK_R2_MULXUU, 0, no_overflow}, 2348 /* The encoding of the neg.n operands is backwards, not 2349 the interpretation -- the first operand is still the 2350 destination and the second the source. */ 2351 {"neg.n", "S,D", "S,D,E", 2, 2, iw_T2X3_type, 2352 MATCH_R2_NEG_N, MASK_R2_NEG_N, 0, no_overflow}, 2353 {"nextpc", "d", "d,E", 1, 4, iw_F3X6_type, 2354 MATCH_R2_NEXTPC, MASK_R2_NEXTPC, 0, no_overflow}, 2355 {"nop", "", "E", 0, 4, iw_F3X6_type, 2356 MATCH_R2_NOP, MASK_R2_NOP, NIOS2_INSN_MACRO_MOV, no_overflow}, 2357 {"nop.n", "", "E", 0, 2, iw_F2_type, 2358 MATCH_R2_NOP_N, MASK_R2_NOP_N, NIOS2_INSN_MACRO_MOV, no_overflow}, 2359 {"nor", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2360 MATCH_R2_NOR, MASK_R2_NOR, 0, no_overflow}, 2361 {"not.n", "D,S", "D,S,E", 2, 2, iw_T2X3_type, 2362 MATCH_R2_NOT_N, MASK_R2_NOT_N, 0, no_overflow}, 2363 {"or", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2364 MATCH_R2_OR, MASK_R2_OR, 0, no_overflow}, 2365 {"orhi", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2366 MATCH_R2_ORHI, MASK_R2_ORHI, 0, unsigned_immed16_overflow}, 2367 {"ori", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2368 MATCH_R2_ORI, MASK_R2_ORI, 0, unsigned_immed16_overflow}, 2369 {"or.n", "D,S,T", "D,S,T,E", 3, 2, iw_T2X3_type, 2370 MATCH_R2_OR_N, MASK_R2_OR_N, 0, no_overflow}, 2371 {"pop.n", "R,W", "R,W,E", 2, 2, iw_L5I4X1_type, 2372 MATCH_R2_POP_N, MASK_R2_POP_N, NIOS2_INSN_OPTARG, no_overflow}, 2373 {"push.n", "R,W", "R,W,E", 2, 2, iw_L5I4X1_type, 2374 MATCH_R2_PUSH_N, MASK_R2_PUSH_N, NIOS2_INSN_OPTARG, no_overflow}, 2375 {"rdctl", "d,c", "d,c,E", 2, 4, iw_F3X6L5_type, 2376 MATCH_R2_RDCTL, MASK_R2_RDCTL, 0, no_overflow}, 2377 {"rdprs", "t,s,I", "t,s,I,E", 3, 4, iw_F2X4I12_type, 2378 MATCH_R2_RDPRS, MASK_R2_RDPRS, 0, signed_immed12_overflow}, 2379 {"ret", "", "E", 0, 4, iw_F3X6_type, 2380 MATCH_R2_RET, MASK_R2_RET, 0, no_overflow}, 2381 {"ret.n", "", "E", 0, 2, iw_X2L5_type, 2382 MATCH_R2_RET_N, MASK_R2_RET_N, 0, no_overflow}, 2383 {"rol", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2384 MATCH_R2_ROL, MASK_R2_ROL, 0, no_overflow}, 2385 {"roli", "d,s,j", "d,s,j,E", 3, 4, iw_F3X6L5_type, 2386 MATCH_R2_ROLI, MASK_R2_ROLI, 0, unsigned_immed5_overflow}, 2387 {"ror", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2388 MATCH_R2_ROR, MASK_R2_ROR, 0, no_overflow}, 2389 {"sll", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2390 MATCH_R2_SLL, MASK_R2_SLL, 0, no_overflow}, 2391 {"slli", "d,s,j", "d,s,j,E", 3, 4, iw_F3X6L5_type, 2392 MATCH_R2_SLLI, MASK_R2_SLLI, 0, unsigned_immed5_overflow}, 2393 {"sll.n", "D,S,T", "D,S,T,E", 3, 2, iw_T2X3_type, 2394 MATCH_R2_SLL_N, MASK_R2_SLL_N, 0, no_overflow}, 2395 {"slli.n", "D,S,f", "D,S,f,E", 3, 2, iw_T2X1L3_type, 2396 MATCH_R2_SLLI_N, MASK_R2_SLLI_N, 0, enumeration_overflow}, 2397 {"spaddi.n", "D,U", "D,U,E", 2, 2, iw_T1I7_type, 2398 MATCH_R2_SPADDI_N, MASK_R2_SPADDI_N, 0, address_offset_overflow}, 2399 {"spdeci.n", "U", "U,E", 1, 2, iw_X1I7_type, 2400 MATCH_R2_SPDECI_N, MASK_R2_SPDECI_N, 0, address_offset_overflow}, 2401 {"spinci.n", "U", "U,E", 1, 2, iw_X1I7_type, 2402 MATCH_R2_SPINCI_N, MASK_R2_SPINCI_N, 0, address_offset_overflow}, 2403 {"sra", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2404 MATCH_R2_SRA, MASK_R2_SRA, 0, no_overflow}, 2405 {"srai", "d,s,j", "d,s,j,E", 3, 4, iw_F3X6L5_type, 2406 MATCH_R2_SRAI, MASK_R2_SRAI, 0, unsigned_immed5_overflow}, 2407 {"srl", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2408 MATCH_R2_SRL, MASK_R2_SRL, 0, no_overflow}, 2409 {"srli", "d,s,j", "d,s,j,E", 3, 4, iw_F3X6L5_type, 2410 MATCH_R2_SRLI, MASK_R2_SRLI, 0, unsigned_immed5_overflow}, 2411 {"srl.n", "D,S,T", "D,S,T,E", 3, 2, iw_T2X3_type, 2412 MATCH_R2_SRL_N, MASK_R2_SRL_N, 0, no_overflow}, 2413 {"srli.n", "D,S,f", "D,S,f,E", 3, 2, iw_T2X1L3_type, 2414 MATCH_R2_SRLI_N, MASK_R2_SRLI_N, 0, enumeration_overflow}, 2415 {"stb", "t,i(s)", "t,i(s),E", 3, 4, iw_F2I16_type, 2416 MATCH_R2_STB, MASK_R2_STB, 0, address_offset_overflow}, 2417 {"stbio", "t,I(s)", "t,I(s),E", 3, 4, iw_F2X4I12_type, 2418 MATCH_R2_STBIO, MASK_R2_STBIO, 0, signed_immed12_overflow}, 2419 {"stb.n", "T,Y(S)", "T,Y(S),E", 3, 2, iw_T2I4_type, 2420 MATCH_R2_STB_N, MASK_R2_STB_N, 0, address_offset_overflow}, 2421 {"stbz.n", "t,M(S)", "t,M(S),E", 3, 2, iw_T1X1I6_type, 2422 MATCH_R2_STBZ_N, MASK_R2_STBZ_N, 0, address_offset_overflow}, 2423 {"stex", "d,t,(s)", "d,t,(s),E", 3, 4, iw_F3X6_type, 2424 MATCH_R2_STEX, MASK_R2_STEX, 0, no_overflow}, 2425 {"sth", "t,i(s)", "t,i(s),E", 3, 4, iw_F2I16_type, 2426 MATCH_R2_STH, MASK_R2_STH, 0, address_offset_overflow}, 2427 {"sthio", "t,I(s)", "t,I(s),E", 3, 4, iw_F2X4I12_type, 2428 MATCH_R2_STHIO, MASK_R2_STHIO, 0, signed_immed12_overflow}, 2429 {"sth.n", "T,X(S)", "T,X(S),E", 3, 2, iw_T2I4_type, 2430 MATCH_R2_STH_N, MASK_R2_STH_N, 0, address_offset_overflow}, 2431 {"stsex", "d,t,(s)", "d,t,(s),E", 3, 4, iw_F3X6_type, 2432 MATCH_R2_STSEX, MASK_R2_STSEX, 0, no_overflow}, 2433 {"stw", "t,i(s)", "t,i(s),E", 3, 4, iw_F2I16_type, 2434 MATCH_R2_STW, MASK_R2_STW, 0, address_offset_overflow}, 2435 {"stwio", "t,I(s)", "t,I(s),E", 3, 4, iw_F2X4I12_type, 2436 MATCH_R2_STWIO, MASK_R2_STWIO, 0, signed_immed12_overflow}, 2437 {"stwm", "R,B", "R,B,E", 2, 4, iw_F1X4L17_type, 2438 MATCH_R2_STWM, MASK_R2_STWM, 0, no_overflow}, 2439 {"stwsp.n", "t,V(s)", "t,V(s),E", 3, 2, iw_F1I5_type, 2440 MATCH_R2_STWSP_N, MASK_R2_STWSP_N, 0, address_offset_overflow}, 2441 {"stw.n", "T,W(S)", "T,W(S),E", 3, 2, iw_T2I4_type, 2442 MATCH_R2_STW_N, MASK_R2_STW_N, 0, address_offset_overflow}, 2443 {"stwz.n", "t,N(S)", "t,N(S),E", 3, 2, iw_T1X1I6_type, 2444 MATCH_R2_STWZ_N, MASK_R2_STWZ_N, 0, address_offset_overflow}, 2445 {"sub", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2446 MATCH_R2_SUB, MASK_R2_SUB, 0, no_overflow}, 2447 {"subi", "t,s,i", "t,s,i,E", 3, 4, iw_F2I16_type, 2448 MATCH_R2_SUBI, MASK_R2_SUBI, NIOS2_INSN_MACRO, signed_immed16_overflow}, 2449 {"sub.n", "D,S,T", "D,S,T,E", 3, 2, iw_T3X1_type, 2450 MATCH_R2_SUB_N, MASK_R2_SUB_N, 0, no_overflow}, 2451 {"subi.n", "D,S,e", "D,S,e,E", 3, 2, iw_T2X1I3_type, 2452 MATCH_R2_SUBI_N, MASK_R2_SUBI_N, 0, enumeration_overflow}, 2453 {"sync", "", "E", 0, 4, iw_F3X6_type, 2454 MATCH_R2_SYNC, MASK_R2_SYNC, 0, no_overflow}, 2455 {"trap", "j", "j,E", 1, 4, iw_F3X6L5_type, 2456 MATCH_R2_TRAP, MASK_R2_TRAP, NIOS2_INSN_OPTARG, no_overflow}, 2457 {"trap.n", "j", "j,E", 1, 2, iw_X2L5_type, 2458 MATCH_R2_TRAP_N, MASK_R2_TRAP_N, NIOS2_INSN_OPTARG, no_overflow}, 2459 {"wrctl", "c,s", "c,s,E", 2, 4, iw_F3X6L5_type, 2460 MATCH_R2_WRCTL, MASK_R2_WRCTL, 0, no_overflow}, 2461 {"wrpie", "d,s", "d,s,E", 2, 4, iw_F3X6L5_type, 2462 MATCH_R2_WRPIE, MASK_R2_WRPIE, 0, no_overflow}, 2463 {"wrprs", "d,s", "d,s,E", 2, 4, iw_F3X6_type, 2464 MATCH_R2_WRPRS, MASK_R2_WRPRS, 0, no_overflow}, 2465 {"xor", "d,s,t", "d,s,t,E", 3, 4, iw_F3X6_type, 2466 MATCH_R2_XOR, MASK_R2_XOR, 0, no_overflow}, 2467 {"xorhi", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2468 MATCH_R2_XORHI, MASK_R2_XORHI, 0, unsigned_immed16_overflow}, 2469 {"xori", "t,s,u", "t,s,u,E", 3, 4, iw_F2I16_type, 2470 MATCH_R2_XORI, MASK_R2_XORI, 0, unsigned_immed16_overflow}, 2471 {"xor.n", "D,S,T", "D,S,T,E", 3, 2, iw_T2X3_type, 2472 MATCH_R2_XOR_N, MASK_R2_XOR_N, 0, no_overflow}, 2473}; 2474 2475#define NIOS2_NUM_R2_OPCODES \ 2476 ((sizeof nios2_r2_opcodes) / (sizeof (nios2_r2_opcodes[0]))) 2477const int nios2_num_r2_opcodes = NIOS2_NUM_R2_OPCODES; 2478 2479/* Default to using the R1 instruction tables. */ 2480struct nios2_opcode *nios2_opcodes = (struct nios2_opcode *) nios2_r1_opcodes; 2481int nios2_num_opcodes = NIOS2_NUM_R1_OPCODES; 2482#undef NIOS2_NUM_R1_OPCODES 2483#undef NIOS2_NUM_R2_OPCODES 2484 2485/* Decodings for R2 asi.n (addi.n/subi.n) immediate values. */ 2486unsigned int nios2_r2_asi_n_mappings[] = 2487 {1, 2, 4, 8, 16, 32, 64, 128}; 2488const int nios2_num_r2_asi_n_mappings = 8; 2489 2490/* Decodings for R2 shi.n (slli.n/srli.n) immediate values. */ 2491unsigned int nios2_r2_shi_n_mappings[] = 2492 {1, 2, 3, 8, 12, 16, 24, 31}; 2493const int nios2_num_r2_shi_n_mappings = 8; 2494 2495/* Decodings for R2 andi.n immediate values. */ 2496unsigned int nios2_r2_andi_n_mappings[] = 2497 {1, 2, 3, 4, 8, 0xf, 0x10, 0x1f, 2498 0x20, 0x3f, 0x7f, 0x80, 0xff, 0x7ff, 0xff00, 0xffff}; 2499const int nios2_num_r2_andi_n_mappings = 16; 2500 2501/* Decodings for R2 3-bit register fields. */ 2502int nios2_r2_reg3_mappings[] = 2503 {16, 17, 2, 3, 4, 5, 6, 7}; 2504const int nios2_num_r2_reg3_mappings = 8; 2505 2506/* Decodings for R2 push.n/pop.n REG_RANGE value list. */ 2507unsigned long nios2_r2_reg_range_mappings[] = { 2508 0x00010000, 2509 0x00030000, 2510 0x00070000, 2511 0x000f0000, 2512 0x001f0000, 2513 0x003f0000, 2514 0x007f0000, 2515 0x00ff0000 2516}; 2517const int nios2_num_r2_reg_range_mappings = 8; 2518 2519/*#include "sysdep.h" 2520#include "dis-asm.h" 2521#include "opcode/nios2.h" 2522#include "libiberty.h" 2523*/ 2524/* No symbol table is available when this code runs out in an embedded 2525 system as when it is used for disassembler support in a monitor. */ 2526#if !defined(EMBEDDED_ENV) 2527#define SYMTAB_AVAILABLE 1 2528/* 2529#include "elf-bfd.h" 2530#include "elf/nios2.h" 2531*/ 2532#endif 2533 2534/* Default length of Nios II instruction in bytes. */ 2535#define INSNLEN 4 2536 2537/* Data structures used by the opcode hash table. */ 2538typedef struct _nios2_opcode_hash 2539{ 2540 const struct nios2_opcode *opcode; 2541 struct _nios2_opcode_hash *next; 2542} nios2_opcode_hash; 2543 2544/* Hash table size. */ 2545#define OPCODE_HASH_SIZE (IW_R1_OP_UNSHIFTED_MASK + 1) 2546 2547/* Extract the opcode from an instruction word. */ 2548static unsigned int 2549nios2_r1_extract_opcode (unsigned int x) 2550{ 2551 return GET_IW_R1_OP (x); 2552} 2553 2554static unsigned int 2555nios2_r2_extract_opcode (unsigned int x) 2556{ 2557 return GET_IW_R2_OP (x); 2558} 2559 2560/* We maintain separate hash tables for R1 and R2 opcodes, and pseudo-ops 2561 are stored in a different table than regular instructions. */ 2562 2563typedef struct _nios2_disassembler_state 2564{ 2565 const struct nios2_opcode *opcodes; 2566 const int *num_opcodes; 2567 unsigned int (*extract_opcode) (unsigned int); 2568 nios2_opcode_hash *hash[OPCODE_HASH_SIZE]; 2569 nios2_opcode_hash *ps_hash[OPCODE_HASH_SIZE]; 2570 const struct nios2_opcode *nop; 2571 bfd_boolean init; 2572} nios2_disassembler_state; 2573 2574static nios2_disassembler_state 2575nios2_r1_disassembler_state = { 2576 nios2_r1_opcodes, 2577 &nios2_num_r1_opcodes, 2578 nios2_r1_extract_opcode, 2579 {}, 2580 {}, 2581 NULL, 2582 0 2583}; 2584 2585static nios2_disassembler_state 2586nios2_r2_disassembler_state = { 2587 nios2_r2_opcodes, 2588 &nios2_num_r2_opcodes, 2589 nios2_r2_extract_opcode, 2590 {}, 2591 {}, 2592 NULL, 2593 0 2594}; 2595 2596/* Function to initialize the opcode hash table. */ 2597static void 2598nios2_init_opcode_hash (nios2_disassembler_state *state) 2599{ 2600 unsigned int i; 2601 register const struct nios2_opcode *op; 2602 2603 for (i = 0; i < OPCODE_HASH_SIZE; i++) 2604 for (op = state->opcodes; op < &state->opcodes[*(state->num_opcodes)]; op++) 2605 { 2606 nios2_opcode_hash *new_hash; 2607 nios2_opcode_hash **bucket = NULL; 2608 2609 if ((op->pinfo & NIOS2_INSN_MACRO) == NIOS2_INSN_MACRO) 2610 { 2611 if (i == state->extract_opcode (op->match) 2612 && (op->pinfo & (NIOS2_INSN_MACRO_MOV | NIOS2_INSN_MACRO_MOVI) 2613 & 0x7fffffff)) 2614 { 2615 bucket = &(state->ps_hash[i]); 2616 if (strcmp (op->name, "nop") == 0) 2617 state->nop = op; 2618 } 2619 } 2620 else if (i == state->extract_opcode (op->match)) 2621 bucket = &(state->hash[i]); 2622 2623 if (bucket) 2624 { 2625 new_hash = 2626 (nios2_opcode_hash *) malloc (sizeof (nios2_opcode_hash)); 2627 if (new_hash == NULL) 2628 { 2629 fprintf (stderr, 2630 "error allocating memory...broken disassembler\n"); 2631 abort (); 2632 } 2633 new_hash->opcode = op; 2634 new_hash->next = NULL; 2635 while (*bucket) 2636 bucket = &((*bucket)->next); 2637 *bucket = new_hash; 2638 } 2639 } 2640 state->init = 1; 2641 2642#ifdef DEBUG_HASHTABLE 2643 for (i = 0; i < OPCODE_HASH_SIZE; ++i) 2644 { 2645 nios2_opcode_hash *tmp_hash = state->hash[i]; 2646 printf ("index: 0x%02X ops: ", i); 2647 while (tmp_hash != NULL) 2648 { 2649 printf ("%s ", tmp_hash->opcode->name); 2650 tmp_hash = tmp_hash->next; 2651 } 2652 printf ("\n"); 2653 } 2654 2655 for (i = 0; i < OPCODE_HASH_SIZE; ++i) 2656 { 2657 nios2_opcode_hash *tmp_hash = state->ps_hash[i]; 2658 printf ("index: 0x%02X ops: ", i); 2659 while (tmp_hash != NULL) 2660 { 2661 printf ("%s ", tmp_hash->opcode->name); 2662 tmp_hash = tmp_hash->next; 2663 } 2664 printf ("\n"); 2665 } 2666#endif /* DEBUG_HASHTABLE */ 2667} 2668 2669/* Return a pointer to an nios2_opcode struct for a given instruction 2670 word OPCODE for bfd machine MACH, or NULL if there is an error. */ 2671const struct nios2_opcode * 2672nios2_find_opcode_hash (unsigned long opcode, unsigned long mach) 2673{ 2674 nios2_opcode_hash *entry; 2675 nios2_disassembler_state *state; 2676 2677 /* Select the right instruction set, hash tables, and opcode accessor 2678 for the mach variant. */ 2679 if (mach == bfd_mach_nios2r2) 2680 state = &nios2_r2_disassembler_state; 2681 else 2682 state = &nios2_r1_disassembler_state; 2683 2684 /* Build a hash table to shorten the search time. */ 2685 if (!state->init) 2686 nios2_init_opcode_hash (state); 2687 2688 /* Check for NOP first. Both NOP and MOV are macros that expand into 2689 an ADD instruction, and we always want to give priority to NOP. */ 2690 if (state->nop->match == (opcode & state->nop->mask)) 2691 return state->nop; 2692 2693 /* First look in the pseudo-op hashtable. */ 2694 for (entry = state->ps_hash[state->extract_opcode (opcode)]; 2695 entry; entry = entry->next) 2696 if (entry->opcode->match == (opcode & entry->opcode->mask)) 2697 return entry->opcode; 2698 2699 /* Otherwise look in the main hashtable. */ 2700 for (entry = state->hash[state->extract_opcode (opcode)]; 2701 entry; entry = entry->next) 2702 if (entry->opcode->match == (opcode & entry->opcode->mask)) 2703 return entry->opcode; 2704 2705 return NULL; 2706} 2707 2708/* There are 32 regular registers, 32 coprocessor registers, 2709 and 32 control registers. */ 2710#define NUMREGNAMES 32 2711 2712/* Return a pointer to the base of the coprocessor register name array. */ 2713static struct nios2_reg * 2714nios2_coprocessor_regs (void) 2715{ 2716 static struct nios2_reg *cached = NULL; 2717 2718 if (!cached) 2719 { 2720 int i; 2721 for (i = NUMREGNAMES; i < nios2_num_regs; i++) 2722 if (!strcmp (nios2_regs[i].name, "c0")) 2723 { 2724 cached = nios2_regs + i; 2725 break; 2726 } 2727 assert (cached); 2728 } 2729 return cached; 2730} 2731 2732/* Return a pointer to the base of the control register name array. */ 2733static struct nios2_reg * 2734nios2_control_regs (void) 2735{ 2736 static struct nios2_reg *cached = NULL; 2737 2738 if (!cached) 2739 { 2740 int i; 2741 for (i = NUMREGNAMES; i < nios2_num_regs; i++) 2742 if (!strcmp (nios2_regs[i].name, "status")) 2743 { 2744 cached = nios2_regs + i; 2745 break; 2746 } 2747 assert (cached); 2748 } 2749 return cached; 2750} 2751 2752/* Helper routine to report internal errors. */ 2753static void 2754bad_opcode (const struct nios2_opcode *op) 2755{ 2756 fprintf (stderr, "Internal error: broken opcode descriptor for `%s %s'\n", 2757 op->name, op->args); 2758 abort (); 2759} 2760 2761/* The function nios2_print_insn_arg uses the character pointed 2762 to by ARGPTR to determine how it print the next token or separator 2763 character in the arguments to an instruction. */ 2764static int 2765nios2_print_insn_arg (const char *argptr, 2766 unsigned long opcode, bfd_vma address, 2767 disassemble_info *info, 2768 const struct nios2_opcode *op) 2769{ 2770 unsigned long i = 0; 2771 struct nios2_reg *reg_base; 2772 2773 switch (*argptr) 2774 { 2775 case ',': 2776 case '(': 2777 case ')': 2778 (*info->fprintf_func) (info->stream, "%c", *argptr); 2779 break; 2780 2781 case 'c': 2782 /* Control register index. */ 2783 switch (op->format) 2784 { 2785 case iw_r_type: 2786 i = GET_IW_R_IMM5 (opcode); 2787 break; 2788 case iw_F3X6L5_type: 2789 i = GET_IW_F3X6L5_IMM5 (opcode); 2790 break; 2791 default: 2792 bad_opcode (op); 2793 } 2794 reg_base = nios2_control_regs (); 2795 (*info->fprintf_func) (info->stream, "%s", reg_base[i].name); 2796 break; 2797 2798 case 'd': 2799 reg_base = nios2_regs; 2800 switch (op->format) 2801 { 2802 case iw_r_type: 2803 i = GET_IW_R_C (opcode); 2804 break; 2805 case iw_custom_type: 2806 i = GET_IW_CUSTOM_C (opcode); 2807 if (GET_IW_CUSTOM_READC (opcode) == 0) 2808 reg_base = nios2_coprocessor_regs (); 2809 break; 2810 case iw_F3X6L5_type: 2811 case iw_F3X6_type: 2812 i = GET_IW_F3X6L5_C (opcode); 2813 break; 2814 case iw_F3X8_type: 2815 i = GET_IW_F3X8_C (opcode); 2816 if (GET_IW_F3X8_READC (opcode) == 0) 2817 reg_base = nios2_coprocessor_regs (); 2818 break; 2819 case iw_F2_type: 2820 i = GET_IW_F2_B (opcode); 2821 break; 2822 default: 2823 bad_opcode (op); 2824 } 2825 if (i < NUMREGNAMES) 2826 (*info->fprintf_func) (info->stream, "%s", reg_base[i].name); 2827 else 2828 (*info->fprintf_func) (info->stream, "unknown"); 2829 break; 2830 2831 case 's': 2832 reg_base = nios2_regs; 2833 switch (op->format) 2834 { 2835 case iw_r_type: 2836 i = GET_IW_R_A (opcode); 2837 break; 2838 case iw_i_type: 2839 i = GET_IW_I_A (opcode); 2840 break; 2841 case iw_custom_type: 2842 i = GET_IW_CUSTOM_A (opcode); 2843 if (GET_IW_CUSTOM_READA (opcode) == 0) 2844 reg_base = nios2_coprocessor_regs (); 2845 break; 2846 case iw_F2I16_type: 2847 i = GET_IW_F2I16_A (opcode); 2848 break; 2849 case iw_F2X4I12_type: 2850 i = GET_IW_F2X4I12_A (opcode); 2851 break; 2852 case iw_F1X4I12_type: 2853 i = GET_IW_F1X4I12_A (opcode); 2854 break; 2855 case iw_F1X4L17_type: 2856 i = GET_IW_F1X4L17_A (opcode); 2857 break; 2858 case iw_F3X6L5_type: 2859 case iw_F3X6_type: 2860 i = GET_IW_F3X6L5_A (opcode); 2861 break; 2862 case iw_F2X6L10_type: 2863 i = GET_IW_F2X6L10_A (opcode); 2864 break; 2865 case iw_F3X8_type: 2866 i = GET_IW_F3X8_A (opcode); 2867 if (GET_IW_F3X8_READA (opcode) == 0) 2868 reg_base = nios2_coprocessor_regs (); 2869 break; 2870 case iw_F1X1_type: 2871 i = GET_IW_F1X1_A (opcode); 2872 break; 2873 case iw_F1I5_type: 2874 i = 27; /* Implicit stack pointer reference. */ 2875 break; 2876 case iw_F2_type: 2877 i = GET_IW_F2_A (opcode); 2878 break; 2879 default: 2880 bad_opcode (op); 2881 } 2882 if (i < NUMREGNAMES) 2883 (*info->fprintf_func) (info->stream, "%s", reg_base[i].name); 2884 else 2885 (*info->fprintf_func) (info->stream, "unknown"); 2886 break; 2887 2888 case 't': 2889 reg_base = nios2_regs; 2890 switch (op->format) 2891 { 2892 case iw_r_type: 2893 i = GET_IW_R_B (opcode); 2894 break; 2895 case iw_i_type: 2896 i = GET_IW_I_B (opcode); 2897 break; 2898 case iw_custom_type: 2899 i = GET_IW_CUSTOM_B (opcode); 2900 if (GET_IW_CUSTOM_READB (opcode) == 0) 2901 reg_base = nios2_coprocessor_regs (); 2902 break; 2903 case iw_F2I16_type: 2904 i = GET_IW_F2I16_B (opcode); 2905 break; 2906 case iw_F2X4I12_type: 2907 i = GET_IW_F2X4I12_B (opcode); 2908 break; 2909 case iw_F3X6L5_type: 2910 case iw_F3X6_type: 2911 i = GET_IW_F3X6L5_B (opcode); 2912 break; 2913 case iw_F2X6L10_type: 2914 i = GET_IW_F2X6L10_B (opcode); 2915 break; 2916 case iw_F3X8_type: 2917 i = GET_IW_F3X8_B (opcode); 2918 if (GET_IW_F3X8_READB (opcode) == 0) 2919 reg_base = nios2_coprocessor_regs (); 2920 break; 2921 case iw_F1I5_type: 2922 i = GET_IW_F1I5_B (opcode); 2923 break; 2924 case iw_F2_type: 2925 i = GET_IW_F2_B (opcode); 2926 break; 2927 case iw_T1X1I6_type: 2928 i = 0; 2929 break; 2930 default: 2931 bad_opcode (op); 2932 } 2933 if (i < NUMREGNAMES) 2934 (*info->fprintf_func) (info->stream, "%s", reg_base[i].name); 2935 else 2936 (*info->fprintf_func) (info->stream, "unknown"); 2937 break; 2938 2939 case 'D': 2940 switch (op->format) 2941 { 2942 case iw_T1I7_type: 2943 i = GET_IW_T1I7_A3 (opcode); 2944 break; 2945 case iw_T2X1L3_type: 2946 i = GET_IW_T2X1L3_B3 (opcode); 2947 break; 2948 case iw_T2X1I3_type: 2949 i = GET_IW_T2X1I3_B3 (opcode); 2950 break; 2951 case iw_T3X1_type: 2952 i = GET_IW_T3X1_C3 (opcode); 2953 break; 2954 case iw_T2X3_type: 2955 if (op->num_args == 3) 2956 i = GET_IW_T2X3_A3 (opcode); 2957 else 2958 i = GET_IW_T2X3_B3 (opcode); 2959 break; 2960 default: 2961 bad_opcode (op); 2962 } 2963 i = nios2_r2_reg3_mappings[i]; 2964 (*info->fprintf_func) (info->stream, "%s", nios2_regs[i].name); 2965 break; 2966 2967 case 'M': 2968 /* 6-bit unsigned immediate with no shift. */ 2969 switch (op->format) 2970 { 2971 case iw_T1X1I6_type: 2972 i = GET_IW_T1X1I6_IMM6 (opcode); 2973 break; 2974 default: 2975 bad_opcode (op); 2976 } 2977 (*info->fprintf_func) (info->stream, "%ld", i); 2978 break; 2979 2980 case 'N': 2981 /* 6-bit unsigned immediate with 2-bit shift. */ 2982 switch (op->format) 2983 { 2984 case iw_T1X1I6_type: 2985 i = GET_IW_T1X1I6_IMM6 (opcode) << 2; 2986 break; 2987 default: 2988 bad_opcode (op); 2989 } 2990 (*info->fprintf_func) (info->stream, "%ld", i); 2991 break; 2992 2993 case 'S': 2994 switch (op->format) 2995 { 2996 case iw_T1I7_type: 2997 i = GET_IW_T1I7_A3 (opcode); 2998 break; 2999 case iw_T2I4_type: 3000 i = GET_IW_T2I4_A3 (opcode); 3001 break; 3002 case iw_T2X1L3_type: 3003 i = GET_IW_T2X1L3_A3 (opcode); 3004 break; 3005 case iw_T2X1I3_type: 3006 i = GET_IW_T2X1I3_A3 (opcode); 3007 break; 3008 case iw_T3X1_type: 3009 i = GET_IW_T3X1_A3 (opcode); 3010 break; 3011 case iw_T2X3_type: 3012 i = GET_IW_T2X3_A3 (opcode); 3013 break; 3014 case iw_T1X1I6_type: 3015 i = GET_IW_T1X1I6_A3 (opcode); 3016 break; 3017 default: 3018 bad_opcode (op); 3019 } 3020 i = nios2_r2_reg3_mappings[i]; 3021 (*info->fprintf_func) (info->stream, "%s", nios2_regs[i].name); 3022 break; 3023 3024 case 'T': 3025 switch (op->format) 3026 { 3027 case iw_T2I4_type: 3028 i = GET_IW_T2I4_B3 (opcode); 3029 break; 3030 case iw_T3X1_type: 3031 i = GET_IW_T3X1_B3 (opcode); 3032 break; 3033 case iw_T2X3_type: 3034 i = GET_IW_T2X3_B3 (opcode); 3035 break; 3036 default: 3037 bad_opcode (op); 3038 } 3039 i = nios2_r2_reg3_mappings[i]; 3040 (*info->fprintf_func) (info->stream, "%s", nios2_regs[i].name); 3041 break; 3042 3043 case 'i': 3044 /* 16-bit signed immediate. */ 3045 switch (op->format) 3046 { 3047 case iw_i_type: 3048 i = (signed) (GET_IW_I_IMM16 (opcode) << 16) >> 16; 3049 break; 3050 case iw_F2I16_type: 3051 i = (signed) (GET_IW_F2I16_IMM16 (opcode) << 16) >> 16; 3052 break; 3053 default: 3054 bad_opcode (op); 3055 } 3056 (*info->fprintf_func) (info->stream, "%ld", i); 3057 break; 3058 3059 case 'I': 3060 /* 12-bit signed immediate. */ 3061 switch (op->format) 3062 { 3063 case iw_F2X4I12_type: 3064 i = (signed) (GET_IW_F2X4I12_IMM12 (opcode) << 20) >> 20; 3065 break; 3066 case iw_F1X4I12_type: 3067 i = (signed) (GET_IW_F1X4I12_IMM12 (opcode) << 20) >> 20; 3068 break; 3069 default: 3070 bad_opcode (op); 3071 } 3072 (*info->fprintf_func) (info->stream, "%ld", i); 3073 break; 3074 3075 case 'u': 3076 /* 16-bit unsigned immediate. */ 3077 switch (op->format) 3078 { 3079 case iw_i_type: 3080 i = GET_IW_I_IMM16 (opcode); 3081 break; 3082 case iw_F2I16_type: 3083 i = GET_IW_F2I16_IMM16 (opcode); 3084 break; 3085 default: 3086 bad_opcode (op); 3087 } 3088 (*info->fprintf_func) (info->stream, "%ld", i); 3089 break; 3090 3091 case 'U': 3092 /* 7-bit unsigned immediate with 2-bit shift. */ 3093 switch (op->format) 3094 { 3095 case iw_T1I7_type: 3096 i = GET_IW_T1I7_IMM7 (opcode) << 2; 3097 break; 3098 case iw_X1I7_type: 3099 i = GET_IW_X1I7_IMM7 (opcode) << 2; 3100 break; 3101 default: 3102 bad_opcode (op); 3103 } 3104 (*info->fprintf_func) (info->stream, "%ld", i); 3105 break; 3106 3107 case 'V': 3108 /* 5-bit unsigned immediate with 2-bit shift. */ 3109 switch (op->format) 3110 { 3111 case iw_F1I5_type: 3112 i = GET_IW_F1I5_IMM5 (opcode) << 2; 3113 break; 3114 default: 3115 bad_opcode (op); 3116 } 3117 (*info->fprintf_func) (info->stream, "%ld", i); 3118 break; 3119 3120 case 'W': 3121 /* 4-bit unsigned immediate with 2-bit shift. */ 3122 switch (op->format) 3123 { 3124 case iw_T2I4_type: 3125 i = GET_IW_T2I4_IMM4 (opcode) << 2; 3126 break; 3127 case iw_L5I4X1_type: 3128 i = GET_IW_L5I4X1_IMM4 (opcode) << 2; 3129 break; 3130 default: 3131 bad_opcode (op); 3132 } 3133 (*info->fprintf_func) (info->stream, "%ld", i); 3134 break; 3135 3136 case 'X': 3137 /* 4-bit unsigned immediate with 1-bit shift. */ 3138 switch (op->format) 3139 { 3140 case iw_T2I4_type: 3141 i = GET_IW_T2I4_IMM4 (opcode) << 1; 3142 break; 3143 default: 3144 bad_opcode (op); 3145 } 3146 (*info->fprintf_func) (info->stream, "%ld", i); 3147 break; 3148 3149 case 'Y': 3150 /* 4-bit unsigned immediate without shift. */ 3151 switch (op->format) 3152 { 3153 case iw_T2I4_type: 3154 i = GET_IW_T2I4_IMM4 (opcode); 3155 break; 3156 default: 3157 bad_opcode (op); 3158 } 3159 (*info->fprintf_func) (info->stream, "%ld", i); 3160 break; 3161 3162 case 'o': 3163 /* 16-bit signed immediate address offset. */ 3164 switch (op->format) 3165 { 3166 case iw_i_type: 3167 i = (signed) (GET_IW_I_IMM16 (opcode) << 16) >> 16; 3168 break; 3169 case iw_F2I16_type: 3170 i = (signed) (GET_IW_F2I16_IMM16 (opcode) << 16) >> 16; 3171 break; 3172 default: 3173 bad_opcode (op); 3174 } 3175 address = address + 4 + i; 3176 (*info->print_address_func) (address, info); 3177 break; 3178 3179 case 'O': 3180 /* 10-bit signed address offset with 1-bit shift. */ 3181 switch (op->format) 3182 { 3183 case iw_I10_type: 3184 i = (signed) (GET_IW_I10_IMM10 (opcode) << 22) >> 21; 3185 break; 3186 default: 3187 bad_opcode (op); 3188 } 3189 address = address + 2 + i; 3190 (*info->print_address_func) (address, info); 3191 break; 3192 3193 case 'P': 3194 /* 7-bit signed address offset with 1-bit shift. */ 3195 switch (op->format) 3196 { 3197 case iw_T1I7_type: 3198 i = (signed) (GET_IW_T1I7_IMM7 (opcode) << 25) >> 24; 3199 break; 3200 default: 3201 bad_opcode (op); 3202 } 3203 address = address + 2 + i; 3204 (*info->print_address_func) (address, info); 3205 break; 3206 3207 case 'j': 3208 /* 5-bit unsigned immediate. */ 3209 switch (op->format) 3210 { 3211 case iw_r_type: 3212 i = GET_IW_R_IMM5 (opcode); 3213 break; 3214 case iw_F3X6L5_type: 3215 i = GET_IW_F3X6L5_IMM5 (opcode); 3216 break; 3217 case iw_F2X6L10_type: 3218 i = GET_IW_F2X6L10_MSB (opcode); 3219 break; 3220 case iw_X2L5_type: 3221 i = GET_IW_X2L5_IMM5 (opcode); 3222 break; 3223 default: 3224 bad_opcode (op); 3225 } 3226 (*info->fprintf_func) (info->stream, "%ld", i); 3227 break; 3228 3229 case 'k': 3230 /* Second 5-bit unsigned immediate field. */ 3231 switch (op->format) 3232 { 3233 case iw_F2X6L10_type: 3234 i = GET_IW_F2X6L10_LSB (opcode); 3235 break; 3236 default: 3237 bad_opcode (op); 3238 } 3239 (*info->fprintf_func) (info->stream, "%ld", i); 3240 break; 3241 3242 case 'l': 3243 /* 8-bit unsigned immediate. */ 3244 switch (op->format) 3245 { 3246 case iw_custom_type: 3247 i = GET_IW_CUSTOM_N (opcode); 3248 break; 3249 case iw_F3X8_type: 3250 i = GET_IW_F3X8_N (opcode); 3251 break; 3252 default: 3253 bad_opcode (op); 3254 } 3255 (*info->fprintf_func) (info->stream, "%lu", i); 3256 break; 3257 3258 case 'm': 3259 /* 26-bit unsigned immediate. */ 3260 switch (op->format) 3261 { 3262 case iw_j_type: 3263 i = GET_IW_J_IMM26 (opcode); 3264 break; 3265 case iw_L26_type: 3266 i = GET_IW_L26_IMM26 (opcode); 3267 break; 3268 default: 3269 bad_opcode (op); 3270 } 3271 /* This translates to an address because it's only used in call 3272 instructions. */ 3273 address = (address & 0xf0000000) | (i << 2); 3274 (*info->print_address_func) (address, info); 3275 break; 3276 3277 case 'e': 3278 /* Encoded enumeration for addi.n/subi.n. */ 3279 switch (op->format) 3280 { 3281 case iw_T2X1I3_type: 3282 i = nios2_r2_asi_n_mappings[GET_IW_T2X1I3_IMM3 (opcode)]; 3283 break; 3284 default: 3285 bad_opcode (op); 3286 } 3287 (*info->fprintf_func) (info->stream, "%lu", i); 3288 break; 3289 3290 case 'f': 3291 /* Encoded enumeration for slli.n/srli.n. */ 3292 switch (op->format) 3293 { 3294 case iw_T2X1L3_type: 3295 i = nios2_r2_shi_n_mappings[GET_IW_T2X1I3_IMM3 (opcode)]; 3296 break; 3297 default: 3298 bad_opcode (op); 3299 } 3300 (*info->fprintf_func) (info->stream, "%lu", i); 3301 break; 3302 3303 case 'g': 3304 /* Encoded enumeration for andi.n. */ 3305 switch (op->format) 3306 { 3307 case iw_T2I4_type: 3308 i = nios2_r2_andi_n_mappings[GET_IW_T2I4_IMM4 (opcode)]; 3309 break; 3310 default: 3311 bad_opcode (op); 3312 } 3313 (*info->fprintf_func) (info->stream, "%lu", i); 3314 break; 3315 3316 case 'h': 3317 /* Encoded enumeration for movi.n. */ 3318 switch (op->format) 3319 { 3320 case iw_T1I7_type: 3321 i = GET_IW_T1I7_IMM7 (opcode); 3322 if (i == 125) 3323 i = 0xff; 3324 else if (i == 126) 3325 i = -2; 3326 else if (i == 127) 3327 i = -1; 3328 break; 3329 default: 3330 bad_opcode (op); 3331 } 3332 (*info->fprintf_func) (info->stream, "%ld", i); 3333 break; 3334 3335 case 'R': 3336 { 3337 unsigned long reglist = 0; 3338 int dir = 1; 3339 int k, t; 3340 3341 switch (op->format) 3342 { 3343 case iw_F1X4L17_type: 3344 /* Encoding for ldwm/stwm. */ 3345 i = GET_IW_F1X4L17_REGMASK (opcode); 3346 if (GET_IW_F1X4L17_RS (opcode)) 3347 { 3348 reglist = ((i << 14) & 0x00ffc000); 3349 if (i & (1 << 10)) 3350 reglist |= (1 << 28); 3351 if (i & (1 << 11)) 3352 reglist |= (1 << 31); 3353 } 3354 else 3355 reglist = i << 2; 3356 dir = GET_IW_F1X4L17_REGMASK (opcode) ? 1 : -1; 3357 break; 3358 3359 case iw_L5I4X1_type: 3360 /* Encoding for push.n/pop.n. */ 3361 reglist |= (1 << 31); 3362 if (GET_IW_L5I4X1_FP (opcode)) 3363 reglist |= (1 << 28); 3364 if (GET_IW_L5I4X1_CS (opcode)) 3365 { 3366 int val = GET_IW_L5I4X1_REGRANGE (opcode); 3367 reglist |= nios2_r2_reg_range_mappings[val]; 3368 } 3369 dir = (op->match == MATCH_R2_POP_N ? 1 : -1); 3370 break; 3371 3372 default: 3373 bad_opcode (op); 3374 } 3375 3376 t = 0; 3377 (*info->fprintf_func) (info->stream, "{"); 3378 for (k = (dir == 1 ? 0 : 31); 3379 (dir == 1 && k < 32) || (dir == -1 && k >= 0); 3380 k += dir) 3381 if (reglist & (1 << k)) 3382 { 3383 if (t) 3384 (*info->fprintf_func) (info->stream, ","); 3385 else 3386 t++; 3387 (*info->fprintf_func) (info->stream, "%s", nios2_regs[k].name); 3388 } 3389 (*info->fprintf_func) (info->stream, "}"); 3390 break; 3391 } 3392 3393 case 'B': 3394 /* Base register and options for ldwm/stwm. */ 3395 switch (op->format) 3396 { 3397 case iw_F1X4L17_type: 3398 if (GET_IW_F1X4L17_ID (opcode) == 0) 3399 (*info->fprintf_func) (info->stream, "--"); 3400 3401 i = GET_IW_F1X4I12_A (opcode); 3402 (*info->fprintf_func) (info->stream, "(%s)", 3403 nios2_builtin_regs[i].name); 3404 3405 if (GET_IW_F1X4L17_ID (opcode)) 3406 (*info->fprintf_func) (info->stream, "++"); 3407 if (GET_IW_F1X4L17_WB (opcode)) 3408 (*info->fprintf_func) (info->stream, ",writeback"); 3409 if (GET_IW_F1X4L17_PC (opcode)) 3410 (*info->fprintf_func) (info->stream, ",ret"); 3411 break; 3412 default: 3413 bad_opcode (op); 3414 } 3415 break; 3416 3417 default: 3418 (*info->fprintf_func) (info->stream, "unknown"); 3419 break; 3420 } 3421 return 0; 3422} 3423 3424/* nios2_disassemble does all the work of disassembling a Nios II 3425 instruction opcode. */ 3426static int 3427nios2_disassemble (bfd_vma address, unsigned long opcode, 3428 disassemble_info *info) 3429{ 3430 const struct nios2_opcode *op; 3431 3432 info->bytes_per_line = INSNLEN; 3433 info->bytes_per_chunk = INSNLEN; 3434 info->display_endian = info->endian; 3435 info->insn_info_valid = 1; 3436 info->branch_delay_insns = 0; 3437 info->data_size = 0; 3438 info->insn_type = dis_nonbranch; 3439 info->target = 0; 3440 info->target2 = 0; 3441 3442 /* Find the major opcode and use this to disassemble 3443 the instruction and its arguments. */ 3444 op = nios2_find_opcode_hash (opcode, info->mach); 3445 3446 if (op != NULL) 3447 { 3448 const char *argstr = op->args; 3449 (*info->fprintf_func) (info->stream, "%s", op->name); 3450 if (argstr != NULL && *argstr != '\0') 3451 { 3452 (*info->fprintf_func) (info->stream, "\t"); 3453 while (*argstr != '\0') 3454 { 3455 nios2_print_insn_arg (argstr, opcode, address, info, op); 3456 ++argstr; 3457 } 3458 } 3459 /* Tell the caller how far to advance the program counter. */ 3460 info->bytes_per_chunk = op->size; 3461 return op->size; 3462 } 3463 else 3464 { 3465 /* Handle undefined instructions. */ 3466 info->insn_type = dis_noninsn; 3467 (*info->fprintf_func) (info->stream, "0x%lx", opcode); 3468 return INSNLEN; 3469 } 3470} 3471 3472 3473/* print_insn_nios2 is the main disassemble function for Nios II. 3474 The function diassembler(abfd) (source in disassemble.c) returns a 3475 pointer to this either print_insn_big_nios2 or 3476 print_insn_little_nios2, which in turn call this function when the 3477 bfd machine type is Nios II. print_insn_nios2 reads the 3478 instruction word at the address given, and prints the disassembled 3479 instruction on the stream info->stream using info->fprintf_func. */ 3480 3481static int 3482print_insn_nios2 (bfd_vma address, disassemble_info *info, 3483 enum bfd_endian endianness) 3484{ 3485 bfd_byte buffer[INSNLEN]; 3486 int status; 3487 3488 status = (*info->read_memory_func) (address, buffer, INSNLEN, info); 3489 if (status == 0) 3490 { 3491 unsigned long insn; 3492 if (endianness == BFD_ENDIAN_BIG) 3493 insn = (unsigned long) bfd_getb32 (buffer); 3494 else 3495 insn = (unsigned long) bfd_getl32 (buffer); 3496 return nios2_disassemble (address, insn, info); 3497 } 3498 3499 /* We might have a 16-bit R2 instruction at the end of memory. Try that. */ 3500 if (info->mach == bfd_mach_nios2r2) 3501 { 3502 status = (*info->read_memory_func) (address, buffer, 2, info); 3503 if (status == 0) 3504 { 3505 unsigned long insn; 3506 if (endianness == BFD_ENDIAN_BIG) 3507 insn = (unsigned long) bfd_getb16 (buffer); 3508 else 3509 insn = (unsigned long) bfd_getl16 (buffer); 3510 return nios2_disassemble (address, insn, info); 3511 } 3512 } 3513 3514 /* If we got here, we couldn't read anything. */ 3515 (*info->memory_error_func) (status, address, info); 3516 return -1; 3517} 3518 3519/* These two functions are the main entry points, accessed from 3520 disassemble.c. */ 3521int 3522print_insn_big_nios2 (bfd_vma address, disassemble_info *info) 3523{ 3524 return print_insn_nios2 (address, info, BFD_ENDIAN_BIG); 3525} 3526 3527int 3528print_insn_little_nios2 (bfd_vma address, disassemble_info *info) 3529{ 3530 return print_insn_nios2 (address, info, BFD_ENDIAN_LITTLE); 3531}