2N/A/*
2N/A * CDDL HEADER START
2N/A *
2N/A * The contents of this file are subject to the terms of the
2N/A * Common Development and Distribution License (the "License").
2N/A * You may not use this file except in compliance with the License.
2N/A *
2N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2N/A * or http://www.opensolaris.org/os/licensing.
2N/A * See the License for the specific language governing permissions
2N/A * and limitations under the License.
2N/A *
2N/A * When distributing Covered Code, include this CDDL HEADER in each
2N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2N/A * If applicable, add the following below this CDDL HEADER, with the
2N/A * fields enclosed by brackets "[]" replaced with your own identifying
2N/A * information: Portions Copyright [yyyy] [name of copyright owner]
2N/A *
2N/A * CDDL HEADER END
2N/A */
2N/A
2N/A/*
2N/A * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
2N/A */
2N/A
2N/A/*
2N/A * Copyright 2009 Jason King. All rights reserved.
2N/A * Use is subject to license terms.
2N/A */
2N/A
2N/A#include "libdisasm.h"
2N/A#include "libdisasm_impl.h"
2N/A#include "dis_sparc.h"
2N/A#include "dis_sparc_fmt.h"
2N/A
2N/A#define INVALID \
2N/A{ \
2N/A .in_type = INST_NONE, \
2N/A .in_arch = 0, \
2N/A .in_data = { \
2N/A .in_tbl = NULL \
2N/A } \
2N/A}
2N/A
2N/A#define INVALIDA(_arch) \
2N/A{ \
2N/A .in_type = INST_NONE, \
2N/A .in_arch = _arch, \
2N/A .in_data = { \
2N/A .in_tbl = NULL \
2N/A } \
2N/A}
2N/A
2N/A#define INST(_name, _arch, _flags) \
2N/A{ \
2N/A .in_type = INST_DEF, \
2N/A .in_arch = _arch, \
2N/A .in_data = { \
2N/A .in_def = { \
2N/A .in_name = _name, \
2N/A .in_flags = _flags \
2N/A } \
2N/A } \
2N/A}
2N/A
2N/A#define TABLE(_name, _arch) \
2N/A{ \
2N/A .in_type = INST_TBL, \
2N/A .in_arch = _arch, \
2N/A .in_data = { \
2N/A .in_tbl = &_name \
2N/A } \
2N/A}
2N/A
2N/A#define OVERLAY(_idx, _inst) \
2N/A{ \
2N/A .ov_idx = _idx, \
2N/A .ov_inst = _inst \
2N/A}
2N/A
2N/A#define OVERLAY_END { .ov_idx = -1, .ov_inst = INVALID }
2N/A
2N/A#define V8 DIS_SPARC_V8
2N/A#define V9 DIS_SPARC_V9
2N/A#define V9S DIS_SPARC_V9_SGI
2N/A#define V9O DIS_SPARC_V9_OPL
2N/A#define VALL V8|V9|V9S|V9O
2N/A
2N/A/* branches */
2N/Astatic const inst_t BPcc_table_def[16] = {
2N/A INST("bn", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("be", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("ble", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("bl", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A
2N/A INST("bleu", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("bcs", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("bneg", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("bvs", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A
2N/A INST("ba", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("bne", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("bg", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("bge", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A
2N/A INST("bgu", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("bcc", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("bpos", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
2N/A INST("bvc", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19))
2N/A};
2N/A
2N/A
2N/Astatic const table_t BPcc_table = {
2N/A .tbl_field = 28,
2N/A .tbl_len = 4,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_branch,
2N/A .tbl_inp = BPcc_table_def
2N/A};
2N/A
2N/Astatic const inst_t Bicc_table_def[16] = {
2N/A INST("bn", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("be", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("ble", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("bl", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A
2N/A INST("bleu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A /* docs say it's 'bcs' but disassembler calles it synonym 'blu' */
2N/A INST("blu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("bneg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("bvs", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A
2N/A INST("ba", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("bne", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("bg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("bge", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A
2N/A INST("bgu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A /*
2N/A * while the docs say it's officially 'bcc', existing disassembler
2N/A * uses the synonym bgeu
2N/A */
2N/A INST("bgeu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("bpos", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("bvc", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE))
2N/A};
2N/A
2N/Astatic const table_t Bicc_table = {
2N/A .tbl_field = 28,
2N/A .tbl_len = 4,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_branch,
2N/A .tbl_inp = Bicc_table_def
2N/A};
2N/A
2N/Astatic const inst_t BPr_table_def[16] = {
2N/A INVALID,
2N/A INST("brz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("brlez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("brlz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A INVALID,
2N/A INST("brnz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("brgz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("brgez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
2N/A};
2N/A
2N/Astatic const table_t BPr_table = {
2N/A .tbl_field = 28,
2N/A .tbl_len = 4,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_branch,
2N/A .tbl_inp = BPr_table_def
2N/A};
2N/A
2N/Astatic const inst_t CBcond_table_def[512] = {
2N/A /* 0x000 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x010 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x020 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x030 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x040 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x050 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x060 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x070 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x080 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x090 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbe", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbe", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x098 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0a0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwble", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxble", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x0a8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0b0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbl", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbl", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x0b8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0c0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbleu", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbleu", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x0c8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0d0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbcs", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbcs", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x0d8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0e0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbneg", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbneg", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x0e8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0f0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbvs", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbvs", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x0f8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x100 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x110 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x120 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x130 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x140 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x150 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x160 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x170 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x180 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x190 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbne", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbne", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x198 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1a0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbg", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbg", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x1a8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1b0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbge", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbge", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x1b8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1c0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbgu", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbgu", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x1c8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1d0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbcc", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbcc", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x1d8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1e0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbpos", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbpos", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x1e8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1f0 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("cwbvc", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A INST("cxbvc", V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
2N/A
2N/A /* 0x1f0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A};
2N/A
2N/Astatic const table_t CBcond_table = {
2N/A .tbl_field = 29,
2N/A .tbl_len = 9,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_cbcond,
2N/A .tbl_inp = CBcond_table_def
2N/A};
2N/A
2N/Astatic const inst_t BPr_CBcond_table_def[2] = {
2N/A TABLE(BPr_table, V9|V9S),
2N/A TABLE(CBcond_table, V9)
2N/A};
2N/A
2N/Astatic const table_t BPr_CBcond_table = {
2N/A .tbl_field = 28,
2N/A .tbl_len = 1,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_branch,
2N/A .tbl_inp = BPr_CBcond_table_def
2N/A};
2N/A
2N/Astatic const inst_t FBPfcc_table_def[16] = {
2N/A INST("fbn", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fbne", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fblg", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fbul", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A
2N/A INST("fbl", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fbug", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fbg", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fbu", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A
2N/A INST("fba", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fbe", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fbue", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fbge", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A
2N/A INST("fbuge", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fble", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fbule", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
2N/A INST("fbo", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC))
2N/A};
2N/A
2N/Astatic const table_t FBPfcc_table = {
2N/A .tbl_field = 28,
2N/A .tbl_len = 4,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_branch,
2N/A .tbl_inp = FBPfcc_table_def
2N/A};
2N/A
2N/Astatic const inst_t FBfcc_table_def[16] = {
2N/A INST("fbn", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fbne", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fblg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fbul", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A
2N/A INST("fbl", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fbug", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fbg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fbu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A
2N/A INST("fba", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fbe", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fbue", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fbge", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A
2N/A INST("fbuge", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fble", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fbule", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("fbo", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE))
2N/A};
2N/A
2N/Astatic const table_t FBfcc_table = {
2N/A .tbl_field = 28,
2N/A .tbl_len = 4,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_branch,
2N/A .tbl_inp = FBfcc_table_def
2N/A};
2N/A
2N/Astatic const inst_t CBccc_table_def[16] = {
2N/A INST("cbn", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb123", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb12", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb13", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb1", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb23", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb2", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb3", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cba", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb0", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb03", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb02", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb023", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb01", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb013", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
2N/A INST("cb012", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE))
2N/A};
2N/A
2N/Astatic const table_t CBccc_table = {
2N/A .tbl_field = 28,
2N/A .tbl_len = 4,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_branch,
2N/A .tbl_inp = CBccc_table_def
2N/A};
2N/A
2N/Astatic const inst_t branch_table_def[8] = {
2N/A INST("unimp", VALL, 0),
2N/A TABLE(BPcc_table, V9|V9S),
2N/A TABLE(Bicc_table, VALL),
2N/A TABLE(BPr_CBcond_table, V9|V9S),
2N/A
2N/A INST("sethi", VALL, 0),
2N/A TABLE(FBPfcc_table, V9|V9S),
2N/A TABLE(FBfcc_table, VALL),
2N/A TABLE(CBccc_table, V8)
2N/A};
2N/A
2N/Astatic const overlay_t branch_ov_table[] = {
2N/A OVERLAY(0x00, INST("illtrap", V9|V9S, 0)),
2N/A OVERLAY_END
2N/A};
2N/A
2N/Astatic const table_t branch_table = {
2N/A .tbl_field = 24,
2N/A .tbl_len = 3,
2N/A .tbl_ovp = branch_ov_table,
2N/A .tbl_fmt = fmt_sethi,
2N/A .tbl_inp = branch_table_def
2N/A};
2N/A
2N/A/* load/stores */
2N/Astatic const inst_t ls_table_def[64] = {
2N/A /* 0x00 */
2N/A INST("ld", VALL, 0),
2N/A INST("ldub", VALL, 0),
2N/A INST("lduh", VALL, 0),
2N/A INST("ldd", VALL, 0),
2N/A
2N/A INST("st", VALL, FLG_STORE),
2N/A INST("stb", VALL, FLG_STORE),
2N/A INST("sth", VALL, FLG_STORE),
2N/A INST("std", VALL, FLG_STORE),
2N/A
2N/A /* 0x08 */
2N/A INST("ldsw", V9|V9S, 0),
2N/A INST("ldsb", VALL, 0),
2N/A INST("ldsh", VALL, 0),
2N/A INST("ldx", V9|V9S, 0),
2N/A
2N/A INVALID,
2N/A INST("ldstub", VALL, 0),
2N/A INST("stx", V9|V9S, FLG_STORE),
2N/A INST("swap", VALL, 0),
2N/A
2N/A /* 0x10 */
2N/A INST("lda", VALL, FLG_ASI),
2N/A INST("lduba", VALL, FLG_ASI),
2N/A INST("lduha", VALL, FLG_ASI),
2N/A INST("ldda", VALL, FLG_ASI),
2N/A
2N/A INST("sta", VALL, FLG_STORE|FLG_ASI),
2N/A INST("stba", VALL, FLG_STORE|FLG_ASI),
2N/A INST("stha", VALL, FLG_STORE|FLG_ASI),
2N/A INST("stda", VALL, FLG_STORE|FLG_ASI),
2N/A
2N/A /* 0x18 */
2N/A INST("ldswa", V9|V9S, FLG_ASI),
2N/A INST("ldsba", VALL, FLG_ASI),
2N/A INST("ldsha", VALL, FLG_ASI),
2N/A INST("ldxa", V9|V9S, FLG_ASI),
2N/A
2N/A INVALID,
2N/A INST("ldstuba", VALL, FLG_ASI),
2N/A INST("stxa", V9|V9S, FLG_STORE|FLG_ASI),
2N/A INST("swapa", VALL, FLG_ASI),
2N/A
2N/A /* 0x20 */
2N/A INST("ld", VALL, FLG_RD(REG_FP)),
2N/A /* ldx on v9 */
2N/A INST("ld", VALL, FLG_RD(REG_FSR)),
2N/A INST("ldq", V9|V9S, FLG_RD(REG_FPQ)),
2N/A INST("ldd", VALL, FLG_RD(REG_FPD)),
2N/A
2N/A INST("st", VALL, FLG_STORE|FLG_RD(REG_FP)),
2N/A /* stx on v9 */
2N/A INST("st", VALL, FLG_STORE|FLG_RD(REG_FSR)),
2N/A INST("stq", VALL, FLG_STORE|FLG_RD(REG_FPQ)),
2N/A INST("std", VALL, FLG_STORE|FLG_RD(REG_FPD)),
2N/A
2N/A /* 0x28 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A INVALID,
2N/A INST("prefetch", V9|V9S, 0),
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A /* 0x30 */
2N/A INST("ld", V8, FLG_RD(REG_CP)),
2N/A INST("ld", V8, FLG_RD(REG_CSR)),
2N/A INST("ldqa", V9|V9S, FLG_ASI|FLG_RD(REG_FPQ)),
2N/A INST("ldd", V8, FLG_RD(REG_CP)),
2N/A
2N/A INST("st", V8, FLG_STORE|FLG_RD(REG_CP)),
2N/A INST("st", V8, FLG_STORE|FLG_RD(REG_CSR)),
2N/A INST("std", V8, FLG_STORE|FLG_RD(REG_CQ)),
2N/A INST("std", V8, FLG_STORE|FLG_RD(REG_CP)),
2N/A
2N/A /* 0x38 */
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A INST("casa", V9|V9S, 0),
2N/A INST("prefetcha", V9|V9S, FLG_STORE|FLG_ASI),
2N/A INST("casxa", V9|V9S, 0),
2N/A INVALID
2N/A};
2N/A
2N/Astatic const overlay_t ld_ov_table[] = {
2N/A OVERLAY(0x10, INST("lduwa", V9|V9S, FLG_ASI|FLG_RD(REG_INT))),
2N/A OVERLAY(0x14, INST("stwa", V9|V9S,
2N/A FLG_STORE|FLG_ASI|FLG_RD(REG_INT))),
2N/A OVERLAY(0x30, INST("lda", V9|V9S, FLG_ASI|FLG_RD(REG_FP))),
2N/A OVERLAY(0x33, INST("ldda", V9|V9S, FLG_ASI|FLG_RD(REG_FPD))),
2N/A
2N/A OVERLAY(0x34, INST("sta", V9|V9S, FLG_STORE|FLG_ASI|FLG_RD(REG_FP))),
2N/A OVERLAY(0x36, INST("stqa", V9|V9S,
2N/A FLG_STORE|FLG_ASI|FLG_RD(REG_FPQ))),
2N/A OVERLAY(0x37, INST("stda", V9|V9S,
2N/A FLG_STORE|FLG_ASI|FLG_RD(REG_FPD))),
2N/A
2N/A OVERLAY_END
2N/A};
2N/A
2N/Astatic const table_t ls_table = {
2N/A .tbl_field = 24,
2N/A .tbl_len = 6,
2N/A .tbl_ovp = ld_ov_table,
2N/A .tbl_fmt = fmt_ls,
2N/A .tbl_inp = ls_table_def
2N/A};
2N/A
2N/A
2N/A/* ALU operations */
2N/Astatic const inst_t Tcc_table_def[16] = {
2N/A INST("tn", VALL, 0),
2N/A INST("te", VALL, 0),
2N/A INST("tle", VALL, 0),
2N/A INST("tl", VALL, 0),
2N/A
2N/A INST("tleu", VALL, 0),
2N/A INST("tcs", VALL, 0),
2N/A INST("tneg", VALL, 0),
2N/A INST("tvs", VALL, 0),
2N/A
2N/A INST("ta", VALL, 0),
2N/A INST("tne", VALL, 0),
2N/A INST("tg", VALL, 0),
2N/A INST("tge", VALL, 0),
2N/A
2N/A INST("tgu", VALL, 0),
2N/A INST("tcc", VALL, 0),
2N/A INST("tpos", VALL, 0),
2N/A INST("tvc", VALL, 0)
2N/A};
2N/A
2N/Astatic const table_t Tcc_table = {
2N/A .tbl_field = 28,
2N/A .tbl_len = 4,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_trap,
2N/A .tbl_inp = Tcc_table_def
2N/A};
2N/A
2N/Astatic const inst_t rwin_table_def[32] = {
2N/A /* 0x00 */
2N/A INST("saved", V9|V9S, 0),
2N/A INST("restored", V9|V9S, 0),
2N/A INST("allclean", V9|V9S, 0),
2N/A INST("otherw", V9|V9S, 0),
2N/A
2N/A INST("normalw", V9|V9S, 0),
2N/A INST("invalw", V9|V9S, 0),
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A /* 0x08 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x10 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
2N/A};
2N/A
2N/Astatic const table_t rwin_table = {
2N/A .tbl_field = 29,
2N/A .tbl_len = 5,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_regwin,
2N/A .tbl_inp = rwin_table_def
2N/A};
2N/A
2N/Astatic const inst_t tr_table_def[32] = {
2N/A /* 0x00 */
2N/A INST("done", V9|V9S, 0),
2N/A INST("retry", V9|V9S, 0),
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A /* 0x08 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INST("jpriv", V9, FLG_DISP(DISP19)),
2N/A
2N/A /* 0x10 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
2N/A};
2N/A
2N/Astatic const table_t tr_table = {
2N/A .tbl_field = 29,
2N/A .tbl_len = 5,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_trap_ret,
2N/A .tbl_inp = tr_table_def
2N/A};
2N/A
2N/Astatic const overlay_t crypto_ov_table[] = {
2N/A OVERLAY(0x148, INST("mpmul", V9, 0)),
2N/A OVERLAY(0x149, INST("montmul", V9, 0)),
2N/A OVERLAY(0x14a, INST("montsqr", V9, 0)),
2N/A OVERLAY_END
2N/A};
2N/A
2N/Astatic const inst_t crypto_table_def[1] = {
2N/A INVALID
2N/A};
2N/A
2N/Astatic const table_t crypto_table = {
2N/A .tbl_field = 13,
2N/A .tbl_len = 9,
2N/A .tbl_ovp = crypto_ov_table,
2N/A .tbl_fmt = fmt_crypto,
2N/A .tbl_inp = crypto_table_def
2N/A};
2N/A
2N/Astatic const inst_t crypto4op_table_def[16] = {
2N/A /* 0x00 */
2N/A INST("aes_eround01", V9, FLG_P1(REG_FPD)),
2N/A INST("aes_eround23", V9, FLG_P1(REG_FPD)),
2N/A INST("aes_dround01", V9, FLG_P1(REG_FPD)),
2N/A INST("aes_dround23", V9, FLG_P1(REG_FPD)),
2N/A INST("aes_eround01_l", V9, FLG_P1(REG_FPD)),
2N/A INST("aes_eround23_l", V9, FLG_P1(REG_FPD)),
2N/A INST("aes_dround01_l", V9, FLG_P1(REG_FPD)),
2N/A INST("aes_dround23_l", V9, FLG_P1(REG_FPD)),
2N/A /* 0x08 */
2N/A INST("aes_kexpand1", V9, FLG_P1(REG_FPD)),
2N/A INST("des_round", V9, FLG_P1(REG_FPD)),
2N/A INST("kasumi_fl_xor", V9, FLG_P1(REG_FPD)),
2N/A INST("kasumi_fi_xor", V9, FLG_P1(REG_FPD)),
2N/A INST("camellia_f", V9, FLG_P1(REG_FPD)),
2N/A INVALID,
2N/A INVALID,
2N/A INVALID
2N/A};
2N/A
2N/Astatic const table_t crypto4op_table = {
2N/A .tbl_field = 8,
2N/A .tbl_len = 4,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_crypto4op,
2N/A .tbl_inp = crypto4op_table_def
2N/A};
2N/A
2N/Astatic const inst_t movicc_table_def[16] = {
2N/A INST("movn", V9|V9S, 0),
2N/A INST("move", V9|V9S, 0),
2N/A INST("movle", V9|V9S, 0),
2N/A INST("movl", V9|V9S, 0),
2N/A
2N/A INST("movleu", V9|V9S, 0),
2N/A INST("movcs", V9|V9S, 0),
2N/A INST("movneg", V9|V9S, 0),
2N/A INST("movvs", V9|V9S, 0),
2N/A
2N/A INST("mova", V9|V9S, 0),
2N/A INST("movne", V9|V9S, 0),
2N/A INST("movg", V9|V9S, 0),
2N/A INST("movge", V9|V9S, 0),
2N/A
2N/A INST("movgu", V9|V9S, 0),
2N/A INST("movcc", V9|V9S, 0),
2N/A INST("movpos", V9|V9S, 0),
2N/A INST("movvc", V9|V9S, 0)
2N/A};
2N/A
2N/Astatic const inst_t movfcc_table_def[16] = {
2N/A INST("movn", V9|V9S, 0),
2N/A INST("movne", V9|V9S, 0),
2N/A INST("movlg", V9|V9S, 0),
2N/A INST("movul", V9|V9S, 0),
2N/A
2N/A INST("movl", V9|V9S, 0),
2N/A INST("movug", V9|V9S, 0),
2N/A INST("movg", V9|V9S, 0),
2N/A INST("movu", V9|V9S, 0),
2N/A
2N/A INST("mova", V9|V9S, 0),
2N/A INST("move", V9|V9S, 0),
2N/A INST("movue", V9|V9S, 0),
2N/A INST("movge", V9|V9S, 0),
2N/A
2N/A INST("movuge", V9|V9S, 0),
2N/A INST("movle", V9|V9S, 0),
2N/A INST("movule", V9|V9S, 0),
2N/A INST("movo", V9|V9S, 0)
2N/A};
2N/A
2N/Astatic const table_t movfcc_table = {
2N/A .tbl_field = 17,
2N/A .tbl_len = 4,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_movcc,
2N/A .tbl_inp = movfcc_table_def
2N/A};
2N/A
2N/Astatic const table_t movicc_table = {
2N/A .tbl_field = 17,
2N/A .tbl_len = 4,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_movcc,
2N/A .tbl_inp = movicc_table_def
2N/A};
2N/A
2N/Astatic const inst_t movcc_table_def[2] = {
2N/A TABLE(movfcc_table, V9|V9S),
2N/A TABLE(movicc_table, V9|V9S)
2N/A};
2N/A
2N/Astatic const table_t movcc_table = {
2N/A .tbl_field = 18,
2N/A .tbl_len = 1,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = NULL,
2N/A .tbl_inp = movcc_table_def
2N/A};
2N/A
2N/Astatic const inst_t movr_table_def[8] = {
2N/A INVALID,
2N/A /* aka movrz */
2N/A INST("movre", V9|V9S, 0),
2N/A INST("movrlez", V9|V9S, 0),
2N/A INST("movrlz", V9|V9S, 0),
2N/A
2N/A INVALID,
2N/A /* aka movrnz */
2N/A INST("movrne", V9|V9S, 0),
2N/A INST("movrgz", V9|V9S, 0),
2N/A INST("movrgez", V9|V9S, 0)
2N/A};
2N/A
2N/Astatic const table_t movr_table = {
2N/A .tbl_field = 12,
2N/A .tbl_len = 3,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_movr,
2N/A .tbl_inp = movr_table_def
2N/A};
2N/A
2N/Astatic const inst_t FPop1_table_def[512] = {
2N/A /* 0x000 */
2N/A INVALID,
2N/A INST("fmovs", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fmovd", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fmovq", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A INVALID,
2N/A INST("fnegs", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fnegd", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fnegq", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A /* 0x008 */
2N/A INVALID,
2N/A INST("fabss", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fabsd", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fabsq", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x010 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x020 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x028 */
2N/A INVALID,
2N/A INST("fsqrts", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fsqrtd", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fsqrtq", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x30 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x40 */
2N/A INVALID,
2N/A INST("fadds", VALL,
2N/A FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("faddd", VALL,
2N/A FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("faddq", VALL,
2N/A FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A INVALID,
2N/A INST("fsubs", VALL,
2N/A FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fsubd", VALL,
2N/A FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fsubq", VALL,
2N/A FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A /* 0x048 */
2N/A INVALID,
2N/A INST("fmuls", VALL,
2N/A FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fmuld", VALL,
2N/A FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fmulq", VALL,
2N/A FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A INVALID,
2N/A INST("fdivs", VALL,
2N/A FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fdivd", VALL,
2N/A FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fdivq", VALL,
2N/A FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A /* 0x050 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x060 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x068 */
2N/A INVALID,
2N/A INST("fsmuld", VALL,
2N/A FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A INVALID,
2N/A INVALID,
2N/A INST("fdmulq", VALL,
2N/A FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A INVALID,
2N/A
2N/A /* 0x070 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x080 */
2N/A INVALID,
2N/A INST("fstox", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fdtox", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fqtox", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A
2N/A INST("fxtos", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|
2N/A FLG_P3(REG_FP)),
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A /* 0x088 */
2N/A INST("fxtod", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A INST("fxtoq", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A /* 0x090 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0a0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0b0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0c0 */
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A INST("fitos", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INVALID,
2N/A INST("fdtos", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fqtos", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A
2N/A /* 0x0c8 */
2N/A INST("fitod", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fstod", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INVALID,
2N/A INST("fqtod", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A
2N/A INST("fitoq", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A INST("fstoq", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A INST("fdtoq", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A INVALID,
2N/A
2N/A /* 0x0d0 */
2N/A INVALID,
2N/A INST("fstoi", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fdtoi", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fqtoi", VALL,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0d8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0e0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0f0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x100 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x110 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x120 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x130 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x140 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x150 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x160 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x170 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x180 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x190 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1a0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1b0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1c0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1d0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1e0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1f0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
2N/A};
2N/A
2N/Astatic const table_t FPop1_table = {
2N/A .tbl_field = 13,
2N/A .tbl_len = 9,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_fpop1,
2N/A .tbl_inp = FPop1_table_def
2N/A};
2N/A
2N/Astatic const inst_t FPop2_table_def[512] = {
2N/A /* 0x000 */
2N/A INVALID,
2N/A INST("fmovs", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fmovd", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fmovq", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x008 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x010 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x020 */
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A INST("fmovrsz", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fmovrdz", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fmovrqz", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
2N/A INVALID,
2N/A
2N/A /* 0x028 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x030 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x040 */
2N/A INVALID,
2N/A INST("fmovs", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fmovd", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fmovq", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A INST("fmovrslez", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fmovrdlez", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fmovrqlez", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
2N/A INVALID,
2N/A
2N/A /* 0x048 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x050 */
2N/A INVALID,
2N/A INST("fcmps", VALL, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_NONE)
2N/A |FLG_NOIMM),
2N/A INST("fcmpd", VALL, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_NONE)
2N/A |FLG_NOIMM),
2N/A INST("fcmpq", VALL, FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_P3(REG_NONE)
2N/A |FLG_NOIMM),
2N/A
2N/A INVALID,
2N/A INST("fcmpes", VALL, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_NONE)
2N/A |FLG_NOIMM),
2N/A INST("fcmped", VALL, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_NONE)
2N/A |FLG_NOIMM),
2N/A INST("fcmpeq", VALL, FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_P3(REG_NONE)
2N/A |FLG_NOIMM),
2N/A
2N/A /* 0x058 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x060 */
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A INVALID,
2N/A INST("fmovrslz", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fmovrdlz", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fmovrqlz", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
2N/A
2N/A /* 0x068 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x070 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x080 */
2N/A INVALID,
2N/A INST("fmovs", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fmovd", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fmovq", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x088 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x090 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0a0 */
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A INVALID,
2N/A INST("fmovrsnz", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fmovrdnz", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fmovrqnz", V9|V9S,
2N/A FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
2N/A
2N/A /* 0x0a8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0b0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0c0 */
2N/A INVALID,
2N/A INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
2N/A FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
2N/A FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|
2N/A FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A INVALID,
2N/A INST("fmovrsgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fmovrdgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fmovrqgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
2N/A FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
2N/A
2N/A /* 0x0c8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0d0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0e0 */
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A INVALID,
2N/A INST("fmovrsgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fmovrdgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fmovrqgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
2N/A FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
2N/A
2N/A /* 0x0e8 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0f0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x100 */
2N/A INVALID,
2N/A INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
2N/A FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
2N/A FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|
2N/A FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x108 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x110 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x120 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x130 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x140 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x150 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x160 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x170 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x180 */
2N/A INVALID,
2N/A INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
2N/A FLG_NOIMM|FLG_P3(REG_FP)),
2N/A INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
2N/A FLG_NOIMM|FLG_P3(REG_FPD)),
2N/A INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|
2N/A FLG_NOIMM|FLG_P3(REG_FPQ)),
2N/A
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x188 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x190 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1a0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1b0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1c0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1d0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1e0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1f0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
2N/A};
2N/A
2N/Astatic const table_t FPop2_table = {
2N/A .tbl_field = 13,
2N/A .tbl_len = 9,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_fpop2,
2N/A .tbl_inp = FPop2_table_def
2N/A};
2N/A
2N/Astatic const inst_t vis_table_def[512] = {
2N/A /* 0x000 */
2N/A INST("edge8cc", V9S, FLG_NOIMM),
2N/A INST("edge8n", V9S, FLG_NOIMM),
2N/A INST("edge8lcc", V9S, FLG_NOIMM),
2N/A INST("edge8ln", V9S, FLG_NOIMM),
2N/A
2N/A INST("edge16cc", V9S, FLG_NOIMM),
2N/A INST("edge16n", V9S, FLG_NOIMM),
2N/A INST("edge16lcc", V9S, FLG_NOIMM),
2N/A INST("edge16ln", V9S, FLG_NOIMM),
2N/A
2N/A /* 0x008 */
2N/A INST("edge32cc", V9S, FLG_NOIMM),
2N/A INST("edge32n", V9S, FLG_NOIMM),
2N/A INST("edge32lcc", V9S, FLG_NOIMM),
2N/A INST("edge32ln", V9S, FLG_NOIMM),
2N/A
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x010 */
2N/A INST("array8", V9S, FLG_NOIMM),
2N/A INST("addxc", V9, 0),
2N/A INST("array16", V9S, FLG_NOIMM),
2N/A INST("addxccc", V9, 0),
2N/A
2N/A INST("array32", V9S, FLG_NOIMM),
2N/A INST("random", V9, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
2N/A FLG_RD(REG_FPD)|FLG_NOIMM),
2N/A INST("umulxhi", V9, FLG_P1(REG_INT)|FLG_NOIMM|
2N/A FLG_P2(REG_INT)|FLG_P3(REG_INT)),
2N/A INST("lzd", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_INT)|FLG_RD(REG_INT)),
2N/A
2N/A /* 0x018 */
2N/A INST("alignaddr", V9S, FLG_NOIMM),
2N/A INST("bmask", V9S, FLG_P1(REG_INT)|FLG_P2(REG_INT)|FLG_RD(REG_INT)),
2N/A INST("alignaddrl", V9S, FLG_NOIMM),
2N/A INST("cmask8", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_INT)|FLG_P3(REG_NONE)),
2N/A INVALID,
2N/A INST("cmask16", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_INT)|FLG_P3(REG_NONE)),
2N/A INVALID,
2N/A INST("cmask32", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_INT)|FLG_P3(REG_NONE)),
2N/A
2N/A /* 0x020 */
2N/A INST("fcmple16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
2N/A INST("fsll16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fcmpne16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
2N/A INST("fsrl16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A
2N/A INST("fcmple32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
2N/A INST("fsll32", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fcmpne32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
2N/A INST("fsrl32", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A
2N/A /* 0x028 */
2N/A INST("fcmpgt16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
2N/A INST("fslas16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fcmpeq16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
2N/A INST("fsra16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A
2N/A INST("fcmpgt32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
2N/A INST("fslas32", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fcmpeq32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
2N/A INST("fsra32", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A
2N/A /* 0x030 */
2N/A INVALID,
2N/A INST("fmul8x16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INVALID,
2N/A INST("fmul8x16au", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
2N/A
2N/A INVALID,
2N/A INST("fmul8x16al", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
2N/A INST("fmul8sux16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fmul8ulx16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A
2N/A /* 0x038 */
2N/A INST("fmuld8sux16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
2N/A INST("fmuld8ulx16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
2N/A INST("fpack32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fpack16", V9S, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FP)),
2N/A
2N/A INVALID,
2N/A INST("fpackfix", V9S, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FP)),
2N/A INST("pdist", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("pdistn", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
2N/A
2N/A /* 0x040 */
2N/A INST("fmean16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INVALID,
2N/A INST("fpadd64", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INVALID,
2N/A INST("fchksm16", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INVALID,
2N/A INST("fpsub64", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INVALID,
2N/A
2N/A /* 0x048 */
2N/A INST("faligndata", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INVALID,
2N/A INVALID,
2N/A INST("fpmerge", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
2N/A
2N/A INST("bshuffle", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fexpand", V9S, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A /* 0x050 */
2N/A INST("fpadd16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fpadd16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fpadd32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fpadd32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A
2N/A INST("fpsub16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fpsub16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fpsub32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fpsub32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A
2N/A /* 0x058 */
2N/A INST("fpadds16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fpadds16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fpadds32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fpadds32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fpsubs16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fpsubs16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fpsubs32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fpsubs32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A
2N/A /* 0x060 */
2N/A INST("fzero", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
2N/A FLG_P3(REG_FPD)),
2N/A INST("fzeros", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
2N/A FLG_P3(REG_FP)),
2N/A INST("fnor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fnors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A
2N/A INST("fandnot2", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fandnot2s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fnot2", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
2N/A FLG_P3(REG_FPD)),
2N/A INST("fnot2s", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
2N/A FLG_P3(REG_FP)),
2N/A
2N/A /* 0x068 */
2N/A INST("fandnot1", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fandnot1s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fnot1", V9S, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)|
2N/A FLG_P3(REG_FPD)),
2N/A INST("fnot1s", V9S, FLG_P1(REG_FP)|FLG_P2(REG_NONE)|
2N/A FLG_P3(REG_FP)),
2N/A
2N/A INST("fxor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fxors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fnand", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fnands", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A
2N/A /* 0x070 */
2N/A INST("fand", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fands", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fxnor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fxnors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A
2N/A INST("fsrc1", V9S, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)|
2N/A FLG_P3(REG_FPD)),
2N/A INST("fsrc1s", V9S, FLG_P1(REG_FP)|FLG_P2(REG_NONE)|
2N/A FLG_P3(REG_FP)),
2N/A INST("fornot2", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fornot2s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A
2N/A /* 0x078 */
2N/A INST("fsrc2", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
2N/A FLG_P3(REG_FPD)),
2N/A INST("fsrc2s", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
2N/A FLG_P3(REG_FP)),
2N/A INST("fornot1", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fornot1s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A
2N/A INST("for", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
2N/A INST("fors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_P3(REG_FP)),
2N/A INST("fone", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
2N/A FLG_P3(REG_FPD)),
2N/A INST("fones", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
2N/A FLG_P3(REG_FP)),
2N/A
2N/A /* 0x080 */
2N/A INST("shutdown", V9S, 0),
2N/A INST("siam", V9S, 0),
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x088 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x090 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0a0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0b0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0c0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0d0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0e0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x0f0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x100 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x110 */
2N/A INST("movdtox", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_RD(REG_INT)),
2N/A INST("movstouw", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_RD(REG_INT)),
2N/A INVALID,
2N/A INST("movstosw", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_FP)|FLG_RD(REG_INT)),
2N/A INVALID,
2N/A INST("xmulx", V9, FLG_P1(REG_INT)|FLG_NOIMM|
2N/A FLG_P2(REG_INT)|FLG_P3(REG_INT)),
2N/A INST("xmulxhi", V9, FLG_P1(REG_INT)|FLG_NOIMM|
2N/A FLG_P2(REG_INT)|FLG_P3(REG_INT)),
2N/A INVALID,
2N/A INST("movxtod", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_INT)|FLG_RD(REG_FPD)),
2N/A INST("movwtos", V9, FLG_P1(REG_NONE)|FLG_NOIMM|
2N/A FLG_P2(REG_INT)|FLG_RD(REG_FP)),
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x120 */
2N/A INST("fucmple8", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_RD(REG_INT)),
2N/A INVALID,
2N/A INST("fucmpne8", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_RD(REG_INT)),
2N/A INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INST("fucmpgt8", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_RD(REG_INT)),
2N/A INVALID,
2N/A INST("fucmpeq8", V9, FLG_P1(REG_FPD)|FLG_NOIMM|
2N/A FLG_P2(REG_FPD)|FLG_RD(REG_INT)),
2N/A INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x130 */
2N/A INST("aes_kexpand0", V9, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|
2N/A FLG_RD(REG_FPD)|FLG_NOIMM),
2N/A INST("aes_kexpand2", V9, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|
2N/A FLG_RD(REG_FPD)|FLG_NOIMM),
2N/A INVALID,
2N/A INVALID,
2N/A INST("des_ip", V9, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)|
2N/A FLG_RD(REG_FPD)|FLG_NOIMM),
2N/A INST("des_iip", V9, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)|
2N/A FLG_RD(REG_FPD)|FLG_NOIMM),
2N/A INST("des_kexpand", V9, FLG_P1(REG_FPD)|FLG_RD(REG_FPD)),
2N/A INVALID,
2N/A
2N/A /* 0x138 */
2N/A INST("kasumi_fi_fi", V9, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|
2N/A FLG_RD(REG_FPD)|FLG_NOIMM),
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("camellia_fl", V9, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|
2N/A FLG_RD(REG_FPD)|FLG_NOIMM),
2N/A INST("camellia_fli", V9, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|
2N/A FLG_RD(REG_FPD)|FLG_NOIMM),
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A /* 0x140 */
2N/A INST("md5", V9, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
2N/A FLG_RD(REG_NONE)|FLG_NOIMM),
2N/A INST("sha1", V9, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
2N/A FLG_RD(REG_NONE)|FLG_NOIMM),
2N/A INST("sha256", V9, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
2N/A FLG_RD(REG_NONE)|FLG_NOIMM),
2N/A INST("sha512", V9, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
2N/A FLG_RD(REG_NONE)|FLG_NOIMM),
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INST("crc32c", V9, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|
2N/A FLG_RD(REG_FPD)|FLG_NOIMM),
2N/A
2N/A /* 0x148 */
2N/A TABLE(crypto_table, V9),
2N/A TABLE(crypto_table, V9),
2N/A TABLE(crypto_table, V9),
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A INVALID,
2N/A
2N/A /* 0x150 */
2N/A INVALID,
2N/A INST("flcmps", V9, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_FCC)
2N/A |FLG_NOIMM),
2N/A INST("flcmpd", V9, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_FCC)
2N/A |FLG_NOIMM),
2N/A INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x160 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x170 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x180 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x190 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1a0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1b0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1c0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1d0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1e0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A
2N/A /* 0x1f0 */
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
2N/A INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
2N/A};
2N/A
2N/Astatic const table_t vis_table = {
2N/A .tbl_field = 13,
2N/A .tbl_len = 9,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_vis,
2N/A .tbl_inp = vis_table_def
2N/A};
2N/A
2N/Astatic const inst_t fused_table_def[16] = {
2N/A /* 0x0 */
2N/A INST("fpmaddx", V9, FLG_P1(REG_FPD)),
2N/A INST("fmadds", V9, FLG_P1(REG_FP)),
2N/A INST("fmaddd", V9, FLG_P1(REG_FPD)),
2N/A INVALID,
2N/A
2N/A /* 0x4 */
2N/A INST("fpmaddxhi", V9, FLG_P1(REG_FPD)),
2N/A INST("fmsubs", V9, FLG_P1(REG_FP)),
2N/A INST("fmsubd", V9, FLG_P1(REG_FPD)),
2N/A INVALID,
2N/A
2N/A /* 0x8 */
2N/A INVALID,
2N/A INST("fnmsubs", V9, FLG_P1(REG_FP)),
2N/A INST("fnmsubd", V9, FLG_P1(REG_FPD)),
2N/A INVALID,
2N/A
2N/A /* 0xc */
2N/A INVALID,
2N/A INST("fnmadds", V9, FLG_P1(REG_FP)),
2N/A INST("fnmaddd", V9, FLG_P1(REG_FPD)),
2N/A INVALID
2N/A};
2N/A
2N/Astatic const table_t fused_table = {
2N/A .tbl_field = 8,
2N/A .tbl_len = 4,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_fused,
2N/A .tbl_inp = fused_table_def
2N/A};
2N/A
2N/Astatic const inst_t alu_table_def[64] = {
2N/A /* 0x00 */
2N/A INST("add", VALL, 0),
2N/A INST("and", VALL, 0),
2N/A INST("or", VALL, 0),
2N/A INST("xor", VALL, 0),
2N/A
2N/A INST("sub", VALL, 0),
2N/A INST("andn", VALL, 0),
2N/A INST("orn", VALL, 0),
2N/A INST("xnor", VALL, 0),
2N/A
2N/A /* 0x08 */
2N/A INST("addx", VALL, 0),
2N/A INST("mulx", V9|V9S, 0),
2N/A INST("umul", VALL, 0),
2N/A INST("smul", VALL, 0),
2N/A
2N/A INST("subx", VALL, 0),
2N/A INST("udivx", V9|V9S, 0),
2N/A INST("udiv", VALL, 0),
2N/A INST("sdiv", VALL, 0),
2N/A
2N/A /* 0x10 */
2N/A INST("addcc", VALL, 0),
2N/A INST("andcc", VALL, 0),
2N/A INST("orcc", VALL, 0),
2N/A INST("xorcc", VALL, 0),
2N/A
2N/A INST("subcc", VALL, 0),
2N/A INST("andncc", VALL, 0),
2N/A INST("orncc", VALL, 0),
2N/A INST("xnorcc", VALL, 0),
2N/A
2N/A /* 0x18 */
2N/A INST("addxcc", VALL, 0),
2N/A TABLE(crypto4op_table, V9),
2N/A INST("umulcc", VALL, 0),
2N/A INST("smulcc", VALL, 0),
2N/A
2N/A INST("subxcc", VALL, 0),
2N/A INVALID,
2N/A INST("udivcc", VALL, 0),
2N/A INST("sdivcc", VALL, 0),
2N/A
2N/A /* 0x20 */
2N/A INST("taddcc", VALL, 0),
2N/A INST("tsubcc", VALL, 0),
2N/A INST("taddcctv", VALL, 0),
2N/A INST("tsubcctv", VALL, 0),
2N/A
2N/A INST("mulscc", VALL, 0),
2N/A INST("sll", VALL, 0),
2N/A INST("srl", VALL, 0),
2N/A INST("sra", VALL, 0),
2N/A
2N/A /* 0x28 */
2N/A INST("rd", VALL, 0),
2N/A INST("rd", V8, 0),
2N/A INST("rd", V8, 0),
2N/A INST("rd", V8, 0),
2N/A
2N/A TABLE(movcc_table, V9|V9S),
2N/A INST("sdivx", V9|V9S, 0),
2N/A INST("popc", V9|V9S,
2N/A FLG_P1(REG_NONE)|FLG_P2(REG_INT)|FLG_P3(REG_INT)),
2N/A TABLE(movr_table, V9|V9S),
2N/A
2N/A /* 0x30 */
2N/A INST("wr", VALL, 0),
2N/A INST("wr", V8, 0),
2N/A INST("wr", V8, 0),
2N/A INST("wr", V8, 0),
2N/A
2N/A TABLE(FPop1_table, VALL),
2N/A TABLE(FPop2_table, VALL),
2N/A INST("cpop1", V8, 0),
2N/A INST("cpop2", V8, 0), /* impdep2 */
2N/A
2N/A /* 0x38 */
2N/A INST("jmpl", VALL, 0),
2N/A INST("rett", VALL, 0),
2N/A TABLE(Tcc_table, VALL),
2N/A INST("flush", VALL, 0),
2N/A
2N/A INST("save", VALL, 0),
2N/A INST("restore", VALL, 0),
2N/A TABLE(tr_table, V9|V9S),
2N/A INVALID
2N/A};
2N/A
2N/A
2N/Astatic const overlay_t alu_ov_table[] = {
2N/A OVERLAY(0x08, INST("addc", V9|V9S, 0)),
2N/A OVERLAY(0x0c, INST("subc", V9|V9S, 0)),
2N/A OVERLAY(0x18, INST("addccc", V9|V9S, 0)),
2N/A OVERLAY(0x1c, INST("subccc", V9|V9S, 0)),
2N/A
2N/A OVERLAY(0x29, INST("rdhpr", V9|V9S, 0)),
2N/A OVERLAY(0x2a, INST("rdpr", V9|V9S, 0)),
2N/A OVERLAY(0x2b, INST("flushw", V9|V9S, 0)),
2N/A OVERLAY(0x31, TABLE(rwin_table, V9|V9S)),
2N/A
2N/A OVERLAY(0x32, INST("wrpr", V9|V9S, 0)),
2N/A OVERLAY(0x33, INST("wrhpr", V9|V9S, 0)),
2N/A OVERLAY(0x36, TABLE(vis_table, V9S)),
2N/A OVERLAY(0x37, TABLE(fused_table, VALL)),
2N/A OVERLAY(0x39, INST("return", VALL, 0)),
2N/A
2N/A OVERLAY_END
2N/A};
2N/A
2N/Astatic const table_t alu_table = {
2N/A .tbl_field = 24,
2N/A .tbl_len = 6,
2N/A .tbl_ovp = alu_ov_table,
2N/A .tbl_fmt = fmt_alu,
2N/A .tbl_inp = alu_table_def
2N/A};
2N/A
2N/Astatic const inst_t initial_table_def[4] = {
2N/A TABLE(branch_table, VALL),
2N/A INST("call", VALL, 0),
2N/A TABLE(alu_table, VALL),
2N/A TABLE(ls_table, VALL)
2N/A};
2N/A
2N/A/* NOTE: this must not be made static */
2N/Aconst table_t initial_table = {
2N/A .tbl_field = 31,
2N/A .tbl_len = 2,
2N/A .tbl_ovp = NULL,
2N/A .tbl_fmt = fmt_call,
2N/A .tbl_inp = initial_table_def
2N/A};