Home | History | Annotate | Line # | Download | only in opcodes
      1      1.1  christos /* NDS32-specific support for 32-bit ELF.
      2  1.1.1.9  christos    Copyright (C) 2012-2026 Free Software Foundation, Inc.
      3      1.1  christos    Contributed by Andes Technology Corporation.
      4      1.1  christos 
      5      1.1  christos    This file is part of BFD, the Binary File Descriptor library.
      6      1.1  christos 
      7      1.1  christos    This program is free software; you can redistribute it and/or modify
      8      1.1  christos    it under the terms of the GNU General Public License as published by
      9      1.1  christos    the Free Software Foundation; either version 3 of the License, or
     10      1.1  christos    (at your option) any later version.
     11      1.1  christos 
     12      1.1  christos    This program is distributed in the hope that it will be useful,
     13      1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14      1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15      1.1  christos    GNU General Public License for more details.
     16      1.1  christos 
     17      1.1  christos    You should have received a copy of the GNU General Public License
     18      1.1  christos    along with this program; if not, write to the Free Software
     19      1.1  christos    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
     20      1.1  christos    02110-1301, USA.  */
     21      1.1  christos 
     22      1.1  christos 
     23  1.1.1.4  christos #include "sysdep.h"
     24      1.1  christos 
     25  1.1.1.6  christos #include <stdint.h>
     26      1.1  christos #include <assert.h>
     27      1.1  christos 
     28      1.1  christos #include "safe-ctype.h"
     29      1.1  christos #include "libiberty.h"
     30      1.1  christos #include "hashtab.h"
     31      1.1  christos #include "bfd.h"
     32  1.1.1.4  christos #include "opintl.h"
     33      1.1  christos 
     34  1.1.1.5  christos #include <config.h>
     35  1.1.1.5  christos #include <stdlib.h>
     36  1.1.1.5  christos #include <string.h>
     37  1.1.1.5  christos 
     38      1.1  christos #include "opcode/nds32.h"
     39      1.1  christos #include "nds32-asm.h"
     40      1.1  christos 
     41      1.1  christos /* There at at most MAX_LEX_NUM lexical elements in a syntax.  */
     42      1.1  christos #define MAX_LEX_NUM		32
     43      1.1  christos /* A operand in syntax string should be at most this long.  */
     44      1.1  christos #define MAX_LEX_LEN		64
     45      1.1  christos /* The max length of a keyword can be.  */
     46      1.1  christos #define MAX_KEYWORD_LEN		32
     47      1.1  christos /* This LEX is a plain char or operand.  */
     48      1.1  christos #define IS_LEX_CHAR(c)		(((c) >> 7) == 0)
     49  1.1.1.5  christos #define LEX_SET_FIELD(k,c)	((c) | (((k) + 1) << 8))
     50  1.1.1.5  christos #define LEX_GET_FIELD(k,c)	(nds32_field_table[k])[((c) & 0xff)]
     51      1.1  christos /* Get the char in this lexical element.  */
     52      1.1  christos #define LEX_CHAR(c)		((c) & 0xff)
     53      1.1  christos 
     54      1.1  christos #define USRIDX(group, usr)	((group) | ((usr) << 5))
     55      1.1  christos #define SRIDX(major, minor, ext) \
     56      1.1  christos                            (((major) << 7) | ((minor) << 3) | (ext))
     57      1.1  christos 
     58      1.1  christos static int parse_re (struct nds32_asm_desc *, struct nds32_asm_insn *,
     59      1.1  christos 		     char **, int64_t *);
     60      1.1  christos static int parse_re2 (struct nds32_asm_desc *, struct nds32_asm_insn *,
     61      1.1  christos 		      char **, int64_t *);
     62      1.1  christos static int parse_fe5 (struct nds32_asm_desc *, struct nds32_asm_insn *,
     63      1.1  christos 		      char **, int64_t *);
     64      1.1  christos static int parse_pi5 (struct nds32_asm_desc *, struct nds32_asm_insn *,
     65      1.1  christos 		      char **, int64_t *);
     66  1.1.1.5  christos static int parse_aext_reg (struct nds32_asm_desc *, char **,
     67  1.1.1.5  christos 			   int *, int);
     68      1.1  christos static int parse_a30b20 (struct nds32_asm_desc *, struct nds32_asm_insn *,
     69      1.1  christos 			 char **, int64_t *);
     70      1.1  christos static int parse_rt21 (struct nds32_asm_desc *, struct nds32_asm_insn *,
     71      1.1  christos 		       char **, int64_t *);
     72      1.1  christos static int parse_rte_start (struct nds32_asm_desc *, struct nds32_asm_insn *,
     73      1.1  christos 			    char **, int64_t *);
     74      1.1  christos static int parse_rte_end (struct nds32_asm_desc *, struct nds32_asm_insn *,
     75      1.1  christos 			  char **, int64_t *);
     76      1.1  christos static int parse_rte69_start (struct nds32_asm_desc *, struct nds32_asm_insn *,
     77      1.1  christos 			      char **, int64_t *);
     78      1.1  christos static int parse_rte69_end (struct nds32_asm_desc *, struct nds32_asm_insn *,
     79      1.1  christos 			    char **, int64_t *);
     80      1.1  christos static int parse_im5_ip (struct nds32_asm_desc *, struct nds32_asm_insn *,
     81      1.1  christos 			 char **, int64_t *);
     82      1.1  christos static int parse_im5_mr (struct nds32_asm_desc *, struct nds32_asm_insn *,
     83      1.1  christos 			 char **, int64_t *);
     84      1.1  christos static int parse_im6_ip (struct nds32_asm_desc *, struct nds32_asm_insn *,
     85      1.1  christos 			 char **, int64_t *);
     86      1.1  christos static int parse_im6_iq (struct nds32_asm_desc *, struct nds32_asm_insn *,
     87      1.1  christos 			 char **, int64_t *);
     88      1.1  christos static int parse_im6_mr (struct nds32_asm_desc *, struct nds32_asm_insn *,
     89      1.1  christos 			 char **, int64_t *);
     90      1.1  christos static int parse_im6_ms (struct nds32_asm_desc *, struct nds32_asm_insn *,
     91      1.1  christos 			 char **, int64_t *);
     92      1.1  christos 
     93      1.1  christos /* These are operand prefixes for input/output semantic.
     94      1.1  christos 
     95      1.1  christos      %   input
     96      1.1  christos      =   output
     97      1.1  christos      &   both
     98      1.1  christos      {}  optional operand
     99      1.1  christos 
    100      1.1  christos    Field table for operands and bit-fields.  */
    101      1.1  christos 
    102  1.1.1.6  christos const field_t nds32_operand_fields[] =
    103      1.1  christos {
    104      1.1  christos   {"rt",	20, 5, 0, HW_GPR, NULL},
    105      1.1  christos   {"ra",	15, 5, 0, HW_GPR, NULL},
    106      1.1  christos   {"rb",	10, 5, 0, HW_GPR, NULL},
    107      1.1  christos   {"rd",	5, 5, 0, HW_GPR, NULL},
    108      1.1  christos   {"re",	10, 5, 0, HW_GPR, parse_re},	/* lmw smw lmwa smwa.  */
    109      1.1  christos   {"fst",	20, 5, 0, HW_FSR, NULL},
    110      1.1  christos   {"fsa",	15, 5, 0, HW_FSR, NULL},
    111      1.1  christos   {"fsb",	10, 5, 0, HW_FSR, NULL},
    112      1.1  christos   {"fdt",	20, 5, 0, HW_FDR, NULL},
    113      1.1  christos   {"fda",	15, 5, 0, HW_FDR, NULL},
    114      1.1  christos   {"fdb",	10, 5, 0, HW_FDR, NULL},
    115      1.1  christos   {"cprt",	20, 5, 0, HW_CPR, NULL},
    116      1.1  christos   {"cp",	13, 2, 0, HW_CP, NULL},
    117      1.1  christos   {"sh",	5, 5, 0, HW_UINT, NULL},	/* sh in ALU instructions.  */
    118      1.1  christos   {"sv",	8, 2, 0, HW_UINT, NULL},	/* sv in MEM instructions.  */
    119      1.1  christos   {"dt",	21, 1, 0, HW_DXR, NULL},
    120      1.1  christos   {"usr",	10, 10, 0, HW_USR, NULL},	/* User Special Registers.  */
    121      1.1  christos   {"sr",	10, 10, 0, HW_SR, NULL},	/* System Registers.  */
    122      1.1  christos   {"ridx",	10, 10, 0, HW_UINT, NULL},	/* Raw value for mfusr/mfsr.  */
    123      1.1  christos   {"enb4",	6, 4, 0, HW_UINT, NULL},	/* Enable4 for LSMW.  */
    124      1.1  christos   {"swid",	5, 15, 0, HW_UINT, NULL},
    125      1.1  christos   {"stdby_st",	5, 2, 0, HW_STANDBY_ST, NULL},
    126      1.1  christos   {"tlbop_st",	5, 5, 0, HW_TLBOP_ST, NULL},
    127      1.1  christos   {"tlbop_stx",	5, 5, 0, HW_UINT, NULL},
    128      1.1  christos   {"cctl_st0",	5, 5, 0, HW_CCTL_ST0, NULL},
    129      1.1  christos   {"cctl_st1",	5, 5, 0, HW_CCTL_ST1, NULL},
    130      1.1  christos   {"cctl_st2",	5, 5, 0, HW_CCTL_ST2, NULL},
    131      1.1  christos   {"cctl_st3",	5, 5, 0, HW_CCTL_ST3, NULL},
    132      1.1  christos   {"cctl_st4",	5, 5, 0, HW_CCTL_ST4, NULL},
    133      1.1  christos   {"cctl_st5",	5, 5, 0, HW_CCTL_ST5, NULL},
    134      1.1  christos   {"cctl_stx",	5, 5, 0, HW_UINT, NULL},
    135      1.1  christos   {"cctl_lv",	10, 1, 0, HW_CCTL_LV, NULL},
    136      1.1  christos   {"msync_st",	5, 3, 0, HW_MSYNC_ST, NULL},
    137      1.1  christos   {"msync_stx",	5, 3, 0, HW_UINT, NULL},
    138      1.1  christos   {"dpref_st",	20, 4, 0, HW_DPREF_ST, NULL},
    139      1.1  christos   {"rt5",	5, 5, 0, HW_GPR, NULL},
    140      1.1  christos   {"ra5",	0, 5, 0, HW_GPR, NULL},
    141      1.1  christos   {"rt4",	5, 4, 0, HW_GPR, NULL},
    142      1.1  christos   {"rt3",	6, 3, 0, HW_GPR, NULL},
    143      1.1  christos   {"rt38",	8, 3, 0, HW_GPR, NULL},	/* rt3 used in 38 form.  */
    144      1.1  christos   {"ra3",	3, 3, 0, HW_GPR, NULL},
    145      1.1  christos   {"rb3",	0, 3, 0, HW_GPR, NULL},
    146      1.1  christos   {"rt5e",	4, 4, 1, HW_GPR, NULL},	/* for movd44.  */
    147      1.1  christos   {"ra5e",	0, 4, 1, HW_GPR, NULL},	/* for movd44.  */
    148      1.1  christos   {"re2",	5, 2, 0, HW_GPR, parse_re2},	/* re in push25/pop25.  */
    149      1.1  christos   {"fe5",	0, 5, 2, HW_UINT, parse_fe5},	/* imm5u in lwi45.fe.  */
    150      1.1  christos   {"pi5",	0, 5, 0, HW_UINT, parse_pi5},	/* imm5u in movpi45.  */
    151      1.1  christos   {"abdim",	2, 3, 0, HW_ABDIM, NULL},	/* Flags for LSMW.  */
    152      1.1  christos   {"abm",	2, 3, 0, HW_ABM, NULL},	/* Flags for LSMWZB.  */
    153      1.1  christos   {"dtiton",	8, 2, 0, HW_DTITON, NULL},
    154      1.1  christos   {"dtitoff",	8, 2, 0, HW_DTITOFF, NULL},
    155      1.1  christos 
    156      1.1  christos   {"i5s",	0, 5, 0, HW_INT, NULL},
    157      1.1  christos   {"i10s",	0, 10, 0, HW_INT, NULL},
    158      1.1  christos   {"i15s",	0, 15, 0, HW_INT, NULL},
    159      1.1  christos   {"i19s",	0, 19, 0, HW_INT, NULL},
    160      1.1  christos   {"i20s",	0, 20, 0, HW_INT, NULL},
    161      1.1  christos   {"i8s1",	0, 8, 1, HW_INT, NULL},
    162      1.1  christos   {"i11br3",	8, 11, 0, HW_INT, NULL},
    163      1.1  christos   {"i14s1",	0, 14, 1, HW_INT, NULL},
    164      1.1  christos   {"i15s1",	0, 15, 1, HW_INT, NULL},
    165      1.1  christos   {"i16s1",	0, 16, 1, HW_INT, NULL},
    166  1.1.1.5  christos   {"i16u5",	5, 16, 0, HW_UINT, NULL},
    167      1.1  christos   {"i18s1",	0, 18, 1, HW_INT, NULL},
    168      1.1  christos   {"i24s1",	0, 24, 1, HW_INT, NULL},
    169      1.1  christos   {"i8s2",	0, 8, 2, HW_INT, NULL},
    170      1.1  christos   {"i12s2",	0, 12, 2, HW_INT, NULL},
    171      1.1  christos   {"i15s2",	0, 15, 2, HW_INT, NULL},
    172      1.1  christos   {"i17s2",	0, 17, 2, HW_INT, NULL},
    173      1.1  christos   {"i19s2",	0, 19, 2, HW_INT, NULL},
    174      1.1  christos   {"i3u",	0, 3, 0, HW_UINT, NULL},
    175      1.1  christos   {"i5u",	0, 5, 0, HW_UINT, NULL},
    176      1.1  christos   {"ib5u",	10, 5, 0, HW_UINT, NULL},	/* imm5 field in ALU.  */
    177      1.1  christos   {"ib5s",	10, 5, 0, HW_INT, NULL},	/* imm5 field in ALU.  */
    178      1.1  christos   {"ia3u",	3, 3, 0, HW_UINT, NULL},	/* for bmski33, fexti33.  */
    179      1.1  christos   {"i8u",	0, 8, 0, HW_UINT, NULL},
    180      1.1  christos   {"ib8u",	7, 8, 0, HW_UINT, NULL},	/* for ffbi.  */
    181      1.1  christos   {"i15u",	0, 15, 0, HW_UINT, NULL},
    182      1.1  christos   {"i20u",	0, 20, 0, HW_UINT, NULL},
    183      1.1  christos   {"i3u1",	0, 3, 1, HW_UINT, NULL},
    184      1.1  christos   {"i9u1",	0, 9, 1, HW_UINT, NULL},
    185      1.1  christos   {"i3u2",	0, 3, 2, HW_UINT, NULL},
    186      1.1  christos   {"i6u2",	0, 6, 2, HW_UINT, NULL},
    187      1.1  christos   {"i7u2",	0, 7, 2, HW_UINT, NULL},
    188      1.1  christos   {"i5u3",	0, 5, 3, HW_UINT, NULL},	/* for pop25/pop25.  */
    189      1.1  christos   {"i15s3",	0, 15, 3, HW_INT, NULL},	/* for dprefi.d.  */
    190  1.1.1.5  christos   {"ib4u",	10, 4, 0, HW_UINT, NULL},	/* imm5 field in ALU.  */
    191  1.1.1.5  christos   {"ib2u",	10, 2, 0, HW_UINT, NULL},	/* imm5 field in ALU.  */
    192      1.1  christos 
    193      1.1  christos   {"a_rt",	15, 5, 0, HW_GPR, NULL},  /* for audio-extension.  */
    194      1.1  christos   {"a_ru",	10, 5, 0, HW_GPR, NULL},  /* for audio-extension.  */
    195      1.1  christos   {"a_dx",	9, 1, 0, HW_DXR, NULL},  /* for audio-extension.  */
    196      1.1  christos   {"a_a30",	16, 4, 0, HW_GPR, parse_a30b20},  /* for audio-extension.  */
    197      1.1  christos   {"a_b20",	12, 4, 0, HW_GPR, parse_a30b20},  /* for audio-extension.  */
    198      1.1  christos   {"a_rt21",	5, 7, 0, HW_GPR, parse_rt21},  /* for audio-extension.  */
    199      1.1  christos   {"a_rte",	5, 7, 0, HW_GPR, parse_rte_start},  /* for audio-extension.  */
    200      1.1  christos   {"a_rte1",	5, 7, 0, HW_GPR, parse_rte_end},  /* for audio-extension.  */
    201      1.1  christos   {"a_rte69",	6, 4, 0, HW_GPR, parse_rte69_start},  /* for audio-extension.  */
    202      1.1  christos   {"a_rte69_1",	6, 4, 0, HW_GPR, parse_rte69_end},  /* for audio-extension.  */
    203      1.1  christos   {"dhy",	5, 2, 0, HW_AEXT_ACC, NULL},  /* for audio-extension.  */
    204      1.1  christos   {"dxh",	15, 2, 0, HW_AEXT_ACC, NULL},  /* for audio-extension.  */
    205      1.1  christos   {"aridx",	0, 5, 0, HW_AEXT_ARIDX, NULL},  /* for audio-extension.  */
    206      1.1  christos   {"aridx2",	0, 5, 0, HW_AEXT_ARIDX2, NULL},  /* for audio-extension.  */
    207      1.1  christos   {"aridxi",	16, 4, 0, HW_AEXT_ARIDXI, NULL},  /* for audio-extension.  */
    208  1.1.1.5  christos   {"aridxi_mx",	16, 4, 0, HW_AEXT_ARIDXI_MX, NULL},  /* for audio-extension.  */
    209  1.1.1.5  christos   {"imm16s",	0, 16, 0, HW_INT, NULL},  /* for audio-extension.  */
    210  1.1.1.5  christos   {"imm16u",	0, 16, 0, HW_UINT, NULL},  /* for audio-extension.  */
    211      1.1  christos   {"im5_i",	0, 5, 0, HW_AEXT_IM_I, parse_im5_ip},  /* for audio-extension.  */
    212      1.1  christos   {"im5_m",	0, 5, 0, HW_AEXT_IM_M, parse_im5_mr},  /* for audio-extension.  */
    213      1.1  christos   {"im6_ip",	0, 2, 0, HW_AEXT_IM_I, parse_im6_ip},  /* for audio-extension.  */
    214      1.1  christos   {"im6_iq",	0, 2, 0, HW_AEXT_IM_I, parse_im6_iq},  /* for audio-extension.  */
    215      1.1  christos   {"im6_mr",	2, 2, 0, HW_AEXT_IM_M, parse_im6_mr},  /* for audio-extension.  */
    216      1.1  christos   {"im6_ms",	4, 2, 0, HW_AEXT_IM_M, parse_im6_ms},  /* for audio-extension.  */
    217      1.1  christos   {"cp45",	4, 2, 0, HW_CP, NULL},  /* for cop-extension.  */
    218      1.1  christos   {"i12u",	8, 12, 0, HW_UINT, NULL},  /* for cop-extension.  */
    219      1.1  christos   {"cpi19",	6, 19, 0, HW_UINT, NULL},  /* for cop-extension.  */
    220      1.1  christos   {NULL, 0, 0, 0, 0, NULL}
    221      1.1  christos };
    222      1.1  christos 
    223  1.1.1.3  christos #define DEF_REG(r)		(N32_BIT (r))
    224  1.1.1.3  christos #define USE_REG(r)		(N32_BIT (r))
    225      1.1  christos #define RT(r)			(r << 20)
    226      1.1  christos #define RA(r)			(r << 15)
    227      1.1  christos #define RB(r)			(r << 10)
    228      1.1  christos #define RA5(r)			(r)
    229      1.1  christos 
    230      1.1  christos struct nds32_opcode nds32_opcodes[] =
    231      1.1  christos {
    232      1.1  christos   /* opc6_encoding table OPC_6.  */
    233      1.1  christos   {"lbi", "=rt,[%ra{+%i15s}]",		OP6 (LBI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    234      1.1  christos   {"lhi", "=rt,[%ra{+%i15s1}]",		OP6 (LHI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    235      1.1  christos   {"lwi", "=rt,[%ra{+%i15s2}]",		OP6 (LWI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    236      1.1  christos   {"lbi.bi", "=rt,[%ra],%i15s",		OP6 (LBI_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    237      1.1  christos   {"lhi.bi", "=rt,[%ra],%i15s1",	OP6 (LHI_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    238      1.1  christos   {"lwi.bi", "=rt,[%ra],%i15s2",	OP6 (LWI_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    239      1.1  christos   {"sbi", "%rt,[%ra{+%i15s}]",		OP6 (SBI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    240      1.1  christos   {"shi", "%rt,[%ra{+%i15s1}]",		OP6 (SHI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    241      1.1  christos   {"swi", "%rt,[%ra{+%i15s2}]",		OP6 (SWI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    242      1.1  christos   {"sbi.bi", "%rt,[%ra],%i15s",		OP6 (SBI_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    243      1.1  christos   {"shi.bi", "%rt,[%ra],%i15s1",	OP6 (SHI_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    244      1.1  christos   {"swi.bi", "%rt,[%ra],%i15s2",	OP6 (SWI_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    245      1.1  christos 
    246      1.1  christos   {"lbsi", "=rt,[%ra{+%i15s}]",		OP6 (LBSI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    247      1.1  christos   {"lhsi", "=rt,[%ra{+%i15s1}]",	OP6 (LHSI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    248      1.1  christos   {"lbsi.bi", "=rt,[%ra],%i15s",	OP6 (LBSI_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    249      1.1  christos   {"lhsi.bi", "=rt,[%ra],%i15s1",	OP6 (LHSI_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    250      1.1  christos   {"movi", "=rt,%i20s",		OP6 (MOVI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    251      1.1  christos   {"sethi", "=rt,%i20u",	OP6 (SETHI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    252      1.1  christos   {"addi", "=rt,%ra,%i15s",	OP6 (ADDI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    253      1.1  christos   {"subri", "=rt,%ra,%i15s",	OP6 (SUBRI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    254      1.1  christos   {"andi", "=rt,%ra,%i15u",	OP6 (ANDI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    255      1.1  christos   {"xori", "=rt,%ra,%i15u",	OP6 (XORI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    256      1.1  christos   {"ori", "=rt,%ra,%i15u",	OP6 (ORI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    257      1.1  christos   {"slti", "=rt,%ra,%i15s",	OP6 (SLTI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    258      1.1  christos   {"sltsi", "=rt,%ra,%i15s",	OP6 (SLTSI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    259      1.1  christos   {"bitci", "=rt,%ra,%i15u",	OP6 (BITCI), 4, ATTR_V3, 0, NULL, 0, NULL},
    260      1.1  christos 
    261      1.1  christos   /* seg-DPREFI.  */
    262      1.1  christos   {"dprefi.w", "%dpref_st,[%ra{+%i15s2}]",	OP6 (DPREFI), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    263  1.1.1.3  christos   {"dprefi.d", "%dpref_st,[%ra{+%i15s3}]",	OP6 (DPREFI) | N32_BIT (24), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    264      1.1  christos   /* seg-LBGP.  */
    265      1.1  christos   {"lbi.gp", "=rt,[+%i19s]",	OP6 (LBGP), 4, ATTR (GPREL) | ATTR_V2UP, USE_REG (29), NULL, 0, NULL},
    266  1.1.1.3  christos   {"lbsi.gp", "=rt,[+%i19s]",	OP6 (LBGP) | N32_BIT (19), 4, ATTR (GPREL) | ATTR_V2UP, USE_REG (29), NULL, 0, NULL},
    267      1.1  christos   /* seg-LWC/0.  */
    268      1.1  christos   {"cplwi", "%cp,=cprt,[%ra{+%i12s2}]",		OP6 (LWC), 4, 0, 0, NULL, 0, NULL},
    269  1.1.1.3  christos   {"cplwi.bi", "%cp,=cprt,[%ra],%i12s2",	OP6 (LWC) | N32_BIT (12), 4, 0, 0, NULL, 0, NULL},
    270      1.1  christos   /* seg-SWC/0.  */
    271      1.1  christos   {"cpswi", "%cp,=cprt,[%ra{+%i12s2}]",		OP6 (SWC), 4, 0, 0, NULL, 0, NULL},
    272  1.1.1.3  christos   {"cpswi.bi", "%cp,=cprt,[%ra],%i12s2",	OP6 (SWC) | N32_BIT (12), 4, 0, 0, NULL, 0, NULL},
    273      1.1  christos   /* seg-LDC/0.  */
    274      1.1  christos   {"cpldi", "%cp,%cprt,[%ra{+%i12s2}]",		OP6 (LDC), 4, 0, 0, NULL, 0, NULL},
    275  1.1.1.3  christos   {"cpldi.bi", "%cp,%cprt,[%ra],%i12s2",	OP6 (LDC) | N32_BIT (12), 4, 0, 0, NULL, 0, NULL},
    276      1.1  christos   /* seg-SDC/0.  */
    277      1.1  christos   {"cpsdi", "%cp,%cprt,[%ra{+%i12s2}]",		OP6 (SDC), 4, 0, 0, NULL, 0, NULL},
    278  1.1.1.3  christos   {"cpsdi.bi", "%cp,%cprt,[%ra],%i12s2",	OP6 (SDC) | N32_BIT (12), 4, 0, 0, NULL, 0, NULL},
    279      1.1  christos   /* seg-LSMW.  */
    280      1.1  christos   {"lmw", "%abdim %rt,[%ra],%re{,%enb4}",	LSMW (LSMW), 4, ATTR_ALL, 0, NULL, 0, NULL},
    281      1.1  christos   {"lmwa", "%abdim %rt,[%ra],%re{,%enb4}",	LSMW (LSMWA), 4, ATTR_V3MEX_V2, 0, NULL, 0, NULL},
    282      1.1  christos   {"lmwzb", "%abm %rt,[%ra],%re{,%enb4}",	LSMW (LSMWZB), 4, ATTR (STR_EXT), 0, NULL, 0, NULL},
    283  1.1.1.3  christos   {"smw", "%abdim %rt,[%ra],%re{,%enb4}",	LSMW (LSMW) | N32_BIT (5), 4, ATTR_ALL, 0, NULL, 0, NULL},
    284  1.1.1.3  christos   {"smwa", "%abdim %rt,[%ra],%re{,%enb4}",	LSMW (LSMWA) | N32_BIT (5), 4, ATTR_V3MEX_V2, 0, NULL, 0, NULL},
    285  1.1.1.3  christos   {"smwzb", "%abm %rt,[%ra],%re{,%enb4}",	LSMW (LSMWZB) | N32_BIT (5), 4, ATTR (STR_EXT), 0, NULL, 0, NULL},
    286      1.1  christos   /* seg-HWGP.  */
    287      1.1  christos   {"lhi.gp", "=rt,[+%i18s1]",	OP6 (HWGP), 4, ATTR (GPREL) | ATTR_V2UP, USE_REG (29), NULL, 0, NULL},
    288      1.1  christos   {"lhsi.gp", "=rt,[+%i18s1]",	OP6 (HWGP) | (2 << 17), 4, ATTR (GPREL) | ATTR_V2UP, USE_REG (29), NULL, 0, NULL},
    289      1.1  christos   {"shi.gp", "%rt,[+%i18s1]",	OP6 (HWGP) | (4 << 17), 4, ATTR (GPREL) | ATTR_V2UP, USE_REG (29), NULL, 0, NULL},
    290      1.1  christos   {"lwi.gp", "=rt,[+%i17s2]",	OP6 (HWGP) | (6 << 17), 4, ATTR (GPREL) | ATTR_V2UP, USE_REG (29), NULL, 0, NULL},
    291      1.1  christos   {"swi.gp", "%rt,[+%i17s2]",	OP6 (HWGP) | (7 << 17), 4, ATTR (GPREL) | ATTR_V2UP, USE_REG (29), NULL, 0, NULL},
    292      1.1  christos 
    293      1.1  christos   /* seg-SBGP.  */
    294      1.1  christos   {"sbi.gp", "%rt,[+%i19s]",	OP6 (SBGP), 4, ATTR (GPREL) | ATTR_V2UP, USE_REG (29), NULL, 0, NULL},
    295  1.1.1.3  christos   {"addi.gp", "=rt,%i19s",	OP6 (SBGP) | N32_BIT (19), 4, ATTR (GPREL) | ATTR_V2UP, USE_REG (29), NULL, 0, NULL},
    296      1.1  christos   /* seg-JI.  */
    297      1.1  christos   {"j", "%i24s1",	OP6 (JI), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    298  1.1.1.3  christos   {"jal", "%i24s1",	OP6 (JI) | N32_BIT (24), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    299      1.1  christos   /* seg-JREG.  */
    300      1.1  christos   {"jr", "%rb",			JREG (JR), 4, ATTR (BRANCH) | ATTR_ALL, 0, NULL, 0, NULL},
    301      1.1  christos   {"jral", "%rt,%rb",		JREG (JRAL), 4, ATTR (BRANCH) | ATTR_ALL, 0, NULL, 0, NULL},
    302      1.1  christos   {"jrnez", "%rb",		JREG (JRNEZ), 4, ATTR (BRANCH) | ATTR_V3, 0, NULL, 0, NULL},
    303      1.1  christos   {"jralnez", "%rt,%rb",	JREG (JRALNEZ), 4, ATTR (BRANCH) | ATTR_V3, 0, NULL, 0, NULL},
    304      1.1  christos   {"ret", "%rb",		JREG (JR) | JREG_RET, 4, ATTR (BRANCH) | ATTR_ALL, 0, NULL, 0, NULL},
    305      1.1  christos   {"jral", "%rb",		JREG (JRAL) | RT (30), 4, ATTR (BRANCH) | ATTR_ALL, 0, NULL, 0, NULL},
    306      1.1  christos   {"jralnez", "%rb",		JREG (JRALNEZ) | RT (30), 4, ATTR (BRANCH) | ATTR_V3, 0, NULL, 0, NULL},
    307      1.1  christos   {"ret", "",			JREG (JR) | JREG_RET | RB (30), 4, ATTR (BRANCH) | ATTR_ALL, 0, NULL, 0, NULL},
    308      1.1  christos   {"jr", "%dtitoff %rb",	JREG (JR), 4, ATTR (BRANCH) | ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    309      1.1  christos   {"ret", "%dtitoff %rb",	JREG (JR) | JREG_RET, 4, ATTR (BRANCH) | ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    310      1.1  christos   {"jral", "%dtiton %rt,%rb",	JREG (JRAL), 4, ATTR (BRANCH) | ATTR_ALL, 0, NULL, 0, NULL},
    311      1.1  christos   {"jral", "%dtiton %rb",	JREG (JRAL) | RT (30), 4, ATTR (BRANCH) | ATTR_ALL, 0, NULL, 0, NULL},
    312      1.1  christos   /* seg-BR1.  */
    313      1.1  christos   {"beq", "%rt,%ra,%i14s1",	OP6 (BR1), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    314  1.1.1.3  christos   {"bne", "%rt,%ra,%i14s1",	OP6 (BR1) | N32_BIT (14), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    315      1.1  christos   /* seg-BR2.  */
    316      1.1  christos   {"beqz", "%rt,%i16s1",	BR2 (BEQZ), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    317      1.1  christos   {"bnez", "%rt,%i16s1",	BR2 (BNEZ), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    318      1.1  christos   {"bgez", "%rt,%i16s1",	BR2 (BGEZ), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    319      1.1  christos   {"bltz", "%rt,%i16s1",	BR2 (BLTZ), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    320      1.1  christos   {"bgtz", "%rt,%i16s1",	BR2 (BGTZ), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    321      1.1  christos   {"blez", "%rt,%i16s1",	BR2 (BLEZ), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    322      1.1  christos   {"bgezal", "%rt,%i16s1",	BR2 (BGEZAL), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    323      1.1  christos   {"bltzal", "%rt,%i16s1",	BR2 (BLTZAL), 4, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    324      1.1  christos   /* seg-BR3.  */
    325      1.1  christos   {"beqc", "%rt,%i11br3,%i8s1",	OP6 (BR3), 4, ATTR_PCREL | ATTR_V3MUP, 0, NULL, 0, NULL},
    326  1.1.1.3  christos   {"bnec", "%rt,%i11br3,%i8s1",	OP6 (BR3) | N32_BIT (19), 4, ATTR_PCREL | ATTR_V3MUP, 0, NULL, 0, NULL},
    327      1.1  christos   /* seg-SIMD.  */
    328      1.1  christos   {"pbsad", "%rt,%ra,%rb", SIMD (PBSAD), 4, ATTR (PERF2_EXT), 0, NULL, 0, NULL},
    329      1.1  christos   {"pbsada", "%rt,%ra,%rb", SIMD (PBSADA), 4, ATTR (PERF2_EXT), 0, NULL, 0, NULL},
    330      1.1  christos   /* seg-ALU1.  */
    331      1.1  christos   {"add", "=rt,%ra,%rb",	ALU1 (ADD), 4, ATTR_ALL, 0, NULL, 0, NULL},
    332      1.1  christos   {"sub", "=rt,%ra,%rb",	ALU1 (SUB), 4, ATTR_ALL, 0, NULL, 0, NULL},
    333      1.1  christos   {"and", "=rt,%ra,%rb",	ALU1 (AND), 4, ATTR_ALL, 0, NULL, 0, NULL},
    334      1.1  christos   {"xor", "=rt,%ra,%rb",	ALU1 (XOR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    335      1.1  christos   {"or", "=rt,%ra,%rb",		ALU1 (OR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    336      1.1  christos   {"nor", "=rt,%ra,%rb",	ALU1 (NOR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    337      1.1  christos   {"slt", "=rt,%ra,%rb",	ALU1 (SLT), 4, ATTR_ALL, 0, NULL, 0, NULL},
    338      1.1  christos   {"slts", "=rt,%ra,%rb",	ALU1 (SLTS), 4, ATTR_ALL, 0, NULL, 0, NULL},
    339      1.1  christos   {"slli", "=rt,%ra,%ib5u",	ALU1 (SLLI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    340      1.1  christos   {"srli", "=rt,%ra,%ib5u",	ALU1 (SRLI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    341      1.1  christos   {"srai", "=rt,%ra,%ib5u",	ALU1 (SRAI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    342      1.1  christos   {"rotri", "=rt,%ra,%ib5u",	ALU1 (ROTRI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    343      1.1  christos   {"sll", "=rt,%ra,%rb",	ALU1 (SLL), 4, ATTR_ALL, 0, NULL, 0, NULL},
    344      1.1  christos   {"srl", "=rt,%ra,%rb",	ALU1 (SRL), 4, ATTR_ALL, 0, NULL, 0, NULL},
    345      1.1  christos   {"sra", "=rt,%ra,%rb",	ALU1 (SRA), 4, ATTR_ALL, 0, NULL, 0, NULL},
    346      1.1  christos   {"rotr", "=rt,%ra,%rb",	ALU1 (ROTR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    347      1.1  christos   {"seb", "=rt,%ra",		ALU1 (SEB), 4, ATTR_ALL, 0, NULL, 0, NULL},
    348      1.1  christos   {"seh", "=rt,%ra",		ALU1 (SEH), 4, ATTR_ALL, 0, NULL, 0, NULL},
    349      1.1  christos   {"bitc", "=rt,%ra,%rb",	ALU1 (BITC), 4, ATTR_V3, 0, NULL, 0, NULL},
    350      1.1  christos   {"zeh", "=rt,%ra",		ALU1 (ZEH), 4, ATTR_ALL, 0, NULL, 0, NULL},
    351      1.1  christos   {"wsbh", "=rt,%ra",		ALU1 (WSBH), 4, ATTR_ALL, 0, NULL, 0, NULL},
    352      1.1  christos   {"divsr", "=rt,=rd,%ra,%rb",	ALU1 (DIVSR), 4, ATTR (DIV) | ATTR_V2UP, 0, NULL, 0, NULL},
    353      1.1  christos   {"divr", "=rt,=rd,%ra,%rb",	ALU1 (DIVR), 4, ATTR (DIV) | ATTR_V2UP, 0, NULL, 0, NULL},
    354      1.1  christos   {"sva", "=rt,%ra,%rb",	ALU1 (SVA), 4, ATTR_ALL, 0, NULL, 0, NULL},
    355      1.1  christos   {"svs", "=rt,%ra,%rb",	ALU1 (SVS), 4, ATTR_ALL, 0, NULL, 0, NULL},
    356      1.1  christos   {"cmovz", "=rt,%ra,%rb",	ALU1 (CMOVZ), 4, ATTR_ALL, 0, NULL, 0, NULL},
    357      1.1  christos   {"cmovn", "=rt,%ra,%rb",	ALU1 (CMOVN), 4, ATTR_ALL, 0, NULL, 0, NULL},
    358      1.1  christos   {"or_srli", "=rt,%ra,%rb,%sh",	ALU1 (OR_SRLI), 4, ATTR_V3, 0, NULL, 0, NULL},
    359      1.1  christos   {"add_srli", "=rt,%ra,%rb,%sh",	ALU1 (ADD_SRLI), 4, ATTR_V3, 0, NULL, 0, NULL},
    360      1.1  christos   {"sub_srli", "=rt,%ra,%rb,%sh",	ALU1 (SUB_SRLI), 4, ATTR_V3, 0, NULL, 0, NULL},
    361      1.1  christos   {"and_srli", "=rt,%ra,%rb,%sh",	ALU1 (AND_SRLI), 4, ATTR_V3, 0, NULL, 0, NULL},
    362      1.1  christos   {"xor_srli", "=rt,%ra,%rb,%sh",	ALU1 (XOR_SRLI), 4, ATTR_V3, 0, NULL, 0, NULL},
    363      1.1  christos   {"add_slli", "=rt,%ra,%rb,%sh",	ALU1 (ADD), 4, ATTR_V3, 0, NULL, 0, NULL},
    364      1.1  christos   {"sub_slli", "=rt,%ra,%rb,%sh",	ALU1 (SUB), 4, ATTR_V3, 0, NULL, 0, NULL},
    365      1.1  christos   {"and_slli", "=rt,%ra,%rb,%sh",	ALU1 (AND), 4, ATTR_V3, 0, NULL, 0, NULL},
    366      1.1  christos   {"xor_slli", "=rt,%ra,%rb,%sh",	ALU1 (XOR), 4, ATTR_V3, 0, NULL, 0, NULL},
    367      1.1  christos   {"or_slli", "=rt,%ra,%rb,%sh",	ALU1 (OR), 4, ATTR_V3, 0, NULL, 0, NULL},
    368      1.1  christos   {"nop", "",	ALU1 (SRLI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    369      1.1  christos   /* seg-ALU2.  */
    370      1.1  christos   {"max", "=rt,%ra,%rb",	ALU2 (MAX), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    371      1.1  christos   {"min", "=rt,%ra,%rb",	ALU2 (MIN), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    372      1.1  christos   {"ave", "=rt,%ra,%rb",	ALU2 (AVE), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    373      1.1  christos   {"abs", "=rt,%ra",		ALU2 (ABS), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    374      1.1  christos   {"clips", "=rt,%ra,%ib5u",	ALU2 (CLIPS), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    375      1.1  christos   {"clip", "=rt,%ra,%ib5u",	ALU2 (CLIP), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    376      1.1  christos   {"clo", "=rt,%ra",		ALU2 (CLO), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    377      1.1  christos   {"clz", "=rt,%ra",		ALU2 (CLZ), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    378      1.1  christos   {"bset", "=rt,%ra,%ib5u",	ALU2 (BSET), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    379      1.1  christos   {"bclr", "=rt,%ra,%ib5u",	ALU2 (BCLR), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    380      1.1  christos   {"btgl", "=rt,%ra,%ib5u",	ALU2 (BTGL), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    381      1.1  christos   {"btst", "=rt,%ra,%ib5u",	ALU2 (BTST), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
    382      1.1  christos   {"bse", "=rt,%ra,=rb",	ALU2 (BSE), 4, ATTR (PERF2_EXT), 0, NULL, 0, NULL},
    383      1.1  christos   {"bsp", "=rt,%ra,=rb",	ALU2 (BSP), 4, ATTR (PERF2_EXT), 0, NULL, 0, NULL},
    384      1.1  christos   {"ffzmism", "=rt,%ra,%rb",	ALU2 (FFZMISM), 4, ATTR (STR_EXT), 0, NULL, 0, NULL},
    385  1.1.1.5  christos   {"mfusr", "=rt,%usr",		ALU2 (MFUSR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    386  1.1.1.5  christos   {"mtusr", "%rt,%usr",		ALU2 (MTUSR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    387  1.1.1.5  christos   {"mfusr", "=rt,%ridx",	ALU2 (MFUSR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    388  1.1.1.5  christos   {"mtusr", "%rt,%ridx",	ALU2 (MTUSR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    389      1.1  christos   {"mul", "=rt,%ra,%rb",	ALU2 (MUL), 4, ATTR_ALL, 0, NULL, 0, NULL},
    390      1.1  christos   {"madds64", "=dt,%ra,%rb",	ALU2 (MADDS64), 4, ATTR (MAC) | ATTR_ALL, 0, NULL, 0, NULL},
    391      1.1  christos   {"madd64", "=dt,%ra,%rb",	ALU2 (MADD64), 4, ATTR (MAC) | ATTR_ALL, 0, NULL, 0, NULL},
    392      1.1  christos   {"msubs64", "=dt,%ra,%rb",	ALU2 (MSUBS64), 4, ATTR (MAC) | ATTR_ALL, 0, NULL, 0, NULL},
    393      1.1  christos   {"msub64", "=dt,%ra,%rb",	ALU2 (MSUB64), 4, ATTR (MAC) | ATTR_ALL, 0, NULL, 0, NULL},
    394      1.1  christos   {"divs", "=dt,%ra,%rb",	ALU2 (DIVS), 4, ATTR (DIV) | ATTR (DXREG), 0, NULL, 0, NULL},
    395      1.1  christos   {"div", "=dt,%ra,%rb",	ALU2 (DIV), 4, ATTR (DIV) | ATTR (DXREG), 0, NULL, 0, NULL},
    396      1.1  christos   {"mult32", "=dt,%ra,%rb",	ALU2 (MULT32), 4, ATTR (DXREG) | ATTR_ALL, 0, NULL, 0, NULL},
    397      1.1  christos 
    398      1.1  christos   /* seg-ALU2_FFBI.  */
    399      1.1  christos   {"ffb", "=rt,%ra,%rb",	ALU2 (FFB), 4, ATTR (STR_EXT), 0, NULL, 0, NULL},
    400  1.1.1.3  christos   {"ffbi", "=rt,%ra,%ib8u",	ALU2 (FFBI) | N32_BIT (6), 4, ATTR (STR_EXT), 0, NULL, 0, NULL},
    401      1.1  christos   /* seg-ALU2_FLMISM.  */
    402      1.1  christos   {"ffmism", "=rt,%ra,%rb",	ALU2 (FFMISM), 4, ATTR (STR_EXT), 0, NULL, 0, NULL},
    403  1.1.1.3  christos   {"flmism", "=rt,%ra,%rb",	ALU2 (FLMISM) | N32_BIT (6), 4, ATTR (STR_EXT), 0, NULL, 0, NULL},
    404      1.1  christos   /* seg-ALU2_MULSR64.  */
    405      1.1  christos   {"mults64", "=dt,%ra,%rb",	ALU2 (MULTS64), 4, ATTR_ALL, 0, NULL, 0, NULL},
    406  1.1.1.3  christos   {"mulsr64", "=rt,%ra,%rb",	ALU2 (MULSR64)| N32_BIT (6), 4, ATTR_V3MEX_V2, 0, NULL, 0, NULL},
    407      1.1  christos   /* seg-ALU2_MULR64.  */
    408      1.1  christos   {"mult64", "=dt,%ra,%rb",	ALU2 (MULT64), 4, ATTR_ALL, 0, NULL, 0, NULL},
    409  1.1.1.3  christos   {"mulr64", "=rt,%ra,%rb",	ALU2 (MULR64) | N32_BIT (6), 4, ATTR_V3MEX_V2, 0, NULL, 0, NULL},
    410      1.1  christos   /* seg-ALU2_MADDR32.  */
    411      1.1  christos   {"madd32", "=dt,%ra,%rb",	ALU2 (MADD32), 4, ATTR (MAC) | ATTR (DXREG) | ATTR_ALL, 0, NULL, 0, NULL},
    412  1.1.1.3  christos   {"maddr32", "=rt,%ra,%rb",	ALU2 (MADDR32) | N32_BIT (6), 4, ATTR (MAC) | ATTR_V2UP, 0, NULL, 0, NULL},
    413      1.1  christos   /* seg-ALU2_MSUBR32.  */
    414      1.1  christos   {"msub32", "=dt,%ra,%rb",	ALU2 (MSUB32), 4, ATTR (MAC) | ATTR (DXREG) | ATTR_ALL, 0, NULL, 0, NULL},
    415  1.1.1.3  christos   {"msubr32", "=rt,%ra,%rb",	ALU2 (MSUBR32) | N32_BIT (6), 4, ATTR (MAC) | ATTR_V2UP, 0, NULL, 0, NULL},
    416      1.1  christos 
    417      1.1  christos   /* seg-MISC.  */
    418      1.1  christos   {"standby", "%stdby_st",	MISC (STANDBY), 4, ATTR_ALL, 0, NULL, 0, NULL},
    419      1.1  christos   {"mfsr", "=rt,%sr",		MISC (MFSR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    420      1.1  christos   {"iret", "",			MISC (IRET), 4, ATTR_ALL, 0, NULL, 0, NULL},
    421      1.1  christos   {"trap", "%swid",		MISC (TRAP), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    422      1.1  christos   {"teqz", "%rt{,%swid}",	MISC (TEQZ), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    423      1.1  christos   {"tnez", "%rt{,%swid}",	MISC (TNEZ), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    424      1.1  christos   {"dsb", "",			MISC (DSB), 4, ATTR_ALL, 0, NULL, 0, NULL},
    425      1.1  christos   {"isb", "",			MISC (ISB), 4, ATTR_ALL, 0, NULL, 0, NULL},
    426      1.1  christos   {"break", "%swid",		MISC (BREAK), 4, ATTR_ALL, 0, NULL, 0, NULL},
    427      1.1  christos   {"syscall", "%swid",		MISC (SYSCALL), 4, ATTR_ALL, 0, NULL, 0, NULL},
    428      1.1  christos   {"msync", "%msync_st",	MISC (MSYNC), 4, ATTR_ALL, 0, NULL, 0, NULL},
    429      1.1  christos   {"isync", "%rt",		MISC (ISYNC), 4, ATTR_ALL, 0, NULL, 0, NULL},
    430      1.1  christos   /* seg-MISC_MTSR.  */
    431      1.1  christos   {"mtsr", "%rt,%sr",		MISC (MTSR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    432      1.1  christos   /* seg-MISC_SETEND.  */
    433  1.1.1.3  christos   {"setend.l", "",	MISC (MTSR) | (SRIDX (1, 0, 0) << 10) | N32_BIT (5), 4, ATTR_ALL, 0, NULL, 0, NULL},
    434  1.1.1.3  christos   {"setend.b", "",	MISC (MTSR) | (SRIDX (1, 0, 0) << 10) | N32_BIT (5) | N32_BIT (20), 4, ATTR_ALL, 0, NULL, 0, NULL},
    435      1.1  christos   /* seg-MISC_SETGIE.  */
    436  1.1.1.3  christos   {"setgie.d", "",	MISC (MTSR) | (SRIDX (1, 0, 0) << 10) | N32_BIT (6), 4, ATTR_ALL, 0, NULL, 0, NULL},
    437  1.1.1.3  christos   {"setgie.e", "",	MISC (MTSR) | (SRIDX (1, 0, 0) << 10) | N32_BIT (6) | N32_BIT (20), 4, ATTR_ALL, 0, NULL, 0, NULL},
    438      1.1  christos   {"mfsr", "=rt,%ridx",		MISC (MFSR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    439      1.1  christos   {"mtsr", "%rt,%ridx",		MISC (MTSR), 4, ATTR_ALL, 0, NULL, 0, NULL},
    440      1.1  christos   {"trap", "",			MISC (TRAP), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    441      1.1  christos   {"break", "",			MISC (BREAK), 4, ATTR_ALL, 0, NULL, 0, NULL},
    442      1.1  christos   {"msync", "",			MISC (MSYNC), 4, ATTR_ALL, 0, NULL, 0, NULL},
    443      1.1  christos   /* seg-MISC_TLBOP.  */
    444      1.1  christos   {"tlbop", "%ra,%tlbop_st",	MISC (TLBOP), 4, ATTR_ALL, 0, NULL, 0, NULL},
    445      1.1  christos   {"tlbop", "%ra,%tlbop_stx",	MISC (TLBOP), 4, ATTR_ALL, 0, NULL, 0, NULL},
    446      1.1  christos   {"tlbop", "%rt,%ra,pb",	MISC (TLBOP) | (5 << 5), 4, ATTR_ALL, 0, NULL, 0, NULL},
    447  1.1.1.5  christos   {"tlbop", "%rt,%ra,probe",	MISC (TLBOP) | (5 << 5), 4, ATTR_ALL, 0, NULL, 0, NULL},
    448      1.1  christos   {"tlbop", "flua",		MISC (TLBOP) | (7 << 5), 4, ATTR_ALL, 0, NULL, 0, NULL},
    449      1.1  christos   {"tlbop", "flushall",		MISC (TLBOP) | (7 << 5), 4, ATTR_ALL, 0, NULL, 0, NULL},
    450      1.1  christos 
    451      1.1  christos   /* seg-MEM.  */
    452      1.1  christos   {"lb", "=rt,[%ra+(%rb<<%sv)]",	MEM (LB), 4, ATTR_ALL, 0, NULL, 0, NULL},
    453      1.1  christos   {"lb", "=rt,[%ra+%rb{<<%sv}]",	MEM (LB), 4, ATTR_ALL, 0, NULL, 0, NULL},
    454      1.1  christos   {"lh", "=rt,[%ra+(%rb<<%sv)]",	MEM (LH), 4, ATTR_ALL, 0, NULL, 0, NULL},
    455      1.1  christos   {"lh", "=rt,[%ra+%rb{<<%sv}]",	MEM (LH), 4, ATTR_ALL, 0, NULL, 0, NULL},
    456      1.1  christos   {"lw", "=rt,[%ra+(%rb<<%sv)]",	MEM (LW), 4, ATTR_ALL, 0, NULL, 0, NULL},
    457      1.1  christos   {"lw", "=rt,[%ra+%rb{<<%sv}]",	MEM (LW), 4, ATTR_ALL, 0, NULL, 0, NULL},
    458      1.1  christos   {"ld", "=rt,[%ra+(%rb<<%sv)]",	MEM (LD), 4, ATTR_ALL, 0, NULL, 0, NULL},
    459      1.1  christos   {"lb.bi", "=rt,[%ra],%rb{<<%sv}",	MEM (LB_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    460      1.1  christos   {"lb.bi", "=rt,[%ra],(%rb<<%sv)",	MEM (LB_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    461      1.1  christos   {"lb.p", "=rt,[%ra],%rb{<<%sv}",	MEM (LB_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    462      1.1  christos   {"lh.bi", "=rt,[%ra],%rb{<<%sv}",	MEM (LH_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    463      1.1  christos   {"lh.bi", "=rt,[%ra],(%rb<<%sv)",	MEM (LH_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    464      1.1  christos   {"lh.p", "=rt,[%ra],%rb{<<%sv}",	MEM (LH_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    465      1.1  christos   {"lw.bi", "=rt,[%ra],%rb{<<%sv}",	MEM (LW_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    466      1.1  christos   {"lw.bi", "=rt,[%ra],(%rb<<%sv)",	MEM (LW_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    467      1.1  christos   {"lw.p", "=rt,[%ra],%rb{<<%sv}",	MEM (LW_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    468      1.1  christos   {"ld.bi", "=rt,[%ra],(%rb<<%sv)",	MEM (LD_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    469      1.1  christos   {"sb", "=rt,[%ra+(%rb<<%sv)]",	MEM (SB), 4, ATTR_ALL, 0, NULL, 0, NULL},
    470      1.1  christos   {"sb", "%rt,[%ra+%rb{<<%sv}]",	MEM (SB), 4, ATTR_ALL, 0, NULL, 0, NULL},
    471      1.1  christos   {"sh", "=rt,[%ra+(%rb<<%sv)]",	MEM (SH), 4, ATTR_ALL, 0, NULL, 0, NULL},
    472      1.1  christos   {"sh", "%rt,[%ra+%rb{<<%sv}]",	MEM (SH), 4, ATTR_ALL, 0, NULL, 0, NULL},
    473      1.1  christos   {"sw", "=rt,[%ra+(%rb<<%sv)]",	MEM (SW), 4, ATTR_ALL, 0, NULL, 0, NULL},
    474      1.1  christos   {"sw", "%rt,[%ra+%rb{<<%sv}]",	MEM (SW), 4, ATTR_ALL, 0, NULL, 0, NULL},
    475      1.1  christos   {"sd", "=rt,[%ra+(%rb<<%sv)]",	MEM (SD), 4, ATTR_ALL, 0, NULL, 0, NULL},
    476      1.1  christos   {"sb.bi", "%rt,[%ra],%rb{<<%sv}",	MEM (SB_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    477      1.1  christos   {"sb.bi", "=rt,[%ra],(%rb<<%sv)",	MEM (SB_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    478      1.1  christos   {"sb.p", "%rt,[%ra],%rb{<<%sv}",	MEM (SB_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    479      1.1  christos   {"sh.bi", "%rt,[%ra],%rb{<<%sv}",	MEM (SH_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    480      1.1  christos   {"sh.bi", "=rt,[%ra],(%rb<<%sv)",	MEM (SH_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    481      1.1  christos   {"sh.p", "%rt,[%ra],%rb{<<%sv}",	MEM (SH_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    482      1.1  christos   {"sw.bi", "%rt,[%ra],%rb{<<%sv}",	MEM (SW_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    483      1.1  christos   {"sw.bi", "=rt,[%ra],(%rb<<%sv)",	MEM (SW_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    484      1.1  christos   {"sw.p", "%rt,[%ra],%rb{<<%sv}",	MEM (SW_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    485      1.1  christos   {"sd.bi", "=rt,[%ra],(%rb<<%sv)",	MEM (SD_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    486      1.1  christos 
    487      1.1  christos   {"lbs", "=rt,[%ra+(%rb<<%sv)]",	MEM (LBS), 4, ATTR_ALL, 0, NULL, 0, NULL},
    488      1.1  christos   {"lbs", "=rt,[%ra+%rb{<<%sv}]",	MEM (LBS), 4, ATTR_ALL, 0, NULL, 0, NULL},
    489      1.1  christos   {"lhs", "=rt,[%ra+(%rb<<%sv)]",	MEM (LHS), 4, ATTR_ALL, 0, NULL, 0, NULL},
    490      1.1  christos   {"lhs", "=rt,[%ra+%rb{<<%sv}]",	MEM (LHS), 4, ATTR_ALL, 0, NULL, 0, NULL},
    491      1.1  christos   {"lbs.bi", "=rt,[%ra],%rb{<<%sv}",	MEM (LBS_BI),4, ATTR_ALL, 0, NULL, 0, NULL},
    492      1.1  christos   {"lbs.bi", "=rt,[%ra],(%rb<<%sv)",	MEM (LBS_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    493      1.1  christos   {"lbs.p", "=rt,[%ra],%rb{<<%sv}",	MEM (LBS_BI),4, ATTR_ALL, 0, NULL, 0, NULL},
    494      1.1  christos   {"lhs.bi", "=rt,[%ra],%rb{<<%sv}",	MEM (LHS_BI),4, ATTR_ALL, 0, NULL, 0, NULL},
    495      1.1  christos   {"lhs.bi", "=rt,[%ra],(%rb<<%sv)",	MEM (LHS_BI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    496      1.1  christos   {"lhs.p", "=rt,[%ra],%rb{<<%sv}",	MEM (LHS_BI),4, ATTR_ALL, 0, NULL, 0, NULL},
    497      1.1  christos   {"llw", "=rt,[%ra+(%rb<<%sv)]",	MEM (LLW), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    498      1.1  christos   {"llw", "=rt,[%ra+%rb{<<%sv}]",	MEM (LLW), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    499      1.1  christos   {"scw", "%rt,[%ra+(%rb<<%sv)]",	MEM (SCW), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    500      1.1  christos   {"scw", "%rt,[%ra+%rb{<<%sv}]",	MEM (SCW), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    501      1.1  christos 
    502      1.1  christos   {"lbup", "=rt,[%ra+(%rb<<%sv)]",	MEM (LBUP), 4, ATTR_V3MEX_V2, 0, NULL, 0, NULL},
    503      1.1  christos   {"lbup", "=rt,[%ra+%rb{<<%sv}]",	MEM (LBUP), 4, ATTR_V3MEX_V2, 0, NULL, 0, NULL},
    504      1.1  christos   {"lwup", "=rt,[%ra+(%rb<<%sv)]",	MEM (LWUP), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    505      1.1  christos   {"lwup", "=rt,[%ra+%rb{<<%sv}]",	MEM (LWUP), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    506      1.1  christos   {"sbup", "%rt,[%ra+(%rb<<%sv)]",	MEM (SBUP), 4, ATTR_V3MEX_V2, 0, NULL, 0, NULL},
    507      1.1  christos   {"sbup", "%rt,[%ra+%rb{<<%sv}]",	MEM (SBUP), 4, ATTR_V3MEX_V2, 0, NULL, 0, NULL},
    508      1.1  christos   {"swup", "%rt,[%ra+(%rb<<%sv)]",	MEM (SWUP), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    509      1.1  christos   {"swup", "%rt,[%ra+%rb{<<%sv}]",	MEM (SWUP), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    510      1.1  christos 
    511      1.1  christos   {"dpref", "%dpref_st,[%ra]",	OP6 (DPREFI), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    512      1.1  christos   {"dpref", "%dpref_st,[%ra+(%rb<<%sv)]",	MEM (DPREF), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    513      1.1  christos   {"dpref", "%dpref_st,[%ra+%rb{<<%sv}]",	MEM (DPREF), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    514      1.1  christos 
    515      1.1  christos   /* For missing-operand-load/store instructions.  */
    516      1.1  christos   {"lb", "=rt,[%ra]",	OP6 (LBI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    517      1.1  christos   {"lh", "=rt,[%ra]",	OP6 (LHI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    518      1.1  christos   {"lw", "=rt,[%ra]",	OP6 (LWI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    519      1.1  christos   {"lbs", "=rt,[%ra]",	OP6 (LBSI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    520      1.1  christos   {"lhs", "=rt,[%ra]",	OP6 (LHSI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    521      1.1  christos   {"sb", "%rt,[%ra]",	OP6 (SBI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    522      1.1  christos   {"sh", "%rt,[%ra]",	OP6 (SHI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    523      1.1  christos   {"sw", "%rt,[%ra]",	OP6 (SWI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    524      1.1  christos 
    525      1.1  christos   /* seg-LWC0.  */
    526      1.1  christos   {"flsi", "=fst,[%ra{+%i12s2}]",	OP6 (LWC), 4, ATTR (FPU), 0, NULL, 0, NULL},
    527      1.1  christos   {"flsi.bi", "=fst,[%ra],%i12s2",	FPU_RA_IMMBI (LWC), 4, ATTR (FPU), 0, NULL, 0, NULL},
    528      1.1  christos   /* seg-SWC0.  */
    529      1.1  christos   {"fssi", "=fst,[%ra{+%i12s2}]",	OP6 (SWC), 4, ATTR (FPU), 0, NULL, 0, NULL},
    530      1.1  christos   {"fssi.bi", "=fst,[%ra],%i12s2",	FPU_RA_IMMBI (SWC), 4, ATTR (FPU), 0, NULL, 0, NULL},
    531      1.1  christos   /* seg-LDC0.  */
    532      1.1  christos   {"fldi", "=fdt,[%ra{+%i12s2}]",	OP6 (LDC), 4, ATTR (FPU), 0, NULL, 0, NULL},
    533      1.1  christos   {"fldi.bi", "=fdt,[%ra],%i12s2",	FPU_RA_IMMBI (LDC), 4, ATTR (FPU), 0, NULL, 0, NULL},
    534      1.1  christos   /* seg-SDC0.  */
    535      1.1  christos   {"fsdi", "=fdt,[%ra{+%i12s2}]",	OP6 (SDC), 4, ATTR (FPU), 0, NULL, 0, NULL},
    536      1.1  christos   {"fsdi.bi", "=fdt,[%ra],%i12s2",	FPU_RA_IMMBI (SDC), 4, ATTR (FPU), 0, NULL, 0, NULL},
    537      1.1  christos 
    538      1.1  christos   /* seg-FPU_FS1.  */
    539      1.1  christos   {"fadds", "=fst,%fsa,%fsb",	FS1 (FADDS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    540      1.1  christos   {"fsubs", "=fst,%fsa,%fsb",	FS1 (FSUBS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    541      1.1  christos   {"fcpynss", "=fst,%fsa,%fsb",	FS1 (FCPYNSS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    542      1.1  christos   {"fcpyss", "=fst,%fsa,%fsb",	FS1 (FCPYSS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    543      1.1  christos   {"fmadds", "=fst,%fsa,%fsb",	FS1 (FMADDS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    544      1.1  christos   {"fmsubs", "=fst,%fsa,%fsb",	FS1 (FMSUBS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    545      1.1  christos   {"fcmovns", "=fst,%fsa,%fsb",	FS1 (FCMOVNS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    546      1.1  christos   {"fcmovzs", "=fst,%fsa,%fsb",	FS1 (FCMOVZS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    547      1.1  christos   {"fnmadds", "=fst,%fsa,%fsb",	FS1 (FNMADDS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    548      1.1  christos   {"fnmsubs", "=fst,%fsa,%fsb",	FS1 (FNMSUBS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    549      1.1  christos   {"fmuls", "=fst,%fsa,%fsb",	FS1 (FMULS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    550      1.1  christos   {"fdivs", "=fst,%fsa,%fsb",	FS1 (FDIVS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    551      1.1  christos 
    552      1.1  christos   /* seg-FPU_FS1_F2OP.  */
    553      1.1  christos   {"fs2d", "=fdt,%fsa",		FS1_F2OP (FS2D), 4, ATTR (FPU) | ATTR (FPU_SP_EXT) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    554      1.1  christos   {"fsqrts", "=fst,%fsa",	FS1_F2OP (FSQRTS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    555      1.1  christos   {"fabss", "=fst,%fsa",	FS1_F2OP (FABSS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    556      1.1  christos   {"fui2s", "=fst,%fsa",	FS1_F2OP (FUI2S), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    557      1.1  christos   {"fsi2s", "=fst,%fsa",	FS1_F2OP (FSI2S), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    558      1.1  christos   {"fs2ui", "=fst,%fsa",	FS1_F2OP (FS2UI), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    559      1.1  christos   {"fs2ui.z", "=fst,%fsa",	FS1_F2OP (FS2UI_Z), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    560      1.1  christos   {"fs2si", "=fst,%fsa",	FS1_F2OP (FS2SI), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    561      1.1  christos   {"fs2si.z", "=fst,%fsa",	FS1_F2OP (FS2SI_Z), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    562      1.1  christos   /* seg-FPU_FS2.  */
    563      1.1  christos   {"fcmpeqs", "=fst,%fsa,%fsb",		FS2 (FCMPEQS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    564      1.1  christos   {"fcmpeqs.e", "=fst,%fsa,%fsb",	FS2 (FCMPEQS_E), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    565      1.1  christos   {"fcmplts", "=fst,%fsa,%fsb",		FS2 (FCMPLTS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    566      1.1  christos   {"fcmplts.e", "=fst,%fsa,%fsb",	FS2 (FCMPLTS_E), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    567      1.1  christos   {"fcmples", "=fst,%fsa,%fsb",		FS2 (FCMPLES), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    568      1.1  christos   {"fcmples.e", "=fst,%fsa,%fsb",	FS2 (FCMPLES_E), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    569      1.1  christos   {"fcmpuns", "=fst,%fsa,%fsb",		FS2 (FCMPUNS), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    570      1.1  christos   {"fcmpuns.e", "=fst,%fsa,%fsb",	FS2 (FCMPUNS_E), 4, ATTR (FPU) | ATTR (FPU_SP_EXT), 0, NULL, 0, NULL},
    571      1.1  christos   /* seg-FPU_FD1.  */
    572      1.1  christos   {"faddd", "=fdt,%fda,%fdb",	FD1 (FADDD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    573      1.1  christos   {"fsubd", "=fdt,%fda,%fdb",	FD1 (FSUBD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    574      1.1  christos   {"fcpynsd", "=fdt,%fda,%fdb",	FD1 (FCPYNSD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    575      1.1  christos   {"fcpysd", "=fdt,%fda,%fdb",	FD1 (FCPYSD), 4, ATTR (FPU), 0, NULL, 0, NULL},
    576      1.1  christos   {"fmaddd", "=fdt,%fda,%fdb",	FD1 (FMADDD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    577      1.1  christos   {"fmsubd", "=fdt,%fda,%fdb",	FD1 (FMSUBD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    578      1.1  christos   {"fcmovnd", "=fdt,%fda,%fsb",	FD1 (FCMOVND), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    579      1.1  christos   {"fcmovzd", "=fdt,%fda,%fsb",	FD1 (FCMOVZD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    580      1.1  christos   {"fnmaddd", "=fdt,%fda,%fdb",	FD1 (FNMADDD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    581      1.1  christos   {"fnmsubd", "=fdt,%fda,%fdb",	FD1 (FNMSUBD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    582      1.1  christos   {"fmuld", "=fdt,%fda,%fdb",	FD1 (FMULD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    583      1.1  christos   {"fdivd", "=fdt,%fda,%fdb",	FD1 (FDIVD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    584      1.1  christos   /* seg-FPU_FD1_F2OP.  */
    585      1.1  christos   {"fd2s", "=fst,%fda",		FD1_F2OP (FD2S), 4, ATTR (FPU) | ATTR (FPU_SP_EXT) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    586      1.1  christos   {"fsqrtd", "=fdt,%fda",	FD1_F2OP (FSQRTD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    587      1.1  christos   {"fabsd", "=fdt,%fda",	FD1_F2OP (FABSD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    588      1.1  christos   {"fui2d", "=fdt,%fsa",	FD1_F2OP (FUI2D), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    589      1.1  christos   {"fsi2d", "=fdt,%fsa",	FD1_F2OP (FSI2D), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    590      1.1  christos   {"fd2ui", "=fst,%fda",	FD1_F2OP (FD2UI), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    591      1.1  christos   {"fd2ui.z", "=fst,%fda",	FD1_F2OP (FD2UI_Z), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    592      1.1  christos   {"fd2si", "=fst,%fda",	FD1_F2OP (FD2SI), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    593      1.1  christos   {"fd2si.z", "=fst,%fda",	FD1_F2OP (FD2SI_Z), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    594      1.1  christos   /* seg-FPU_FD2.  */
    595      1.1  christos   {"fcmpeqd", "=fst,%fda,%fdb",		FD2 (FCMPEQD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    596      1.1  christos   {"fcmpeqd.e", "=fst,%fda,%fdb",	FD2 (FCMPEQD_E), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    597      1.1  christos   {"fcmpltd", "=fst,%fda,%fdb",		FD2 (FCMPLTD), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    598      1.1  christos   {"fcmpltd.e", "=fst,%fda,%fdb",	FD2 (FCMPLTD_E), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    599      1.1  christos   {"fcmpled", "=fst,%fda,%fdb",		FD2 (FCMPLED), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    600      1.1  christos   {"fcmpled.e", "=fst,%fda,%fdb",	FD2 (FCMPLED_E), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    601      1.1  christos   {"fcmpund", "=fst,%fda,%fdb",		FD2 (FCMPUND), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    602      1.1  christos   {"fcmpund.e", "=fst,%fda,%fdb",	FD2 (FCMPUND_E), 4, ATTR (FPU) | ATTR (FPU_DP_EXT), 0, NULL, 0, NULL},
    603      1.1  christos   /* seg-FPU_MFCP.  */
    604      1.1  christos   {"fmfsr", "=rt,%fsa",	MFCP (FMFSR), 4, ATTR (FPU), 0, NULL, 0, NULL},
    605      1.1  christos   {"fmfdr", "=rt,%fda",	MFCP (FMFDR), 4, ATTR (FPU), 0, NULL, 0, NULL},
    606      1.1  christos   /* seg-FPU_MFCP_XR.  */
    607      1.1  christos   {"fmfcfg", "=rt",	MFCP_XR(FMFCFG), 4, ATTR (FPU), 0, NULL, 0, NULL},
    608      1.1  christos   {"fmfcsr", "=rt",	MFCP_XR(FMFCSR), 4, ATTR (FPU), 0, NULL, 0, NULL},
    609      1.1  christos   /* seg-FPU_MTCP.  */
    610      1.1  christos 
    611      1.1  christos   {"fmtsr", "%rt,=fsa",	MTCP (FMTSR), 4, ATTR (FPU), 0, NULL, 0, NULL},
    612      1.1  christos   {"fmtdr", "%rt,=fda",	MTCP (FMTDR), 4, ATTR (FPU), 0, NULL, 0, NULL},
    613      1.1  christos   /* seg-FPU_MTCP_XR.  */
    614      1.1  christos   {"fmtcsr", "%rt",	MTCP_XR(FMTCSR), 4, ATTR (FPU), 0, NULL, 0, NULL},
    615      1.1  christos   /* seg-FPU_FLS.  */
    616      1.1  christos   {"fls", "=fst,[%ra+(%rb<<%sv)]",	FPU_MEM(FLS), 4, ATTR (FPU), 0, NULL, 0, NULL},
    617      1.1  christos   {"fls.bi", "=fst,[%ra],(%rb<<%sv)",	FPU_MEMBI(FLS), 4, ATTR (FPU), 0, NULL, 0, NULL},
    618      1.1  christos   /* seg-FPU_FLD.  */
    619      1.1  christos   {"fld", "=fdt,[%ra+(%rb<<%sv)]",	FPU_MEM(FLD), 4, ATTR (FPU), 0, NULL, 0, NULL},
    620      1.1  christos   {"fld.bi", "=fdt,[%ra],(%rb<<%sv)",	FPU_MEMBI(FLD), 4, ATTR (FPU), 0, NULL, 0, NULL},
    621      1.1  christos   /* seg-FPU_FSS.  */
    622      1.1  christos   {"fss", "=fst,[%ra+(%rb<<%sv)]",	FPU_MEM(FSS), 4, ATTR (FPU), 0, NULL, 0, NULL},
    623      1.1  christos   {"fss.bi", "=fst,[%ra],(%rb<<%sv)",	FPU_MEMBI(FSS), 4, ATTR (FPU), 0, NULL, 0, NULL},
    624      1.1  christos   /* seg-FPU_FSD.  */
    625      1.1  christos   {"fsd", "=fdt,[%ra+(%rb<<%sv)]",	FPU_MEM(FSD), 4, ATTR (FPU), 0, NULL, 0, NULL},
    626      1.1  christos   {"fsd.bi", "=fdt,[%ra],(%rb<<%sv)",	FPU_MEMBI(FSD), 4, ATTR (FPU), 0, NULL, 0, NULL},
    627      1.1  christos   {"fls", "=fst,[%ra+%rb{<<%sv}]",	FPU_MEM(FLS), 4, ATTR (FPU), 0, NULL, 0, NULL},
    628      1.1  christos   {"fls.bi", "=fst,[%ra],%rb{<<%sv}",	FPU_MEMBI(FLS), 4, ATTR (FPU), 0, NULL, 0, NULL},
    629      1.1  christos   {"fld", "=fdt,[%ra+%rb{<<%sv}]",	FPU_MEM(FLD), 4, ATTR (FPU), 0, NULL, 0, NULL},
    630      1.1  christos   {"fld.bi", "=fdt,[%ra],%rb{<<%sv}",	FPU_MEMBI(FLD), 4, ATTR (FPU), 0, NULL, 0, NULL},
    631      1.1  christos   {"fss", "=fst,[%ra+%rb{<<%sv}]",	FPU_MEM(FSS), 4, ATTR (FPU), 0, NULL, 0, NULL},
    632      1.1  christos   {"fss.bi", "=fst,[%ra],%rb{<<%sv}",	FPU_MEMBI(FSS), 4, ATTR (FPU), 0, NULL, 0, NULL},
    633      1.1  christos   {"fsd", "=fdt,[%ra+%rb{<<%sv}]",	FPU_MEM(FSD), 4, ATTR (FPU), 0, NULL, 0, NULL},
    634      1.1  christos   {"fsd.bi", "=fdt,[%ra],%rb{<<%sv}",	FPU_MEMBI(FSD), 4, ATTR (FPU), 0, NULL, 0, NULL},
    635      1.1  christos   {"cctl", "%ra,%cctl_st0",		MISC (CCTL), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    636      1.1  christos   {"cctl", "%ra,%cctl_st1{,%cctl_lv}",	MISC (CCTL), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    637      1.1  christos   {"cctl", "=rt,%ra,%cctl_st2",		MISC (CCTL), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    638      1.1  christos   {"cctl", "%rt,%ra,%cctl_st3",		MISC (CCTL), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    639      1.1  christos   {"cctl", "%cctl_st4",			MISC (CCTL), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    640      1.1  christos   {"cctl", "%cctl_st5{,%cctl_lv}",	MISC (CCTL), 4, ATTR_V3, 0, NULL, 0, NULL},
    641      1.1  christos   {"cctl", "=rt,%ra,%cctl_stx,%cctl_lv",	MISC (CCTL), 4, ATTR_V3MEX_V1, 0, NULL, 0, NULL},
    642      1.1  christos   /* seg-Alias instructions.  */
    643      1.1  christos   {"neg", "=rt,%ra",	OP6 (SUBRI), 4, ATTR_ALL, 0, NULL, 0, NULL},
    644      1.1  christos   {"zeb", "=rt,%ra",	OP6 (ANDI) | 0xff, 4, ATTR_ALL, 0, NULL, 0, NULL},
    645      1.1  christos 
    646      1.1  christos   /* seg-COP.  */
    647      1.1  christos   {"cpe1", "%cp45,%cpi19",	OP6 (COP) | 0x00, 4, ATTR_ALL, 0, NULL, 0, NULL},
    648      1.1  christos   {"cpe2", "%cp45,%cpi19",	OP6 (COP) | 0x04, 4, ATTR_ALL, 0, NULL, 0, NULL},
    649      1.1  christos   {"cpe3", "%cp45,%cpi19",	OP6 (COP) | 0x08, 4, ATTR_ALL, 0, NULL, 0, NULL},
    650      1.1  christos   {"cpe4", "%cp45,%cpi19",	OP6 (COP) | 0x0C, 4, ATTR_ALL, 0, NULL, 0, NULL},
    651      1.1  christos   /* seg-COP-MFCPX.  */
    652      1.1  christos   {"mfcpw", "%cp45,=rt,%i12u",	OP6 (COP) | 0x01, 4, ATTR_ALL, 0, NULL, 0, NULL},
    653      1.1  christos   {"mfcpd", "%cp45,=rt,%i12u",	OP6 (COP) | 0x41, 4, ATTR_ALL, 0, NULL, 0, NULL},
    654      1.1  christos   {"mfcppw", "%cp45,=rt,%i12u",	OP6 (COP) | 0xc1, 4, ATTR_ALL, 0, NULL, 0, NULL},
    655      1.1  christos   /* seg-COP-CPLW.  */
    656      1.1  christos   {"cplw", "%cp45,%cprt,[%ra+%rb<<%sv]",	OP6 (COP) | 0x02, 4, ATTR_ALL, 0, NULL, 0, NULL},
    657      1.1  christos   {"cplw.bi", "%cp45,%cprt,[%ra],%rb<<%sv",	OP6 (COP) | 0x82, 4, ATTR_ALL, 0, NULL, 0, NULL},
    658      1.1  christos   /* seg-COP-CPLD.  */
    659      1.1  christos   {"cpld", "%cp45,%cprt,[%ra+%rb<<%sv]",	OP6 (COP) | 0x03, 4, ATTR_ALL, 0, NULL, 0, NULL},
    660      1.1  christos   {"cpld.bi", "%cp45,%cprt,[%ra],%rb<<%sv",	OP6 (COP) | 0x83, 4, ATTR_ALL, 0, NULL, 0, NULL},
    661      1.1  christos   /* seg-COP-MTCPX.  */
    662      1.1  christos   {"mtcpw", "%cp45,%rt,%i12u",	OP6 (COP) | 0x09, 4, ATTR_ALL, 0, NULL, 0, NULL},
    663      1.1  christos   {"mtcpd", "%cp45,%rt,%i12u",	OP6 (COP) | 0x49, 4, ATTR_ALL, 0, NULL, 0, NULL},
    664      1.1  christos   {"mtcppw", "%cp45,%rt,%i12u",	OP6 (COP) | 0xc9, 4, ATTR_ALL, 0, NULL, 0, NULL},
    665      1.1  christos   /* seg-COP-CPSW.  */
    666      1.1  christos   {"cpsw", "%cp45,%cprt,[%ra+%rb<<%sv]",	OP6 (COP) | 0x0a, 4, ATTR_ALL, 0, NULL, 0, NULL},
    667      1.1  christos   {"cpsw.bi", "%cp45,%cprt,[%ra],%rb<<%sv",	OP6 (COP) | 0x8a, 4, ATTR_ALL, 0, NULL, 0, NULL},
    668      1.1  christos   /* seg-COP-CPSD.  */
    669      1.1  christos   {"cpsd", "%cp45,%cprt,[%ra+%rb<<%sv]",	OP6 (COP) | 0x0b, 4, ATTR_ALL, 0, NULL, 0, NULL},
    670      1.1  christos   {"cpsd.bi", "%cp45,%cprt,[%ra],%rb<<%sv",	OP6 (COP) | 0x8b, 4, ATTR_ALL, 0, NULL, 0, NULL},
    671      1.1  christos 
    672      1.1  christos   /* 16-bit instructions.  */
    673      1.1  christos   /* get bit14~bit11 of 16-bit instruction.  */
    674      1.1  christos   {"beqz38", "%rt38,%i8s1",	0xc000, 2, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    675      1.1  christos   {"bnez38", "%rt38,%i8s1",	0xc800, 2, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    676      1.1  christos   {"beqs38", "%rt38,%i8s1",	0xd000, 2, ATTR_PCREL | ATTR_ALL, USE_REG (5), NULL, 0, NULL},
    677      1.1  christos   {"bnes38", "%rt38,%i8s1",	0xd800, 2, ATTR_PCREL | ATTR_ALL, USE_REG (5), NULL, 0, NULL},
    678      1.1  christos 
    679      1.1  christos   /* SEG00, get bit10.  */
    680      1.1  christos   {"mov55", "=rt5,%ra5",	0x8000, 2, ATTR_ALL, 0, NULL, 0, NULL},
    681      1.1  christos   {"movi55", "=rt5,%i5s",	0x8400, 2, ATTR_ALL, 0, NULL, 0, NULL},
    682      1.1  christos   /* SEG01  bit10~bit9.  */
    683      1.1  christos   {"add45", "=rt4,%ra5",	0x8800, 2, ATTR_ALL, 0, NULL, 0, NULL},
    684      1.1  christos   {"sub45", "=rt4,%ra5",	0x8a00, 2, ATTR_ALL, 0, NULL, 0, NULL},
    685      1.1  christos   {"addi45", "=rt4,%i5u",	0x8c00, 2, ATTR_ALL, 0, NULL, 0, NULL},
    686      1.1  christos   {"subi45", "=rt4,%i5u",	0x8e00, 2, ATTR_ALL, 0, NULL, 0, NULL},
    687      1.1  christos   /* SEG02  bit10~bit9.  */
    688      1.1  christos   {"srai45", "=rt4,%i5u",	0x9000, 2, ATTR_ALL, 0, NULL, 0, NULL},
    689      1.1  christos   {"srli45", "=rt4,%i5u",	0x9200, 2, ATTR_ALL, 0, NULL, 0, NULL},
    690      1.1  christos   {"slli333", "=rt3,%ra3,%i3u",	0x9400, 2, ATTR_ALL, 0, NULL, 0, NULL},
    691      1.1  christos   /* SEG03  bit10~bit9.  */
    692      1.1  christos   {"add333", "=rt3,%ra3,%rb3",	0x9800, 2, ATTR_ALL, 0, NULL, 0, NULL},
    693      1.1  christos   {"sub333", "=rt3,%ra3,%rb3",	0x9a00, 2, ATTR_ALL, 0, NULL, 0, NULL},
    694      1.1  christos   {"addi333", "=rt3,%ra3,%i3u",	0x9c00, 2, ATTR_ALL, 0, NULL, 0, NULL},
    695      1.1  christos   {"subi333", "=rt3,%ra3,%i3u",	0x9e00, 2, ATTR_ALL, 0, NULL, 0, NULL},
    696      1.1  christos   /* SEG04  bit10~bit9.  */
    697      1.1  christos   {"lwi333", "=rt3,[%ra3{+%i3u2}]",	0xa000, 2, ATTR_ALL, 0, NULL, 0, NULL},
    698      1.1  christos   {"lwi333.bi", "=rt3,[%ra3],%i3u2",	0xa200, 2, ATTR_ALL, 0, NULL, 0, NULL},
    699      1.1  christos   {"lhi333", "=rt3,[%ra3{+%i3u1}]",	0xa400, 2, ATTR_ALL, 0, NULL, 0, NULL},
    700      1.1  christos   {"lbi333", "=rt3,[%ra3{+%i3u}]",	0xa600, 2, ATTR_ALL, 0, NULL, 0, NULL},
    701      1.1  christos   /* SEG05  bit10~bit9.  */
    702      1.1  christos   {"swi333", "%rt3,[%ra3{+%i3u2}]",	0xa800, 2, ATTR_ALL, 0, NULL, 0, NULL},
    703      1.1  christos   {"swi333.bi", "%rt3,[%ra3],%i3u2",	0xaa00, 2, ATTR_ALL, 0, NULL, 0, NULL},
    704      1.1  christos   {"shi333", "%rt3,[%ra3{+%i3u1}]",	0xac00, 2, ATTR_ALL, 0, NULL, 0, NULL},
    705      1.1  christos   {"sbi333", "%rt3,[%ra3{+%i3u}]",	0xae00, 2, ATTR_ALL, 0, NULL, 0, NULL},
    706      1.1  christos   /* SEG06  bit10~bit9.  */
    707      1.1  christos   {"addri36.sp", "%rt3,%i6u2",	0xb000, 2, ATTR_V3MUP, USE_REG (31), NULL, 0, NULL},
    708      1.1  christos   {"lwi45.fe", "=rt4,%fe5",	0xb200, 2, ATTR_V3MUP, USE_REG (8), NULL, 0, NULL},
    709      1.1  christos   {"lwi450", "=rt4,[%ra5]",	0xb400, 2, ATTR_ALL, 0, NULL, 0, NULL},
    710      1.1  christos   {"swi450", "%rt4,[%ra5]",	0xb600, 2, ATTR_ALL, 0, NULL, 0, NULL},
    711      1.1  christos   /* SEG07  bit7.  */
    712      1.1  christos   {"lwi37", "=rt38,[$fp{+%i7u2}]",	0xb800, 2, ATTR_ALL, USE_REG (28), NULL, 0, NULL},
    713      1.1  christos   {"swi37", "%rt38,[$fp{+%i7u2}]",	0xb880, 2, ATTR_ALL, USE_REG (28), NULL, 0, NULL},
    714      1.1  christos   /* SEG10_1 if Rt3=5.  */
    715      1.1  christos   {"j8", "%i8s1",	0xd500, 2, ATTR_PCREL | ATTR_ALL, 0, NULL, 0, NULL},
    716      1.1  christos   /* SEG11_2  bit7~bit5.  */
    717      1.1  christos   {"jr5", "%ra5",	0xdd00, 2, ATTR_ALL, 0, NULL, 0, NULL},
    718      1.1  christos   {"jral5", "%ra5",	0xdd20, 2, ATTR_ALL, 0, NULL, 0, NULL},
    719      1.1  christos   {"ret5", "%ra5",	0xdd80, 2, ATTR_ALL, 0, NULL, 0, NULL},
    720      1.1  christos   {"add5.pc", "%ra5",	0xdda0, 2, ATTR_V3, 0, NULL, 0, NULL},
    721      1.1  christos   /* SEG11_3  if Ra5=30.  */
    722      1.1  christos   {"ret5", "",	0xdd80 | RA5 (30), 2, ATTR_ALL, 0, NULL, 0, NULL},
    723      1.1  christos   /* SEG12  bit10~bit9.  */
    724      1.1  christos   {"slts45", "%rt4,%ra5",	0xe000, 2, ATTR_ALL, DEF_REG (15), NULL, 0, NULL},
    725      1.1  christos   {"slt45", "%rt4,%ra5",	0xe200, 2, ATTR_ALL, DEF_REG (15), NULL, 0, NULL},
    726      1.1  christos   {"sltsi45", "%rt4,%i5u",	0xe400, 2, ATTR_ALL, DEF_REG (15), NULL, 0, NULL},
    727      1.1  christos   {"slti45", "%rt4,%i5u",	0xe600, 2, ATTR_ALL, DEF_REG (15), NULL, 0, NULL},
    728      1.1  christos   /* SEG13  bit10~bit9.  */
    729      1.1  christos   {"break16", "%i5u",	0xea00, 2, ATTR_ALL, 0, NULL, 0, NULL},
    730      1.1  christos   {"addi10.sp", "%i10s",	0xec00, 2, ATTR_V2UP, USE_REG (31) | DEF_REG (31), NULL, 0, NULL},
    731      1.1  christos   {"addi10.sp", "%i10s",	0xec00, 2, ATTR_V2UP, USE_REG (31) | DEF_REG (31), NULL, 0, NULL},
    732      1.1  christos   /* SEG13_1  bit8.  */
    733      1.1  christos   {"beqzs8", "%i8s1",	0xe800, 2, ATTR_PCREL | ATTR_ALL, USE_REG (15), NULL, 0, NULL},
    734      1.1  christos   {"bnezs8", "%i8s1",	0xe900, 2, ATTR_PCREL | ATTR_ALL, USE_REG (15), NULL, 0, NULL},
    735      1.1  christos   /* SEG14  bit7.  */
    736      1.1  christos   {"lwi37.sp", "=rt38,[+%i7u2]",	0xf000, 2, ATTR_V2UP, USE_REG (31), NULL, 0, NULL},
    737      1.1  christos   {"swi37.sp", "%rt38,[+%i7u2]",	0xf080, 2, ATTR_V2UP, USE_REG (31), NULL, 0, NULL},
    738      1.1  christos   /* SEG15  bit10~bit9.  */
    739      1.1  christos   {"movpi45", "=rt4,%pi5",	0xfa00, 2, ATTR_V3MUP, 0, NULL, 0, NULL},
    740      1.1  christos   /* SEG15_1  bit8.  */
    741      1.1  christos   {"movd44", "=rt5e,%ra5e",	0xfd00, 2, ATTR_V3MUP, 0, NULL, 0, NULL},
    742      1.1  christos 
    743      1.1  christos   /* SEG-BFMI333 bit2~bit0.  */
    744      1.1  christos   {"zeb33", "=rt3,%ra3",	0x9600, 2, ATTR_ALL, 0, NULL, 0, NULL},
    745      1.1  christos   {"zeh33", "=rt3,%ra3",	0x9601, 2, ATTR_ALL, 0, NULL, 0, NULL},
    746      1.1  christos   {"seb33", "=rt3,%ra3",	0x9602, 2, ATTR_ALL, 0, NULL, 0, NULL},
    747      1.1  christos   {"seh33", "=rt3,%ra3",	0x9603, 2, ATTR_ALL, 0, NULL, 0, NULL},
    748      1.1  christos   {"xlsb33", "=rt3,%ra3",	0x9604, 2, ATTR_ALL, 0, NULL, 0, NULL},
    749      1.1  christos   {"x11b33", "=rt3,%ra3",	0x9605, 2, ATTR_ALL, 0, NULL, 0, NULL},
    750      1.1  christos   {"bmski33", "=rt3,%ia3u",	0x9606, 2, ATTR_V3MUP, 0, NULL, 0, NULL},
    751      1.1  christos   {"fexti33", "=rt3,%ia3u",	0x9607, 2, ATTR_V3MUP, 0, NULL, 0, NULL},
    752      1.1  christos   /* SEG-PUSHPOP25 bit8~bit7.  */
    753      1.1  christos   {"push25", "%re2,%i5u3",	0xfc00, 2, ATTR_V3MUP, USE_REG (31) | DEF_REG (31), NULL, 0, NULL},
    754      1.1  christos   {"pop25", "%re2,%i5u3",	0xfc80, 2, ATTR_V3MUP, USE_REG (31) | DEF_REG (31), NULL, 0, NULL},
    755      1.1  christos   /* SEG-MISC33 bit2~bit0.  */
    756      1.1  christos   {"neg33", "=rt3,%ra3",	0xfe02, 2, ATTR_V3MUP, 0, NULL, 0, NULL},
    757      1.1  christos   {"not33", "=rt3,%ra3",	0xfe03, 2, ATTR_V3MUP, 0, NULL, 0, NULL},
    758      1.1  christos   {"mul33", "=rt3,%ra3",	0xfe04, 2, ATTR_V3MUP, 0, NULL, 0, NULL},
    759      1.1  christos   {"xor33", "=rt3,%ra3",	0xfe05, 2, ATTR_V3MUP, 0, NULL, 0, NULL},
    760      1.1  christos   {"and33", "=rt3,%ra3",	0xfe06, 2, ATTR_V3MUP, 0, NULL, 0, NULL},
    761      1.1  christos   {"or33", "=rt3,%ra3",	0xfe07, 2, ATTR_V3MUP, 0, NULL, 0, NULL},
    762      1.1  christos   /* SEG-Alias instructions.  */
    763      1.1  christos   {"nop16", "",	0x9200, 2, ATTR_ALL, 0, NULL, 0, NULL},
    764      1.1  christos 
    765      1.1  christos   /* Saturation ext ISA.  */
    766      1.1  christos   {"kaddw", "=rt,%ra,%rb",	ALU2 (KADD), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    767      1.1  christos   {"ksubw", "=rt,%ra,%rb",	ALU2 (KSUB), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    768  1.1.1.3  christos   {"kaddh", "=rt,%ra,%rb",	ALU2 (KADD) | N32_BIT (6), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    769  1.1.1.3  christos   {"ksubh", "=rt,%ra,%rb",	ALU2 (KSUB) | N32_BIT (6), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    770      1.1  christos   {"kdmbb", "=rt,%ra,%rb",	ALU2 (KMxy), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    771  1.1.1.3  christos   {"kdmbt", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (6), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    772  1.1.1.3  christos   {"kdmtb", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (7), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    773  1.1.1.3  christos   {"kdmtt", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (6) | N32_BIT (7), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    774  1.1.1.3  christos   {"khmbb", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (8), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    775  1.1.1.3  christos   {"khmbt", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (8) | N32_BIT (6), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    776  1.1.1.3  christos   {"khmtb", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (8) | N32_BIT (7), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    777  1.1.1.3  christos   {"khmtt", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (8) | N32_BIT (6) | N32_BIT (7), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    778  1.1.1.5  christos   {"kslraw", "=rt,%ra,%rb",	ALU2 (KSLRAW), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    779  1.1.1.5  christos   {"ksll", "=rt,%ra,%rb",	ALU2 (KSLRAW), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    780  1.1.1.5  christos   {"kslraw.u", "=rt,%ra,%rb",	ALU2 (KSLRAWu), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    781  1.1.1.3  christos   {"rdov", "=rt",		ALU2 (MFUSR) | N32_BIT (6) | ( 0x1e << 15), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    782  1.1.1.3  christos   {"clrov", "",			ALU2 (MTUSR) | N32_BIT (6) | ( 0x1e << 15), 4, ATTR (SATURATION_EXT), 0, NULL, 0, NULL},
    783      1.1  christos 
    784      1.1  christos   /* Audio ext. instructions.  */
    785      1.1  christos 
    786  1.1.1.5  christos   {"amtari", "%aridxi,%imm16u", AUDIO (AMTARI), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    787  1.1.1.5  christos   {"amtari", "%aridxi_mx,%imm16s", AUDIO (AMTARI), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    788      1.1  christos   /* N32_AEXT_AMADD */
    789      1.1  christos   {"alr2", "=a_rt,=a_ru,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMADD) | (0x1 << 6), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    790      1.1  christos   {"amaddl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMADD) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    791      1.1  christos   {"amaddl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMADD) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    792      1.1  christos   {"amaddl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMADD) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    793      1.1  christos   {"amaddl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMADD) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    794      1.1  christos   {"amaddsa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMADD) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    795      1.1  christos   {"alr", "=a_rt,[%im5_i],%im5_m", AUDIO (AMADD) | (0x01 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    796      1.1  christos   {"amadd", "=a_dx,%ra,%rb", AUDIO (AMADD), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    797      1.1  christos   {"amabbs", "=a_dx,%ra,%rb", AUDIO (AMADD) | 0x01, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    798      1.1  christos   /* N32_AEXT_AMSUB */
    799      1.1  christos   {"amsubl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMSUB) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    800      1.1  christos   {"amsubl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMSUB) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    801      1.1  christos   {"amsubl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMSUB) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    802      1.1  christos   {"amsubl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMSUB) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    803      1.1  christos   {"amsubsa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMSUB) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    804      1.1  christos   {"asr", "%ra,[%im5_i],%im5_m", AUDIO (AMSUB) | (0x01 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    805      1.1  christos   {"amsub", "=a_dx,%ra,%rb", AUDIO (AMSUB), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    806      1.1  christos   {"amabts", "=a_dx,%ra,%rb", AUDIO (AMSUB) |0x01, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    807      1.1  christos   /* N32_AEXT_AMULT */
    808      1.1  christos   {"amultl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMULT) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    809      1.1  christos   {"amultl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMULT) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    810      1.1  christos   {"amultl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMULT) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    811      1.1  christos   {"amultl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMULT) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    812      1.1  christos   {"amultsa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMULT) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    813      1.1  christos   {"ala", "=dxh,[%im5_i],%im5_m", AUDIO (AMULT) | (0x01 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    814      1.1  christos   {"amult", "=a_dx,%ra,%rb", AUDIO (AMULT), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    815      1.1  christos   {"amatbs", "=a_dx,%ra,%rb", AUDIO (AMULT) |0x01, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    816      1.1  christos   {"asats48", "=a_dx", AUDIO (AMULT) | (0x02 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    817      1.1  christos   {"awext", "%ra,%a_dx,%i5u", AUDIO (AMULT) | (0x03 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    818      1.1  christos   /* N32_AEXT_AMFAR */
    819      1.1  christos   {"amatts", "=a_dx,%ra,%rb", AUDIO (AMFAR) | 0x01, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    820      1.1  christos   {"asa", "=dxh,[%im5_i],%im5_m", AUDIO (AMFAR) | (0x01 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    821      1.1  christos   {"amtar", "%ra,%aridx", AUDIO (AMFAR) | (0x02 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    822      1.1  christos   {"amtar2", "%ra,%aridx2", AUDIO (AMFAR) | (0x12 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    823      1.1  christos   {"amfar", "=ra,%aridx", AUDIO (AMFAR) | (0x03 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    824      1.1  christos   {"amfar2", "=ra,%aridx2", AUDIO (AMFAR) | (0x13 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    825      1.1  christos   /* N32_AEXT_AMADDS */
    826      1.1  christos   {"amaddsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMADDS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    827      1.1  christos   {"amaddsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMADDS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    828      1.1  christos   {"amaddsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMADDS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    829      1.1  christos   {"amaddsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMADDS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    830      1.1  christos   {"amaddssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMADDS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    831      1.1  christos   {"aupi", "%im5_i,%im5_m", AUDIO (AMADDS) | (0x01 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    832      1.1  christos   {"amadds", "=a_dx,%ra,%rb", AUDIO (AMADDS), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    833      1.1  christos   {"ambbs", "=a_dx,%ra,%rb", AUDIO (AMADDS) |0x01, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    834      1.1  christos   {"amawbs", "=a_dx,%ra,%rb", AUDIO (AMADDS) |0x02, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    835      1.1  christos   /* N32_AEXT_AMSUBS */
    836      1.1  christos   {"amsubsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMSUBS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    837      1.1  christos   {"amsubsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMSUBS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    838      1.1  christos   {"amsubsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMSUBS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    839      1.1  christos   {"amsubsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMSUBS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    840      1.1  christos   {"amsubssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMSUBS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    841      1.1  christos   {"amsubs", "=a_dx,%ra,%rb", AUDIO (AMSUBS), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    842      1.1  christos   {"ambts", "=a_dx,%ra,%rb", AUDIO (AMSUBS) |0x01, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    843      1.1  christos   {"amawts", "=a_dx,%ra,%rb", AUDIO (AMSUBS) |0x02, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    844      1.1  christos   /* N32_AEXT_AMULTS */
    845      1.1  christos   {"amultsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMULTS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    846      1.1  christos   {"amultsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMULTS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    847      1.1  christos   {"amultsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMULTS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    848      1.1  christos   {"amultsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMULTS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    849      1.1  christos   {"amultssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMULTS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    850      1.1  christos   {"amults", "=a_dx,%ra,%rb", AUDIO (AMULTS), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    851      1.1  christos   {"amtbs", "=a_dx,%ra,%rb", AUDIO (AMULTS) |0x01, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    852      1.1  christos   {"amwbs", "=a_dx,%ra,%rb", AUDIO (AMULTS) |0x02, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    853      1.1  christos   /* N32_AEXT_AMNEGS */
    854      1.1  christos   {"amnegsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMNEGS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    855      1.1  christos   {"amnegsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMNEGS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    856      1.1  christos   {"amnegsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMNEGS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    857      1.1  christos   {"amnegsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMNEGS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    858      1.1  christos   {"amnegssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMNEGS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    859      1.1  christos   {"amnegs", "=a_dx,%ra,%rb", AUDIO (AMNEGS), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    860      1.1  christos   {"amtts", "=a_dx,%ra,%rb", AUDIO (AMNEGS) |0x01, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    861      1.1  christos   {"amwts", "=a_dx,%ra,%rb", AUDIO (AMNEGS) |0x02, 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    862      1.1  christos   /* N32_AEXT_AADDL */
    863      1.1  christos   {"aaddl", "=a_rte69,%ra,%rb,%a_rte69_1,[%im5_i],%im5_m", AUDIO (AADDL), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    864      1.1  christos   {"asubl", "=a_rte69,%ra,%rb,%a_rte69_1,[%im5_i],%im5_m", AUDIO (AADDL) | (0x01 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    865      1.1  christos   /* N32_AEXT_AMAWBS */
    866      1.1  christos   {"amawbsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMAWBS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    867      1.1  christos   {"amawbsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMAWBS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    868      1.1  christos   {"amawbsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMAWBS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    869      1.1  christos   {"amawbsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMAWBS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    870      1.1  christos   {"amawbssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMAWBS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    871      1.1  christos   /* N32_AEXT_AMAWTS */
    872      1.1  christos   {"amawtsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMAWTS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    873      1.1  christos   {"amawtsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMAWTS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    874      1.1  christos   {"amawtsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMAWTS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    875      1.1  christos   {"amawtsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMAWTS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    876      1.1  christos   {"amawtssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMAWTS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    877      1.1  christos   /* N32_AEXT_AMWBS */
    878      1.1  christos   {"amwbsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMWBS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    879      1.1  christos   {"amwbsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMWBS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    880      1.1  christos   {"amwbsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMWBS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    881      1.1  christos   {"amwbsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMWBS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    882      1.1  christos   {"amwbssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMWBS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    883      1.1  christos   {"amwbssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMWBS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    884      1.1  christos   /* N32_AEXT_AMWTS */
    885      1.1  christos   {"amwtsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMWTS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    886      1.1  christos   {"amwtsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMWTS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    887      1.1  christos   {"amwtsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMWTS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    888      1.1  christos   {"amwtsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMWTS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    889      1.1  christos   {"amwtssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMWTS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    890      1.1  christos   /* N32_AEXT_AMABBS */
    891      1.1  christos   {"amabbsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMABBS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    892      1.1  christos   {"amabbsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMABBS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    893      1.1  christos   {"amabbsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMABBS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    894      1.1  christos   {"amabbsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMABBS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    895      1.1  christos   {"amabbssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMABBS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    896      1.1  christos   /* N32_AEXT_AMABTS */
    897      1.1  christos   {"amabtsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMABTS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    898      1.1  christos   {"amabtsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMABTS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    899      1.1  christos   {"amabtsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMABTS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    900      1.1  christos   {"amabtsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMABTS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    901      1.1  christos   {"amabtssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMABTS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    902      1.1  christos   /* N32_AEXT_AMATBS */
    903      1.1  christos   {"amatbsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMATBS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    904      1.1  christos   {"amatbsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMATBS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    905      1.1  christos   {"amatbsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMATBS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    906      1.1  christos   {"amatbsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMATBS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    907      1.1  christos   {"amatbssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMATBS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    908      1.1  christos   /* N32_AEXT_AMATTS */
    909      1.1  christos   {"amattsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMATTS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    910      1.1  christos   {"amattsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMATTS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    911      1.1  christos   {"amattsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMATTS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    912      1.1  christos   {"amattsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMATTS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    913      1.1  christos   {"amattssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMATTS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    914      1.1  christos   /* N32_AEXT_AMBBS */
    915      1.1  christos   {"ambbsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMBBS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    916      1.1  christos   {"ambbsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMBBS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    917      1.1  christos   {"ambbsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMBBS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    918      1.1  christos   {"ambbsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMBBS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    919      1.1  christos   {"ambbssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMBBS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    920      1.1  christos   /* N32_AEXT_AMBTS */
    921      1.1  christos   {"ambtsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMBTS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    922      1.1  christos   {"ambtsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMBTS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    923      1.1  christos   {"ambtsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMBTS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    924      1.1  christos   {"ambtsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMBTS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    925      1.1  christos   {"ambtssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMBTS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    926      1.1  christos   /* N32_AEXT_AMTBS */
    927      1.1  christos   {"amtbsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMTBS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    928      1.1  christos   {"amtbsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMTBS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    929      1.1  christos   {"amtbsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMTBS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    930      1.1  christos   {"amtbsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMTBS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    931      1.1  christos   {"amtbssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMTBS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    932      1.1  christos   /* N32_AEXT_AMTTS */
    933      1.1  christos   {"amttsl.s", "=a_dx,%ra,%rb,[%im5_i],%im5_m", AUDIO (AMTTS) | (0x04 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    934      1.1  christos   {"amttsl.l", "=a_dx,%a_a30,%a_b20,%a_rt21,[%im5_i],%im5_m", AUDIO (AMTTS) | (0x06 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    935      1.1  christos   {"amttsl2.s", "=a_dx,%ra,%rb,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMTTS) | (0x08 << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    936      1.1  christos   {"amttsl2.l", "=a_dx,%a_a30,%a_b20,%a_rte,%a_rte1,[%im6_ip],[%im6_iq],%im6_mr,%im6_ms", AUDIO (AMTTS) | (0x0A << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    937      1.1  christos   {"amttssa", "=a_dx,%ra,%rb,%dhy,[%im5_i],%im5_m", AUDIO (AMTTS) | (0x0C << 5), 4, ATTR (AUDIO_ISAEXT), 0, NULL, 0, NULL},
    938  1.1.1.5  christos 
    939  1.1.1.5  christos   /* DSP ISA.  */
    940  1.1.1.5  christos   /* ALU2 Bit 9-6 = 0000.  */
    941  1.1.1.5  christos   {"add64", "=rt,%ra,%rb",	ALU2 (ADD64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    942  1.1.1.5  christos   {"sub64", "=rt,%ra,%rb",	ALU2 (SUB64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    943  1.1.1.5  christos   {"smal", "=rt,%ra,%rb",	ALU2 (SMAL), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    944  1.1.1.5  christos   {"radd64", "=rt,%ra,%rb",	ALU2 (RADD64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    945  1.1.1.5  christos   {"rsub64", "=rt,%ra,%rb",	ALU2 (RSUB64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    946  1.1.1.5  christos   {"uradd64", "=rt,%ra,%rb",	ALU2 (URADD64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    947  1.1.1.5  christos   {"ursub64", "=rt,%ra,%rb",	ALU2 (URSUB64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    948  1.1.1.5  christos   {"kadd64", "=rt,%ra,%rb",	ALU2 (KADD64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    949  1.1.1.5  christos   {"ksub64", "=rt,%ra,%rb",	ALU2 (KSUB64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    950  1.1.1.5  christos   {"ukadd64", "=rt,%ra,%rb",	ALU2 (UKADD64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    951  1.1.1.5  christos   {"uksub64", "=rt,%ra,%rb",	ALU2 (UKSUB64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    952  1.1.1.5  christos   /* ALU2 Bit 9-6 = 0001.  */
    953  1.1.1.5  christos   {"smar64", "=rt,%ra,%rb",	ALU2_1 (SMAR64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    954  1.1.1.5  christos   {"umar64", "=rt,%ra,%rb",	ALU2_1 (UMAR64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    955  1.1.1.5  christos   {"smsr64", "=rt,%ra,%rb",	ALU2_1 (SMSR64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    956  1.1.1.5  christos   {"umsr64", "=rt,%ra,%rb",	ALU2_1 (UMSR64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    957  1.1.1.5  christos   {"kmar64", "=rt,%ra,%rb",	ALU2_1 (KMAR64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    958  1.1.1.5  christos   {"ukmar64", "=rt,%ra,%rb",	ALU2_1 (UKMAR64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    959  1.1.1.5  christos   {"kmsr64", "=rt,%ra,%rb",	ALU2_1 (KMSR64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    960  1.1.1.5  christos   {"ukmsr64", "=rt,%ra,%rb",	ALU2_1 (UKMSR64), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    961  1.1.1.5  christos   {"smalda", "=rt,%ra,%rb",	ALU2_1 (SMALDA), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    962  1.1.1.5  christos   {"smslda", "=rt,%ra,%rb",	ALU2_1 (SMSLDA), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    963  1.1.1.5  christos   {"smalds", "=rt,%ra,%rb",	ALU2_1 (SMALDS), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    964  1.1.1.5  christos   {"smalbb", "=rt,%ra,%rb",	ALU2_1 (SMALBB), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    965  1.1.1.5  christos   {"smalxda", "=rt,%ra,%rb",	ALU2_1 (SMALXDA), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    966  1.1.1.5  christos   {"smslxda", "=rt,%ra,%rb",	ALU2_1 (SMSLXDA), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    967  1.1.1.5  christos   {"smalxds", "=rt,%ra,%rb",	ALU2_1 (SMALXDS), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    968  1.1.1.5  christos   {"smalbt", "=rt,%ra,%rb",	ALU2_1 (SMALBT), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    969  1.1.1.5  christos   {"smalbt", "=rt,%ra,%rb",	ALU2_1 (SMALBT), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    970  1.1.1.5  christos   {"smaldrs", "=rt,%ra,%rb",	ALU2_1 (SMALDRS), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    971  1.1.1.5  christos   {"smaltt", "=rt,%ra,%rb",	ALU2_1 (SMALTT), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    972  1.1.1.5  christos   {"smds", "=rt,%ra,%rb",	ALU2_1 (SMDS), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    973  1.1.1.5  christos   {"smxds", "=rt,%ra,%rb",	ALU2_1 (SMXDS), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    974  1.1.1.5  christos   {"smdrs", "=rt,%ra,%rb",	ALU2_1 (SMDRS), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    975  1.1.1.5  christos   {"kmadrs", "=rt,%ra,%rb",	ALU2_1 (KMADRS), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    976  1.1.1.5  christos   {"kmads", "=rt,%ra,%rb",	ALU2_1 (KMADS), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    977  1.1.1.5  christos   {"kmaxds", "=rt,%ra,%rb",	ALU2_1 (KMAXDS), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    978  1.1.1.5  christos   /* DSP MISC.  */
    979  1.1.1.5  christos   {"bpick", "=rt,%ra,%rb,%rd",	MISC (BPICK), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    980  1.1.1.5  christos   /* ALU_2 KMxy.  */
    981  1.1.1.5  christos   {"khm16", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (9) | N32_BIT (8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    982  1.1.1.5  christos   {"khmx16", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (9) | N32_BIT (8) | N32_BIT (6), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    983  1.1.1.5  christos   {"smul16", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (9), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    984  1.1.1.5  christos   {"smulx16", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (9) | N32_BIT (6), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    985  1.1.1.5  christos   {"umul16", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (9) | N32_BIT (7), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    986  1.1.1.5  christos   {"umulx16", "=rt,%ra,%rb",	ALU2 (KMxy) | N32_BIT (9) | N32_BIT (7) | N32_BIT (6), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    987  1.1.1.5  christos   /* ALU2 Bit 9-6 = 0010.  */
    988  1.1.1.5  christos   {"kadd16", "=rt,%ra,%rb",	ALU2_2 (KADD16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    989  1.1.1.5  christos   {"ksub16", "=rt,%ra,%rb",	ALU2_2 (KSUB16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    990  1.1.1.5  christos   {"kcras16", "=rt,%ra,%rb",	ALU2_2 (KCRAS16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    991  1.1.1.5  christos   {"kcrsa16", "=rt,%ra,%rb",	ALU2_2 (KCRSA16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    992  1.1.1.5  christos   {"kadd8", "=rt,%ra,%rb",	ALU2_2 (KADD8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    993  1.1.1.5  christos   {"ksub8", "=rt,%ra,%rb",	ALU2_2 (KSUB8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    994  1.1.1.5  christos   {"wext", "=rt,%ra,%rb",	ALU2_2 (WEXT), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    995  1.1.1.5  christos   {"wexti", "=rt,%ra,%ib5u",	ALU2_2 (WEXTI), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    996  1.1.1.5  christos   {"ukadd16", "=rt,%ra,%rb",	ALU2_2 (UKADD16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    997  1.1.1.5  christos   {"uksub16", "=rt,%ra,%rb",	ALU2_2 (UKSUB16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    998  1.1.1.5  christos   {"ukcras16", "=rt,%ra,%rb",	ALU2_2 (UKCRAS16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
    999  1.1.1.5  christos   {"ukcrsa16", "=rt,%ra,%rb",	ALU2_2 (UKCRSA16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1000  1.1.1.5  christos   {"ukadd8", "=rt,%ra,%rb",	ALU2_2 (UKADD8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1001  1.1.1.5  christos   {"uksub8", "=rt,%ra,%rb",	ALU2_2 (UKSUB8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1002  1.1.1.5  christos   /* ONEOP.  */
   1003  1.1.1.5  christos #define DSP_ONEOP(n) ((n) << 10)
   1004  1.1.1.5  christos   {"sunpkd810", "=rt,%ra",	ALU2_2 (ONEOP) | DSP_ONEOP (0x0), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1005  1.1.1.5  christos   {"sunpkd820", "=rt,%ra",	ALU2_2 (ONEOP) | DSP_ONEOP (0x1), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1006  1.1.1.5  christos   {"sunpkd830", "=rt,%ra",	ALU2_2 (ONEOP) | DSP_ONEOP (0x2), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1007  1.1.1.5  christos   {"sunpkd831", "=rt,%ra",	ALU2_2 (ONEOP) | DSP_ONEOP (0x3), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1008  1.1.1.5  christos   {"zunpkd810", "=rt,%ra",	ALU2_2 (ONEOP) | DSP_ONEOP (0x4), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1009  1.1.1.5  christos   {"zunpkd820", "=rt,%ra",	ALU2_2 (ONEOP) | DSP_ONEOP (0x5), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1010  1.1.1.5  christos   {"zunpkd830", "=rt,%ra",	ALU2_2 (ONEOP) | DSP_ONEOP (0x6), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1011  1.1.1.5  christos   {"zunpkd831", "=rt,%ra",	ALU2_2 (ONEOP) | DSP_ONEOP (0x7), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1012  1.1.1.5  christos   {"kabs", "=rt,%ra",		ALU2 (ABS), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
   1013  1.1.1.5  christos   {"kabs16", "=rt,%ra",		ALU2_2 (ONEOP) | DSP_ONEOP (0x8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1014  1.1.1.5  christos   {"kabs8", "=rt,%ra",		ALU2_2 (ONEOP) | DSP_ONEOP (0xc), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1015  1.1.1.5  christos   {"insb", "=rt,%ra,%ib2u",	ALU2_2 (ONEOP) | DSP_ONEOP (0x10), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1016  1.1.1.5  christos   {"smbb", "=rt,%ra,%rb",	ALU2_2 (SMBB), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1017  1.1.1.5  christos   {"smbt", "=rt,%ra,%rb",	ALU2_2 (SMBT), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1018  1.1.1.5  christos   {"smtt", "=rt,%ra,%rb",	ALU2_2 (SMTT), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1019  1.1.1.5  christos   {"kmabb", "=rt,%ra,%rb",	ALU2_2 (KMABB), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1020  1.1.1.5  christos   {"kmabt", "=rt,%ra,%rb",	ALU2_2 (KMABT), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1021  1.1.1.5  christos   {"kmatt", "=rt,%ra,%rb",	ALU2_2 (KMATT), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1022  1.1.1.5  christos   {"kmda", "=rt,%ra,%rb",	ALU2_2 (KMDA), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1023  1.1.1.5  christos   {"kmxda", "=rt,%ra,%rb",	ALU2_2 (KMXDA), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1024  1.1.1.5  christos   {"kmada", "=rt,%ra,%rb",	ALU2_2 (KMADA), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1025  1.1.1.5  christos   {"kmaxda", "=rt,%ra,%rb",	ALU2_2 (KMAXDA), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1026  1.1.1.5  christos   {"kmsda", "=rt,%ra,%rb",	ALU2_2 (KMSDA), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1027  1.1.1.5  christos   {"kmsxda", "=rt,%ra,%rb",	ALU2_2 (KMSXDA), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1028  1.1.1.5  christos   {"radd16", "=rt,%ra,%rb",	ALU2_2 (RADD16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1029  1.1.1.5  christos   {"rsub16", "=rt,%ra,%rb",	ALU2_2 (RSUB16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1030  1.1.1.5  christos   {"rcras16", "=rt,%ra,%rb",	ALU2_2 (RCRAS16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1031  1.1.1.5  christos   {"rcrsa16", "=rt,%ra,%rb",	ALU2_2 (RCRSA16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1032  1.1.1.5  christos   {"radd8", "=rt,%ra,%rb",	ALU2_2 (RADD8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1033  1.1.1.5  christos   {"rsub8", "=rt,%ra,%rb",	ALU2_2 (RSUB8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1034  1.1.1.5  christos   {"raddw", "=rt,%ra,%rb",	ALU2_2 (RADDW), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1035  1.1.1.5  christos   {"rsubw", "=rt,%ra,%rb",	ALU2_2 (RSUBW), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1036  1.1.1.5  christos   {"uradd16", "=rt,%ra,%rb",	ALU2_2 (URADD16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1037  1.1.1.5  christos   {"ursub16", "=rt,%ra,%rb",	ALU2_2 (URSUB16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1038  1.1.1.5  christos   {"urcras16", "=rt,%ra,%rb",	ALU2_2 (URCRAS16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1039  1.1.1.5  christos   {"urcrsa16", "=rt,%ra,%rb",	ALU2_2 (URCRSA16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1040  1.1.1.5  christos   {"uradd8", "=rt,%ra,%rb",	ALU2_2 (URADD8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1041  1.1.1.5  christos   {"ursub8", "=rt,%ra,%rb",	ALU2_2 (URSUB8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1042  1.1.1.5  christos   {"uraddw", "=rt,%ra,%rb",	ALU2_2 (URADDW), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1043  1.1.1.5  christos   {"ursubw", "=rt,%ra,%rb",	ALU2_2 (URSUBW), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1044  1.1.1.5  christos   {"add16", "=rt,%ra,%rb",	ALU2_2 (ADD16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1045  1.1.1.5  christos   {"sub16", "=rt,%ra,%rb",	ALU2_2 (SUB16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1046  1.1.1.5  christos   {"cras16", "=rt,%ra,%rb",	ALU2_2 (CRAS16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1047  1.1.1.5  christos   {"crsa16", "=rt,%ra,%rb",	ALU2_2 (CRSA16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1048  1.1.1.5  christos   {"add8", "=rt,%ra,%rb",	ALU2_2 (ADD8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1049  1.1.1.5  christos   {"sub8", "=rt,%ra,%rb",	ALU2_2 (SUB8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1050  1.1.1.5  christos   {"bitrev", "=rt,%ra,%rb",	ALU2_2 (BITREV), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1051  1.1.1.5  christos   {"bitrevi", "=rt,%ra,%ib5u",	ALU2_2 (BITREVI), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1052  1.1.1.5  christos   {"smmul", "=rt,%ra,%rb",	ALU2_2 (SMMUL), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1053  1.1.1.5  christos   {"smmul.u", "=rt,%ra,%rb",	ALU2_2 (SMMULu), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1054  1.1.1.5  christos   {"kmmac", "=rt,%ra,%rb",	ALU2_2 (KMMAC), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1055  1.1.1.5  christos   {"kmmac.u", "=rt,%ra,%rb",	ALU2_2 (KMMACu), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1056  1.1.1.5  christos   {"kmmsb", "=rt,%ra,%rb",	ALU2_2 (KMMSB), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1057  1.1.1.5  christos   {"kmmsb.u", "=rt,%ra,%rb",	ALU2_2 (KMMSBu), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1058  1.1.1.5  christos   {"kwmmul", "=rt,%ra,%rb",	ALU2_2 (KWMMUL), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1059  1.1.1.5  christos   {"kwmmul.u", "=rt,%ra,%rb",	ALU2_2 (KWMMULu), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1060  1.1.1.5  christos   /* ALU2 Bit 9-6 = 0010.  */
   1061  1.1.1.5  christos   {"smmwb", "=rt,%ra,%rb",	ALU2_3 (SMMWB), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1062  1.1.1.5  christos   {"smmwb.u", "=rt,%ra,%rb",	ALU2_3 (SMMWBu), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1063  1.1.1.5  christos   {"smmwt", "=rt,%ra,%rb",	ALU2_3 (SMMWT), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1064  1.1.1.5  christos   {"smmwt.u", "=rt,%ra,%rb",	ALU2_3 (SMMWTu), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1065  1.1.1.5  christos   {"kmmawb", "=rt,%ra,%rb",	ALU2_3 (KMMAWB), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1066  1.1.1.5  christos   {"kmmawb.u", "=rt,%ra,%rb",	ALU2_3 (KMMAWBu), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1067  1.1.1.5  christos   {"kmmawt", "=rt,%ra,%rb",	ALU2_3 (KMMAWT), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1068  1.1.1.5  christos   {"kmmawt.u", "=rt,%ra,%rb",	ALU2_3 (KMMAWTu), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1069  1.1.1.5  christos   {"pktt16", "=rt,%ra,%rb",	ALU2_3 (PKTT16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1070  1.1.1.5  christos   {"pktb16", "=rt,%ra,%rb",	ALU2_3 (PKTB16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1071  1.1.1.5  christos   {"pkbt16", "=rt,%ra,%rb",	ALU2_3 (PKBT16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1072  1.1.1.5  christos   {"pkbb16", "=rt,%ra,%rb",	ALU2_3 (PKBB16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1073  1.1.1.5  christos   {"sclip32", "=rt,%ra,%ib5u",	ALU2 (CLIPS), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
   1074  1.1.1.5  christos   {"sclip16", "=rt,%ra,%ib4u",	ALU2_3 (SCLIP16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1075  1.1.1.5  christos   {"smax16", "=rt,%ra,%rb",	ALU2_3 (SMAX16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1076  1.1.1.5  christos   {"smax8", "=rt,%ra,%rb",	ALU2_3 (SMAX8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1077  1.1.1.5  christos   {"uclip32", "=rt,%ra,%ib5u",	ALU2 (CLIP), 4, ATTR (PERF_EXT), 0, NULL, 0, NULL},
   1078  1.1.1.5  christos   {"uclip16", "=rt,%ra,%ib4u",	ALU2_3 (UCLIP16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1079  1.1.1.5  christos   {"umax16", "=rt,%ra,%rb",	ALU2_3 (UMAX16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1080  1.1.1.5  christos   {"umax8", "=rt,%ra,%rb",	ALU2_3 (UMAX8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1081  1.1.1.5  christos   {"sra16", "=rt,%ra,%rb",	ALU2_3 (SRA16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1082  1.1.1.5  christos   {"sra16.u", "=rt,%ra,%rb",	ALU2_3 (SRA16u), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1083  1.1.1.5  christos   {"srl16", "=rt,%ra,%rb",	ALU2_3 (SRL16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1084  1.1.1.5  christos   {"srl16.u", "=rt,%ra,%rb",	ALU2_3 (SRL16u), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1085  1.1.1.5  christos   {"sll16", "=rt,%ra,%rb",	ALU2_3 (SLL16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1086  1.1.1.5  christos   {"kslra16", "=rt,%ra,%rb",	ALU2_3 (KSLRA16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1087  1.1.1.5  christos   {"ksll16", "=rt,%ra,%rb",	ALU2_3 (KSLRA16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1088  1.1.1.5  christos   {"kslra16.u", "=rt,%ra,%rb",	ALU2_3 (KSLRA16u), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1089  1.1.1.5  christos   {"sra.u", "=rt,%ra,%rb",	ALU2_3 (SRAu), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1090  1.1.1.5  christos   {"srai16", "=rt,%ra,%ib4u",	ALU2_3 (SRAI16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1091  1.1.1.5  christos   {"srai16.u", "=rt,%ra,%ib4u",	ALU2_3 (SRAI16u), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1092  1.1.1.5  christos   {"srli16", "=rt,%ra,%ib4u",	ALU2_3 (SRLI16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1093  1.1.1.5  christos   {"srli16.u", "=rt,%ra,%ib4u",	ALU2_3 (SRLI16u), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1094  1.1.1.5  christos   {"slli16", "=rt,%ra,%ib4u",	ALU2_3 (SLLI16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1095  1.1.1.5  christos   {"kslli16", "=rt,%ra,%ib4u",	ALU2_3 (KSLLI16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1096  1.1.1.5  christos   {"kslli", "=rt,%ra,%ib5u",	ALU2_3 (KSLLI), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1097  1.1.1.5  christos   {"srai.u", "=rt,%ra,%ib5u",	ALU2_3 (SRAIu), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1098  1.1.1.5  christos   {"cmpeq16", "=rt,%ra,%rb",	ALU2_3 (CMPEQ16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1099  1.1.1.5  christos   {"scmplt16", "=rt,%ra,%rb",	ALU2_3 (SCMPLT16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1100  1.1.1.5  christos   {"scmple16", "=rt,%ra,%rb",	ALU2_3 (SCMPLE16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1101  1.1.1.5  christos   {"smin16", "=rt,%ra,%rb",	ALU2_3 (SMIN16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1102  1.1.1.5  christos   {"cmpeq8", "=rt,%ra,%rb",	ALU2_3 (CMPEQ8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1103  1.1.1.5  christos   {"scmplt8", "=rt,%ra,%rb",	ALU2_3 (SCMPLT8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1104  1.1.1.5  christos   {"scmple8", "=rt,%ra,%rb",	ALU2_3 (SCMPLE8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1105  1.1.1.5  christos   {"smin8", "=rt,%ra,%rb",	ALU2_3 (SMIN8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1106  1.1.1.5  christos   {"ucmplt16", "=rt,%ra,%rb",	ALU2_3 (UCMPLT16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1107  1.1.1.5  christos   {"ucmple16", "=rt,%ra,%rb",	ALU2_3 (UCMPLE16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1108  1.1.1.5  christos   {"umin16", "=rt,%ra,%rb",	ALU2_3 (UMIN16), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1109  1.1.1.5  christos   {"ucmplt8", "=rt,%ra,%rb",	ALU2_3 (UCMPLT8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1110  1.1.1.5  christos   {"ucmple8", "=rt,%ra,%rb",	ALU2_3 (UCMPLE8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1111  1.1.1.5  christos   {"umin8", "=rt,%ra,%rb",	ALU2_3 (UMIN8), 4, ATTR (DSP_ISAEXT), 0, NULL, 0, NULL},
   1112  1.1.1.5  christos   {"mtlbi", "%i16s1",		BR2 (SOP0) | N32_BIT (20), 4, ATTR (ZOL) | ATTR (DSP_ISAEXT) | ATTR (PCREL), 0, NULL, 0, NULL},
   1113  1.1.1.5  christos   {"mtlei", "%i16s1",		BR2 (SOP0) | N32_BIT (21), 4, ATTR (ZOL) | ATTR (DSP_ISAEXT) | ATTR (PCREL), 0, NULL, 0, NULL},
   1114      1.1  christos   {NULL, NULL, 0, 0, 0, 0, NULL, 0, NULL},
   1115      1.1  christos };
   1116      1.1  christos 
   1117  1.1.1.6  christos const keyword_t nds32_keyword_gpr[] =
   1118      1.1  christos {
   1119      1.1  christos   /* Standard names.  */
   1120      1.1  christos   {"r0", 0, ATTR (RDREG)}, {"r1", 1, ATTR (RDREG)}, {"r2", 2, ATTR (RDREG)},
   1121      1.1  christos   {"r3", 3, ATTR (RDREG)}, {"r4", 4, ATTR (RDREG)}, {"r5", 5, ATTR (RDREG)},
   1122      1.1  christos   {"r6", 6, ATTR (RDREG)}, {"r7", 7, ATTR (RDREG)}, {"r8", 8, ATTR (RDREG)},
   1123      1.1  christos   {"r9", 9, ATTR (RDREG)}, {"r10", 10, ATTR (RDREG)}, {"r11", 11, 0},
   1124      1.1  christos   {"r12", 12, 0}, {"r13", 13, 0}, {"r14", 14, 0}, {"r15", 15, ATTR (RDREG)},
   1125      1.1  christos   {"r16", 16, 0}, {"r17", 17, 0}, {"r18", 18, 0}, {"r19", 19, 0},
   1126      1.1  christos   {"r20", 20, 0}, {"r21", 21, 0}, {"r22", 22, 0}, {"r23", 23, 0},
   1127      1.1  christos   {"r24", 24, 0}, {"r25", 25, 0},
   1128      1.1  christos   {"p0", 26, 0}, {"p1", 27, 0},
   1129      1.1  christos   {"fp", 28, ATTR (RDREG)}, {"gp", 29, ATTR (RDREG)},
   1130      1.1  christos   {"lp", 30, ATTR (RDREG)}, {"sp", 31, ATTR (RDREG)},
   1131      1.1  christos   {"r26", 26, 0}, {"r27", 27, 0},
   1132      1.1  christos   {"r28", 28, ATTR (RDREG)}, {"r29", 29, ATTR (RDREG)},
   1133      1.1  christos   {"r30", 30, ATTR (RDREG)}, {"r31", 31, ATTR (RDREG)},
   1134      1.1  christos   /* Names for parameter passing.  */
   1135      1.1  christos   {"a0", 0, ATTR (RDREG)}, {"a1", 1, ATTR (RDREG)},
   1136      1.1  christos   {"a2", 2, ATTR (RDREG)}, {"a3", 3, ATTR (RDREG)},
   1137      1.1  christos   {"a4", 4, ATTR (RDREG)}, {"a5", 5, ATTR (RDREG)},
   1138      1.1  christos   /* Names reserved for 5-bit addressing only.  */
   1139      1.1  christos   {"s0", 6, ATTR (RDREG)}, {"s1", 7, ATTR (RDREG)},
   1140      1.1  christos   {"s2", 8, ATTR (RDREG)}, {"s3", 9, ATTR (RDREG)},
   1141      1.1  christos   {"s4", 10, ATTR (RDREG)}, {"s5", 11, 0}, {"s6", 12, 0}, {"s7", 13, 0},
   1142      1.1  christos   {"s8", 14, 0}, {"s9", 28, ATTR (RDREG)},
   1143      1.1  christos   {"ta", 15, ATTR (RDREG)},
   1144      1.1  christos   {"t0", 16, 0}, {"t1", 17, 0}, {"t2", 18, 0}, {"t3", 19, 0},
   1145      1.1  christos   {"t4", 20, 0}, {"t5", 21, 0}, {"t6", 22, 0}, {"t7", 23, 0},
   1146      1.1  christos   {"t8", 24, 0}, {"t9", 25, 0},
   1147      1.1  christos   /* Names reserved for 4-bit addressing only.  */
   1148      1.1  christos   {"h0", 0, ATTR (RDREG)}, {"h1", 1, ATTR (RDREG)},
   1149      1.1  christos   {"h2", 2, ATTR (RDREG)}, {"h3", 3, ATTR (RDREG)},
   1150      1.1  christos   {"h4", 4, ATTR (RDREG)}, {"h5", 5, ATTR (RDREG)},
   1151      1.1  christos   {"h6", 6, ATTR (RDREG)}, {"h7", 7, ATTR (RDREG)},
   1152      1.1  christos   {"h8", 8, ATTR (RDREG)}, {"h9", 9, ATTR (RDREG)},
   1153      1.1  christos   {"h10", 10, ATTR (RDREG)}, {"h11", 11, 0},
   1154      1.1  christos   {"h12", 16, 0}, {"h13", 17, 0}, {"h14", 18, 0}, {"h15", 19, 0},
   1155      1.1  christos   /* Names reserved for 3-bit addressing only.  */
   1156      1.1  christos   {"o0", 0, ATTR (RDREG)}, {"o1", 1, ATTR (RDREG)},
   1157      1.1  christos   {"o2", 2, ATTR (RDREG)}, {"o3", 3, ATTR (RDREG)},
   1158      1.1  christos   {"o4", 4, ATTR (RDREG)}, {"o5", 5, ATTR (RDREG)},
   1159      1.1  christos   {"o6", 6, ATTR (RDREG)}, {"o7", 7, ATTR (RDREG)},
   1160      1.1  christos   {NULL, 0, 0}
   1161      1.1  christos };
   1162      1.1  christos 
   1163  1.1.1.6  christos static const keyword_t keyword_usr[] =
   1164      1.1  christos {
   1165      1.1  christos   {"d0.lo", USRIDX (0, 0), 0},
   1166      1.1  christos   {"d0.hi", USRIDX (0, 1), 0},
   1167      1.1  christos   {"d1.lo", USRIDX (0, 2), 0},
   1168      1.1  christos   {"d1.hi", USRIDX (0, 3), 0},
   1169  1.1.1.5  christos   {"lb", USRIDX (0, 25), 0},
   1170  1.1.1.5  christos   {"le", USRIDX (0, 26), 0},
   1171  1.1.1.5  christos   {"lc", USRIDX (0, 27), 0},
   1172      1.1  christos   {"itb", USRIDX (0, 28), 0},
   1173      1.1  christos   {"ifc_lp", USRIDX (0, 29), 0},
   1174      1.1  christos   {"pc", USRIDX (0, 31), 0},
   1175      1.1  christos 
   1176      1.1  christos   {"dma_cfg", USRIDX (1, 0), 0},
   1177      1.1  christos   {"dma_gcsw", USRIDX (1, 1), 0},
   1178      1.1  christos   {"dma_chnsel", USRIDX (1, 2), 0},
   1179      1.1  christos   {"dma_act", USRIDX (1, 3), 0},
   1180      1.1  christos   {"dma_setup", USRIDX (1, 4), 0},
   1181      1.1  christos   {"dma_isaddr", USRIDX (1, 5), 0},
   1182      1.1  christos   {"dma_esaddr", USRIDX (1, 6), 0},
   1183      1.1  christos   {"dma_tcnt", USRIDX (1, 7), 0},
   1184      1.1  christos   {"dma_status", USRIDX (1, 8), 0},
   1185      1.1  christos   {"dma_2dset", USRIDX (1, 9), 0},
   1186      1.1  christos   {"dma_rcnt", USRIDX (1, 23), 0},
   1187      1.1  christos   {"dma_hstatus", USRIDX (1, 24), 0},
   1188      1.1  christos   {"dma_2dsctl", USRIDX (1, 25), 0},
   1189      1.1  christos 
   1190      1.1  christos   {"pfmc0", USRIDX (2, 0), 0},
   1191      1.1  christos   {"pfmc1", USRIDX (2, 1), 0},
   1192      1.1  christos   {"pfmc2", USRIDX (2, 2), 0},
   1193      1.1  christos   {"pfm_ctl", USRIDX (2, 4), 0},
   1194      1.1  christos 
   1195      1.1  christos   {NULL, 0, 0}
   1196      1.1  christos };
   1197      1.1  christos 
   1198  1.1.1.6  christos static const keyword_t keyword_dxr[] =
   1199      1.1  christos {
   1200      1.1  christos   {"d0", 0, 0}, {"d1", 1, 0}, {NULL, 0, 0}
   1201      1.1  christos };
   1202      1.1  christos 
   1203  1.1.1.6  christos static const keyword_t keyword_sr[] =
   1204      1.1  christos {
   1205      1.1  christos   {"cpu_ver", SRIDX (0, 0, 0), 0},	{"cr0", SRIDX (0, 0, 0), 0},
   1206      1.1  christos   {"icm_cfg", SRIDX (0, 1, 0), 0},	{"cr1", SRIDX (0, 1, 0), 0},
   1207      1.1  christos   {"dcm_cfg", SRIDX (0, 2, 0), 0},	{"cr2", SRIDX (0, 2, 0), 0},
   1208      1.1  christos   {"mmu_cfg", SRIDX (0, 3, 0), 0},	{"cr3", SRIDX (0, 3, 0), 0},
   1209      1.1  christos   {"msc_cfg", SRIDX (0, 4, 0), 0},	{"cr4", SRIDX (0, 4, 0), 0},
   1210      1.1  christos   {"msc_cfg2", SRIDX (0, 4, 1), 0},	{"cr7", SRIDX (0, 4, 1), 0},
   1211      1.1  christos   {"core_id", SRIDX (0, 0, 1), 0},	{"cr5", SRIDX (0, 0, 1), 0},
   1212      1.1  christos   {"fucop_exist", SRIDX (0, 5, 0), 0},	{"cr6", SRIDX (0, 5, 0), 0},
   1213      1.1  christos 
   1214      1.1  christos   {"psw", SRIDX (1, 0, 0), 0},		{"ir0", SRIDX (1, 0, 0), 0},
   1215      1.1  christos   {"ipsw", SRIDX (1, 0, 1), 0},		{"ir1", SRIDX (1, 0, 1), 0},
   1216      1.1  christos   {"p_ipsw", SRIDX (1, 0, 2), 0},	{"ir2", SRIDX (1, 0, 2), 0},
   1217      1.1  christos   {"ivb", SRIDX (1, 1, 1), 0},		{"ir3", SRIDX (1, 1, 1), 0},
   1218      1.1  christos   {"eva", SRIDX (1, 2, 1), 0},		{"ir4", SRIDX (1, 2, 1), 0},
   1219      1.1  christos   {"p_eva", SRIDX (1, 2, 2), 0},	{"ir5", SRIDX (1, 2, 2), 0},
   1220      1.1  christos   {"itype", SRIDX (1, 3, 1), 0},	{"ir6", SRIDX (1, 3, 1), 0},
   1221      1.1  christos   {"p_itype", SRIDX (1, 3, 2), 0},	{"ir7", SRIDX (1, 3, 2), 0},
   1222      1.1  christos   {"merr", SRIDX (1, 4, 1), 0},		{"ir8", SRIDX (1, 4, 1), 0},
   1223      1.1  christos   {"ipc", SRIDX (1, 5, 1), 0},		{"ir9", SRIDX (1, 5, 1), 0},
   1224      1.1  christos   {"p_ipc", SRIDX (1, 5, 2), 0},	{"ir10", SRIDX (1, 5, 2), 0},
   1225      1.1  christos   {"oipc", SRIDX (1, 5, 3), 0},		{"ir11", SRIDX (1, 5, 3), 0},
   1226  1.1.1.5  christos   {"dipc", SRIDX (1, 5, 3), 0},
   1227      1.1  christos   {"p_p0", SRIDX (1, 6, 2), 0},		{"ir12", SRIDX (1, 6, 2), 0},
   1228      1.1  christos   {"p_p1", SRIDX (1, 7, 2), 0},		{"ir13", SRIDX (1, 7, 2), 0},
   1229      1.1  christos   {"int_mask", SRIDX (1, 8, 0), 0},	{"ir14", SRIDX (1, 8, 0), 0},
   1230      1.1  christos   {"int_pend", SRIDX (1, 9, 0), 0},	{"ir15", SRIDX (1, 9, 0), 0},
   1231      1.1  christos   {"sp_usr", SRIDX (1, 10, 0), 0},	{"ir16", SRIDX (1, 10, 0), 0},
   1232      1.1  christos   {"sp_priv", SRIDX (1, 10, 1), 0},	{"ir17", SRIDX (1, 10, 1), 0},
   1233      1.1  christos   {"int_pri", SRIDX (1, 11, 0), 0},	{"ir18", SRIDX (1, 11, 0), 0},
   1234      1.1  christos   {"int_ctrl", SRIDX (1, 1, 2), 0},	{"ir19", SRIDX (1, 1, 2), 0},
   1235      1.1  christos   {"sp_usr1", SRIDX (1, 10, 2), 0},	{"ir20", SRIDX (1, 10, 2), 0},
   1236      1.1  christos   {"sp_priv1", SRIDX (1, 10, 3), 0},	{"ir21", SRIDX (1, 10, 3), 0},
   1237      1.1  christos   {"sp_usr2", SRIDX (1, 10, 4), 0},	{"ir22", SRIDX (1, 10, 4), 0},
   1238      1.1  christos   {"sp_priv2", SRIDX (1, 10, 5), 0},	{"ir23", SRIDX (1, 10, 5), 0},
   1239      1.1  christos   {"sp_usr3", SRIDX (1, 10, 6), 0},	{"ir24", SRIDX (1, 10, 6), 0},
   1240      1.1  christos   {"sp_priv3", SRIDX (1, 10, 7), 0},	{"ir25", SRIDX (1, 10, 7), 0},
   1241      1.1  christos   {"int_mask2", SRIDX (1, 8, 1), 0},	{"ir26", SRIDX (1, 8, 1), 0},
   1242      1.1  christos   {"int_pend2", SRIDX (1, 9, 1), 0},	{"ir27", SRIDX (1, 9, 1), 0},
   1243      1.1  christos   {"int_pri2", SRIDX (1, 11, 1), 0},	{"ir28", SRIDX (1, 11, 1), 0},
   1244      1.1  christos   {"int_trigger", SRIDX (1, 9, 4), 0},	{"ir29", SRIDX (1, 9, 4), 0},
   1245      1.1  christos   {"int_gpr_push_dis", SRIDX(1, 1, 3), 0}, {"ir30", SRIDX (1, 1, 3), 0},
   1246  1.1.1.5  christos   {"int_mask3", SRIDX(1, 8, 2), 0},	{"ir31", SRIDX (1, 8, 2), 0},
   1247  1.1.1.5  christos   {"int_pend3", SRIDX(1, 9, 2), 0},	{"ir32", SRIDX (1, 9, 2), 0},
   1248  1.1.1.5  christos   {"int_pri3", SRIDX(1, 11, 2), 0},	{"ir33", SRIDX (1, 11, 2), 0},
   1249  1.1.1.5  christos   {"int_pri4", SRIDX(1, 11, 3), 0},	{"ir34", SRIDX (1, 11, 3), 0},
   1250  1.1.1.5  christos   {"int_trigger2", SRIDX(1, 9, 5), 0},	{"ir35", SRIDX (1, 9, 5), 0},
   1251      1.1  christos 
   1252      1.1  christos   {"mmu_ctl", SRIDX (2, 0, 0), 0},	{"mr0", SRIDX (2, 0, 0), 0},
   1253      1.1  christos   {"l1_pptb", SRIDX (2, 1, 0), 0},	{"mr1", SRIDX (2, 1, 0), 0},
   1254      1.1  christos   {"tlb_vpn", SRIDX (2, 2, 0), 0},	{"mr2", SRIDX (2, 2, 0), 0},
   1255      1.1  christos   {"tlb_data", SRIDX (2, 3, 0), 0},	{"mr3", SRIDX (2, 3, 0), 0},
   1256      1.1  christos   {"tlb_misc", SRIDX (2, 4, 0), 0},	{"mr4", SRIDX (2, 4, 0), 0},
   1257      1.1  christos   {"vlpt_idx", SRIDX (2, 5, 0), 0},	{"mr5", SRIDX (2, 5, 0), 0},
   1258      1.1  christos   {"ilmb", SRIDX (2, 6, 0), 0},		{"mr6", SRIDX (2, 6, 0), 0},
   1259      1.1  christos   {"dlmb", SRIDX (2, 7, 0), 0},		{"mr7", SRIDX (2, 7, 0), 0},
   1260      1.1  christos   {"cache_ctl", SRIDX (2, 8, 0), 0},	{"mr8", SRIDX (2, 8, 0), 0},
   1261      1.1  christos   {"hsmp_saddr", SRIDX (2, 9, 0), 0},	{"mr9", SRIDX (2, 9, 0), 0},
   1262      1.1  christos   {"hsmp_eaddr", SRIDX (2, 9, 1), 0},	{"mr10", SRIDX (2, 9, 1), 0},
   1263      1.1  christos   {"bg_region", SRIDX (2, 0, 1), 0},	{"mr11", SRIDX (2, 0, 1), 0},
   1264      1.1  christos 
   1265      1.1  christos   {"pfmc0", SRIDX (4, 0, 0), 0},	{"pfr0", SRIDX (4, 0, 0), 0},
   1266      1.1  christos   {"pfmc1", SRIDX (4, 0, 1), 0},	{"pfr1", SRIDX (4, 0, 1), 0},
   1267      1.1  christos   {"pfmc2", SRIDX (4, 0, 2), 0},	{"pfr2", SRIDX (4, 0, 2), 0},
   1268      1.1  christos   {"pfm_ctl", SRIDX (4, 1, 0), 0},	{"pfr3", SRIDX (4, 1, 0), 0},
   1269  1.1.1.5  christos   {"pft_ctl", SRIDX (4, 2, 0), 0},	{"pfr4", SRIDX (4, 2, 0), 0},
   1270      1.1  christos   {"hsp_ctl", SRIDX (4, 6, 0), 0},	{"hspr0", SRIDX (4, 6, 0), 0},
   1271      1.1  christos   {"sp_bound", SRIDX (4, 6, 1), 0},	{"hspr1", SRIDX (4, 6, 1), 0},
   1272      1.1  christos   {"sp_bound_priv", SRIDX (4, 6, 2), 0},{"hspr2", SRIDX (4, 6, 2), 0},
   1273  1.1.1.5  christos   {"sp_base", SRIDX (4, 6, 3), 0},	{"hspr3", SRIDX (4, 6, 3), 0},
   1274  1.1.1.5  christos   {"sp_base_priv", SRIDX (4, 6, 4), 0},	{"hspr4", SRIDX (4, 6, 4), 0},
   1275      1.1  christos 
   1276      1.1  christos   {"dma_cfg", SRIDX (5, 0, 0), 0},	{"dmar0", SRIDX (5, 0, 0), 0},
   1277      1.1  christos   {"dma_gcsw", SRIDX (5, 1, 0), 0},	{"dmar1", SRIDX (5, 1, 0), 0},
   1278      1.1  christos   {"dma_chnsel", SRIDX (5, 2, 0), 0},	{"dmar2", SRIDX (5, 2, 0), 0},
   1279      1.1  christos   {"dma_act", SRIDX (5, 3, 0), 0},	{"dmar3", SRIDX (5, 3, 0), 0},
   1280      1.1  christos   {"dma_setup", SRIDX (5, 4, 0), 0},	{"dmar4", SRIDX (5, 4, 0), 0},
   1281      1.1  christos   {"dma_isaddr", SRIDX (5, 5, 0), 0},	{"dmar5", SRIDX (5, 5, 0), 0},
   1282      1.1  christos   {"dma_esaddr", SRIDX (5, 6, 0), 0},	{"dmar6", SRIDX (5, 6, 0), 0},
   1283      1.1  christos   {"dma_tcnt", SRIDX (5, 7, 0), 0},	{"dmar7", SRIDX (5, 7, 0), 0},
   1284      1.1  christos   {"dma_status", SRIDX (5, 8, 0), 0},	{"dmar8", SRIDX (5, 8, 0), 0},
   1285      1.1  christos   {"dma_2dset", SRIDX (5, 9, 0), 0},	{"dmar9", SRIDX (5, 9, 0), 0},
   1286      1.1  christos   {"dma_2dsctl", SRIDX (5, 9, 1), 0},	{"dmar10", SRIDX (5, 9, 1), 0},
   1287      1.1  christos   {"dma_rcnt", SRIDX (5, 7, 1), 0},	{"dmar11", SRIDX (5, 7, 1), 0},
   1288      1.1  christos   {"dma_hstatus", SRIDX (5, 8, 1), 0},	{"dmar12", SRIDX (5, 8, 1), 0},
   1289      1.1  christos 
   1290      1.1  christos   {"sdz_ctl", SRIDX (2, 15, 0), 0},	{"idr0", SRIDX (2, 15, 0), 0},
   1291      1.1  christos   {"misc_ctl", SRIDX (2, 15, 1), 0},	{"n12misc_ctl", SRIDX (2, 15, 1), 0},
   1292      1.1  christos   {"idr1", SRIDX (2, 15, 1), 0},
   1293      1.1  christos   {"ecc_misc", SRIDX (2, 15, 2), 0},	{"idr2", SRIDX (2, 15, 2), 0},
   1294      1.1  christos 
   1295      1.1  christos   {"secur0", SRIDX (6, 0, 0), 0},	{"sfcr", SRIDX (6, 0, 0), 0},
   1296      1.1  christos   {"secur1", SRIDX (6, 1, 0), 0},	{"sign", SRIDX (6, 1, 0), 0},
   1297  1.1.1.5  christos   {"secur2", SRIDX (6, 1, 1), 0},	{"isign", SRIDX (6, 1, 1), 0},
   1298  1.1.1.5  christos   {"secur3", SRIDX (6, 1, 2), 0},	{"p_isign", SRIDX (6, 1, 2), 0},
   1299      1.1  christos 
   1300      1.1  christos   {"prusr_acc_ctl", SRIDX (4, 4, 0), 0},
   1301      1.1  christos   {"fucpr", SRIDX (4, 5, 0), 0},	{"fucop_ctl", SRIDX (4, 5, 0), 0},
   1302      1.1  christos 
   1303      1.1  christos   {"bpc0", SRIDX (3, 0, 0), 0},		{"dr0", SRIDX (3, 0, 0), 0},
   1304  1.1.1.5  christos   {"bpc1", SRIDX (3, 0, 1), 0},		{"dr5", SRIDX (3, 0, 1), 0},
   1305  1.1.1.5  christos   {"bpc2", SRIDX (3, 0, 2), 0},		{"dr10", SRIDX (3, 0, 2), 0},
   1306  1.1.1.5  christos   {"bpc3", SRIDX (3, 0, 3), 0},		{"dr15", SRIDX (3, 0, 3), 0},
   1307  1.1.1.5  christos   {"bpc4", SRIDX (3, 0, 4), 0},		{"dr20", SRIDX (3, 0, 4), 0},
   1308  1.1.1.5  christos   {"bpc5", SRIDX (3, 0, 5), 0},		{"dr25", SRIDX (3, 0, 5), 0},
   1309  1.1.1.5  christos   {"bpc6", SRIDX (3, 0, 6), 0},		{"dr30", SRIDX (3, 0, 6), 0},
   1310  1.1.1.5  christos   {"bpc7", SRIDX (3, 0, 7), 0},		{"dr35", SRIDX (3, 0, 7), 0},
   1311  1.1.1.5  christos   {"bpa0", SRIDX (3, 1, 0), 0},		{"dr1", SRIDX (3, 1, 0), 0},
   1312  1.1.1.5  christos   {"bpa1", SRIDX (3, 1, 1), 0},		{"dr6", SRIDX (3, 1, 1), 0},
   1313  1.1.1.5  christos   {"bpa2", SRIDX (3, 1, 2), 0},		{"dr11", SRIDX (3, 1, 2), 0},
   1314  1.1.1.5  christos   {"bpa3", SRIDX (3, 1, 3), 0},		{"dr16", SRIDX (3, 1, 3), 0},
   1315  1.1.1.5  christos   {"bpa4", SRIDX (3, 1, 4), 0},		{"dr21", SRIDX (3, 1, 4), 0},
   1316  1.1.1.5  christos   {"bpa5", SRIDX (3, 1, 5), 0},		{"dr26", SRIDX (3, 1, 5), 0},
   1317  1.1.1.5  christos   {"bpa6", SRIDX (3, 1, 6), 0},		{"dr31", SRIDX (3, 1, 6), 0},
   1318  1.1.1.5  christos   {"bpa7", SRIDX (3, 1, 7), 0},		{"dr36", SRIDX (3, 1, 7), 0},
   1319  1.1.1.5  christos   {"bpam0", SRIDX (3, 2, 0), 0},	{"dr2", SRIDX (3, 2, 0), 0},
   1320  1.1.1.5  christos   {"bpam1", SRIDX (3, 2, 1), 0},	{"dr7", SRIDX (3, 2, 1), 0},
   1321  1.1.1.5  christos   {"bpam2", SRIDX (3, 2, 2), 0},	{"dr12", SRIDX (3, 2, 2), 0},
   1322  1.1.1.5  christos   {"bpam3", SRIDX (3, 2, 3), 0},	{"dr17", SRIDX (3, 2, 3), 0},
   1323  1.1.1.5  christos   {"bpam4", SRIDX (3, 2, 4), 0},	{"dr22", SRIDX (3, 2, 4), 0},
   1324  1.1.1.5  christos   {"bpam5", SRIDX (3, 2, 5), 0},	{"dr27", SRIDX (3, 2, 5), 0},
   1325  1.1.1.5  christos   {"bpam6", SRIDX (3, 2, 6), 0},	{"dr32", SRIDX (3, 2, 6), 0},
   1326  1.1.1.5  christos   {"bpam7", SRIDX (3, 2, 7), 0},	{"dr37", SRIDX (3, 2, 7), 0},
   1327  1.1.1.5  christos   {"bpv0", SRIDX (3, 3, 0), 0},		{"dr3", SRIDX (3, 3, 0), 0},
   1328  1.1.1.5  christos   {"bpv1", SRIDX (3, 3, 1), 0},		{"dr8", SRIDX (3, 3, 1), 0},
   1329  1.1.1.5  christos   {"bpv2", SRIDX (3, 3, 2), 0},		{"dr13", SRIDX (3, 3, 2), 0},
   1330  1.1.1.5  christos   {"bpv3", SRIDX (3, 3, 3), 0},		{"dr18", SRIDX (3, 3, 3), 0},
   1331  1.1.1.5  christos   {"bpv4", SRIDX (3, 3, 4), 0},		{"dr23", SRIDX (3, 3, 4), 0},
   1332  1.1.1.5  christos   {"bpv5", SRIDX (3, 3, 5), 0},		{"dr28", SRIDX (3, 3, 5), 0},
   1333  1.1.1.5  christos   {"bpv6", SRIDX (3, 3, 6), 0},		{"dr33", SRIDX (3, 3, 6), 0},
   1334  1.1.1.5  christos   {"bpv7", SRIDX (3, 3, 7), 0},		{"dr38", SRIDX (3, 3, 7), 0},
   1335  1.1.1.5  christos   {"bpcid0", SRIDX (3, 4, 0), 0},	{"dr4", SRIDX (3, 4, 0), 0},
   1336  1.1.1.5  christos   {"bpcid1", SRIDX (3, 4, 1), 0},	{"dr9", SRIDX (3, 4, 1), 0},
   1337  1.1.1.5  christos   {"bpcid2", SRIDX (3, 4, 2), 0},	{"dr14", SRIDX (3, 4, 2), 0},
   1338  1.1.1.5  christos   {"bpcid3", SRIDX (3, 4, 3), 0},	{"dr19", SRIDX (3, 4, 3), 0},
   1339  1.1.1.5  christos   {"bpcid4", SRIDX (3, 4, 4), 0},	{"dr24", SRIDX (3, 4, 4), 0},
   1340  1.1.1.5  christos   {"bpcid5", SRIDX (3, 4, 5), 0},	{"dr29", SRIDX (3, 4, 5), 0},
   1341  1.1.1.5  christos   {"bpcid6", SRIDX (3, 4, 6), 0},	{"dr34", SRIDX (3, 4, 6), 0},
   1342      1.1  christos   {"bpcid7", SRIDX (3, 4, 7), 0},	{"dr39", SRIDX (3, 4, 7), 0},
   1343      1.1  christos   {"edm_cfg", SRIDX (3, 5, 0), 0},	{"dr40", SRIDX (3, 5, 0), 0},
   1344      1.1  christos   {"edmsw", SRIDX (3, 6, 0), 0},	{"dr41", SRIDX (3, 6, 0), 0},
   1345      1.1  christos   {"edm_ctl", SRIDX (3, 7, 0), 0},	{"dr42", SRIDX (3, 7, 0), 0},
   1346      1.1  christos   {"edm_dtr", SRIDX (3, 8, 0), 0},	{"dr43", SRIDX (3, 8, 0), 0},
   1347      1.1  christos   {"bpmtc", SRIDX (3, 9, 0), 0},	{"dr44", SRIDX (3, 9, 0), 0},
   1348      1.1  christos   {"dimbr", SRIDX (3, 10, 0), 0},	{"dr45", SRIDX (3, 10, 0), 0},
   1349      1.1  christos   {"tecr0", SRIDX (3, 14, 0), 0},	{"dr46", SRIDX (3, 14, 0), 0},
   1350      1.1  christos   {"tecr1", SRIDX (3, 14, 1), 0},	{"dr47", SRIDX (3, 14, 1), 0},
   1351      1.1  christos   {NULL,0 ,0}
   1352      1.1  christos };
   1353      1.1  christos 
   1354  1.1.1.6  christos static const keyword_t keyword_cp[] =
   1355      1.1  christos {
   1356      1.1  christos   {"cp0", 0, 0}, {"cp1", 1, 0}, {"cp2", 2, 0}, {"cp3", 3, 0}, {NULL, 0, 0}
   1357      1.1  christos };
   1358      1.1  christos 
   1359  1.1.1.6  christos static const keyword_t keyword_cpr[] =
   1360      1.1  christos {
   1361      1.1  christos   {"cpr0", 0, 0}, {"cpr1", 1, 0}, {"cpr2", 2, 0}, {"cpr3", 3, 0},
   1362      1.1  christos   {"cpr4", 4, 0}, {"cpr5", 5, 0}, {"cpr6", 6, 0}, {"cpr7", 7, 0},
   1363      1.1  christos   {"cpr8", 8, 0}, {"cpr9", 9, 0}, {"cpr10", 10, 0}, {"cpr11", 11, 0},
   1364      1.1  christos   {"cpr12", 12, 0}, {"cpr13", 13, 0}, {"cpr14", 14, 0}, {"cpr15", 15, 0},
   1365      1.1  christos   {"cpr16", 16, 0}, {"cpr17", 17, 0}, {"cpr18", 18, 0}, {"cpr19", 19, 0},
   1366      1.1  christos   {"cpr20", 20, 0}, {"cpr21", 21, 0}, {"cpr22", 22, 0}, {"cpr23", 23, 0},
   1367      1.1  christos   {"cpr24", 24, 0}, {"cpr25", 25, 0}, {"cpr26", 26, 0}, {"cpr27", 27, 0},
   1368      1.1  christos   {"cpr28", 28, 0}, {"cpr29", 29, 0}, {"cpr30", 30, 0}, {"cpr31", 31, 0},
   1369      1.1  christos   {NULL, 0, 0}
   1370      1.1  christos };
   1371      1.1  christos 
   1372  1.1.1.6  christos static const keyword_t keyword_fsr[] =
   1373      1.1  christos {
   1374      1.1  christos   {"fs0", 0, 0}, {"fs1", 1, 0}, {"fs2", 2, 0}, {"fs3", 3, 0}, {"fs4", 4, 0},
   1375      1.1  christos   {"fs5", 5, 0}, {"fs6", 6, 0}, {"fs7", 7, 0}, {"fs8", 8, 0}, {"fs9", 9, 0},
   1376      1.1  christos   {"fs10", 10, 0}, {"fs11", 11, 0}, {"fs12", 12, 0}, {"fs13", 13, 0},
   1377      1.1  christos   {"fs14", 14, 0}, {"fs15", 15, 0}, {"fs16", 16, 0}, {"fs17", 17, 0},
   1378      1.1  christos   {"fs18", 18, 0}, {"fs19", 19, 0}, {"fs20", 20, 0}, {"fs21", 21, 0},
   1379      1.1  christos   {"fs22", 22, 0}, {"fs23", 23, 0}, {"fs24", 24, 0}, {"fs25", 25, 0},
   1380      1.1  christos   {"fs26", 26, 0}, {"fs27", 27, 0}, {"fs28", 28, 0}, {"fs29", 29, 0},
   1381      1.1  christos   {"fs30", 30, 0}, {"fs31", 31, 0}, {NULL, 0 ,0}
   1382      1.1  christos };
   1383      1.1  christos 
   1384  1.1.1.6  christos static const keyword_t keyword_fdr[] =
   1385      1.1  christos {
   1386      1.1  christos   {"fd0", 0, 0}, {"fd1", 1, 0}, {"fd2", 2, 0}, {"fd3", 3, 0}, {"fd4", 4, 0},
   1387      1.1  christos   {"fd5", 5, 0}, {"fd6", 6, 0}, {"fd7", 7, 0}, {"fd8", 8, 0}, {"fd9", 9, 0},
   1388      1.1  christos   {"fd10", 10, 0}, {"fd11", 11, 0}, {"fd12", 12, 0}, {"fd13", 13, 0},
   1389      1.1  christos   {"fd14", 14, 0}, {"fd15", 15, 0}, {"fd16", 16, 0}, {"fd17", 17, 0},
   1390      1.1  christos   {"fd18", 18, 0}, {"fd19", 19, 0}, {"fd20", 20, 0}, {"fd21", 21, 0},
   1391      1.1  christos   {"fd22", 22, 0}, {"fd23", 23, 0}, {"fd24", 24, 0}, {"fd25", 25, 0},
   1392      1.1  christos   {"fd26", 26, 0}, {"fd27", 27, 0}, {"fd28", 28, 0}, {"fd29", 29, 0},
   1393      1.1  christos   {"fd30", 30, 0}, {"fd31", 31, 0}, {NULL, 0, 0}
   1394      1.1  christos };
   1395      1.1  christos 
   1396  1.1.1.6  christos static const keyword_t keyword_abdim[] =
   1397      1.1  christos {
   1398      1.1  christos   {"bi", 0, 0}, {"bim", 1, 0}, {"bd", 2, 0}, {"bdm", 3, 0},
   1399      1.1  christos   {"ai", 4, 0}, {"aim", 5, 0}, {"ad", 6, 0}, {"adm", 7, 0},
   1400      1.1  christos   {NULL, 0, 0}
   1401      1.1  christos };
   1402      1.1  christos 
   1403  1.1.1.6  christos static const keyword_t keyword_abm[] =
   1404      1.1  christos {
   1405      1.1  christos   {"b", 0, 0}, {"bm", 1, 0}, {"bx", 2, 0}, {"bmx", 3, 0},
   1406      1.1  christos   {"a", 4, 0}, {"am", 5, 0}, {"ax", 6, 0}, {"amx", 7, 0},
   1407      1.1  christos   {NULL, 0, 0}
   1408      1.1  christos };
   1409      1.1  christos 
   1410      1.1  christos static const keyword_t keyword_dtiton[] =
   1411      1.1  christos {
   1412      1.1  christos   {"iton", 1, 0}, {"ton", 3, 0}, {NULL, 0, 0}
   1413      1.1  christos };
   1414      1.1  christos 
   1415      1.1  christos static const keyword_t keyword_dtitoff[] =
   1416      1.1  christos {
   1417      1.1  christos   {"itoff", 1, 0}, {"toff", 3, 0}, {NULL, 0, 0}
   1418      1.1  christos };
   1419      1.1  christos 
   1420  1.1.1.6  christos static const keyword_t keyword_dpref_st[] =
   1421      1.1  christos {
   1422      1.1  christos   {"srd", 0, 0}, {"mrd", 1, 0}, {"swr", 2, 0}, {"mwr", 3, 0},
   1423      1.1  christos   {"pte", 4, 0}, {"clwr", 5, 0}, {NULL, 0, 0}
   1424      1.1  christos };
   1425      1.1  christos 
   1426      1.1  christos /* CCTL Ra, SubType.  */
   1427      1.1  christos static const keyword_t keyword_cctl_st0[] =
   1428      1.1  christos {
   1429      1.1  christos   {"l1d_ix_inval", 0X0, 0}, {"l1d_ix_wb", 0X1, 0}, {"l1d_ix_wbinval", 0X2, 0},
   1430      1.1  christos   {"l1d_va_fillck", 0XB, 0}, {"l1d_va_ulck", 0XC, 0}, {"l1i_ix_inval", 0X10, 0},
   1431      1.1  christos   {"l1i_va_fillck", 0X1B, 0}, {"l1i_va_ulck", 0X1C, 0},
   1432      1.1  christos   {NULL, 0, 0}
   1433      1.1  christos };
   1434      1.1  christos 
   1435      1.1  christos /* CCTL Ra, SubType, level.  */
   1436      1.1  christos static const keyword_t keyword_cctl_st1[] =
   1437      1.1  christos {
   1438      1.1  christos   {"l1d_va_inval", 0X8, 0}, {"l1d_va_wb", 0X9, 0},
   1439      1.1  christos   {"l1d_va_wbinval", 0XA, 0}, {"l1i_va_inval", 0X18, 0},
   1440      1.1  christos   {NULL, 0, 0}
   1441      1.1  christos };
   1442      1.1  christos 
   1443      1.1  christos /* CCTL Rt, Ra, SubType.  */
   1444      1.1  christos static const keyword_t keyword_cctl_st2[] =
   1445      1.1  christos {
   1446      1.1  christos   {"l1d_ix_rtag", 0X3, 0}, {"l1d_ix_rwd", 0X4, 0},
   1447      1.1  christos   {"l1i_ix_rtag", 0X13, 0}, {"l1i_ix_rwd", 0X14, 0},
   1448      1.1  christos   {NULL, 0, 0}
   1449      1.1  christos };
   1450      1.1  christos 
   1451      1.1  christos /* CCTL Rb, Ra, SubType.  */
   1452      1.1  christos static const keyword_t keyword_cctl_st3[] =
   1453      1.1  christos {
   1454      1.1  christos   {"l1d_ix_wtag", 0X5, 0}, {"l1d_ix_wwd", 0X6, 0},
   1455      1.1  christos   {"l1i_ix_wtag", 0X15, 0}, {"l1i_ix_wwd", 0X16, 0},
   1456      1.1  christos   {NULL, 0, 0}
   1457      1.1  christos };
   1458      1.1  christos 
   1459      1.1  christos /* CCTL L1D_INVALALL.  */
   1460      1.1  christos static const keyword_t keyword_cctl_st4[] =
   1461      1.1  christos {
   1462      1.1  christos   {"l1d_invalall", 0x7, 0}, {NULL, 0, 0}
   1463      1.1  christos };
   1464      1.1  christos 
   1465      1.1  christos /* CCTL L1D_WBALL, level.  */
   1466      1.1  christos static const keyword_t keyword_cctl_st5[] =
   1467      1.1  christos {
   1468      1.1  christos   {"l1d_wball", 0xf, 0}, {NULL, 0, 0}
   1469      1.1  christos };
   1470      1.1  christos 
   1471  1.1.1.6  christos static const keyword_t keyword_cctl_lv[] =
   1472      1.1  christos {
   1473      1.1  christos   {"1level", 0, 0}, {"alevel", 1, 0}, {"0", 0, 0}, {"1", 1, 0},
   1474      1.1  christos   {NULL, 0, 0},
   1475      1.1  christos };
   1476      1.1  christos 
   1477      1.1  christos static const keyword_t keyword_tlbop_st[] =
   1478      1.1  christos {
   1479      1.1  christos   {"targetread", 0, 0}, {"trd", 0, 0},
   1480      1.1  christos   {"targetwrite", 1, 0}, {"twr", 1, 0},
   1481      1.1  christos   {"rwrite", 2, 0}, {"rwr", 2, 0},
   1482      1.1  christos   {"rwritelock", 3, 0}, {"rwlk", 3, 0},
   1483      1.1  christos   {"unlock", 4, 0}, {"unlk", 4, 0},
   1484      1.1  christos   {"invalidate", 6, 0}, {"inv", 6, 0},
   1485      1.1  christos   {NULL, 0, 0},
   1486      1.1  christos };
   1487      1.1  christos 
   1488  1.1.1.6  christos static const keyword_t keyword_standby_st[] =
   1489      1.1  christos {
   1490      1.1  christos   {"no_wake_grant", 0, 0},
   1491      1.1  christos   {"wake_grant", 1, 0},
   1492      1.1  christos   {"wait_done", 2, 0},
   1493      1.1  christos   {"0", 0, 0},
   1494      1.1  christos   {"1", 1, 0},
   1495      1.1  christos   {"2", 2, 0},
   1496      1.1  christos   {"3", 3, 0},
   1497      1.1  christos   {NULL, 0, 0},
   1498      1.1  christos };
   1499      1.1  christos 
   1500  1.1.1.6  christos static const keyword_t keyword_msync_st[] =
   1501      1.1  christos {
   1502      1.1  christos   {"all", 0, 0}, {"store", 1, 0},
   1503      1.1  christos   {NULL, 0, 0}
   1504      1.1  christos };
   1505      1.1  christos 
   1506  1.1.1.6  christos static const keyword_t keyword_im5_i[] =
   1507      1.1  christos {
   1508      1.1  christos   {"i0", 0, 0}, {"i1", 1, 0}, {"i2", 2, 0}, {"i3", 3, 0},
   1509      1.1  christos   {"i4", 4, 0}, {"i5", 5, 0}, {"i6", 6, 0}, {"i7", 7, 0},
   1510      1.1  christos   {NULL, 0, 0}
   1511      1.1  christos };
   1512      1.1  christos 
   1513  1.1.1.6  christos static const keyword_t keyword_im5_m[] =
   1514      1.1  christos {
   1515      1.1  christos   {"m0", 0, 0}, {"m1", 1, 0}, {"m2", 2, 0}, {"m3", 3, 0},
   1516      1.1  christos   {"m4", 4, 0}, {"m5", 5, 0}, {"m6", 6, 0}, {"m7", 7, 0},
   1517      1.1  christos   {NULL, 0, 0}
   1518      1.1  christos };
   1519      1.1  christos 
   1520  1.1.1.6  christos static const keyword_t keyword_accumulator[] =
   1521      1.1  christos {
   1522      1.1  christos   {"d0.lo", 0, 0}, {"d0.hi", 1, 0}, {"d1.lo", 2, 0}, {"d1.hi", 3, 0},
   1523      1.1  christos   {NULL, 0, 0}
   1524      1.1  christos };
   1525      1.1  christos 
   1526  1.1.1.6  christos static const keyword_t keyword_aridx[] =
   1527      1.1  christos {
   1528      1.1  christos   {"i0", 0, 0}, {"i1", 1, 0}, {"i2", 2, 0}, {"i3", 3, 0},
   1529      1.1  christos   {"i4", 4, 0}, {"i5", 5, 0}, {"i6", 6, 0}, {"i7", 7, 0},
   1530      1.1  christos   {"mod", 8, 0}, {"m1", 9, 0}, {"m2", 10, 0}, {"m3",11, 0},
   1531      1.1  christos   {"m5",13, 0}, {"m6",14, 0}, {"m7",15, 0},
   1532      1.1  christos   {"d0.l24", 16, 0}, {"d1.l24", 17, 0},
   1533      1.1  christos   {"shft_ctl0", 18, 0}, {"shft_ctl1", 19, 0},
   1534      1.1  christos   {"lb", 24, 0}, {"le", 25, 0}, {"lc", 26, 0}, {"adm_vbase", 27, 0},
   1535      1.1  christos   {NULL, 0, 0}
   1536      1.1  christos };
   1537      1.1  christos 
   1538  1.1.1.6  christos static const keyword_t keyword_aridx2[] =
   1539      1.1  christos {
   1540      1.1  christos   {"cbb0", 0, 0}, {"cbb1", 1, 0}, {"cbb2", 2, 0}, {"cbb3", 3, 0},
   1541      1.1  christos   {"cbe0", 4, 0}, {"cbe1", 5, 0}, {"cbe2", 6, 0}, {"cbe3", 7, 0},
   1542      1.1  christos   {"cb_ctl", 31, 0},
   1543      1.1  christos   {NULL, 0, 0}
   1544      1.1  christos };
   1545      1.1  christos 
   1546  1.1.1.6  christos static const keyword_t keyword_aridxi[] =
   1547      1.1  christos {
   1548      1.1  christos   {"i0", 0, 0}, {"i1", 1, 0}, {"i2", 2, 0}, {"i3", 3, 0},
   1549      1.1  christos   {"i4", 4, 0}, {"i5", 5, 0}, {"i6", 6, 0}, {"i7", 7, 0},
   1550      1.1  christos   {"mod", 8, 0}, {"m1", 9, 0}, {"m2", 10, 0}, {"m3",11, 0},
   1551      1.1  christos   {"m5",13, 0}, {"m6",14, 0}, {"m7",15, 0},
   1552      1.1  christos   {NULL, 0, 0}
   1553      1.1  christos };
   1554      1.1  christos 
   1555  1.1.1.6  christos static const keyword_t keyword_aridxi_mx[] =
   1556  1.1.1.5  christos {
   1557  1.1.1.5  christos   {"m1", 9, 0}, {"m2", 10, 0}, {"m3",11, 0},
   1558  1.1.1.5  christos   {"m5",13, 0}, {"m6",14, 0}, {"m7",15, 0},
   1559  1.1.1.5  christos   {NULL, 0, 0}
   1560  1.1.1.5  christos };
   1561  1.1.1.5  christos 
   1562  1.1.1.6  christos const keyword_t *nds32_keywords[_HW_LAST] =
   1563      1.1  christos {
   1564  1.1.1.6  christos   nds32_keyword_gpr, keyword_usr, keyword_dxr, keyword_sr, keyword_fsr,
   1565      1.1  christos   keyword_fdr, keyword_cp, keyword_cpr, keyword_abdim, keyword_abm,
   1566      1.1  christos   keyword_dtiton, keyword_dtitoff, keyword_dpref_st,
   1567      1.1  christos   keyword_cctl_st0, keyword_cctl_st1, keyword_cctl_st2,
   1568      1.1  christos   keyword_cctl_st3, keyword_cctl_st4, keyword_cctl_st5,
   1569      1.1  christos   keyword_cctl_lv, keyword_tlbop_st, keyword_standby_st,
   1570      1.1  christos   keyword_msync_st,
   1571      1.1  christos   keyword_im5_i, keyword_im5_m,
   1572  1.1.1.5  christos   keyword_accumulator, keyword_aridx, keyword_aridx2,
   1573  1.1.1.5  christos   keyword_aridxi, keyword_aridxi_mx
   1574      1.1  christos };
   1575  1.1.1.5  christos 
   1576  1.1.1.5  christos const keyword_t **nds32_keyword_table[NDS32_CORE_COUNT];
   1577  1.1.1.5  christos static unsigned int nds32_keyword_count_table[NDS32_CORE_COUNT];
   1578  1.1.1.5  christos const field_t *nds32_field_table[NDS32_CORE_COUNT];
   1579  1.1.1.5  christos opcode_t *nds32_opcode_table[NDS32_CORE_COUNT];
   1580      1.1  christos 
   1581  1.1.1.5  christos 
   1583      1.1  christos /* Hash table for syntax lex.   */
   1584      1.1  christos static htab_t field_htab;
   1585      1.1  christos /* Hash table for opcodes.  */
   1586      1.1  christos static htab_t opcode_htab;
   1587  1.1.1.5  christos /* Hash table for hardware resources.  */
   1588      1.1  christos static htab_t *hw_ktabs;
   1589      1.1  christos 
   1590      1.1  christos static hashval_t
   1591      1.1  christos htab_hash_hash (const void *p)
   1592      1.1  christos {
   1593      1.1  christos   struct nds32_hash_entry *h = (struct nds32_hash_entry *) p;
   1594      1.1  christos 
   1595      1.1  christos   return htab_hash_string (h->name);
   1596      1.1  christos }
   1597      1.1  christos 
   1598      1.1  christos static int
   1599      1.1  christos htab_hash_eq (const void *p, const void *q)
   1600      1.1  christos {
   1601      1.1  christos   struct nds32_hash_entry *h = (struct nds32_hash_entry *) p;
   1602      1.1  christos   const char *name = (const char *) q;
   1603      1.1  christos 
   1604      1.1  christos   return strcmp (name, h->name) == 0;
   1605      1.1  christos }
   1606      1.1  christos 
   1607  1.1.1.5  christos 
   1609      1.1  christos static void
   1610  1.1.1.5  christos build_operand_hash_table (void)
   1611      1.1  christos {
   1612  1.1.1.5  christos   unsigned k;
   1613  1.1.1.5  christos 
   1614      1.1  christos   field_htab = htab_create_alloc (128, htab_hash_hash, htab_hash_eq,
   1615  1.1.1.5  christos 				  NULL, xcalloc, free);
   1616      1.1  christos 
   1617  1.1.1.5  christos   for (k = 0; k < NDS32_CORE_COUNT; k++)
   1618      1.1  christos     {
   1619  1.1.1.5  christos       const field_t *fld;
   1620  1.1.1.5  christos 
   1621  1.1.1.5  christos       fld = nds32_field_table[k];
   1622      1.1  christos       if (fld == NULL)
   1623  1.1.1.5  christos 	continue;
   1624  1.1.1.5  christos 
   1625  1.1.1.5  christos       /* Add op-codes.  */
   1626  1.1.1.5  christos       while (fld->name != NULL)
   1627  1.1.1.5  christos 	{
   1628      1.1  christos 	  hashval_t hash;
   1629  1.1.1.5  christos 	  const field_t **slot;
   1630  1.1.1.5  christos 
   1631  1.1.1.5  christos 	  hash = htab_hash_string (fld->name);
   1632      1.1  christos 	  slot = (const field_t **)
   1633  1.1.1.5  christos 	    htab_find_slot_with_hash (field_htab, fld->name, hash, INSERT);
   1634  1.1.1.5  christos 
   1635  1.1.1.5  christos 	  assert (slot != NULL && *slot == NULL);
   1636  1.1.1.5  christos 	  *slot = fld++;
   1637  1.1.1.5  christos 	}
   1638      1.1  christos     }
   1639  1.1.1.5  christos }
   1640  1.1.1.5  christos 
   1641  1.1.1.5  christos static void
   1642  1.1.1.5  christos build_keyword_hash_table (void)
   1643      1.1  christos {
   1644  1.1.1.5  christos   unsigned int i, j, k, n;
   1645  1.1.1.5  christos 
   1646  1.1.1.5  christos   /* Count total keyword tables.  */
   1647  1.1.1.5  christos   for (n = 0, i = 0; i < NDS32_CORE_COUNT; i++)
   1648      1.1  christos     {
   1649      1.1  christos       n += nds32_keyword_count_table[i];
   1650  1.1.1.5  christos     }
   1651  1.1.1.5  christos 
   1652  1.1.1.5  christos   /* Allocate space.  */
   1653  1.1.1.5  christos   hw_ktabs = (htab_t *) malloc (n * sizeof (struct htab));
   1654  1.1.1.5  christos   for (i = 0; i < n; i++)
   1655  1.1.1.5  christos     {
   1656  1.1.1.5  christos       hw_ktabs[i] = htab_create_alloc (128, htab_hash_hash, htab_hash_eq,
   1657  1.1.1.5  christos 				       NULL, xcalloc, free);
   1658  1.1.1.5  christos     }
   1659  1.1.1.5  christos 
   1660  1.1.1.5  christos   for (n = 0, k = 0; k < NDS32_CORE_COUNT; k++, n += j)
   1661  1.1.1.5  christos     {
   1662  1.1.1.5  christos       const keyword_t **kwd;
   1663  1.1.1.5  christos 
   1664  1.1.1.5  christos       if ((j = nds32_keyword_count_table[k]) == 0)
   1665  1.1.1.5  christos 	continue;
   1666  1.1.1.5  christos 
   1667  1.1.1.5  christos       /* Add keywords.  */
   1668  1.1.1.5  christos       kwd = nds32_keyword_table[k];
   1669  1.1.1.5  christos       for (i = 0; i < j; i++)
   1670  1.1.1.5  christos 	{
   1671  1.1.1.5  christos 	  htab_t htab;
   1672  1.1.1.5  christos 	  const keyword_t *kw;
   1673  1.1.1.5  christos 
   1674  1.1.1.5  christos 	  kw = kwd[i];
   1675  1.1.1.5  christos 	  htab = hw_ktabs[n + i];
   1676  1.1.1.5  christos 	  while (kw->name != NULL)
   1677  1.1.1.5  christos 	    {
   1678  1.1.1.5  christos 	      hashval_t hash;
   1679  1.1.1.5  christos 	      const keyword_t **slot;
   1680  1.1.1.5  christos 
   1681  1.1.1.5  christos 	      hash = htab_hash_string (kw->name);
   1682  1.1.1.5  christos 	      slot = (const keyword_t **)
   1683  1.1.1.5  christos 		htab_find_slot_with_hash (htab, kw->name, hash, INSERT);
   1684  1.1.1.5  christos 
   1685  1.1.1.5  christos 	      assert (slot != NULL && *slot == NULL);
   1686  1.1.1.5  christos 	      *slot = kw++;
   1687  1.1.1.5  christos 	    }
   1688      1.1  christos 	}
   1689      1.1  christos     }
   1690      1.1  christos }
   1691      1.1  christos 
   1692      1.1  christos /* Build the syntax for a given opcode OPC.  It parses the string
   1693      1.1  christos    pointed by INSTRUCTION and store the result on SYNTAX, so
   1694      1.1  christos    when we assemble an instruction, we don't have to parse the syntax
   1695      1.1  christos    again.  */
   1696      1.1  christos 
   1697      1.1  christos static void
   1698      1.1  christos build_opcode_syntax (struct nds32_opcode *opc)
   1699      1.1  christos {
   1700      1.1  christos   char odstr[MAX_LEX_LEN];
   1701      1.1  christos   const char *str;
   1702      1.1  christos   const char *end;
   1703      1.1  christos   lex_t *plex;
   1704      1.1  christos   int len;
   1705      1.1  christos   hashval_t hash;
   1706      1.1  christos   field_t *fd;
   1707      1.1  christos   int opt = 0;
   1708      1.1  christos 
   1709      1.1  christos   /* Check whether it has been initialized.  */
   1710      1.1  christos   if (opc->syntax)
   1711      1.1  christos     return;
   1712  1.1.1.5  christos 
   1713      1.1  christos   opc->syntax = xmalloc (MAX_LEX_NUM * sizeof (lex_t));
   1714      1.1  christos   memset (opc->syntax, 0, MAX_LEX_NUM * sizeof (lex_t));
   1715      1.1  christos 
   1716      1.1  christos   str = opc->instruction;
   1717      1.1  christos   plex = opc->syntax;
   1718  1.1.1.5  christos   while (*str)
   1719      1.1  christos     {
   1720      1.1  christos       int fidx, i, k;
   1721      1.1  christos 
   1722      1.1  christos       switch (*str)
   1723      1.1  christos 	{
   1724      1.1  christos 	case '%':
   1725      1.1  christos 	  *plex = SYN_INPUT;
   1726      1.1  christos 	  break;
   1727      1.1  christos 	case '=':
   1728      1.1  christos 	  *plex = SYN_OUTPUT;
   1729      1.1  christos 	  break;
   1730      1.1  christos 	case '&':
   1731      1.1  christos 	  *plex = SYN_INPUT | SYN_OUTPUT;
   1732      1.1  christos 	  break;
   1733      1.1  christos 	case '{':
   1734      1.1  christos 	  *plex++ = SYN_LOPT;
   1735      1.1  christos 	  opt++;
   1736      1.1  christos 	  str++;
   1737      1.1  christos 	  continue;
   1738      1.1  christos 	case '}':
   1739      1.1  christos 	  *plex++ = SYN_ROPT;
   1740      1.1  christos 	  str++;
   1741      1.1  christos 	  continue;
   1742      1.1  christos 	default:
   1743      1.1  christos 	  *plex++ = *str++;
   1744      1.1  christos 	  continue;
   1745      1.1  christos 	}
   1746      1.1  christos       str++;
   1747      1.1  christos 
   1748      1.1  christos       /* Extract operand.  */
   1749      1.1  christos       end = str;
   1750      1.1  christos       while (ISALNUM (*end) || *end == '_')
   1751      1.1  christos 	end++;
   1752      1.1  christos       len = end - str;
   1753      1.1  christos       memcpy (odstr, str, len);
   1754      1.1  christos       odstr[len] = '\0';
   1755      1.1  christos 
   1756      1.1  christos       hash = htab_hash_string (odstr);
   1757      1.1  christos       fd = (field_t *) htab_find_with_hash (field_htab, odstr, hash);
   1758      1.1  christos 
   1759  1.1.1.4  christos       if (fd == NULL)
   1760  1.1.1.4  christos 	{
   1761  1.1.1.4  christos 	  /* xgettext: c-format */
   1762      1.1  christos 	  opcodes_error_handler (_("internal error: unknown operand, %s"), str);
   1763  1.1.1.5  christos 	  abort ();
   1764  1.1.1.5  christos 	}
   1765  1.1.1.5  christos 
   1766  1.1.1.5  christos       /* We are not sure how these tables are organized.   */
   1767  1.1.1.5  christos       /* Thus, the minimal index should be the right one.  */
   1768  1.1.1.5  christos       for (fidx = 256, k = 0, i = 0; i < NDS32_CORE_COUNT; i++)
   1769  1.1.1.5  christos 	{
   1770  1.1.1.5  christos 	  int tmp;
   1771  1.1.1.5  christos 
   1772  1.1.1.5  christos 	  tmp = fd - nds32_field_table[i];
   1773  1.1.1.5  christos 	  if (tmp >= 0 && tmp < fidx)
   1774  1.1.1.5  christos 	    {
   1775  1.1.1.5  christos 	      fidx = tmp;
   1776  1.1.1.5  christos 	      k = i;
   1777  1.1.1.6  christos 	    }
   1778  1.1.1.5  christos 	}
   1779      1.1  christos       assert (fidx >= 0 && fidx < (int) ARRAY_SIZE (nds32_operand_fields));
   1780      1.1  christos       *plex |= LEX_SET_FIELD (k, fidx);
   1781      1.1  christos 
   1782      1.1  christos       str += len;
   1783      1.1  christos       plex++;
   1784      1.1  christos     }
   1785      1.1  christos 
   1786      1.1  christos   *plex = 0;
   1787      1.1  christos   opc->variant = opt;
   1788      1.1  christos   return;
   1789  1.1.1.5  christos }
   1790  1.1.1.5  christos 
   1791      1.1  christos static void
   1792  1.1.1.5  christos build_opcode_hash_table (void)
   1793      1.1  christos {
   1794  1.1.1.5  christos   unsigned k;
   1795      1.1  christos 
   1796      1.1  christos   opcode_htab = htab_create_alloc (512, htab_hash_hash, htab_hash_eq,
   1797  1.1.1.5  christos 				   NULL, xcalloc, free);
   1798      1.1  christos 
   1799  1.1.1.5  christos   for (k = 0; k < NDS32_CORE_COUNT; k++)
   1800  1.1.1.5  christos     {
   1801  1.1.1.5  christos       opcode_t *opc;
   1802  1.1.1.5  christos 
   1803  1.1.1.5  christos       opc = nds32_opcode_table[k];
   1804      1.1  christos       if (opc == NULL)
   1805  1.1.1.5  christos 	continue;
   1806  1.1.1.5  christos 
   1807      1.1  christos       /* Add op-codes.  */
   1808  1.1.1.5  christos       while ((opc->opcode != NULL) && (opc->instruction != NULL))
   1809  1.1.1.5  christos 	{
   1810  1.1.1.5  christos 	  hashval_t hash;
   1811      1.1  christos 	  opcode_t **slot;
   1812  1.1.1.5  christos 
   1813  1.1.1.5  christos 	  hash = htab_hash_string (opc->opcode);
   1814  1.1.1.5  christos 	  slot = (opcode_t **)
   1815      1.1  christos 	    htab_find_slot_with_hash (opcode_htab, opc->opcode, hash,
   1816      1.1  christos 				      INSERT);
   1817      1.1  christos 
   1818  1.1.1.5  christos #define NDS32_PREINIT_SYNTAX
   1819  1.1.1.5  christos #if defined (NDS32_PREINIT_SYNTAX)
   1820      1.1  christos 	  /* Initial SYNTAX when build opcode table, so bug in syntax
   1821      1.1  christos 	     can be found when initialized rather than used.  */
   1822      1.1  christos 	  build_opcode_syntax (opc);
   1823      1.1  christos #endif
   1824      1.1  christos 
   1825      1.1  christos 	  if (*slot == NULL)
   1826      1.1  christos 	    {
   1827      1.1  christos 	      /* This is the new one.  */
   1828      1.1  christos 	      *slot = opc;
   1829      1.1  christos 	    }
   1830  1.1.1.5  christos 	  else
   1831  1.1.1.5  christos 	    {
   1832      1.1  christos 	      opcode_t *ptr;
   1833  1.1.1.5  christos 
   1834  1.1.1.5  christos 	      /* Already exists.  Append to the list.  */
   1835  1.1.1.5  christos 	      ptr = *slot;
   1836  1.1.1.5  christos 	      while (ptr->next)
   1837  1.1.1.5  christos 		ptr = ptr->next;
   1838      1.1  christos 	      ptr->next = opc;
   1839  1.1.1.5  christos 	      opc->next = NULL;
   1840      1.1  christos 	    }
   1841      1.1  christos 	  opc++;
   1842      1.1  christos 	}
   1843      1.1  christos     }
   1844  1.1.1.5  christos }
   1845  1.1.1.5  christos 
   1846  1.1.1.5  christos /* Initialize the assembler.  It must be called before assembling.  */
   1847  1.1.1.5  christos 
   1848  1.1.1.5  christos void
   1849  1.1.1.5  christos nds32_asm_init (nds32_asm_desc_t *pdesc, int flags)
   1850  1.1.1.5  christos {
   1851  1.1.1.5  christos   pdesc->flags = flags;
   1852  1.1.1.5  christos   pdesc->mach = flags & NASM_OPEN_ARCH_MASK;
   1853  1.1.1.6  christos 
   1854  1.1.1.5  christos   /* Setup main core.  */
   1855  1.1.1.5  christos   nds32_keyword_table[NDS32_MAIN_CORE] = &nds32_keywords[0];
   1856  1.1.1.6  christos   nds32_keyword_count_table[NDS32_MAIN_CORE] = _HW_LAST;
   1857  1.1.1.5  christos   nds32_opcode_table[NDS32_MAIN_CORE] = &nds32_opcodes[0];
   1858  1.1.1.5  christos   nds32_field_table[NDS32_MAIN_CORE] = &nds32_operand_fields[0];
   1859  1.1.1.5  christos 
   1860  1.1.1.5  christos   /* Build operand hash table.  */
   1861  1.1.1.5  christos   build_operand_hash_table ();
   1862  1.1.1.5  christos 
   1863  1.1.1.5  christos   /* Build keyword hash tables.  */
   1864  1.1.1.5  christos   build_keyword_hash_table ();
   1865  1.1.1.5  christos 
   1866  1.1.1.5  christos   /* Build op-code hash table.  */
   1867  1.1.1.5  christos   build_opcode_hash_table ();
   1868      1.1  christos }
   1869      1.1  christos 
   1870      1.1  christos /* Parse the input and store operand keyword string in ODSTR.
   1871      1.1  christos    This function is only used for parsing keywords,
   1872      1.1  christos    HW_INT/HW_UINT are parsed parse_operand callback handler.  */
   1873      1.1  christos 
   1874      1.1  christos static char *
   1875      1.1  christos parse_to_delimiter (char *str, char odstr[MAX_KEYWORD_LEN])
   1876      1.1  christos {
   1877      1.1  christos   char *outp = odstr;
   1878      1.1  christos 
   1879      1.1  christos   while (ISALNUM (*str) || *str == '.' || *str == '_')
   1880      1.1  christos     *outp++ = TOLOWER (*str++);
   1881      1.1  christos 
   1882      1.1  christos   *outp = '\0';
   1883      1.1  christos   return str;
   1884      1.1  christos }
   1885      1.1  christos 
   1886      1.1  christos /* Parse the operand of lmw/smw/lmwa/smwa.  */
   1887      1.1  christos 
   1888      1.1  christos static int
   1889      1.1  christos parse_re (struct nds32_asm_desc *pdesc ATTRIBUTE_UNUSED,
   1890      1.1  christos 	   struct nds32_asm_insn *pinsn, char **pstr, int64_t *value)
   1891      1.1  christos {
   1892      1.1  christos   char *end = *pstr;
   1893      1.1  christos   char odstr[MAX_KEYWORD_LEN];
   1894      1.1  christos   keyword_t *k;
   1895      1.1  christos   hashval_t hash;
   1896      1.1  christos 
   1897      1.1  christos   if (*end == '$')
   1898      1.1  christos     end++;
   1899      1.1  christos   end = parse_to_delimiter (end, odstr);
   1900      1.1  christos 
   1901      1.1  christos   hash = htab_hash_string (odstr);
   1902      1.1  christos   k = htab_find_with_hash (hw_ktabs[HW_GPR], odstr, hash);
   1903      1.1  christos 
   1904      1.1  christos   if (k == NULL)
   1905      1.1  christos     return NASM_ERR_OPERAND;
   1906      1.1  christos 
   1907      1.1  christos   if (__GF (pinsn->insn, 20, 5) > (unsigned int) k->value)
   1908  1.1.1.5  christos     return NASM_ERR_OPERAND;
   1909  1.1.1.5  christos 
   1910  1.1.1.5  christos   /* Register not allowed in reduced register.  */
   1911  1.1.1.5  christos   if ((pdesc->flags & NASM_OPEN_REDUCED_REG)
   1912  1.1.1.5  christos       && (k->attr & ATTR (RDREG)) == 0)
   1913      1.1  christos     return NASM_ERR_REG_REDUCED;
   1914      1.1  christos 
   1915      1.1  christos   *value = k->value;
   1916      1.1  christos   *pstr = end;
   1917      1.1  christos   return NASM_R_CONST;
   1918      1.1  christos }
   1919      1.1  christos 
   1920      1.1  christos /* Parse the operand of push25/pop25.  */
   1921      1.1  christos 
   1922      1.1  christos static int
   1923      1.1  christos parse_re2 (struct nds32_asm_desc *pdesc ATTRIBUTE_UNUSED,
   1924      1.1  christos 	   struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   1925      1.1  christos 	   char **pstr, int64_t *value)
   1926      1.1  christos {
   1927      1.1  christos   char *end = *pstr;
   1928      1.1  christos   char odstr[MAX_KEYWORD_LEN];
   1929      1.1  christos   keyword_t *k;
   1930      1.1  christos   hashval_t hash;
   1931      1.1  christos 
   1932      1.1  christos   if (*end == '$')
   1933      1.1  christos     end++;
   1934      1.1  christos   end = parse_to_delimiter (end, odstr);
   1935      1.1  christos 
   1936      1.1  christos   hash = htab_hash_string (odstr);
   1937      1.1  christos   k = htab_find_with_hash (hw_ktabs[HW_GPR], odstr, hash);
   1938      1.1  christos 
   1939      1.1  christos   if (k == NULL)
   1940  1.1.1.5  christos     return NASM_ERR_OPERAND;
   1941  1.1.1.5  christos 
   1942  1.1.1.5  christos   /* Register not allowed in reduced register.  */
   1943  1.1.1.5  christos   if ((pdesc->flags & NASM_OPEN_REDUCED_REG)
   1944  1.1.1.5  christos       && (k->attr & ATTR (RDREG)) == 0)
   1945      1.1  christos     return NASM_ERR_REG_REDUCED;
   1946      1.1  christos 
   1947      1.1  christos   if (k->value == 6)
   1948      1.1  christos     *value = 0;
   1949      1.1  christos   else if (k->value == 8)
   1950      1.1  christos     *value = 1;
   1951      1.1  christos   else if (k->value == 10)
   1952      1.1  christos     *value = 2;
   1953      1.1  christos   else if (k->value == 14)
   1954      1.1  christos     *value = 3;
   1955      1.1  christos   else
   1956      1.1  christos     return NASM_ERR_OPERAND;
   1957      1.1  christos 
   1958      1.1  christos   *pstr = end;
   1959      1.1  christos   return NASM_R_CONST;
   1960      1.1  christos }
   1961      1.1  christos 
   1962      1.1  christos /* Parse the operand of lwi45.fe.  */
   1963      1.1  christos 
   1964      1.1  christos static int
   1965      1.1  christos parse_fe5 (struct nds32_asm_desc *pdesc, struct nds32_asm_insn *pinsn,
   1966      1.1  christos 	   char **pstr, int64_t *value)
   1967      1.1  christos {
   1968      1.1  christos   int r;
   1969      1.1  christos 
   1970      1.1  christos   r = pdesc->parse_operand (pdesc, pinsn, pstr, value);
   1971      1.1  christos   if (r != NASM_R_CONST)
   1972      1.1  christos     return NASM_ERR_OPERAND;
   1973      1.1  christos 
   1974      1.1  christos   /* 128 == 32 << 2.  Leave the shift to parse_opreand,
   1975      1.1  christos      so it can check whether it is a multiple of 4.  */
   1976      1.1  christos   *value = 128 + *value;
   1977      1.1  christos   return r;
   1978      1.1  christos }
   1979      1.1  christos 
   1980      1.1  christos /* Parse the operand of movpi45.  */
   1981      1.1  christos 
   1982      1.1  christos static int
   1983      1.1  christos parse_pi5 (struct nds32_asm_desc *pdesc, struct nds32_asm_insn *pinsn,
   1984      1.1  christos 	   char **pstr, int64_t *value)
   1985      1.1  christos {
   1986      1.1  christos   int r;
   1987      1.1  christos 
   1988      1.1  christos   r = pdesc->parse_operand (pdesc, pinsn, pstr, value);
   1989      1.1  christos   if (r != NASM_R_CONST)
   1990      1.1  christos     return NASM_ERR_OPERAND;
   1991      1.1  christos 
   1992      1.1  christos   *value -= 16;
   1993      1.1  christos   return r;
   1994      1.1  christos }
   1995      1.1  christos 
   1996      1.1  christos static int aext_a30b20 = 0;
   1997      1.1  christos static int aext_rte = 0;
   1998      1.1  christos static int aext_im5_ip = 0;
   1999      1.1  christos static int aext_im6_ip = 0;
   2000  1.1.1.5  christos /* Parse the operand of audio ext.  */
   2001  1.1.1.5  christos static int
   2002      1.1  christos parse_aext_reg (struct nds32_asm_desc *pdesc, char **pstr,
   2003      1.1  christos 		int *value, int hw_res)
   2004      1.1  christos {
   2005      1.1  christos   char *end = *pstr;
   2006      1.1  christos   char odstr[MAX_KEYWORD_LEN];
   2007      1.1  christos   keyword_t *k;
   2008      1.1  christos   hashval_t hash;
   2009      1.1  christos 
   2010      1.1  christos   if (*end == '$')
   2011      1.1  christos     end++;
   2012      1.1  christos   end = parse_to_delimiter (end, odstr);
   2013      1.1  christos 
   2014      1.1  christos   hash = htab_hash_string (odstr);
   2015      1.1  christos   k = htab_find_with_hash (hw_ktabs[hw_res], odstr, hash);
   2016      1.1  christos 
   2017      1.1  christos   if (k == NULL)
   2018  1.1.1.5  christos     return NASM_ERR_OPERAND;
   2019  1.1.1.5  christos 
   2020  1.1.1.5  christos   if (hw_res == HW_GPR
   2021  1.1.1.5  christos       && (pdesc->flags & NASM_OPEN_REDUCED_REG)
   2022  1.1.1.5  christos       && (k->attr & ATTR (RDREG)) == 0)
   2023      1.1  christos     return NASM_ERR_REG_REDUCED;
   2024      1.1  christos 
   2025      1.1  christos   *value = k->value;
   2026      1.1  christos   *pstr = end;
   2027      1.1  christos   return NASM_R_CONST;
   2028      1.1  christos }
   2029  1.1.1.5  christos 
   2030      1.1  christos static int
   2031      1.1  christos parse_a30b20 (struct nds32_asm_desc *pdesc,
   2032      1.1  christos 	      struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2033      1.1  christos 	      char **pstr, int64_t *value)
   2034      1.1  christos {
   2035  1.1.1.5  christos   int rt_value, ret;
   2036  1.1.1.5  christos 
   2037  1.1.1.5  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_GPR);
   2038      1.1  christos   if (ret == NASM_ERR_REG_REDUCED)
   2039      1.1  christos     return NASM_ERR_REG_REDUCED;
   2040      1.1  christos   if ((ret == NASM_ERR_OPERAND) || (rt_value > 15))
   2041      1.1  christos     return NASM_ERR_OPERAND;
   2042      1.1  christos 
   2043      1.1  christos   *value = rt_value;
   2044      1.1  christos   aext_a30b20 = rt_value;
   2045      1.1  christos   return NASM_R_CONST;
   2046      1.1  christos }
   2047  1.1.1.5  christos 
   2048      1.1  christos static int
   2049      1.1  christos parse_rt21 (struct nds32_asm_desc *pdesc,
   2050      1.1  christos 	    struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2051      1.1  christos 	    char **pstr, int64_t *value)
   2052      1.1  christos {
   2053  1.1.1.5  christos   int rt_value, ret, tmp_value, tmp1, tmp2;
   2054  1.1.1.5  christos 
   2055  1.1.1.5  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_GPR);
   2056      1.1  christos   if (ret == NASM_ERR_REG_REDUCED)
   2057      1.1  christos     return NASM_ERR_REG_REDUCED;
   2058  1.1.1.5  christos   if ((ret == NASM_ERR_OPERAND) || (rt_value > 15))
   2059      1.1  christos     return NASM_ERR_OPERAND;
   2060      1.1  christos 
   2061      1.1  christos   tmp1 = (aext_a30b20 & 0x08);
   2062      1.1  christos   tmp2 = (rt_value & 0x08);
   2063      1.1  christos   if (tmp1 != tmp2)
   2064      1.1  christos     return NASM_ERR_OPERAND;
   2065      1.1  christos 
   2066      1.1  christos   /* Rt=CONCAT(c, t21, t0), t21:bit11-10, t0:bit5.  */
   2067      1.1  christos   tmp_value = (rt_value & 0x06) << 4;
   2068      1.1  christos   tmp_value |= (rt_value & 0x01);
   2069      1.1  christos   *value = tmp_value;
   2070      1.1  christos   return NASM_R_CONST;
   2071      1.1  christos }
   2072  1.1.1.5  christos 
   2073      1.1  christos static int
   2074      1.1  christos parse_rte_start (struct nds32_asm_desc *pdesc,
   2075      1.1  christos 		 struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2076      1.1  christos 		 char **pstr, int64_t *value)
   2077      1.1  christos {
   2078  1.1.1.5  christos   int rt_value, ret, tmp1, tmp2;
   2079  1.1.1.5  christos 
   2080  1.1.1.5  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_GPR);
   2081      1.1  christos   if (ret == NASM_ERR_REG_REDUCED)
   2082      1.1  christos     return NASM_ERR_REG_REDUCED;
   2083      1.1  christos   if ((ret == NASM_ERR_OPERAND) || (rt_value > 15)
   2084  1.1.1.5  christos       || (rt_value & 0x01))
   2085      1.1  christos     return NASM_ERR_OPERAND;
   2086      1.1  christos 
   2087      1.1  christos   tmp1 = (aext_a30b20 & 0x08);
   2088      1.1  christos   tmp2 = (rt_value & 0x08);
   2089      1.1  christos   if (tmp1 != tmp2)
   2090      1.1  christos     return NASM_ERR_OPERAND;
   2091      1.1  christos 
   2092      1.1  christos   aext_rte = rt_value;
   2093      1.1  christos   /* Rt=CONCAT(c, t21, 0), t21:bit11-10.  */
   2094      1.1  christos   rt_value = (rt_value & 0x06) << 4;
   2095      1.1  christos   *value = rt_value;
   2096      1.1  christos   return NASM_R_CONST;
   2097      1.1  christos }
   2098  1.1.1.5  christos 
   2099      1.1  christos static int
   2100      1.1  christos parse_rte_end (struct nds32_asm_desc *pdesc,
   2101      1.1  christos 	       struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2102      1.1  christos 	       char **pstr, int64_t *value)
   2103      1.1  christos {
   2104  1.1.1.5  christos   int rt_value, ret, tmp1, tmp2;
   2105  1.1.1.5  christos 
   2106  1.1.1.5  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_GPR);
   2107      1.1  christos   if (ret == NASM_ERR_REG_REDUCED)
   2108      1.1  christos     return NASM_ERR_REG_REDUCED;
   2109      1.1  christos   if ((ret == NASM_ERR_OPERAND) || (rt_value > 15)
   2110      1.1  christos       || ((rt_value & 0x01) == 0)
   2111  1.1.1.5  christos       || (rt_value != (aext_rte + 1)))
   2112      1.1  christos     return NASM_ERR_OPERAND;
   2113      1.1  christos 
   2114      1.1  christos   tmp1 = (aext_a30b20 & 0x08);
   2115      1.1  christos   tmp2 = (rt_value & 0x08);
   2116  1.1.1.5  christos   if (tmp1 != tmp2)
   2117      1.1  christos     return NASM_ERR_OPERAND;
   2118      1.1  christos 
   2119      1.1  christos   /* Rt=CONCAT(c, t21, 0), t21:bit11-10.  */
   2120      1.1  christos   rt_value = (rt_value & 0x06) << 4;
   2121      1.1  christos   *value = rt_value;
   2122      1.1  christos   return NASM_R_CONST;
   2123      1.1  christos }
   2124  1.1.1.5  christos 
   2125      1.1  christos static int
   2126      1.1  christos parse_rte69_start (struct nds32_asm_desc *pdesc,
   2127      1.1  christos 		   struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2128      1.1  christos 		   char **pstr, int64_t *value)
   2129      1.1  christos {
   2130  1.1.1.5  christos   int rt_value, ret;
   2131  1.1.1.5  christos 
   2132  1.1.1.5  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_GPR);
   2133      1.1  christos   if (ret == NASM_ERR_REG_REDUCED)
   2134      1.1  christos     return NASM_ERR_REG_REDUCED;
   2135      1.1  christos   if ((ret == NASM_ERR_OPERAND)
   2136  1.1.1.5  christos       || (rt_value & 0x01))
   2137      1.1  christos     return NASM_ERR_OPERAND;
   2138      1.1  christos 
   2139      1.1  christos   aext_rte = rt_value;
   2140      1.1  christos   rt_value = (rt_value >> 1);
   2141      1.1  christos   *value = rt_value;
   2142      1.1  christos   return NASM_R_CONST;
   2143      1.1  christos }
   2144  1.1.1.5  christos 
   2145      1.1  christos static int
   2146      1.1  christos parse_rte69_end (struct nds32_asm_desc *pdesc,
   2147      1.1  christos 		 struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2148      1.1  christos 		 char **pstr, int64_t *value)
   2149      1.1  christos {
   2150  1.1.1.5  christos   int rt_value, ret;
   2151  1.1.1.5  christos 
   2152  1.1.1.5  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_GPR);
   2153      1.1  christos   if (ret == NASM_ERR_REG_REDUCED)
   2154      1.1  christos     return NASM_ERR_REG_REDUCED;
   2155      1.1  christos   if ((ret == NASM_ERR_OPERAND)
   2156      1.1  christos       || ((rt_value & 0x01) == 0)
   2157  1.1.1.5  christos       || (rt_value != (aext_rte + 1)))
   2158      1.1  christos     return NASM_ERR_OPERAND;
   2159      1.1  christos 
   2160      1.1  christos   aext_rte = rt_value;
   2161      1.1  christos   rt_value = (rt_value >> 1);
   2162      1.1  christos   *value = rt_value;
   2163      1.1  christos   return NASM_R_CONST;
   2164      1.1  christos }
   2165  1.1.1.5  christos 
   2166      1.1  christos static int
   2167      1.1  christos parse_im5_ip (struct nds32_asm_desc *pdesc,
   2168      1.1  christos 	      struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2169      1.1  christos 	      char **pstr, int64_t *value)
   2170      1.1  christos {
   2171  1.1.1.5  christos   int rt_value, ret, new_value;
   2172      1.1  christos 
   2173      1.1  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_AEXT_IM_I);
   2174  1.1.1.5  christos   if (ret == NASM_ERR_OPERAND)
   2175      1.1  christos     return NASM_ERR_OPERAND;
   2176      1.1  christos 
   2177      1.1  christos   /* p = bit[4].bit[1:0], r = bit[4].bit[3:2].  */
   2178      1.1  christos   new_value = (rt_value & 0x04) << 2;
   2179      1.1  christos   new_value |= (rt_value & 0x03);
   2180      1.1  christos   *value = new_value;
   2181      1.1  christos   aext_im5_ip = new_value;
   2182      1.1  christos   return NASM_R_CONST;
   2183      1.1  christos }
   2184  1.1.1.5  christos 
   2185      1.1  christos static int
   2186      1.1  christos parse_im5_mr (struct nds32_asm_desc *pdesc,
   2187      1.1  christos 	      struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2188      1.1  christos 	      char **pstr, int64_t *value)
   2189      1.1  christos {
   2190  1.1.1.5  christos   int rt_value, ret, new_value, tmp1, tmp2;
   2191      1.1  christos 
   2192      1.1  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_AEXT_IM_M);
   2193  1.1.1.5  christos   if (ret == NASM_ERR_OPERAND)
   2194      1.1  christos     return NASM_ERR_OPERAND;
   2195      1.1  christos 
   2196      1.1  christos   /* p = bit[4].bit[1:0], r = bit[4].bit[3:2].  */
   2197      1.1  christos   new_value = (rt_value & 0x07) << 2;
   2198      1.1  christos   tmp1 = (aext_im5_ip & 0x10);
   2199      1.1  christos   tmp2 = (new_value & 0x10);
   2200  1.1.1.5  christos   if (tmp1 != tmp2)
   2201      1.1  christos     return NASM_ERR_OPERAND;
   2202      1.1  christos 
   2203      1.1  christos   *value = new_value;
   2204      1.1  christos   return NASM_R_CONST;
   2205      1.1  christos }
   2206  1.1.1.5  christos 
   2207      1.1  christos static int
   2208      1.1  christos parse_im6_ip (struct nds32_asm_desc *pdesc,
   2209      1.1  christos 	      struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2210      1.1  christos 	      char **pstr, int64_t *value)
   2211      1.1  christos {
   2212  1.1.1.5  christos   int rt_value, ret;
   2213      1.1  christos 
   2214      1.1  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_AEXT_IM_I);
   2215  1.1.1.5  christos   if ((ret == NASM_ERR_OPERAND) || (rt_value > 3))
   2216      1.1  christos     return NASM_ERR_OPERAND;
   2217      1.1  christos 
   2218      1.1  christos   /* p = 0.bit[1:0].  */
   2219      1.1  christos   aext_im6_ip = rt_value;
   2220      1.1  christos   *value = aext_im6_ip;
   2221      1.1  christos   return NASM_R_CONST;
   2222      1.1  christos }
   2223  1.1.1.5  christos 
   2224      1.1  christos static int
   2225      1.1  christos parse_im6_iq (struct nds32_asm_desc *pdesc,
   2226      1.1  christos 	      struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2227      1.1  christos 	      char **pstr, int64_t *value)
   2228      1.1  christos {
   2229  1.1.1.5  christos   int rt_value, ret;
   2230      1.1  christos 
   2231      1.1  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_AEXT_IM_I);
   2232  1.1.1.5  christos   if ((ret == NASM_ERR_OPERAND) || (rt_value < 4))
   2233      1.1  christos     return NASM_ERR_OPERAND;
   2234      1.1  christos 
   2235      1.1  christos   /* q = 1.bit[1:0].  */
   2236  1.1.1.5  christos   if ((rt_value & 0x03) != aext_im6_ip)
   2237      1.1  christos     return NASM_ERR_OPERAND;
   2238      1.1  christos 
   2239      1.1  christos   *value = aext_im6_ip;
   2240      1.1  christos   return NASM_R_CONST;
   2241      1.1  christos }
   2242  1.1.1.5  christos 
   2243      1.1  christos static int
   2244      1.1  christos parse_im6_mr (struct nds32_asm_desc *pdesc,
   2245      1.1  christos 	      struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2246      1.1  christos 	      char **pstr, int64_t *value)
   2247      1.1  christos {
   2248  1.1.1.5  christos   int rt_value, ret;
   2249      1.1  christos 
   2250      1.1  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_AEXT_IM_M);
   2251  1.1.1.5  christos   if ((ret == NASM_ERR_OPERAND) || (rt_value > 3))
   2252      1.1  christos     return NASM_ERR_OPERAND;
   2253      1.1  christos 
   2254      1.1  christos   /* r = 0.bit[3:2].  */
   2255      1.1  christos   *value = (rt_value & 0x03);
   2256      1.1  christos   return NASM_R_CONST;
   2257      1.1  christos }
   2258  1.1.1.5  christos 
   2259      1.1  christos static int
   2260      1.1  christos parse_im6_ms (struct nds32_asm_desc *pdesc,
   2261      1.1  christos 	      struct nds32_asm_insn *pinsn ATTRIBUTE_UNUSED,
   2262      1.1  christos 	      char **pstr, int64_t *value)
   2263      1.1  christos {
   2264  1.1.1.5  christos   int rt_value, ret;
   2265      1.1  christos 
   2266      1.1  christos   ret = parse_aext_reg (pdesc, pstr, &rt_value, HW_AEXT_IM_M);
   2267  1.1.1.5  christos   if ((ret == NASM_ERR_OPERAND) || (rt_value < 4))
   2268      1.1  christos     return NASM_ERR_OPERAND;
   2269      1.1  christos 
   2270      1.1  christos   /* s = 1.bit[5:4].  */
   2271      1.1  christos   *value = (rt_value & 0x03);
   2272      1.1  christos   return NASM_R_CONST;
   2273      1.1  christos }
   2274      1.1  christos 
   2275      1.1  christos /* Generic operand parse base on the information provided by the field.  */
   2276      1.1  christos 
   2277      1.1  christos static int
   2278      1.1  christos parse_operand (nds32_asm_desc_t *pdesc, nds32_asm_insn_t *pinsn,
   2279      1.1  christos 	       char **str, int syn)
   2280      1.1  christos {
   2281      1.1  christos   char odstr[MAX_KEYWORD_LEN];
   2282  1.1.1.5  christos   char *end;
   2283      1.1  christos   hashval_t hash;
   2284  1.1.1.5  christos   const field_t *fld = &LEX_GET_FIELD (((syn >> 8) & 0xff) - 1, syn);
   2285      1.1  christos   keyword_t *k;
   2286      1.1  christos   int64_t value = 0;	/* 0x100000000; Big enough to overflow.  */
   2287      1.1  christos   int r;
   2288      1.1  christos   uint64_t modifier = 0;
   2289      1.1  christos 
   2290      1.1  christos   end = *str;
   2291      1.1  christos 
   2292      1.1  christos   if (fld->parse)
   2293  1.1.1.5  christos     {
   2294      1.1  christos       r = fld->parse (pdesc, pinsn, &end, &value);
   2295  1.1.1.5  christos       if (r == NASM_ERR_OPERAND || r == NASM_ERR_REG_REDUCED)
   2296      1.1  christos 	{
   2297      1.1  christos 	  pdesc->result = r;
   2298      1.1  christos 	  return 0;
   2299      1.1  christos 	}
   2300      1.1  christos       goto done;
   2301  1.1.1.5  christos     }
   2302  1.1.1.5  christos 
   2303      1.1  christos   /* Check valid keyword group.  */
   2304  1.1.1.5  christos   if (fld->hw_res < HW_INT)
   2305  1.1.1.5  christos     {
   2306  1.1.1.5  christos       int n = 0, i;
   2307  1.1.1.5  christos 
   2308  1.1.1.5  christos       /* Calculate index of keyword hash table.  */
   2309  1.1.1.5  christos       for (i = 0; i < (fld->hw_res >> 8); i++)
   2310      1.1  christos 	n += nds32_keyword_count_table[i];
   2311      1.1  christos 
   2312      1.1  christos       /* Parse the operand in assembly code.  */
   2313      1.1  christos       if (*end == '$')
   2314      1.1  christos 	end++;
   2315      1.1  christos       end = parse_to_delimiter (end, odstr);
   2316  1.1.1.5  christos 
   2317  1.1.1.5  christos       hash = htab_hash_string (odstr);
   2318      1.1  christos       k = htab_find_with_hash (hw_ktabs[n + (fld->hw_res & 0xff)], odstr,
   2319      1.1  christos 			       hash);
   2320      1.1  christos 
   2321      1.1  christos       if (k == NULL)
   2322      1.1  christos 	{
   2323      1.1  christos 	  pdesc->result = NASM_ERR_OPERAND;
   2324      1.1  christos 	  return 0;
   2325      1.1  christos 	}
   2326      1.1  christos 
   2327      1.1  christos       if (fld->hw_res == HW_GPR && (pdesc->flags & NASM_OPEN_REDUCED_REG)
   2328      1.1  christos 	  && (k->attr & ATTR (RDREG)) == 0)
   2329      1.1  christos 	{
   2330      1.1  christos 	  /* Register not allowed in reduced register.  */
   2331      1.1  christos 	  pdesc->result = NASM_ERR_REG_REDUCED;
   2332      1.1  christos 	  return 0;
   2333      1.1  christos 	}
   2334      1.1  christos 
   2335      1.1  christos       if (fld->hw_res == HW_GPR)
   2336      1.1  christos 	{
   2337      1.1  christos 	  if (syn & SYN_INPUT)
   2338      1.1  christos 	    pinsn->defuse |= USE_REG (k->value);
   2339      1.1  christos 	  if (syn & SYN_OUTPUT)
   2340      1.1  christos 	    pinsn->defuse |= DEF_REG (k->value);
   2341      1.1  christos 	}
   2342      1.1  christos 
   2343      1.1  christos       value = k->value;
   2344      1.1  christos       if (fld->hw_res == HW_GPR && (fld->bitsize + fld->shift) == 4)
   2345      1.1  christos 	value = nds32_r54map[value];
   2346      1.1  christos     }
   2347      1.1  christos   else if (fld->hw_res == HW_INT || fld->hw_res == HW_UINT)
   2348      1.1  christos     {
   2349      1.1  christos       if (*end == '#')
   2350      1.1  christos 	end++;
   2351      1.1  christos 
   2352      1.1  christos       /* Handle modifiers.  Do we need to make a table for modifiers?
   2353      1.1  christos 	 Do we need to check unknown modifier?  */
   2354      1.1  christos       if (strncasecmp (end, "hi20(", 5) == 0)
   2355      1.1  christos 	{
   2356      1.1  christos 	  modifier |= NASM_ATTR_HI20;
   2357      1.1  christos 	  end += 5;
   2358      1.1  christos 	}
   2359      1.1  christos       else if (strncasecmp (end, "lo12(", 5) == 0)
   2360      1.1  christos 	{
   2361      1.1  christos 	  modifier |= NASM_ATTR_LO12;
   2362      1.1  christos 	  end += 5;
   2363      1.1  christos 	}
   2364      1.1  christos       else if (strncasecmp (end, "lo20(", 5) == 0)
   2365      1.1  christos 	{
   2366      1.1  christos 	  /* e.g., movi.  */
   2367      1.1  christos 	  modifier |= NASM_ATTR_LO20;
   2368      1.1  christos 	  end += 5;
   2369      1.1  christos 	}
   2370      1.1  christos 
   2371      1.1  christos       r = pdesc->parse_operand (pdesc, pinsn, &end, &value);
   2372      1.1  christos       if (modifier)
   2373      1.1  christos 	{
   2374      1.1  christos 	  /* Consume the ')' of modifier.  */
   2375      1.1  christos 	  end++;
   2376      1.1  christos 	  pinsn->attr |= modifier;
   2377      1.1  christos 	}
   2378      1.1  christos 
   2379      1.1  christos       switch (r)
   2380      1.1  christos 	{
   2381      1.1  christos 	case NASM_R_ILLEGAL:
   2382      1.1  christos 	  pdesc->result = NASM_ERR_OPERAND;
   2383      1.1  christos 	  return 0;
   2384      1.1  christos 	case NASM_R_SYMBOL:
   2385      1.1  christos 	  /* This field needs special fix-up.  */
   2386      1.1  christos 	  pinsn->field = fld;
   2387      1.1  christos 	  break;
   2388      1.1  christos 	case NASM_R_CONST:
   2389      1.1  christos 	  if (modifier & NASM_ATTR_HI20)
   2390      1.1  christos 	    value = (value >> 12) & 0xfffff;
   2391      1.1  christos 	  else if (modifier & NASM_ATTR_LO12)
   2392      1.1  christos 	    value = value & 0xfff;
   2393      1.1  christos 	  else if (modifier & NASM_ATTR_LO20)
   2394      1.1  christos 	    value = value & 0xfffff;
   2395  1.1.1.4  christos 	  break;
   2396  1.1.1.4  christos 	default:
   2397  1.1.1.4  christos 	  /* xgettext: c-format */
   2398      1.1  christos 	  opcodes_error_handler (_("internal error: don't know how to handle "
   2399      1.1  christos 				   "parsing results"));
   2400      1.1  christos 	  abort ();
   2401      1.1  christos 	}
   2402      1.1  christos     }
   2403  1.1.1.4  christos   else
   2404  1.1.1.4  christos     {
   2405      1.1  christos       /* xgettext: c-format */
   2406      1.1  christos       opcodes_error_handler (_("internal error: unknown hardware resource"));
   2407      1.1  christos       abort ();
   2408  1.1.1.6  christos     }
   2409      1.1  christos 
   2410      1.1  christos  done:
   2411      1.1  christos   /* Don't silently discarding bits.  */
   2412      1.1  christos   if (value & __MASK (fld->shift))
   2413      1.1  christos     {
   2414      1.1  christos       pdesc->result = NASM_ERR_OUT_OF_RANGE;
   2415      1.1  christos       return 0;
   2416      1.1  christos     }
   2417      1.1  christos 
   2418      1.1  christos   /* Check the range of signed or unsigned result.  */
   2419      1.1  christos   if (fld->hw_res != HW_INT && ((int32_t) value >> (fld->bitsize + fld->shift)))
   2420      1.1  christos     {
   2421      1.1  christos       pdesc->result = NASM_ERR_OUT_OF_RANGE;
   2422      1.1  christos       return 0;
   2423      1.1  christos     }
   2424      1.1  christos   else if (fld->hw_res == HW_INT)
   2425      1.1  christos     {
   2426      1.1  christos       /* Sign-ext the value.  */
   2427      1.1  christos       if (((value >> 32) == 0) && (value & 0x80000000))
   2428      1.1  christos 	value |= (int64_t) -1U << 31;
   2429      1.1  christos 
   2430      1.1  christos 
   2431      1.1  christos       /* Shift the value to positive domain.  */
   2432      1.1  christos       if ((value + (1 << (fld->bitsize + fld->shift - 1)))
   2433      1.1  christos 	  >> (fld->bitsize + fld->shift))
   2434      1.1  christos 	{
   2435      1.1  christos 	  pdesc->result = NASM_ERR_OUT_OF_RANGE;
   2436      1.1  christos 	  return 0;
   2437      1.1  christos 	}
   2438      1.1  christos     }
   2439      1.1  christos 
   2440      1.1  christos   pinsn->insn |=
   2441      1.1  christos     (((value >> fld->shift) & __MASK (fld->bitsize)) << fld->bitpos);
   2442      1.1  christos   *str = end;
   2443      1.1  christos   return 1;
   2444      1.1  christos }
   2445      1.1  christos 
   2446      1.1  christos /* Try to parse an instruction string based on opcode syntax.  */
   2447      1.1  christos 
   2448      1.1  christos static int
   2449      1.1  christos parse_insn (nds32_asm_desc_t *pdesc, nds32_asm_insn_t *pinsn,
   2450      1.1  christos 	    char *str, struct nds32_opcode *opc)
   2451      1.1  christos {
   2452      1.1  christos   int variant = 0;
   2453      1.1  christos   char *p = NULL;
   2454      1.1  christos 
   2455      1.1  christos   /* A syntax may has optional operands, so we have to try each possible
   2456      1.1  christos      combination to see if the input is accepted.  In order to do so,
   2457      1.1  christos      bit-N represent whether optional-operand-N is used in this combination.
   2458      1.1  christos      That is, if bit-N is set, optional-operand-N is not used.
   2459      1.1  christos 
   2460      1.1  christos      For example, there are 2 optional operands in this syntax,
   2461      1.1  christos 
   2462      1.1  christos      "a{,b}{,c}"
   2463      1.1  christos 
   2464      1.1  christos      we can try it 4 times (i.e., 1 << 2)
   2465      1.1  christos 
   2466      1.1  christos      0 (b00): "a,b,c"
   2467      1.1  christos      1 (b01): "a,c"
   2468      1.1  christos      2 (b10): "a,b"
   2469      1.1  christos      3 (b11): "a"
   2470      1.1  christos    */
   2471      1.1  christos 
   2472      1.1  christos   /* The outer do-while loop is used to try each possible optional
   2473      1.1  christos      operand combination, and VARIANT is the bit mask.  The inner loop
   2474      1.1  christos      iterates each lexeme in the syntax.  */
   2475      1.1  christos 
   2476      1.1  christos   do
   2477      1.1  christos     {
   2478      1.1  christos       /* OPT is the number of optional operands we've seen.  */
   2479      1.1  christos       int opt = 0;
   2480      1.1  christos       lex_t *plex;
   2481      1.1  christos 
   2482      1.1  christos       /* PLEX is the syntax iterator and P is the iterator for input
   2483      1.1  christos 	 string.  */
   2484      1.1  christos       plex = opc->syntax;
   2485      1.1  christos       p = str;
   2486      1.1  christos       /* Initial the base value.  */
   2487      1.1  christos       pinsn->insn = opc->value;
   2488      1.1  christos 
   2489      1.1  christos       while (*plex)
   2490      1.1  christos 	{
   2491      1.1  christos 	  if (IS_LEX_CHAR (*plex))
   2492      1.1  christos 	    {
   2493      1.1  christos 	      /* If it's a plain char, just compare it.  */
   2494      1.1  christos 	      if (LEX_CHAR (*plex) != TOLOWER (*p))
   2495      1.1  christos 		{
   2496      1.1  christos 		  if (LEX_CHAR (*plex) == '+' && TOLOWER (*p) == '-')
   2497      1.1  christos 		    {
   2498      1.1  christos 		      /* We don't define minus format for some signed
   2499      1.1  christos 			 immediate case, so ignoring '+' here to parse
   2500      1.1  christos 			 negative value eazily.  Besides, the minus format
   2501      1.1  christos 			 can not support for instruction with relocation.
   2502      1.1  christos 			 Ex: lwi $r0, [$r0 + imm]  */
   2503      1.1  christos 		      plex++;
   2504      1.1  christos 		      continue;
   2505      1.1  christos 		    }
   2506      1.1  christos 		  pdesc->result = NASM_ERR_SYNTAX;
   2507      1.1  christos 		  goto reject;
   2508      1.1  christos 		}
   2509      1.1  christos 	      p++;
   2510      1.1  christos 	    }
   2511      1.1  christos 	  else if (*plex & SYN_LOPT)
   2512      1.1  christos 	    {
   2513      1.1  christos 	      /* If it's '{' and it's not used in this iteration,
   2514      1.1  christos 		 just skip the whole optional operand.  */
   2515      1.1  christos 	      if ((1 << (opt++)) & variant)
   2516      1.1  christos 		{
   2517      1.1  christos 		  while ((*plex & SYN_ROPT) == 0)
   2518      1.1  christos 		    plex++;
   2519      1.1  christos 		}
   2520      1.1  christos 	    }
   2521      1.1  christos 	  else if (*plex & SYN_ROPT)
   2522      1.1  christos 	    {
   2523      1.1  christos 	      /* ignore.  */
   2524      1.1  christos 	    }
   2525      1.1  christos 	  else
   2526      1.1  christos 	    {
   2527      1.1  christos 	      /* If it's a operand, parse the input operand from input.  */
   2528      1.1  christos 	      if (!parse_operand (pdesc, pinsn, &p, *plex))
   2529      1.1  christos 		goto reject;
   2530      1.1  christos 	    }
   2531      1.1  christos 	  plex++;
   2532      1.1  christos 	}
   2533      1.1  christos 
   2534      1.1  christos       /* Check whether this syntax is accepted.  */
   2535      1.1  christos       if (*plex == 0 && (*p == '\0' || *p == '!' || *p == '#'))
   2536  1.1.1.6  christos 	return 1;
   2537      1.1  christos 
   2538      1.1  christos     reject:
   2539      1.1  christos       /* If not accepted, try another combination.  */
   2540      1.1  christos       variant++;
   2541      1.1  christos     }
   2542      1.1  christos   while (variant < (1 << opc->variant));
   2543      1.1  christos 
   2544      1.1  christos   return 0;
   2545      1.1  christos }
   2546      1.1  christos 
   2547      1.1  christos void
   2548      1.1  christos nds32_assemble (nds32_asm_desc_t *pdesc, nds32_asm_insn_t *pinsn,
   2549      1.1  christos 		char *str)
   2550      1.1  christos {
   2551      1.1  christos   struct nds32_opcode *opc;
   2552      1.1  christos   char *s;
   2553      1.1  christos   char *mnemoic;
   2554      1.1  christos   char *dot;
   2555      1.1  christos   hashval_t hash;
   2556      1.1  christos 
   2557      1.1  christos   /* Duplicate the string, so we can modify it for convenience.  */
   2558      1.1  christos   s = strdup (str);
   2559      1.1  christos   mnemoic = s;
   2560      1.1  christos   str = s;
   2561      1.1  christos 
   2562      1.1  christos   /* Find opcode mnemoic.  */
   2563      1.1  christos   while (*s != ' ' && *s != '\t' && *s != '\0')
   2564      1.1  christos     s++;
   2565      1.1  christos   if (*s != '\0')
   2566      1.1  christos     *s++ = '\0';
   2567  1.1.1.6  christos   dot = strchr (mnemoic, '.');
   2568      1.1  christos 
   2569      1.1  christos  retry_dot:
   2570      1.1  christos   /* Lookup the opcode syntax.  */
   2571      1.1  christos   hash = htab_hash_string (mnemoic);
   2572      1.1  christos   opc = (struct nds32_opcode *)
   2573      1.1  christos     htab_find_with_hash (opcode_htab, mnemoic, hash);
   2574      1.1  christos 
   2575      1.1  christos   /* If we cannot find a match syntax, try it again without `.'.
   2576      1.1  christos      For example, try "lmw.adm" first and then try "lmw" again.  */
   2577      1.1  christos   if (opc == NULL && dot != NULL)
   2578      1.1  christos     {
   2579      1.1  christos       *dot = '\0';
   2580      1.1  christos       s[-1] = ' ';
   2581      1.1  christos       s = dot + 1;
   2582      1.1  christos       dot = NULL;
   2583      1.1  christos       goto retry_dot;
   2584      1.1  christos     }
   2585      1.1  christos   else if (opc == NULL)
   2586      1.1  christos     {
   2587      1.1  christos       pdesc->result = NASM_ERR_UNKNOWN_OP;
   2588      1.1  christos       goto out;
   2589      1.1  christos     }
   2590      1.1  christos 
   2591      1.1  christos   /* There may be multiple syntaxes for a given opcode.
   2592      1.1  christos      Try each one until a match is found.  */
   2593      1.1  christos   for (; opc; opc = opc->next)
   2594      1.1  christos     {
   2595      1.1  christos       /* Build opcode syntax, if it's not been initialized yet.  */
   2596      1.1  christos       if (opc->syntax == NULL)
   2597      1.1  christos 	build_opcode_syntax (opc);
   2598      1.1  christos 
   2599      1.1  christos       /* Reset status before assemble.  */
   2600      1.1  christos       pinsn->defuse = opc->defuse;
   2601      1.1  christos       pinsn->insn = 0;
   2602      1.1  christos       pinsn->field = NULL;
   2603      1.1  christos       /* Use opcode attributes to initial instruction attributes.  */
   2604      1.1  christos       pinsn->attr = opc->attr;
   2605      1.1  christos       if (parse_insn (pdesc, pinsn, s, opc))
   2606      1.1  christos 	break;
   2607      1.1  christos     }
   2608      1.1  christos 
   2609      1.1  christos   pinsn->opcode = opc;
   2610      1.1  christos   if (opc == NULL)
   2611      1.1  christos     {
   2612      1.1  christos       if (pdesc->result == NASM_OK)
   2613      1.1  christos 	pdesc->result = NASM_ERR_SYNTAX;
   2614      1.1  christos       goto out;
   2615      1.1  christos     }
   2616      1.1  christos 
   2617      1.1  christos   /* A matched opcode is found.  Write the result to instruction buffer.  */
   2618  1.1.1.6  christos   pdesc->result = NASM_OK;
   2619      1.1  christos 
   2620      1.1  christos  out:
   2621                      free (str);
   2622                    }
   2623