15198Sjmcp /*
25198Sjmcp  * CDDL HEADER START
35198Sjmcp  *
45198Sjmcp  * The contents of this file are subject to the terms of the
55198Sjmcp  * Common Development and Distribution License (the "License").
65198Sjmcp  * You may not use this file except in compliance with the License.
75198Sjmcp  *
85198Sjmcp  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
95198Sjmcp  * or http://www.opensolaris.org/os/licensing.
105198Sjmcp  * See the License for the specific language governing permissions
115198Sjmcp  * and limitations under the License.
125198Sjmcp  *
135198Sjmcp  * When distributing Covered Code, include this CDDL HEADER in each
145198Sjmcp  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
155198Sjmcp  * If applicable, add the following below this CDDL HEADER, with the
165198Sjmcp  * fields enclosed by brackets "[]" replaced with your own identifying
175198Sjmcp  * information: Portions Copyright [yyyy] [name of copyright owner]
185198Sjmcp  *
195198Sjmcp  * CDDL HEADER END
205198Sjmcp  */
215198Sjmcp 
225198Sjmcp /*
23*7718SJason.Beloro@Sun.COM  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
245198Sjmcp  * Use is subject to license terms.
255198Sjmcp  */
265198Sjmcp 
275198Sjmcp /*
285198Sjmcp  * Copyright 2007 Jason King.  All rights reserved.
295198Sjmcp  * Use is subject to license terms.
305198Sjmcp  */
315198Sjmcp 
325198Sjmcp #include "libdisasm.h"
335198Sjmcp #include "libdisasm_impl.h"
345198Sjmcp #include "dis_sparc.h"
355198Sjmcp #include "dis_sparc_fmt.h"
365198Sjmcp 
375198Sjmcp #define	INVALID                \
385198Sjmcp {                              \
395198Sjmcp 	.in_type = INST_NONE,  \
405198Sjmcp 	.in_arch = 0,          \
415198Sjmcp 	.in_data = {           \
425198Sjmcp 		.in_tbl = NULL \
435198Sjmcp 	}                      \
445198Sjmcp }
455198Sjmcp 
465198Sjmcp #define	INVALIDA(_arch)        \
475198Sjmcp {                              \
485198Sjmcp 	.in_type = INST_NONE,  \
495198Sjmcp 	.in_arch = _arch,      \
505198Sjmcp 	.in_data = {           \
515198Sjmcp 		.in_tbl = NULL \
525198Sjmcp 	}                      \
535198Sjmcp }
545198Sjmcp 
555198Sjmcp #define	INST(_name, _arch, _flags)           \
565198Sjmcp {                                            \
575198Sjmcp 	.in_type = INST_DEF,	             \
585198Sjmcp 	.in_arch = _arch,		     \
595198Sjmcp 	.in_data = {			     \
605198Sjmcp 		.in_def = {		     \
615198Sjmcp 			.in_name   = _name,  \
625198Sjmcp 			.in_flags  = _flags  \
635198Sjmcp 		}			     \
645198Sjmcp 	}				     \
655198Sjmcp }
665198Sjmcp 
675198Sjmcp #define	TABLE(_name, _arch)      \
685198Sjmcp {                                \
695198Sjmcp 	.in_type = INST_TBL,     \
705198Sjmcp 	.in_arch = _arch,        \
715198Sjmcp 	.in_data = {             \
725198Sjmcp 		.in_tbl = &_name \
735198Sjmcp 	}                       \
745198Sjmcp }
755198Sjmcp 
765198Sjmcp #define	OVERLAY(_idx, _inst) \
775198Sjmcp {                            \
785198Sjmcp 	.ov_idx  = _idx,     \
795198Sjmcp 	.ov_inst = _inst     \
805198Sjmcp }
815198Sjmcp 
825198Sjmcp #define	OVERLAY_END { .ov_idx = -1, .ov_inst = INVALID }
835198Sjmcp 
845198Sjmcp #define	V8	DIS_SPARC_V8
855198Sjmcp #define	V9	DIS_SPARC_V9
865198Sjmcp #define	V9S	DIS_SPARC_V9_SGI
875198Sjmcp #define	V9O	DIS_SPARC_V9_OPL
885198Sjmcp #define	VALL	V8|V9|V9S|V9O
895198Sjmcp 
905198Sjmcp /* branches */
915198Sjmcp static const inst_t BPcc_table_def[16] = {
925198Sjmcp 	INST("bn",   V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
935198Sjmcp 	INST("be",   V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
945198Sjmcp 	INST("ble",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
955198Sjmcp 	INST("bl",   V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
965198Sjmcp 
975198Sjmcp 	INST("bleu", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
985198Sjmcp 	INST("bcs",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
995198Sjmcp 	INST("bneg", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
1005198Sjmcp 	INST("bvs",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
1015198Sjmcp 
1025198Sjmcp 	INST("ba",   V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
1035198Sjmcp 	INST("bne",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
1045198Sjmcp 	INST("bg",   V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
1055198Sjmcp 	INST("bge",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
1065198Sjmcp 
1075198Sjmcp 	INST("bgu",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
1085198Sjmcp 	INST("bcc",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
1095198Sjmcp 	INST("bpos", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
1105198Sjmcp 	INST("bvc",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19))
1115198Sjmcp };
1125198Sjmcp 
113*7718SJason.Beloro@Sun.COM 
1145198Sjmcp static const table_t BPcc_table = {
1155198Sjmcp 	.tbl_field = 28,
1165198Sjmcp 	.tbl_len   = 4,
1175198Sjmcp 	.tbl_ovp   = NULL,
1185198Sjmcp 	.tbl_fmt   = fmt_branch,
1195198Sjmcp 	.tbl_inp   = BPcc_table_def
1205198Sjmcp };
1215198Sjmcp 
1225198Sjmcp static const inst_t Bicc_table_def[16] = {
1235198Sjmcp 	INST("bn",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1245198Sjmcp 	INST("be",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1255198Sjmcp 	INST("ble",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1265198Sjmcp 	INST("bl",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1275198Sjmcp 
1285198Sjmcp 	INST("bleu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1295198Sjmcp 	/* docs say it's 'bcs' but disassembler calles it synonym 'blu' */
1305198Sjmcp 	INST("blu",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1315198Sjmcp 	INST("bneg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1325198Sjmcp 	INST("bvs",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1335198Sjmcp 
1345198Sjmcp 	INST("ba",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1355198Sjmcp 	INST("bne",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1365198Sjmcp 	INST("bg",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1375198Sjmcp 	INST("bge",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1385198Sjmcp 
1395198Sjmcp 	INST("bgu",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1405198Sjmcp 	/*
1415198Sjmcp 	 * while the docs say it's officially 'bcc', existing disassembler
1425198Sjmcp 	 * uses the synonym bgeu
1435198Sjmcp 	 */
1445198Sjmcp 	INST("bgeu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1455198Sjmcp 	INST("bpos", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
1465198Sjmcp 	INST("bvc",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE))
1475198Sjmcp };
1485198Sjmcp 
1495198Sjmcp static const table_t Bicc_table = {
1505198Sjmcp 	.tbl_field = 28,
1515198Sjmcp 	.tbl_len   = 4,
1525198Sjmcp 	.tbl_ovp   = NULL,
1535198Sjmcp 	.tbl_fmt   = fmt_branch,
1545198Sjmcp 	.tbl_inp   = Bicc_table_def
1555198Sjmcp };
1565198Sjmcp 
1575198Sjmcp static const inst_t BPr_table_def[16] = {
158*7718SJason.Beloro@Sun.COM 	INST("brnr",  V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
1595198Sjmcp 	INST("brz",   V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
1605198Sjmcp 	INST("brlez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
1615198Sjmcp 	INST("brlz",  V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
1625198Sjmcp 
163*7718SJason.Beloro@Sun.COM 	INST("brr",  V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
1645198Sjmcp 	INST("brnz",  V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
1655198Sjmcp 	INST("brgz",  V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
1665198Sjmcp 	INST("brgez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
1675198Sjmcp 
1685198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
1695198Sjmcp };
1705198Sjmcp 
1715198Sjmcp static const table_t BPr_table = {
1725198Sjmcp 	.tbl_field = 28,
1735198Sjmcp 	.tbl_len   = 4,
1745198Sjmcp 	.tbl_ovp   = NULL,
1755198Sjmcp 	.tbl_fmt   = fmt_branch,
1765198Sjmcp 	.tbl_inp   = BPr_table_def
1775198Sjmcp };
1785198Sjmcp 
1795198Sjmcp static const inst_t FBPfcc_table_def[16] = {
1805198Sjmcp 	INST("fbn",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1815198Sjmcp 	INST("fbne",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1825198Sjmcp 	INST("fblg",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1835198Sjmcp 	INST("fbul",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1845198Sjmcp 
1855198Sjmcp 	INST("fbl",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1865198Sjmcp 	INST("fbug",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1875198Sjmcp 	INST("fbg",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1885198Sjmcp 	INST("fbu",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1895198Sjmcp 
1905198Sjmcp 	INST("fba",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1915198Sjmcp 	INST("fbe",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1925198Sjmcp 	INST("fbue",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1935198Sjmcp 	INST("fbge",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1945198Sjmcp 
1955198Sjmcp 	INST("fbuge", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1965198Sjmcp 	INST("fble",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1975198Sjmcp 	INST("fbule", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
1985198Sjmcp 	INST("fbo",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC))
1995198Sjmcp };
2005198Sjmcp 
2015198Sjmcp static const table_t FBPfcc_table = {
2025198Sjmcp 	.tbl_field = 28,
2035198Sjmcp 	.tbl_len   = 4,
2045198Sjmcp 	.tbl_ovp   = NULL,
2055198Sjmcp 	.tbl_fmt   = fmt_branch,
2065198Sjmcp 	.tbl_inp   = FBPfcc_table_def
2075198Sjmcp };
2085198Sjmcp 
2095198Sjmcp static const inst_t FBfcc_table_def[16] = {
2105198Sjmcp 	INST("fbn",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2115198Sjmcp 	INST("fbne",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2125198Sjmcp 	INST("fblg",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2135198Sjmcp 	INST("fbul",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2145198Sjmcp 
2155198Sjmcp 	INST("fbl",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2165198Sjmcp 	INST("fbug",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2175198Sjmcp 	INST("fbg",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2185198Sjmcp 	INST("fbu",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2195198Sjmcp 
2205198Sjmcp 	INST("fba",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2215198Sjmcp 	INST("fbe",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2225198Sjmcp 	INST("fbue",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2235198Sjmcp 	INST("fbge",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2245198Sjmcp 
2255198Sjmcp 	INST("fbuge", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2265198Sjmcp 	INST("fble",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2275198Sjmcp 	INST("fbule", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2285198Sjmcp 	INST("fbo",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE))
2295198Sjmcp };
2305198Sjmcp 
2315198Sjmcp static const table_t FBfcc_table = {
2325198Sjmcp 	.tbl_field = 28,
2335198Sjmcp 	.tbl_len   = 4,
2345198Sjmcp 	.tbl_ovp   = NULL,
2355198Sjmcp 	.tbl_fmt   = fmt_branch,
2365198Sjmcp 	.tbl_inp   = FBfcc_table_def
2375198Sjmcp };
2385198Sjmcp 
2395198Sjmcp static const inst_t CBccc_table_def[16] = {
2405198Sjmcp 	INST("cbn",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2415198Sjmcp 	INST("cb123", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2425198Sjmcp 	INST("cb12",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2435198Sjmcp 	INST("cb13",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2445198Sjmcp 	INST("cb1",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2455198Sjmcp 	INST("cb23",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2465198Sjmcp 	INST("cb2",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2475198Sjmcp 	INST("cb3",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2485198Sjmcp 	INST("cba",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2495198Sjmcp 	INST("cb0",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2505198Sjmcp 	INST("cb03",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2515198Sjmcp 	INST("cb02",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2525198Sjmcp 	INST("cb023", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2535198Sjmcp 	INST("cb01",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2545198Sjmcp 	INST("cb013", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2555198Sjmcp 	INST("cb012", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE))
2565198Sjmcp };
2575198Sjmcp 
2585198Sjmcp static const table_t CBccc_table = {
2595198Sjmcp 	.tbl_field = 28,
2605198Sjmcp 	.tbl_len   = 4,
2615198Sjmcp 	.tbl_ovp   = NULL,
2625198Sjmcp 	.tbl_fmt   = fmt_branch,
2635198Sjmcp 	.tbl_inp   = CBccc_table_def
2645198Sjmcp };
2655198Sjmcp 
2665198Sjmcp static const inst_t branch_table_def[8] = {
2675198Sjmcp 	INST("unimp",		VALL,  0),
2685198Sjmcp 	TABLE(BPcc_table,	V9|V9S),
2695198Sjmcp 	TABLE(Bicc_table,	VALL),
2705198Sjmcp 	TABLE(BPr_table,	V9|V9S),
2715198Sjmcp 
2725198Sjmcp 	INST("sethi",		VALL,  0),
2735198Sjmcp 	TABLE(FBPfcc_table,	V9|V9S),
2745198Sjmcp 	TABLE(FBfcc_table,	VALL),
2755198Sjmcp 	TABLE(CBccc_table,	V8)
2765198Sjmcp };
2775198Sjmcp 
2785198Sjmcp static const overlay_t branch_ov_table[] = {
2795198Sjmcp 	OVERLAY(0x00, INST("illtrap", V9|V9S, 0)),
2805198Sjmcp 	OVERLAY_END
2815198Sjmcp };
2825198Sjmcp 
2835198Sjmcp static const table_t branch_table = {
2845198Sjmcp 	.tbl_field = 24,
2855198Sjmcp 	.tbl_len   = 3,
2865198Sjmcp 	.tbl_ovp   = branch_ov_table,
2875198Sjmcp 	.tbl_fmt   = fmt_sethi,
2885198Sjmcp 	.tbl_inp   = branch_table_def
2895198Sjmcp };
2905198Sjmcp 
2915198Sjmcp /* load/stores */
2925198Sjmcp static const inst_t ls_table_def[64] = {
2935198Sjmcp 	/* 0x00 */
2945198Sjmcp 	INST("ld",		VALL,   0),
2955198Sjmcp 	INST("ldub",		VALL,   0),
2965198Sjmcp 	INST("lduh",		VALL,   0),
2975198Sjmcp 	INST("ldd",		VALL,   0),
2985198Sjmcp 
2995198Sjmcp 	INST("st",		VALL,   FLG_STORE),
3005198Sjmcp 	INST("stb",		VALL,   FLG_STORE),
3015198Sjmcp 	INST("sth",		VALL,   FLG_STORE),
3025198Sjmcp 	INST("std",		VALL,   FLG_STORE),
3035198Sjmcp 
3045198Sjmcp 	/* 0x08 */
3055198Sjmcp 	INST("ldsw",		V9|V9S, 0),
3065198Sjmcp 	INST("ldsb",		VALL,   0),
3075198Sjmcp 	INST("ldsh",		VALL,   0),
3085198Sjmcp 	INST("ldx",		V9|V9S, 0),
3095198Sjmcp 
3105198Sjmcp 	INVALID,
3115198Sjmcp 	INST("ldstub",		VALL,   0),
3125198Sjmcp 	INST("stx",		V9|V9S, FLG_STORE),
3135198Sjmcp 	INST("swap",		VALL,   0),
3145198Sjmcp 
3155198Sjmcp 	/* 0x10 */
3165198Sjmcp 	INST("lda",		VALL,   FLG_ASI),
3175198Sjmcp 	INST("lduba",		VALL,   FLG_ASI),
3185198Sjmcp 	INST("lduha",		VALL,   FLG_ASI),
3195198Sjmcp 	INST("ldda",		VALL,   FLG_ASI),
3205198Sjmcp 
3215198Sjmcp 	INST("sta",		VALL,   FLG_STORE|FLG_ASI),
3225198Sjmcp 	INST("stba",		VALL,   FLG_STORE|FLG_ASI),
3235198Sjmcp 	INST("stha",		VALL,   FLG_STORE|FLG_ASI),
3245198Sjmcp 	INST("stda",		VALL,   FLG_STORE|FLG_ASI),
3255198Sjmcp 
3265198Sjmcp 	/* 0x18 */
3275198Sjmcp 	INST("ldswa",		V9|V9S, FLG_ASI),
3285198Sjmcp 	INST("ldsba",		VALL,   FLG_ASI),
3295198Sjmcp 	INST("ldsha",		VALL,   FLG_ASI),
3305198Sjmcp 	INST("ldxa",		V9|V9S, FLG_ASI),
3315198Sjmcp 
3325198Sjmcp 	INVALID,
3335198Sjmcp 	INST("ldstuba",		VALL,   FLG_ASI),
3345198Sjmcp 	INST("stxa",		V9|V9S, FLG_STORE|FLG_ASI),
3355198Sjmcp 	INST("swapa",		VALL,   FLG_ASI),
3365198Sjmcp 
3375198Sjmcp 	/* 0x20 */
3385198Sjmcp 	INST("ld",		VALL,   FLG_RD(REG_FP)),
3395198Sjmcp 	/* ldx on v9 */
3405198Sjmcp 	INST("ld",		VALL,   FLG_RD(REG_FSR)),
3415198Sjmcp 	INST("ldq",		V9|V9S, FLG_RD(REG_FPQ)),
3425198Sjmcp 	INST("ldd",		VALL,   FLG_RD(REG_FPD)),
3435198Sjmcp 
3445198Sjmcp 	INST("st",		VALL,   FLG_STORE|FLG_RD(REG_FP)),
3455198Sjmcp 	/* stx on v9 */
3465198Sjmcp 	INST("st",		VALL,   FLG_STORE|FLG_RD(REG_FSR)),
3475198Sjmcp 	INST("stq",		VALL,   FLG_STORE|FLG_RD(REG_FPQ)),
3485198Sjmcp 	INST("std",		VALL,   FLG_STORE|FLG_RD(REG_FPD)),
3495198Sjmcp 
3505198Sjmcp 	/* 0x28 */
3515198Sjmcp 	INVALID,
3525198Sjmcp 	INVALID,
3535198Sjmcp 	INVALID,
3545198Sjmcp 	INVALID,
3555198Sjmcp 
3565198Sjmcp 	INVALID,
3575198Sjmcp 	INST("prefetch",		V9|V9S, 0),
3585198Sjmcp 	INVALID,
3595198Sjmcp 	INVALID,
3605198Sjmcp 
3615198Sjmcp 	/* 0x30 */
3625198Sjmcp 	INST("ld",		V8,	FLG_RD(REG_CP)),
3635198Sjmcp 	INST("ld",		V8,	FLG_RD(REG_CSR)),
3645198Sjmcp 	INST("ldqa",		V9|V9S,	FLG_ASI|FLG_RD(REG_FPQ)),
3655198Sjmcp 	INST("ldd",		V8,	FLG_RD(REG_CP)),
3665198Sjmcp 
3675198Sjmcp 	INST("st",		V8,	FLG_STORE|FLG_RD(REG_CP)),
3685198Sjmcp 	INST("st",		V8,	FLG_STORE|FLG_RD(REG_CSR)),
3695198Sjmcp 	INST("std",		V8,	FLG_STORE|FLG_RD(REG_CQ)),
3705198Sjmcp 	INST("std",		V8,	FLG_STORE|FLG_RD(REG_CP)),
3715198Sjmcp 
3725198Sjmcp 	/* 0x38 */
3735198Sjmcp 	INVALID,
3745198Sjmcp 	INVALID,
3755198Sjmcp 	INVALID,
3765198Sjmcp 	INVALID,
3775198Sjmcp 
3785198Sjmcp 	INST("casa",		V9|V9S, 0),
3795198Sjmcp 	INST("prefetcha",	V9|V9S, FLG_STORE|FLG_ASI),
3805198Sjmcp 	INST("casxa",		V9|V9S, 0),
3815198Sjmcp 	INVALID
3825198Sjmcp };
3835198Sjmcp 
3845198Sjmcp static const overlay_t ld_ov_table[] = {
3855198Sjmcp 	OVERLAY(0x10, INST("lduwa", V9|V9S, FLG_ASI|FLG_RD(REG_INT))),
3865198Sjmcp 	OVERLAY(0x14, INST("stwa",  V9|V9S,
3875198Sjmcp 		    FLG_STORE|FLG_ASI|FLG_RD(REG_INT))),
3885198Sjmcp 	OVERLAY(0x30, INST("lda",   V9|V9S, FLG_ASI|FLG_RD(REG_FP))),
3895198Sjmcp 	OVERLAY(0x33, INST("ldda",  V9|V9S, FLG_ASI|FLG_RD(REG_FPD))),
3905198Sjmcp 
3915198Sjmcp 	OVERLAY(0x34, INST("sta",   V9|V9S, FLG_STORE|FLG_ASI|FLG_RD(REG_FP))),
3925198Sjmcp 	OVERLAY(0x36, INST("stqa",  V9|V9S,
3935198Sjmcp 		    FLG_STORE|FLG_ASI|FLG_RD(REG_FPQ))),
3945198Sjmcp 	OVERLAY(0x37, INST("stda",  V9|V9S,
3955198Sjmcp 		    FLG_STORE|FLG_ASI|FLG_RD(REG_FPD))),
3965198Sjmcp 
3975198Sjmcp 	OVERLAY_END
3985198Sjmcp };
3995198Sjmcp 
4005198Sjmcp static const table_t ls_table = {
4015198Sjmcp 	.tbl_field = 24,
4025198Sjmcp 	.tbl_len   = 6,
4035198Sjmcp 	.tbl_ovp   = ld_ov_table,
4045198Sjmcp 	.tbl_fmt   = fmt_ls,
4055198Sjmcp 	.tbl_inp   = ls_table_def
4065198Sjmcp };
4075198Sjmcp 
408*7718SJason.Beloro@Sun.COM 
4095198Sjmcp /* ALU operations */
4105198Sjmcp static const inst_t Tcc_table_def[16] = {
4115198Sjmcp 	INST("tn",   VALL, 0),
4125198Sjmcp 	INST("te",   VALL, 0),
4135198Sjmcp 	INST("tle",  VALL, 0),
4145198Sjmcp 	INST("tl",   VALL, 0),
4155198Sjmcp 
4165198Sjmcp 	INST("tleu", VALL, 0),
4175198Sjmcp 	INST("tcs",  VALL, 0),
4185198Sjmcp 	INST("tneg", VALL, 0),
4195198Sjmcp 	INST("tvs",  VALL, 0),
4205198Sjmcp 
4215198Sjmcp 	INST("ta",   VALL, 0),
4225198Sjmcp 	INST("tne",  VALL, 0),
4235198Sjmcp 	INST("tg",   VALL, 0),
4245198Sjmcp 	INST("tge",  VALL, 0),
4255198Sjmcp 
4265198Sjmcp 	INST("tgu",  VALL, 0),
4275198Sjmcp 	INST("tcc",  VALL, 0),
4285198Sjmcp 	INST("tpos", VALL, 0),
4295198Sjmcp 	INST("tvc",  VALL, 0)
4305198Sjmcp };
4315198Sjmcp 
4325198Sjmcp static const table_t Tcc_table = {
4335198Sjmcp 	.tbl_field = 28,
4345198Sjmcp 	.tbl_len   = 4,
4355198Sjmcp 	.tbl_ovp   = NULL,
4365198Sjmcp 	.tbl_fmt   = fmt_trap,
4375198Sjmcp 	.tbl_inp   = Tcc_table_def
4385198Sjmcp };
4395198Sjmcp 
4405198Sjmcp static const inst_t rwin_table_def[32] = {
4415198Sjmcp 	/* 0x00 */
4425198Sjmcp 	INST("saved",    V9|V9S, 0),
4435198Sjmcp 	INST("restored", V9|V9S, 0),
4445198Sjmcp 	INST("allclean", V9|V9S, 0),
4455198Sjmcp 	INST("otherw",   V9|V9S, 0),
4465198Sjmcp 
4475198Sjmcp 	INST("normalw",  V9|V9S, 0),
4485198Sjmcp 	INST("invalw",   V9|V9S, 0),
4495198Sjmcp 	INVALID,
4505198Sjmcp 	INVALID,
4515198Sjmcp 
4525198Sjmcp 	/* 0x08 */
4535198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
4545198Sjmcp 
4555198Sjmcp 	/* 0x10 */
4565198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
4575198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
4585198Sjmcp };
4595198Sjmcp 
4605198Sjmcp static const table_t rwin_table = {
4615198Sjmcp 	.tbl_field = 29,
4625198Sjmcp 	.tbl_len   = 5,
4635198Sjmcp 	.tbl_ovp   = NULL,
4645198Sjmcp 	.tbl_fmt   = fmt_regwin,
4655198Sjmcp 	.tbl_inp   = rwin_table_def
4665198Sjmcp };
4675198Sjmcp 
4685198Sjmcp static const inst_t tr_table_def[32] = {
4695198Sjmcp 	/* 0x00 */
4705198Sjmcp 	INST("done",  V9|V9S, 0),
4715198Sjmcp 	INST("retry", V9|V9S, 0),
4725198Sjmcp 	INVALID,
4735198Sjmcp 	INVALID,
4745198Sjmcp 
4755198Sjmcp 	INVALID,
4765198Sjmcp 	INVALID,
4775198Sjmcp 	INVALID,
4785198Sjmcp 	INVALID,
4795198Sjmcp 
4805198Sjmcp 	/* 0x08 */
481*7718SJason.Beloro@Sun.COM 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
482*7718SJason.Beloro@Sun.COM 	INST("jpriv", V9, FLG_DISP(DISP19)),
4835198Sjmcp 
4845198Sjmcp 	/* 0x10 */
4855198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
486*7718SJason.Beloro@Sun.COM 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
487*7718SJason.Beloro@Sun.COM 	INST("commit", V9, 0),
488*7718SJason.Beloro@Sun.COM 	INVALID
489*7718SJason.Beloro@Sun.COM 
4905198Sjmcp };
4915198Sjmcp 
4925198Sjmcp static const table_t tr_table = {
4935198Sjmcp 	.tbl_field = 29,
4945198Sjmcp 	.tbl_len   = 5,
4955198Sjmcp 	.tbl_ovp   = NULL,
4965198Sjmcp 	.tbl_fmt   = fmt_trap_ret,
4975198Sjmcp 	.tbl_inp   = tr_table_def
4985198Sjmcp };
4995198Sjmcp 
5005198Sjmcp static const inst_t movicc_table_def[16] = {
5015198Sjmcp 	INST("movn",   V9|V9S, 0),
5025198Sjmcp 	INST("move",   V9|V9S, 0),
5035198Sjmcp 	INST("movle",  V9|V9S, 0),
5045198Sjmcp 	INST("movl",   V9|V9S, 0),
5055198Sjmcp 
5065198Sjmcp 	INST("movleu", V9|V9S, 0),
5075198Sjmcp 	INST("movcs",  V9|V9S, 0),
5085198Sjmcp 	INST("movneg", V9|V9S, 0),
5095198Sjmcp 	INST("movvs",  V9|V9S, 0),
5105198Sjmcp 
5115198Sjmcp 	INST("mova",   V9|V9S, 0),
5125198Sjmcp 	INST("movne",  V9|V9S, 0),
5135198Sjmcp 	INST("movg",   V9|V9S, 0),
5145198Sjmcp 	INST("movge",  V9|V9S, 0),
5155198Sjmcp 
5165198Sjmcp 	INST("movgu",  V9|V9S, 0),
5175198Sjmcp 	INST("movcc",  V9|V9S, 0),
5185198Sjmcp 	INST("movpos", V9|V9S, 0),
5195198Sjmcp 	INST("movvc",  V9|V9S, 0)
5205198Sjmcp };
5215198Sjmcp 
5225198Sjmcp static const inst_t movfcc_table_def[16] = {
5235198Sjmcp 	INST("movn",   V9|V9S, 0),
5245198Sjmcp 	INST("movne",  V9|V9S, 0),
5255198Sjmcp 	INST("movlg",  V9|V9S, 0),
5265198Sjmcp 	INST("movul",  V9|V9S, 0),
5275198Sjmcp 
5285198Sjmcp 	INST("movl",   V9|V9S, 0),
5295198Sjmcp 	INST("movug",  V9|V9S, 0),
5305198Sjmcp 	INST("movg",   V9|V9S, 0),
5315198Sjmcp 	INST("movu",   V9|V9S, 0),
5325198Sjmcp 
5335198Sjmcp 	INST("mova",   V9|V9S, 0),
5345198Sjmcp 	INST("move",   V9|V9S, 0),
5355198Sjmcp 	INST("movue",  V9|V9S, 0),
5365198Sjmcp 	INST("movge",  V9|V9S, 0),
5375198Sjmcp 
5385198Sjmcp 	INST("movuge", V9|V9S, 0),
5395198Sjmcp 	INST("movle",  V9|V9S, 0),
5405198Sjmcp 	INST("movule", V9|V9S, 0),
5415198Sjmcp 	INST("movo",   V9|V9S, 0)
5425198Sjmcp };
5435198Sjmcp 
5445198Sjmcp static const table_t movfcc_table = {
5455198Sjmcp 	.tbl_field = 17,
5465198Sjmcp 	.tbl_len   = 4,
5475198Sjmcp 	.tbl_ovp   = NULL,
5485198Sjmcp 	.tbl_fmt   = fmt_movcc,
5495198Sjmcp 	.tbl_inp   = movfcc_table_def
5505198Sjmcp };
5515198Sjmcp 
5525198Sjmcp static const table_t movicc_table = {
5535198Sjmcp 	.tbl_field = 17,
5545198Sjmcp 	.tbl_len   = 4,
5555198Sjmcp 	.tbl_ovp   = NULL,
5565198Sjmcp 	.tbl_fmt   = fmt_movcc,
5575198Sjmcp 	.tbl_inp   = movicc_table_def
5585198Sjmcp };
5595198Sjmcp 
5605198Sjmcp static const inst_t movcc_table_def[2] = {
5615198Sjmcp 	TABLE(movfcc_table, V9|V9S),
5625198Sjmcp 	TABLE(movicc_table, V9|V9S)
5635198Sjmcp };
5645198Sjmcp 
5655198Sjmcp static const table_t movcc_table = {
5665198Sjmcp 	.tbl_field = 18,
5675198Sjmcp 	.tbl_len   = 1,
5685198Sjmcp 	.tbl_ovp   = NULL,
5695198Sjmcp 	.tbl_fmt   = NULL,
5705198Sjmcp 	.tbl_inp   = movcc_table_def
5715198Sjmcp };
5725198Sjmcp 
5735198Sjmcp static const inst_t movr_table_def[8] = {
5745198Sjmcp 	INVALID,
5755198Sjmcp 	/* aka movrz */
5765198Sjmcp 	INST("movre",   V9|V9S, 0),
5775198Sjmcp 	INST("movrlez", V9|V9S, 0),
5785198Sjmcp 	INST("movrlz",  V9|V9S, 0),
5795198Sjmcp 
5805198Sjmcp 	INVALID,
5815198Sjmcp 	/* aka movrnz */
5825198Sjmcp 	INST("movrne",  V9|V9S, 0),
5835198Sjmcp 	INST("movrgz",  V9|V9S, 0),
5845198Sjmcp 	INST("movrgez", V9|V9S, 0)
5855198Sjmcp };
5865198Sjmcp 
5875198Sjmcp static const table_t movr_table = {
5885198Sjmcp 	.tbl_field = 12,
5895198Sjmcp 	.tbl_len   = 3,
5905198Sjmcp 	.tbl_ovp   = NULL,
5915198Sjmcp 	.tbl_fmt   = fmt_movr,
5925198Sjmcp 	.tbl_inp   = movr_table_def
5935198Sjmcp };
5945198Sjmcp 
5955198Sjmcp static const inst_t FPop1_table_def[512] = {
5965198Sjmcp 	/* 0x000 */
5975198Sjmcp 	INVALID,
5985198Sjmcp 	INST("fmovs", VALL,
5995198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
6005198Sjmcp 	INST("fmovd", V9|V9S,
6015198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
6025198Sjmcp 	INST("fmovq", V9|V9S,
6035198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
6045198Sjmcp 
6055198Sjmcp 	INVALID,
6065198Sjmcp 	INST("fnegs", VALL,
6075198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
6085198Sjmcp 	INST("fnegd", V9|V9S,
6095198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
6105198Sjmcp 	INST("fnegq", V9|V9S,
6115198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
6125198Sjmcp 
6135198Sjmcp 	/* 0x008 */
6145198Sjmcp 	INVALID,
6155198Sjmcp 	INST("fabss", VALL,
6165198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
6175198Sjmcp 	INST("fabsd", V9|V9S,
6185198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
6195198Sjmcp 	INST("fabsq", V9|V9S,
6205198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
6215198Sjmcp 
6225198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
6235198Sjmcp 
6245198Sjmcp 	/* 0x010 */
6255198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
6265198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
6275198Sjmcp 
6285198Sjmcp 	/* 0x020 */
6295198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
6305198Sjmcp 
6315198Sjmcp 	/* 0x028 */
6325198Sjmcp 	INVALID,
6335198Sjmcp 	INST("fsqrts", VALL,
6345198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
6355198Sjmcp 	INST("fsqrtd", VALL,
6365198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
6375198Sjmcp 	INST("fsqrtq", VALL,
6385198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
6395198Sjmcp 
640*7718SJason.Beloro@Sun.COM 	INVALID,
641*7718SJason.Beloro@Sun.COM 	INST("frsqrt1xs", V9,
642*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
643*7718SJason.Beloro@Sun.COM 	INST("frsqrt1xd", VALL,
644*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
645*7718SJason.Beloro@Sun.COM 	INVALID,
6465198Sjmcp 
6475198Sjmcp 	/* 0x30 */
6485198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
6495198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
6505198Sjmcp 
6515198Sjmcp 	/* 0x40 */
6525198Sjmcp 	INVALID,
6535198Sjmcp 	INST("fadds", VALL,
6545198Sjmcp 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
6555198Sjmcp 	INST("faddd", VALL,
6565198Sjmcp 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
6575198Sjmcp 	INST("faddq", VALL,
6585198Sjmcp 		FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
6595198Sjmcp 
6605198Sjmcp 	INVALID,
6615198Sjmcp 	INST("fsubs", VALL,
6625198Sjmcp 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
6635198Sjmcp 	INST("fsubd", VALL,
6645198Sjmcp 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
6655198Sjmcp 	INST("fsubq", VALL,
6665198Sjmcp 		FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
6675198Sjmcp 
6685198Sjmcp 	/* 0x048 */
6695198Sjmcp 	INVALID,
6705198Sjmcp 	INST("fmuls", VALL,
6715198Sjmcp 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
6725198Sjmcp 	INST("fmuld", VALL,
6735198Sjmcp 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
6745198Sjmcp 	INST("fmulq", VALL,
6755198Sjmcp 		FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
6765198Sjmcp 
6775198Sjmcp 	INVALID,
6785198Sjmcp 	INST("fdivs", VALL,
6795198Sjmcp 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
6805198Sjmcp 	INST("fdivd", VALL,
6815198Sjmcp 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
6825198Sjmcp 	INST("fdivq", VALL,
6835198Sjmcp 		FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
6845198Sjmcp 
6855198Sjmcp 	/* 0x050 */
686*7718SJason.Beloro@Sun.COM 	INVALID,
687*7718SJason.Beloro@Sun.COM 	INST("fnadds", V9S,
688*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
689*7718SJason.Beloro@Sun.COM 	INST("fnaddd", V9S,
690*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
691*7718SJason.Beloro@Sun.COM 	INVALID, INVALID, INVALID, INVALID, INVALID,
692*7718SJason.Beloro@Sun.COM 	INVALID,
693*7718SJason.Beloro@Sun.COM 	INST("fnmuls", V9S,
694*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
695*7718SJason.Beloro@Sun.COM 	INST("fnmuld", V9S,
696*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
697*7718SJason.Beloro@Sun.COM 	INVALID, INVALID, INVALID, INVALID, INVALID,
6985198Sjmcp 
6995198Sjmcp 	/* 0x060 */
700*7718SJason.Beloro@Sun.COM 	INVALID,
701*7718SJason.Beloro@Sun.COM 	INST("fhadds", V9,
702*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
703*7718SJason.Beloro@Sun.COM 	INST("fhaddd", V9,
704*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
705*7718SJason.Beloro@Sun.COM 	INVALID, INVALID,
706*7718SJason.Beloro@Sun.COM 	INST("fhsubs", V9S,
707*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
708*7718SJason.Beloro@Sun.COM 	INST("fhsubd", V9S,
709*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
710*7718SJason.Beloro@Sun.COM 	INVALID,
7115198Sjmcp 
7125198Sjmcp 	/* 0x068 */
7135198Sjmcp 	INVALID,
7145198Sjmcp 	INST("fsmuld", VALL,
7155198Sjmcp 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
7165198Sjmcp 	INVALID,
7175198Sjmcp 	INVALID,
7185198Sjmcp 
7195198Sjmcp 	INVALID,
7205198Sjmcp 	INVALID,
7215198Sjmcp 	INST("fdmulq", VALL,
7225198Sjmcp 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)),
7235198Sjmcp 	INVALID,
7245198Sjmcp 
7255198Sjmcp 	/* 0x070 */
726*7718SJason.Beloro@Sun.COM 	INVALID,
727*7718SJason.Beloro@Sun.COM 	INST("fnhadds", V9S,
728*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
729*7718SJason.Beloro@Sun.COM 	INST("fnhaddd", V9S,
730*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
731*7718SJason.Beloro@Sun.COM 	INVALID, INVALID, INVALID, INVALID, INVALID,
732*7718SJason.Beloro@Sun.COM 	INVALID,
733*7718SJason.Beloro@Sun.COM 	INST("fnsmuld", V9S,
734*7718SJason.Beloro@Sun.COM 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
735*7718SJason.Beloro@Sun.COM 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
7365198Sjmcp 
7375198Sjmcp 	/* 0x080 */
7385198Sjmcp 	INVALID,
7395198Sjmcp 	INST("fstox", V9|V9S,
7405198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
7415198Sjmcp 	INST("fdtox", V9|V9S,
7425198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
7435198Sjmcp 	INST("fqtox", V9|V9S,
7445198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPD)),
7455198Sjmcp 
7465198Sjmcp 	INST("fxtos", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|
7475198Sjmcp 		FLG_P3(REG_FP)),
7485198Sjmcp 	INVALID,
7495198Sjmcp 	INVALID,
7505198Sjmcp 	INVALID,
7515198Sjmcp 
7525198Sjmcp 	/* 0x088 */
7535198Sjmcp 	INST("fxtod", V9|V9S,
7545198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
7555198Sjmcp 	INVALID,
7565198Sjmcp 	INVALID,
7575198Sjmcp 	INVALID,
7585198Sjmcp 
7595198Sjmcp 	INST("fxtoq", V9|V9S,
7605198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)),
7615198Sjmcp 	INVALID,
7625198Sjmcp 	INVALID,
7635198Sjmcp 	INVALID,
7645198Sjmcp 
7655198Sjmcp 	/* 0x090 */
7665198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
7675198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
7685198Sjmcp 
7695198Sjmcp 	/* 0x0a0 */
7705198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
7715198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
7725198Sjmcp 
7735198Sjmcp 	/* 0x0b0 */
7745198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
7755198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
7765198Sjmcp 
7775198Sjmcp 	/* 0x0c0 */
7785198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
7795198Sjmcp 
7805198Sjmcp 	INST("fitos", VALL,
7815198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
7825198Sjmcp 	INVALID,
7835198Sjmcp 	INST("fdtos", VALL,
7845198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FP)),
7855198Sjmcp 	INST("fqtos", VALL,
7865198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FP)),
7875198Sjmcp 
7885198Sjmcp 	/* 0x0c8 */
7895198Sjmcp 	INST("fitod", VALL,
7905198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
7915198Sjmcp 	INST("fstod", VALL,
7925198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
7935198Sjmcp 	INVALID,
7945198Sjmcp 	INST("fqtod", VALL,
7955198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPD)),
7965198Sjmcp 
7975198Sjmcp 	INST("fitoq", VALL,
7985198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPQ)),
7995198Sjmcp 	INST("fstoq", VALL,
8005198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPQ)),
8015198Sjmcp 	INST("fdtoq", VALL,
8025198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)),
8035198Sjmcp 	INVALID,
8045198Sjmcp 
8055198Sjmcp 	/* 0x0d0 */
8065198Sjmcp 	INVALID,
8075198Sjmcp 	INST("fstoi", VALL,
8085198Sjmcp 	    FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
8095198Sjmcp 	INST("fdtoi", VALL,
8105198Sjmcp 	    FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FP)),
8115198Sjmcp 	INST("fqtoi", VALL,
8125198Sjmcp 	    FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FP)),
8135198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
8145198Sjmcp 
8155198Sjmcp 	/* 0x0d8 */
8165198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8175198Sjmcp 
8185198Sjmcp 	/* 0x0e0 */
8195198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8205198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8215198Sjmcp 
8225198Sjmcp 	/* 0x0f0 */
8235198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8245198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8255198Sjmcp 
8265198Sjmcp 	/* 0x100 */
8275198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8285198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8295198Sjmcp 
8305198Sjmcp 	/* 0x110 */
8315198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8325198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8335198Sjmcp 
8345198Sjmcp 	/* 0x120 */
8355198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8365198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8375198Sjmcp 
8385198Sjmcp 	/* 0x130 */
8395198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8405198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8415198Sjmcp 
8425198Sjmcp 	/* 0x140 */
8435198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8445198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8455198Sjmcp 
8465198Sjmcp 	/* 0x150 */
8475198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8485198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8495198Sjmcp 
8505198Sjmcp 	/* 0x160 */
8515198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8525198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8535198Sjmcp 
8545198Sjmcp 	/* 0x170 */
8555198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8565198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8575198Sjmcp 
8585198Sjmcp 	/* 0x180 */
8595198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8605198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8615198Sjmcp 
8625198Sjmcp 	/* 0x190 */
8635198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8645198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8655198Sjmcp 
8665198Sjmcp 	/* 0x1a0 */
8675198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8685198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8695198Sjmcp 
8705198Sjmcp 	/* 0x1b0 */
8715198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8725198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8735198Sjmcp 
8745198Sjmcp 	/* 0x1c0 */
8755198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8765198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8775198Sjmcp 
8785198Sjmcp 	/* 0x1d0 */
8795198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8805198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8815198Sjmcp 
8825198Sjmcp 	/* 0x1e0 */
8835198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8845198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8855198Sjmcp 
8865198Sjmcp 	/* 0x1f0 */
8875198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
8885198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
8895198Sjmcp };
8905198Sjmcp 
8915198Sjmcp static const table_t FPop1_table = {
8925198Sjmcp 	.tbl_field = 13,
8935198Sjmcp 	.tbl_len   = 9,
8945198Sjmcp 	.tbl_ovp   = NULL,
8955198Sjmcp 	.tbl_fmt   = fmt_fpop1,
8965198Sjmcp 	.tbl_inp   = FPop1_table_def
8975198Sjmcp };
8985198Sjmcp 
8995198Sjmcp static const inst_t FPop2_table_def[512] = {
9005198Sjmcp 	/* 0x000 */
9015198Sjmcp 	INVALID,
9025198Sjmcp 	INST("fmovs", V9|V9S,
9035198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
9045198Sjmcp 	INST("fmovd", V9|V9S,
9055198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
9065198Sjmcp 	INST("fmovq", V9|V9S,
9075198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
9085198Sjmcp 
9095198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
9105198Sjmcp 
9115198Sjmcp 	/* 0x008 */
9125198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
9135198Sjmcp 
9145198Sjmcp 	/* 0x010 */
9155198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
9165198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
9175198Sjmcp 
9185198Sjmcp 	/* 0x020 */
9195198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
9205198Sjmcp 
9215198Sjmcp 	INST("fmovrsz", V9|V9S,
9225198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
9235198Sjmcp 	INST("fmovrdz", V9|V9S,
9245198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
9255198Sjmcp 	INST("fmovrqz", V9|V9S,
9265198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
9275198Sjmcp 	INVALID,
9285198Sjmcp 
9295198Sjmcp 	/* 0x028 */
9305198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
9315198Sjmcp 
9325198Sjmcp 	/* 0x030 */
9335198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
9345198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
9355198Sjmcp 
9365198Sjmcp 	/* 0x040 */
9375198Sjmcp 	INVALID,
9385198Sjmcp 	INST("fmovs", V9|V9S,
9395198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
9405198Sjmcp 	INST("fmovd", V9|V9S,
9415198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
9425198Sjmcp 	INST("fmovq", V9|V9S,
9435198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
9445198Sjmcp 
9455198Sjmcp 	INST("fmovrslez", V9|V9S,
9465198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
9475198Sjmcp 	INST("fmovrdlez", V9|V9S,
9485198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
9495198Sjmcp 	INST("fmovrqlez", V9|V9S,
9505198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
9515198Sjmcp 	INVALID,
9525198Sjmcp 
9535198Sjmcp 	/* 0x048 */
9545198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
9555198Sjmcp 
9565198Sjmcp 	/* 0x050 */
9575198Sjmcp 	INVALID,
9585198Sjmcp 	INST("fcmps", VALL, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_NONE)
9595198Sjmcp 	    |FLG_NOIMM),
9605198Sjmcp 	INST("fcmpd", VALL, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_NONE)
9615198Sjmcp 	    |FLG_NOIMM),
9625198Sjmcp 	INST("fcmpq", VALL, FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_P3(REG_NONE)
9635198Sjmcp 	    |FLG_NOIMM),
9645198Sjmcp 
9655198Sjmcp 	INVALID,
9665198Sjmcp 	INST("fcmpes", VALL, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_NONE)
9675198Sjmcp 	    |FLG_NOIMM),
9685198Sjmcp 	INST("fcmped", VALL, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_NONE)
9695198Sjmcp 	    |FLG_NOIMM),
9705198Sjmcp 	INST("fcmpeq", VALL, FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_P3(REG_NONE)
9715198Sjmcp 	    |FLG_NOIMM),
9725198Sjmcp 
9735198Sjmcp 	/* 0x058 */
9745198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
9755198Sjmcp 
9765198Sjmcp 	/* 0x060 */
9775198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
9785198Sjmcp 
9795198Sjmcp 	INVALID,
9805198Sjmcp 	INST("fmovrslz", V9|V9S,
9815198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
9825198Sjmcp 	INST("fmovrdlz", V9|V9S,
9835198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
9845198Sjmcp 	INST("fmovrqlz", V9|V9S,
9855198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
9865198Sjmcp 
9875198Sjmcp 	/* 0x068 */
9885198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
9895198Sjmcp 
9905198Sjmcp 	/* 0x070 */
9915198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
9925198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
9935198Sjmcp 
9945198Sjmcp 	/* 0x080 */
9955198Sjmcp 	INVALID,
9965198Sjmcp 	INST("fmovs", V9|V9S,
9975198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
9985198Sjmcp 	INST("fmovd", V9|V9S,
9995198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
10005198Sjmcp 	INST("fmovq", V9|V9S,
10015198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
10025198Sjmcp 
10035198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
10045198Sjmcp 
10055198Sjmcp 	/* 0x088 */
10065198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10075198Sjmcp 
10085198Sjmcp 	/* 0x090 */
10095198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10105198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10115198Sjmcp 
10125198Sjmcp 	/* 0x0a0 */
10135198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
10145198Sjmcp 
10155198Sjmcp 	INVALID,
10165198Sjmcp 	INST("fmovrsnz", V9|V9S,
10175198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
10185198Sjmcp 	INST("fmovrdnz", V9|V9S,
10195198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
10205198Sjmcp 	INST("fmovrqnz", V9|V9S,
10215198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
10225198Sjmcp 
10235198Sjmcp 	/* 0x0a8 */
10245198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10255198Sjmcp 
10265198Sjmcp 	/* 0x0b0 */
10275198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10285198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10295198Sjmcp 
10305198Sjmcp 	/* 0x0c0 */
10315198Sjmcp 	INVALID,
10325198Sjmcp 	INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
10335198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FP)),
10345198Sjmcp 	INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
10355198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPD)),
10365198Sjmcp 	INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|
10375198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPQ)),
10385198Sjmcp 
10395198Sjmcp 	INVALID,
10405198Sjmcp 	INST("fmovrsgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
10415198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
10425198Sjmcp 	INST("fmovrdgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
10435198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
10445198Sjmcp 	INST("fmovrqgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
10455198Sjmcp 		FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
10465198Sjmcp 
10475198Sjmcp 	/* 0x0c8 */
10485198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10495198Sjmcp 
10505198Sjmcp 	/* 0x0d0 */
10515198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10525198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10535198Sjmcp 
10545198Sjmcp 	/* 0x0e0 */
10555198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
10565198Sjmcp 
10575198Sjmcp 	INVALID,
10585198Sjmcp 	INST("fmovrsgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
10595198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
10605198Sjmcp 	INST("fmovrdgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
10615198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
10625198Sjmcp 	INST("fmovrqgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
10635198Sjmcp 		FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
10645198Sjmcp 
10655198Sjmcp 	/* 0x0e8 */
10665198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10675198Sjmcp 
10685198Sjmcp 	/* 0x0f0 */
10695198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10705198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10715198Sjmcp 
10725198Sjmcp 	/* 0x100 */
10735198Sjmcp 	INVALID,
10745198Sjmcp 	INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
10755198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FP)),
10765198Sjmcp 	INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
10775198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPD)),
10785198Sjmcp 	INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|
10795198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPQ)),
10805198Sjmcp 
10815198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
10825198Sjmcp 
10835198Sjmcp 	/* 0x108 */
10845198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10855198Sjmcp 
10865198Sjmcp 	/* 0x110 */
10875198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10885198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10895198Sjmcp 
10905198Sjmcp 	/* 0x120 */
10915198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10925198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10935198Sjmcp 
10945198Sjmcp 	/* 0x130 */
10955198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10965198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
10975198Sjmcp 
10985198Sjmcp 	/* 0x140 */
10995198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11005198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11015198Sjmcp 
11025198Sjmcp 	/* 0x150 */
11035198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11045198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11055198Sjmcp 
11065198Sjmcp 	/* 0x160 */
11075198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11085198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11095198Sjmcp 
11105198Sjmcp 	/* 0x170 */
11115198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11125198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11135198Sjmcp 
11145198Sjmcp 	/* 0x180 */
11155198Sjmcp 	INVALID,
11165198Sjmcp 	INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
11175198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FP)),
11185198Sjmcp 	INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
11195198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPD)),
11205198Sjmcp 	INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|
11215198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPQ)),
11225198Sjmcp 
11235198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
11245198Sjmcp 
11255198Sjmcp 	/* 0x188 */
11265198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11275198Sjmcp 
11285198Sjmcp 	/* 0x190 */
11295198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11305198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11315198Sjmcp 
11325198Sjmcp 	/* 0x1a0 */
11335198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11345198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11355198Sjmcp 
11365198Sjmcp 	/* 0x1b0 */
11375198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11385198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11395198Sjmcp 
11405198Sjmcp 	/* 0x1c0 */
11415198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11425198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11435198Sjmcp 
11445198Sjmcp 	/* 0x1d0 */
11455198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11465198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11475198Sjmcp 
11485198Sjmcp 	/* 0x1e0 */
11495198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11505198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11515198Sjmcp 
11525198Sjmcp 	/* 0x1f0 */
11535198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
11545198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
11555198Sjmcp };
11565198Sjmcp 
11575198Sjmcp static const table_t FPop2_table = {
11585198Sjmcp 	.tbl_field = 13,
11595198Sjmcp 	.tbl_len   = 9,
11605198Sjmcp 	.tbl_ovp   = NULL,
11615198Sjmcp 	.tbl_fmt   = fmt_fpop2,
11625198Sjmcp 	.tbl_inp   = FPop2_table_def
11635198Sjmcp };
11645198Sjmcp 
11655198Sjmcp static const inst_t vis_table_def[512] = {
11665198Sjmcp 	/* 0x000 */
11675198Sjmcp 	INST("edge8cc", V9S, FLG_NOIMM),
11685198Sjmcp 	INST("edge8n", V9S, FLG_NOIMM),
11695198Sjmcp 	INST("edge8lcc", V9S, FLG_NOIMM),
11705198Sjmcp 	INST("edge8ln", V9S, FLG_NOIMM),
11715198Sjmcp 
11725198Sjmcp 	INST("edge16cc", V9S, FLG_NOIMM),
11735198Sjmcp 	INST("edge16n", V9S, FLG_NOIMM),
11745198Sjmcp 	INST("edge16lcc", V9S, FLG_NOIMM),
11755198Sjmcp 	INST("edge16ln", V9S, FLG_NOIMM),
11765198Sjmcp 
11775198Sjmcp 	/* 0x008 */
11785198Sjmcp 	INST("edge32cc", V9S, FLG_NOIMM),
11795198Sjmcp 	INST("edge32n", V9S, FLG_NOIMM),
11805198Sjmcp 	INST("edge32lcc", V9S, FLG_NOIMM),
11815198Sjmcp 	INST("edge32ln", V9S, FLG_NOIMM),
11825198Sjmcp 
11835198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
11845198Sjmcp 
11855198Sjmcp 	/* 0x010 */
11865198Sjmcp 	INST("array8", V9S, FLG_NOIMM),
1187*7718SJason.Beloro@Sun.COM 	INST("addxc", V9, 0),
11885198Sjmcp 	INST("array16", V9S, FLG_NOIMM),
1189*7718SJason.Beloro@Sun.COM 	INST("addxccc", V9, 0),
11905198Sjmcp 
11915198Sjmcp 	INST("array32", V9S, FLG_NOIMM),
1192*7718SJason.Beloro@Sun.COM 	INST("random", V9, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
1193*7718SJason.Beloro@Sun.COM 		FLG_RD(REG_FPD)|FLG_NOIMM),
1194*7718SJason.Beloro@Sun.COM 	INST("umulxhi", V9, FLG_P1(REG_INT)|FLG_NOIMM|
1195*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_INT)|FLG_P3(REG_INT)),
1196*7718SJason.Beloro@Sun.COM 	INST("lzd", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
1197*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_INT)|FLG_RD(REG_INT)),
11985198Sjmcp 
11995198Sjmcp 	/* 0x018 */
12005198Sjmcp 	INST("alignaddr", V9S, FLG_NOIMM),
1201*7718SJason.Beloro@Sun.COM 	INST("bmask", V9S, FLG_P1(REG_INT)|FLG_P2(REG_INT)|FLG_RD(REG_INT)),
12025198Sjmcp 	INST("alignaddrl", V9S, FLG_NOIMM),
1203*7718SJason.Beloro@Sun.COM 	INST("cmask8", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
1204*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_INT)|FLG_P3(REG_NONE)),
12055198Sjmcp 	INVALID,
1206*7718SJason.Beloro@Sun.COM 	INST("cmask16", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
1207*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_INT)|FLG_P3(REG_NONE)),
1208*7718SJason.Beloro@Sun.COM 	INVALID,
1209*7718SJason.Beloro@Sun.COM 	INST("cmask32", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
1210*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_INT)|FLG_P3(REG_NONE)),
12115198Sjmcp 
12125198Sjmcp 	/* 0x020 */
12135198Sjmcp 	INST("fcmple16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
12145198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1215*7718SJason.Beloro@Sun.COM 	INST("fsll16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1216*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12175198Sjmcp 	INST("fcmpne16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
12185198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1219*7718SJason.Beloro@Sun.COM 	INST("fsrl16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1220*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12215198Sjmcp 
12225198Sjmcp 	INST("fcmple32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
12235198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1224*7718SJason.Beloro@Sun.COM 	INST("fsll32", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1225*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12265198Sjmcp 	INST("fcmpne32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
12275198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1228*7718SJason.Beloro@Sun.COM 	INST("fsrl32", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1229*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12305198Sjmcp 
12315198Sjmcp 	/* 0x028 */
12325198Sjmcp 	INST("fcmpgt16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
12335198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1234*7718SJason.Beloro@Sun.COM 	INST("fslas16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1235*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12365198Sjmcp 	INST("fcmpeq16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
12375198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1238*7718SJason.Beloro@Sun.COM 	INST("fsra16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1239*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12405198Sjmcp 
12415198Sjmcp 	INST("fcmpgt32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
12425198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1243*7718SJason.Beloro@Sun.COM 	INST("fslas32", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1244*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12455198Sjmcp 	INST("fcmpeq32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
12465198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1247*7718SJason.Beloro@Sun.COM 	INST("fsra32", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1248*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12495198Sjmcp 
12505198Sjmcp 	/* 0x030 */
12515198Sjmcp 	INVALID,
12525198Sjmcp 	INST("fmul8x16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
12535198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12545198Sjmcp 	INVALID,
12555198Sjmcp 	INST("fmul8x16au", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
12565198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
12575198Sjmcp 
12585198Sjmcp 	INVALID,
12595198Sjmcp 	INST("fmul8x16al", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
12605198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
12615198Sjmcp 	INST("fmul8sux16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
12625198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12635198Sjmcp 	INST("fmul8ulx16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
12645198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12655198Sjmcp 
12665198Sjmcp 	/* 0x038 */
12675198Sjmcp 	INST("fmuld8sux16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
12685198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
12695198Sjmcp 	INST("fmuld8ulx16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
12705198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
12715198Sjmcp 	INST("fpack32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
12725198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
12735198Sjmcp 	INST("fpack16", V9S, FLG_P1(REG_NONE)|FLG_NOIMM|
12745198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FP)),
12755198Sjmcp 
12765198Sjmcp 	INVALID,
12775198Sjmcp 	INST("fpackfix", V9S, FLG_P1(REG_NONE)|FLG_NOIMM|
12785198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FP)),
12795198Sjmcp 	INST("pdist", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
12805198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1281*7718SJason.Beloro@Sun.COM 	INST("pdistn", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1282*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
12835198Sjmcp 
12845198Sjmcp 	/* 0x040 */
1285*7718SJason.Beloro@Sun.COM 	INST("fmean16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1286*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1287*7718SJason.Beloro@Sun.COM 	INVALID,
1288*7718SJason.Beloro@Sun.COM 	INST("fpadd64", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1289*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1290*7718SJason.Beloro@Sun.COM 	INVALID,
1291*7718SJason.Beloro@Sun.COM 	INST("fchksm16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1292*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1293*7718SJason.Beloro@Sun.COM 	INVALID,
1294*7718SJason.Beloro@Sun.COM 	INST("fpsub64", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1295*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1296*7718SJason.Beloro@Sun.COM 	INVALID,
12975198Sjmcp 
12985198Sjmcp 	/* 0x048 */
12995198Sjmcp 	INST("faligndata", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13005198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13015198Sjmcp 	INVALID,
13025198Sjmcp 	INVALID,
13035198Sjmcp 	INST("fpmerge", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13045198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
13055198Sjmcp 
13065198Sjmcp 	INST("bshuffle", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13075198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13085198Sjmcp 	INST("fexpand", V9S, FLG_P1(REG_NONE)|FLG_NOIMM|
13095198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
13105198Sjmcp 	INVALID,
13115198Sjmcp 	INVALID,
13125198Sjmcp 
13135198Sjmcp 	/* 0x050 */
13145198Sjmcp 	INST("fpadd16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13155198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13165198Sjmcp 	INST("fpadd16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13175198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13185198Sjmcp 	INST("fpadd32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13195198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13205198Sjmcp 	INST("fpadd32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13215198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13225198Sjmcp 
13235198Sjmcp 	INST("fpsub16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13245198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13255198Sjmcp 	INST("fpsub16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13265198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13275198Sjmcp 	INST("fpsub32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13285198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13295198Sjmcp 	INST("fpsub32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13305198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13315198Sjmcp 
13325198Sjmcp 	/* 0x058 */
1333*7718SJason.Beloro@Sun.COM 	INST("fpadds16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1334*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1335*7718SJason.Beloro@Sun.COM 	INST("fpadds16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1336*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1337*7718SJason.Beloro@Sun.COM 	INST("fpadds32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1338*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1339*7718SJason.Beloro@Sun.COM 	INST("fpadds32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1340*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1341*7718SJason.Beloro@Sun.COM 	INST("fpsubs16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1342*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1343*7718SJason.Beloro@Sun.COM 	INST("fpsubs16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1344*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1345*7718SJason.Beloro@Sun.COM 	INST("fpsubs32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1346*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1347*7718SJason.Beloro@Sun.COM 	INST("fpsubs32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1348*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13495198Sjmcp 
13505198Sjmcp 	/* 0x060 */
13515198Sjmcp 	INST("fzero", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
13525198Sjmcp 		FLG_P3(REG_FPD)),
13535198Sjmcp 	INST("fzeros", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
13545198Sjmcp 		FLG_P3(REG_FP)),
13555198Sjmcp 	INST("fnor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13565198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13575198Sjmcp 	INST("fnors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13585198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13595198Sjmcp 
13605198Sjmcp 	INST("fandnot2", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13615198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13625198Sjmcp 	INST("fandnot2s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13635198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13645198Sjmcp 	INST("fnot2", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
13655198Sjmcp 		FLG_P3(REG_FPD)),
13665198Sjmcp 	INST("fnot2s", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
13675198Sjmcp 		FLG_P3(REG_FP)),
13685198Sjmcp 
13695198Sjmcp 	/* 0x068 */
13705198Sjmcp 	INST("fandnot1", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13715198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13725198Sjmcp 	INST("fandnot1s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13735198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13745198Sjmcp 	INST("fnot1", V9S, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)|
13755198Sjmcp 		FLG_P3(REG_FPD)),
13765198Sjmcp 	INST("fnot1s", V9S, FLG_P1(REG_FP)|FLG_P2(REG_NONE)|
13775198Sjmcp 		FLG_P3(REG_FP)),
13785198Sjmcp 
13795198Sjmcp 	INST("fxor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13805198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13815198Sjmcp 	INST("fxors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13825198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13835198Sjmcp 	INST("fnand", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13845198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13855198Sjmcp 	INST("fnands", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13865198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13875198Sjmcp 
13885198Sjmcp 	/* 0x070 */
13895198Sjmcp 	INST("fand", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13905198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13915198Sjmcp 	INST("fands", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13925198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13935198Sjmcp 	INST("fxnor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
13945198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
13955198Sjmcp 	INST("fxnors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
13965198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
13975198Sjmcp 
13985198Sjmcp 	INST("fsrc1", V9S, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)|
13995198Sjmcp 		FLG_P3(REG_FPD)),
14005198Sjmcp 	INST("fsrc1s", V9S, FLG_P1(REG_FP)|FLG_P2(REG_NONE)|
14015198Sjmcp 		FLG_P3(REG_FP)),
14025198Sjmcp 	INST("fornot2", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
14035198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
14045198Sjmcp 	INST("fornot2s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
14055198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
14065198Sjmcp 
14075198Sjmcp 	/* 0x078 */
14085198Sjmcp 	INST("fsrc2", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
14095198Sjmcp 		FLG_P3(REG_FPD)),
14105198Sjmcp 	INST("fsrc2s", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
14115198Sjmcp 		FLG_P3(REG_FP)),
14125198Sjmcp 	INST("fornot1", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
14135198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
14145198Sjmcp 	INST("fornot1s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
14155198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
14165198Sjmcp 
14175198Sjmcp 	INST("for", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
14185198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
14195198Sjmcp 	INST("fors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
14205198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
14215198Sjmcp 	INST("fone", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
14225198Sjmcp 		FLG_P3(REG_FPD)),
14235198Sjmcp 	INST("fones", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
14245198Sjmcp 		FLG_P3(REG_FP)),
14255198Sjmcp 
14265198Sjmcp 	/* 0x080 */
14275198Sjmcp 	INST("shutdown", V9S, 0),
14285198Sjmcp 	INST("siam", V9S, 0),
14295198Sjmcp 	INVALID,
14305198Sjmcp 	INVALID,
14315198Sjmcp 
14325198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
14335198Sjmcp 
14345198Sjmcp 	/* 0x088 */
14355198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14365198Sjmcp 
14375198Sjmcp 	/* 0x090 */
14385198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14395198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14405198Sjmcp 
14415198Sjmcp 	/* 0x0a0 */
14425198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14435198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14445198Sjmcp 
14455198Sjmcp 	/* 0x0b0 */
14465198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14475198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14485198Sjmcp 
14495198Sjmcp 	/* 0x0c0 */
14505198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14515198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14525198Sjmcp 
14535198Sjmcp 	/* 0x0d0 */
14545198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14555198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14565198Sjmcp 
14575198Sjmcp 	/* 0x0e0 */
14585198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14595198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14605198Sjmcp 
14615198Sjmcp 	/* 0x0f0 */
14625198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14635198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14645198Sjmcp 
14655198Sjmcp 	/* 0x100 */
14665198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14675198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14685198Sjmcp 
14695198Sjmcp 	/* 0x110 */
1470*7718SJason.Beloro@Sun.COM 	INST("movdtox", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
1471*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_RD(REG_INT)),
1472*7718SJason.Beloro@Sun.COM 	INST("movstouw", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
1473*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FP)|FLG_RD(REG_INT)),
1474*7718SJason.Beloro@Sun.COM 	INVALID,
1475*7718SJason.Beloro@Sun.COM 	INST("movstosw", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
1476*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FP)|FLG_RD(REG_INT)),
1477*7718SJason.Beloro@Sun.COM 	INVALID,
1478*7718SJason.Beloro@Sun.COM 	INST("xmulx", V9, FLG_P1(REG_INT)|FLG_NOIMM|
1479*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_INT)|FLG_P3(REG_INT)),
1480*7718SJason.Beloro@Sun.COM 	INST("xmulxhi", V9, FLG_P1(REG_INT)|FLG_NOIMM|
1481*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_INT)|FLG_P3(REG_INT)),
1482*7718SJason.Beloro@Sun.COM 	INVALID,
1483*7718SJason.Beloro@Sun.COM 	INST("movxtod", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
1484*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_INT)|FLG_RD(REG_FPD)),
1485*7718SJason.Beloro@Sun.COM 	INST("movwtos", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
1486*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_INT)|FLG_RD(REG_FP)),
1487*7718SJason.Beloro@Sun.COM 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
14885198Sjmcp 
14895198Sjmcp 	/* 0x120 */
1490*7718SJason.Beloro@Sun.COM 	INST("fucmple8", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1491*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_RD(REG_INT)),
1492*7718SJason.Beloro@Sun.COM 	INVALID,
1493*7718SJason.Beloro@Sun.COM 	INST("fucmpne8", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1494*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_RD(REG_INT)),
1495*7718SJason.Beloro@Sun.COM 	INVALID, INVALID, INVALID, INVALID, INVALID,
1496*7718SJason.Beloro@Sun.COM 	INST("fucmpgt8", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1497*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_RD(REG_INT)),
1498*7718SJason.Beloro@Sun.COM 	INVALID,
1499*7718SJason.Beloro@Sun.COM 	INST("fucmpeq8", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
1500*7718SJason.Beloro@Sun.COM 		FLG_P2(REG_FPD)|FLG_RD(REG_INT)),
1501*7718SJason.Beloro@Sun.COM 	INVALID, INVALID, INVALID, INVALID, INVALID,
15025198Sjmcp 
15035198Sjmcp 	/* 0x130 */
15045198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15055198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15065198Sjmcp 
15075198Sjmcp 	/* 0x140 */
15085198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15095198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15105198Sjmcp 
15115198Sjmcp 	/* 0x150 */
1512*7718SJason.Beloro@Sun.COM 	INVALID,
1513*7718SJason.Beloro@Sun.COM 	INST("flcmps", V9, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_FCC)
1514*7718SJason.Beloro@Sun.COM 		|FLG_NOIMM),
1515*7718SJason.Beloro@Sun.COM 	INST("flcmpd", V9, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_FCC)
1516*7718SJason.Beloro@Sun.COM 		|FLG_NOIMM),
1517*7718SJason.Beloro@Sun.COM 	INVALID, INVALID, INVALID, INVALID, INVALID,
15185198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15195198Sjmcp 
15205198Sjmcp 	/* 0x160 */
15215198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15225198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15235198Sjmcp 
15245198Sjmcp 	/* 0x170 */
15255198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15265198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15275198Sjmcp 
15285198Sjmcp 	/* 0x180 */
15295198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15305198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15315198Sjmcp 
15325198Sjmcp 	/* 0x190 */
15335198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15345198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15355198Sjmcp 
15365198Sjmcp 	/* 0x1a0 */
15375198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15385198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15395198Sjmcp 
15405198Sjmcp 	/* 0x1b0 */
15415198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15425198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15435198Sjmcp 
15445198Sjmcp 	/* 0x1c0 */
15455198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15465198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15475198Sjmcp 
15485198Sjmcp 	/* 0x1d0 */
15495198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15505198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15515198Sjmcp 
15525198Sjmcp 	/* 0x1e0 */
15535198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15545198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15555198Sjmcp 
15565198Sjmcp 	/* 0x1f0 */
15575198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
15585198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
15595198Sjmcp };
15605198Sjmcp 
15615198Sjmcp static const table_t vis_table = {
15625198Sjmcp 	.tbl_field = 13,
15635198Sjmcp 	.tbl_len   = 9,
15645198Sjmcp 	.tbl_ovp   = NULL,
15655198Sjmcp 	.tbl_fmt   = fmt_vis,
15665198Sjmcp 	.tbl_inp   = vis_table_def
15675198Sjmcp };
15685198Sjmcp 
15695198Sjmcp static const inst_t fused_table_def[16] = {
15705198Sjmcp 	/* 0x0 */
15715198Sjmcp 	INVALID,
1572*7718SJason.Beloro@Sun.COM 	INST("fmadds", V9, FLG_P1(REG_FP)),
1573*7718SJason.Beloro@Sun.COM 	INST("fmaddd", V9, FLG_P1(REG_FPD)),
15745198Sjmcp 	INVALID,
15755198Sjmcp 
15765198Sjmcp 	/* 0x4 */
15775198Sjmcp 	INVALID,
1578*7718SJason.Beloro@Sun.COM 	INST("fmsubs", V9, FLG_P1(REG_FP)),
1579*7718SJason.Beloro@Sun.COM 	INST("fmsubd", V9, FLG_P1(REG_FPD)),
15805198Sjmcp 	INVALID,
15815198Sjmcp 
15825198Sjmcp 	/* 0x8 */
15835198Sjmcp 	INVALID,
1584*7718SJason.Beloro@Sun.COM 	INST("fnmsubs", V9, FLG_P1(REG_FP)),
1585*7718SJason.Beloro@Sun.COM 	INST("fnmsubd", V9, FLG_P1(REG_FPD)),
15865198Sjmcp 	INVALID,
15875198Sjmcp 
15885198Sjmcp 	/* 0xc */
15895198Sjmcp 	INVALID,
1590*7718SJason.Beloro@Sun.COM 	INST("fnmadds", V9, FLG_P1(REG_FP)),
1591*7718SJason.Beloro@Sun.COM 	INST("fnmaddd", V9, FLG_P1(REG_FPD)),
15925198Sjmcp 	INVALID
15935198Sjmcp };
15945198Sjmcp 
15955198Sjmcp static const table_t fused_table = {
1596*7718SJason.Beloro@Sun.COM 	.tbl_field = 8,
15975198Sjmcp 	.tbl_len   = 4,
15985198Sjmcp 	.tbl_ovp   = NULL,
15995198Sjmcp 	.tbl_fmt   = fmt_fused,
16005198Sjmcp 	.tbl_inp   = fused_table_def
16015198Sjmcp };
16025198Sjmcp 
1603*7718SJason.Beloro@Sun.COM static const inst_t unfused_table_def[16] = {
1604*7718SJason.Beloro@Sun.COM 	/* 0x0 */
1605*7718SJason.Beloro@Sun.COM 	INVALID,
1606*7718SJason.Beloro@Sun.COM 	INST("fumadds", V9, FLG_P1(REG_FP)),
1607*7718SJason.Beloro@Sun.COM 	INST("fumaddd", V9, FLG_P1(REG_FPD)),
1608*7718SJason.Beloro@Sun.COM 	INVALID,
1609*7718SJason.Beloro@Sun.COM 
1610*7718SJason.Beloro@Sun.COM 	/* 0x4 */
1611*7718SJason.Beloro@Sun.COM 	INVALID,
1612*7718SJason.Beloro@Sun.COM 	INST("fumsubs", V9, FLG_P1(REG_FP)),
1613*7718SJason.Beloro@Sun.COM 	INST("fumsubd", V9, FLG_P1(REG_FPD)),
1614*7718SJason.Beloro@Sun.COM 	INVALID,
1615*7718SJason.Beloro@Sun.COM 
1616*7718SJason.Beloro@Sun.COM 	/* 0x8 */
1617*7718SJason.Beloro@Sun.COM 	INVALID,
1618*7718SJason.Beloro@Sun.COM 	INST("fnumsubs", V9, FLG_P1(REG_FP)),
1619*7718SJason.Beloro@Sun.COM 	INST("fnumsubd", V9, FLG_P1(REG_FPD)),
1620*7718SJason.Beloro@Sun.COM 	INVALID,
1621*7718SJason.Beloro@Sun.COM 
1622*7718SJason.Beloro@Sun.COM 	/* 0xc */
1623*7718SJason.Beloro@Sun.COM 	INVALID,
1624*7718SJason.Beloro@Sun.COM 	INST("fnumadds", V9, FLG_P1(REG_FP)),
1625*7718SJason.Beloro@Sun.COM 	INST("fnumaddd", V9, FLG_P1(REG_FPD)),
1626*7718SJason.Beloro@Sun.COM 	INVALID
1627*7718SJason.Beloro@Sun.COM };
1628*7718SJason.Beloro@Sun.COM 
1629*7718SJason.Beloro@Sun.COM static const table_t unfused_table = {
1630*7718SJason.Beloro@Sun.COM 	.tbl_field = 8,
1631*7718SJason.Beloro@Sun.COM 	.tbl_len   = 4,
1632*7718SJason.Beloro@Sun.COM 	.tbl_ovp   = NULL,
1633*7718SJason.Beloro@Sun.COM 	.tbl_fmt   = fmt_fused,
1634*7718SJason.Beloro@Sun.COM 	.tbl_inp   = unfused_table_def
1635*7718SJason.Beloro@Sun.COM };
1636*7718SJason.Beloro@Sun.COM 
16375198Sjmcp static const inst_t alu_table_def[64] = {
16385198Sjmcp 	/* 0x00 */
16395198Sjmcp 	INST("add",		VALL,	0),
16405198Sjmcp 	INST("and",		VALL,	0),
16415198Sjmcp 	INST("or",		VALL,	0),
16425198Sjmcp 	INST("xor",		VALL,	0),
16435198Sjmcp 
16445198Sjmcp 	INST("sub",		VALL,	0),
16455198Sjmcp 	INST("andn",		VALL,	0),
16465198Sjmcp 	INST("orn",		VALL,	0),
16475198Sjmcp 	INST("xnor",		VALL,	0),
16485198Sjmcp 
16495198Sjmcp 	/* 0x08 */
16505198Sjmcp 	INST("addx",		VALL,	0),
16515198Sjmcp 	INST("mulx",		V9|V9S,	0),
16525198Sjmcp 	INST("umul",		VALL,	0),
16535198Sjmcp 	INST("smul",		VALL,	0),
16545198Sjmcp 
16555198Sjmcp 	INST("subx",		VALL,	0),
16565198Sjmcp 	INST("udivx",		V9|V9S,	0),
16575198Sjmcp 	INST("udiv",		VALL,	0),
16585198Sjmcp 	INST("sdiv",		VALL,	0),
16595198Sjmcp 
16605198Sjmcp 	/* 0x10 */
16615198Sjmcp 	INST("addcc",		VALL,	0),
16625198Sjmcp 	INST("andcc",		VALL,	0),
16635198Sjmcp 	INST("orcc",		VALL,	0),
16645198Sjmcp 	INST("xorcc",		VALL,	0),
16655198Sjmcp 
16665198Sjmcp 	INST("subcc",		VALL,	0),
16675198Sjmcp 	INST("andncc",		VALL,	0),
16685198Sjmcp 	INST("orncc",		VALL,	0),
16695198Sjmcp 	INST("xnorcc",		VALL,	0),
16705198Sjmcp 
16715198Sjmcp 	/* 0x18 */
16725198Sjmcp 	INST("addxcc",		VALL,	0),
16735198Sjmcp 	INVALID,
16745198Sjmcp 	INST("umulcc",		VALL,	0),
16755198Sjmcp 	INST("smulcc",		VALL,	0),
16765198Sjmcp 
16775198Sjmcp 	INST("subxcc",		VALL,	0),
16785198Sjmcp 	INVALID,
16795198Sjmcp 	INST("udivcc",		VALL,	0),
16805198Sjmcp 	INST("sdivcc",		VALL,	0),
16815198Sjmcp 
16825198Sjmcp 	/* 0x20 */
16835198Sjmcp 	INST("taddcc",		VALL,	0),
16845198Sjmcp 	INST("tsubcc",		VALL,	0),
16855198Sjmcp 	INST("taddcctv",	VALL,	0),
16865198Sjmcp 	INST("tsubcctv",	VALL,	0),
16875198Sjmcp 
16885198Sjmcp 	INST("mulscc",		VALL,	0),
16895198Sjmcp 	INST("sll",		VALL,	0),
16905198Sjmcp 	INST("srl",		VALL,	0),
16915198Sjmcp 	INST("sra",		VALL,	0),
16925198Sjmcp 
16935198Sjmcp 	/* 0x28 */
16945198Sjmcp 	INST("rd",		VALL,	0),
16955198Sjmcp 	INST("rd",		V8,	0),
16965198Sjmcp 	INST("rd",		V8,	0),
16975198Sjmcp 	INST("rd",		V8,	0),
16985198Sjmcp 
16995198Sjmcp 	TABLE(movcc_table,	V9|V9S),
17005198Sjmcp 	INST("sdivx",		V9|V9S,	0),
17015198Sjmcp 	INST("popc",		V9|V9S,
17025198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_INT)|FLG_P3(REG_INT)),
17035198Sjmcp 	TABLE(movr_table,	V9|V9S),
17045198Sjmcp 
17055198Sjmcp 	/* 0x30 */
17065198Sjmcp 	INST("wr",		VALL,	0),
17075198Sjmcp 	INST("wr",		V8,	0),
17085198Sjmcp 	INST("wr",		V8,	0),
17095198Sjmcp 	INST("wr",		V8,	0),
17105198Sjmcp 
17115198Sjmcp 	TABLE(FPop1_table,	VALL),
17125198Sjmcp 	TABLE(FPop2_table,	VALL),
17135198Sjmcp 	INST("cpop1",		V8,	0),
17145198Sjmcp 	INST("cpop2",		V8,	0), /* impdep2 */
17155198Sjmcp 
17165198Sjmcp 	/* 0x38 */
17175198Sjmcp 	INST("jmpl",		VALL,	0),
17185198Sjmcp 	INST("rett",		VALL,	0),
17195198Sjmcp 	TABLE(Tcc_table,	VALL),
17205198Sjmcp 	INST("flush",		VALL,	0),
17215198Sjmcp 
17225198Sjmcp 	INST("save",		VALL,	0),
17235198Sjmcp 	INST("restore",		VALL,	0),
17245198Sjmcp 	TABLE(tr_table,		V9|V9S),
1725*7718SJason.Beloro@Sun.COM 	TABLE(unfused_table,	V9|V9S)
17265198Sjmcp };
17275198Sjmcp 
1728*7718SJason.Beloro@Sun.COM 
17295198Sjmcp static const overlay_t alu_ov_table[] = {
17305198Sjmcp 	OVERLAY(0x08, INST("addc",		V9|V9S, 0)),
17315198Sjmcp 	OVERLAY(0x0c, INST("subc",		V9|V9S, 0)),
17325198Sjmcp 	OVERLAY(0x18, INST("addccc",		V9|V9S, 0)),
17335198Sjmcp 	OVERLAY(0x1c, INST("subccc",		V9|V9S, 0)),
17345198Sjmcp 
1735*7718SJason.Beloro@Sun.COM 	OVERLAY(0x29, INST("rdhpr",		V9|V9S, 0)),
17365198Sjmcp 	OVERLAY(0x2a, INST("rdpr",		V9|V9S, 0)),
17375198Sjmcp 	OVERLAY(0x2b, INST("flushw",		V9|V9S, 0)),
17385198Sjmcp 	OVERLAY(0x31, TABLE(rwin_table,		V9|V9S)),
17395198Sjmcp 
17405198Sjmcp 	OVERLAY(0x32, INST("wrpr",		V9|V9S, 0)),
1741*7718SJason.Beloro@Sun.COM 	OVERLAY(0x33, INST("wrhpr",		V9|V9S, 0)),
17425198Sjmcp 	OVERLAY(0x36, TABLE(vis_table,		V9S)),
1743*7718SJason.Beloro@Sun.COM 	OVERLAY(0x37, TABLE(fused_table,	VALL)),
17445198Sjmcp 	OVERLAY(0x39, INST("return",		VALL, 0)),
17455198Sjmcp 
17465198Sjmcp 	OVERLAY_END
17475198Sjmcp };
17485198Sjmcp 
17495198Sjmcp static const table_t alu_table = {
17505198Sjmcp 	.tbl_field = 24,
17515198Sjmcp 	.tbl_len   = 6,
17525198Sjmcp 	.tbl_ovp   = alu_ov_table,
17535198Sjmcp 	.tbl_fmt   = fmt_alu,
17545198Sjmcp 	.tbl_inp   = alu_table_def
17555198Sjmcp };
17565198Sjmcp 
17575198Sjmcp static const inst_t initial_table_def[4] = {
17585198Sjmcp 	TABLE(branch_table,	VALL),
17595198Sjmcp 	INST("call",		VALL, 0),
17605198Sjmcp 	TABLE(alu_table,	VALL),
17615198Sjmcp 	TABLE(ls_table,		VALL)
17625198Sjmcp };
17635198Sjmcp 
17645198Sjmcp /* NOTE: this must not be made static */
17655198Sjmcp const table_t initial_table = {
17665198Sjmcp 	.tbl_field = 31,
17675198Sjmcp 	.tbl_len   = 2,
17685198Sjmcp 	.tbl_ovp   = NULL,
17695198Sjmcp 	.tbl_fmt   = fmt_call,
17705198Sjmcp 	.tbl_inp   = initial_table_def
17715198Sjmcp };
1772