1*5198Sjmcp /* 2*5198Sjmcp * CDDL HEADER START 3*5198Sjmcp * 4*5198Sjmcp * The contents of this file are subject to the terms of the 5*5198Sjmcp * Common Development and Distribution License (the "License"). 6*5198Sjmcp * You may not use this file except in compliance with the License. 7*5198Sjmcp * 8*5198Sjmcp * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*5198Sjmcp * or http://www.opensolaris.org/os/licensing. 10*5198Sjmcp * See the License for the specific language governing permissions 11*5198Sjmcp * and limitations under the License. 12*5198Sjmcp * 13*5198Sjmcp * When distributing Covered Code, include this CDDL HEADER in each 14*5198Sjmcp * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*5198Sjmcp * If applicable, add the following below this CDDL HEADER, with the 16*5198Sjmcp * fields enclosed by brackets "[]" replaced with your own identifying 17*5198Sjmcp * information: Portions Copyright [yyyy] [name of copyright owner] 18*5198Sjmcp * 19*5198Sjmcp * CDDL HEADER END 20*5198Sjmcp */ 21*5198Sjmcp 22*5198Sjmcp /* 23*5198Sjmcp * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 24*5198Sjmcp * Use is subject to license terms. 25*5198Sjmcp */ 26*5198Sjmcp 27*5198Sjmcp /* 28*5198Sjmcp * Copyright 2007 Jason King. All rights reserved. 29*5198Sjmcp * Use is subject to license terms. 30*5198Sjmcp */ 31*5198Sjmcp 32*5198Sjmcp #pragma ident "%Z%%M% %I% %E% SMI" 33*5198Sjmcp 34*5198Sjmcp #include "libdisasm.h" 35*5198Sjmcp #include "libdisasm_impl.h" 36*5198Sjmcp #include "dis_sparc.h" 37*5198Sjmcp #include "dis_sparc_fmt.h" 38*5198Sjmcp 39*5198Sjmcp #define INVALID \ 40*5198Sjmcp { \ 41*5198Sjmcp .in_type = INST_NONE, \ 42*5198Sjmcp .in_arch = 0, \ 43*5198Sjmcp .in_data = { \ 44*5198Sjmcp .in_tbl = NULL \ 45*5198Sjmcp } \ 46*5198Sjmcp } 47*5198Sjmcp 48*5198Sjmcp #define INVALIDA(_arch) \ 49*5198Sjmcp { \ 50*5198Sjmcp .in_type = INST_NONE, \ 51*5198Sjmcp .in_arch = _arch, \ 52*5198Sjmcp .in_data = { \ 53*5198Sjmcp .in_tbl = NULL \ 54*5198Sjmcp } \ 55*5198Sjmcp } 56*5198Sjmcp 57*5198Sjmcp #define INST(_name, _arch, _flags) \ 58*5198Sjmcp { \ 59*5198Sjmcp .in_type = INST_DEF, \ 60*5198Sjmcp .in_arch = _arch, \ 61*5198Sjmcp .in_data = { \ 62*5198Sjmcp .in_def = { \ 63*5198Sjmcp .in_name = _name, \ 64*5198Sjmcp .in_flags = _flags \ 65*5198Sjmcp } \ 66*5198Sjmcp } \ 67*5198Sjmcp } 68*5198Sjmcp 69*5198Sjmcp #define TABLE(_name, _arch) \ 70*5198Sjmcp { \ 71*5198Sjmcp .in_type = INST_TBL, \ 72*5198Sjmcp .in_arch = _arch, \ 73*5198Sjmcp .in_data = { \ 74*5198Sjmcp .in_tbl = &_name \ 75*5198Sjmcp } \ 76*5198Sjmcp } 77*5198Sjmcp 78*5198Sjmcp #define OVERLAY(_idx, _inst) \ 79*5198Sjmcp { \ 80*5198Sjmcp .ov_idx = _idx, \ 81*5198Sjmcp .ov_inst = _inst \ 82*5198Sjmcp } 83*5198Sjmcp 84*5198Sjmcp #define OVERLAY_END { .ov_idx = -1, .ov_inst = INVALID } 85*5198Sjmcp 86*5198Sjmcp #define V8 DIS_SPARC_V8 87*5198Sjmcp #define V9 DIS_SPARC_V9 88*5198Sjmcp #define V9S DIS_SPARC_V9_SGI 89*5198Sjmcp #define V9O DIS_SPARC_V9_OPL 90*5198Sjmcp #define VALL V8|V9|V9S|V9O 91*5198Sjmcp 92*5198Sjmcp /* branches */ 93*5198Sjmcp static const inst_t BPcc_table_def[16] = { 94*5198Sjmcp INST("bn", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 95*5198Sjmcp INST("be", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 96*5198Sjmcp INST("ble", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 97*5198Sjmcp INST("bl", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 98*5198Sjmcp 99*5198Sjmcp INST("bleu", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 100*5198Sjmcp INST("bcs", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 101*5198Sjmcp INST("bneg", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 102*5198Sjmcp INST("bvs", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 103*5198Sjmcp 104*5198Sjmcp INST("ba", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 105*5198Sjmcp INST("bne", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 106*5198Sjmcp INST("bg", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 107*5198Sjmcp INST("bge", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 108*5198Sjmcp 109*5198Sjmcp INST("bgu", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 110*5198Sjmcp INST("bcc", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 111*5198Sjmcp INST("bpos", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 112*5198Sjmcp INST("bvc", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)) 113*5198Sjmcp }; 114*5198Sjmcp 115*5198Sjmcp static const table_t BPcc_table = { 116*5198Sjmcp .tbl_field = 28, 117*5198Sjmcp .tbl_len = 4, 118*5198Sjmcp .tbl_ovp = NULL, 119*5198Sjmcp .tbl_fmt = fmt_branch, 120*5198Sjmcp .tbl_inp = BPcc_table_def 121*5198Sjmcp }; 122*5198Sjmcp 123*5198Sjmcp static const inst_t Bicc_table_def[16] = { 124*5198Sjmcp INST("bn", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 125*5198Sjmcp INST("be", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 126*5198Sjmcp INST("ble", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 127*5198Sjmcp INST("bl", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 128*5198Sjmcp 129*5198Sjmcp INST("bleu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 130*5198Sjmcp /* docs say it's 'bcs' but disassembler calles it synonym 'blu' */ 131*5198Sjmcp INST("blu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 132*5198Sjmcp INST("bneg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 133*5198Sjmcp INST("bvs", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 134*5198Sjmcp 135*5198Sjmcp INST("ba", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 136*5198Sjmcp INST("bne", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 137*5198Sjmcp INST("bg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 138*5198Sjmcp INST("bge", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 139*5198Sjmcp 140*5198Sjmcp INST("bgu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 141*5198Sjmcp /* 142*5198Sjmcp * while the docs say it's officially 'bcc', existing disassembler 143*5198Sjmcp * uses the synonym bgeu 144*5198Sjmcp */ 145*5198Sjmcp INST("bgeu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 146*5198Sjmcp INST("bpos", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 147*5198Sjmcp INST("bvc", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)) 148*5198Sjmcp }; 149*5198Sjmcp 150*5198Sjmcp static const table_t Bicc_table = { 151*5198Sjmcp .tbl_field = 28, 152*5198Sjmcp .tbl_len = 4, 153*5198Sjmcp .tbl_ovp = NULL, 154*5198Sjmcp .tbl_fmt = fmt_branch, 155*5198Sjmcp .tbl_inp = Bicc_table_def 156*5198Sjmcp }; 157*5198Sjmcp 158*5198Sjmcp static const inst_t BPr_table_def[16] = { 159*5198Sjmcp INVALID, 160*5198Sjmcp INST("brz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 161*5198Sjmcp INST("brlez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 162*5198Sjmcp INST("brlz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 163*5198Sjmcp 164*5198Sjmcp INVALID, 165*5198Sjmcp INST("brnz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 166*5198Sjmcp INST("brgz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 167*5198Sjmcp INST("brgez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 168*5198Sjmcp 169*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 170*5198Sjmcp }; 171*5198Sjmcp 172*5198Sjmcp static const table_t BPr_table = { 173*5198Sjmcp .tbl_field = 28, 174*5198Sjmcp .tbl_len = 4, 175*5198Sjmcp .tbl_ovp = NULL, 176*5198Sjmcp .tbl_fmt = fmt_branch, 177*5198Sjmcp .tbl_inp = BPr_table_def 178*5198Sjmcp }; 179*5198Sjmcp 180*5198Sjmcp static const inst_t FBPfcc_table_def[16] = { 181*5198Sjmcp INST("fbn", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 182*5198Sjmcp INST("fbne", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 183*5198Sjmcp INST("fblg", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 184*5198Sjmcp INST("fbul", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 185*5198Sjmcp 186*5198Sjmcp INST("fbl", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 187*5198Sjmcp INST("fbug", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 188*5198Sjmcp INST("fbg", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 189*5198Sjmcp INST("fbu", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 190*5198Sjmcp 191*5198Sjmcp INST("fba", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 192*5198Sjmcp INST("fbe", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 193*5198Sjmcp INST("fbue", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 194*5198Sjmcp INST("fbge", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 195*5198Sjmcp 196*5198Sjmcp INST("fbuge", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 197*5198Sjmcp INST("fble", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 198*5198Sjmcp INST("fbule", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 199*5198Sjmcp INST("fbo", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)) 200*5198Sjmcp }; 201*5198Sjmcp 202*5198Sjmcp static const table_t FBPfcc_table = { 203*5198Sjmcp .tbl_field = 28, 204*5198Sjmcp .tbl_len = 4, 205*5198Sjmcp .tbl_ovp = NULL, 206*5198Sjmcp .tbl_fmt = fmt_branch, 207*5198Sjmcp .tbl_inp = FBPfcc_table_def 208*5198Sjmcp }; 209*5198Sjmcp 210*5198Sjmcp static const inst_t FBfcc_table_def[16] = { 211*5198Sjmcp INST("fbn", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 212*5198Sjmcp INST("fbne", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 213*5198Sjmcp INST("fblg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 214*5198Sjmcp INST("fbul", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 215*5198Sjmcp 216*5198Sjmcp INST("fbl", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 217*5198Sjmcp INST("fbug", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 218*5198Sjmcp INST("fbg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 219*5198Sjmcp INST("fbu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 220*5198Sjmcp 221*5198Sjmcp INST("fba", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 222*5198Sjmcp INST("fbe", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 223*5198Sjmcp INST("fbue", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 224*5198Sjmcp INST("fbge", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 225*5198Sjmcp 226*5198Sjmcp INST("fbuge", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 227*5198Sjmcp INST("fble", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 228*5198Sjmcp INST("fbule", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 229*5198Sjmcp INST("fbo", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)) 230*5198Sjmcp }; 231*5198Sjmcp 232*5198Sjmcp static const table_t FBfcc_table = { 233*5198Sjmcp .tbl_field = 28, 234*5198Sjmcp .tbl_len = 4, 235*5198Sjmcp .tbl_ovp = NULL, 236*5198Sjmcp .tbl_fmt = fmt_branch, 237*5198Sjmcp .tbl_inp = FBfcc_table_def 238*5198Sjmcp }; 239*5198Sjmcp 240*5198Sjmcp static const inst_t CBccc_table_def[16] = { 241*5198Sjmcp INST("cbn", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 242*5198Sjmcp INST("cb123", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 243*5198Sjmcp INST("cb12", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 244*5198Sjmcp INST("cb13", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 245*5198Sjmcp INST("cb1", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 246*5198Sjmcp INST("cb23", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 247*5198Sjmcp INST("cb2", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 248*5198Sjmcp INST("cb3", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 249*5198Sjmcp INST("cba", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 250*5198Sjmcp INST("cb0", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 251*5198Sjmcp INST("cb03", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 252*5198Sjmcp INST("cb02", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 253*5198Sjmcp INST("cb023", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 254*5198Sjmcp INST("cb01", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 255*5198Sjmcp INST("cb013", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 256*5198Sjmcp INST("cb012", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)) 257*5198Sjmcp }; 258*5198Sjmcp 259*5198Sjmcp static const table_t CBccc_table = { 260*5198Sjmcp .tbl_field = 28, 261*5198Sjmcp .tbl_len = 4, 262*5198Sjmcp .tbl_ovp = NULL, 263*5198Sjmcp .tbl_fmt = fmt_branch, 264*5198Sjmcp .tbl_inp = CBccc_table_def 265*5198Sjmcp }; 266*5198Sjmcp 267*5198Sjmcp static const inst_t branch_table_def[8] = { 268*5198Sjmcp INST("unimp", VALL, 0), 269*5198Sjmcp TABLE(BPcc_table, V9|V9S), 270*5198Sjmcp TABLE(Bicc_table, VALL), 271*5198Sjmcp TABLE(BPr_table, V9|V9S), 272*5198Sjmcp 273*5198Sjmcp INST("sethi", VALL, 0), 274*5198Sjmcp TABLE(FBPfcc_table, V9|V9S), 275*5198Sjmcp TABLE(FBfcc_table, VALL), 276*5198Sjmcp TABLE(CBccc_table, V8) 277*5198Sjmcp }; 278*5198Sjmcp 279*5198Sjmcp static const overlay_t branch_ov_table[] = { 280*5198Sjmcp OVERLAY(0x00, INST("illtrap", V9|V9S, 0)), 281*5198Sjmcp OVERLAY_END 282*5198Sjmcp }; 283*5198Sjmcp 284*5198Sjmcp static const table_t branch_table = { 285*5198Sjmcp .tbl_field = 24, 286*5198Sjmcp .tbl_len = 3, 287*5198Sjmcp .tbl_ovp = branch_ov_table, 288*5198Sjmcp .tbl_fmt = fmt_sethi, 289*5198Sjmcp .tbl_inp = branch_table_def 290*5198Sjmcp }; 291*5198Sjmcp 292*5198Sjmcp /* load/stores */ 293*5198Sjmcp static const inst_t ls_table_def[64] = { 294*5198Sjmcp /* 0x00 */ 295*5198Sjmcp INST("ld", VALL, 0), 296*5198Sjmcp INST("ldub", VALL, 0), 297*5198Sjmcp INST("lduh", VALL, 0), 298*5198Sjmcp INST("ldd", VALL, 0), 299*5198Sjmcp 300*5198Sjmcp INST("st", VALL, FLG_STORE), 301*5198Sjmcp INST("stb", VALL, FLG_STORE), 302*5198Sjmcp INST("sth", VALL, FLG_STORE), 303*5198Sjmcp INST("std", VALL, FLG_STORE), 304*5198Sjmcp 305*5198Sjmcp /* 0x08 */ 306*5198Sjmcp INST("ldsw", V9|V9S, 0), 307*5198Sjmcp INST("ldsb", VALL, 0), 308*5198Sjmcp INST("ldsh", VALL, 0), 309*5198Sjmcp INST("ldx", V9|V9S, 0), 310*5198Sjmcp 311*5198Sjmcp INVALID, 312*5198Sjmcp INST("ldstub", VALL, 0), 313*5198Sjmcp INST("stx", V9|V9S, FLG_STORE), 314*5198Sjmcp INST("swap", VALL, 0), 315*5198Sjmcp 316*5198Sjmcp /* 0x10 */ 317*5198Sjmcp INST("lda", VALL, FLG_ASI), 318*5198Sjmcp INST("lduba", VALL, FLG_ASI), 319*5198Sjmcp INST("lduha", VALL, FLG_ASI), 320*5198Sjmcp INST("ldda", VALL, FLG_ASI), 321*5198Sjmcp 322*5198Sjmcp INST("sta", VALL, FLG_STORE|FLG_ASI), 323*5198Sjmcp INST("stba", VALL, FLG_STORE|FLG_ASI), 324*5198Sjmcp INST("stha", VALL, FLG_STORE|FLG_ASI), 325*5198Sjmcp INST("stda", VALL, FLG_STORE|FLG_ASI), 326*5198Sjmcp 327*5198Sjmcp /* 0x18 */ 328*5198Sjmcp INST("ldswa", V9|V9S, FLG_ASI), 329*5198Sjmcp INST("ldsba", VALL, FLG_ASI), 330*5198Sjmcp INST("ldsha", VALL, FLG_ASI), 331*5198Sjmcp INST("ldxa", V9|V9S, FLG_ASI), 332*5198Sjmcp 333*5198Sjmcp INVALID, 334*5198Sjmcp INST("ldstuba", VALL, FLG_ASI), 335*5198Sjmcp INST("stxa", V9|V9S, FLG_STORE|FLG_ASI), 336*5198Sjmcp INST("swapa", VALL, FLG_ASI), 337*5198Sjmcp 338*5198Sjmcp /* 0x20 */ 339*5198Sjmcp INST("ld", VALL, FLG_RD(REG_FP)), 340*5198Sjmcp /* ldx on v9 */ 341*5198Sjmcp INST("ld", VALL, FLG_RD(REG_FSR)), 342*5198Sjmcp INST("ldq", V9|V9S, FLG_RD(REG_FPQ)), 343*5198Sjmcp INST("ldd", VALL, FLG_RD(REG_FPD)), 344*5198Sjmcp 345*5198Sjmcp INST("st", VALL, FLG_STORE|FLG_RD(REG_FP)), 346*5198Sjmcp /* stx on v9 */ 347*5198Sjmcp INST("st", VALL, FLG_STORE|FLG_RD(REG_FSR)), 348*5198Sjmcp INST("stq", VALL, FLG_STORE|FLG_RD(REG_FPQ)), 349*5198Sjmcp INST("std", VALL, FLG_STORE|FLG_RD(REG_FPD)), 350*5198Sjmcp 351*5198Sjmcp /* 0x28 */ 352*5198Sjmcp INVALID, 353*5198Sjmcp INVALID, 354*5198Sjmcp INVALID, 355*5198Sjmcp INVALID, 356*5198Sjmcp 357*5198Sjmcp INVALID, 358*5198Sjmcp INST("prefetch", V9|V9S, 0), 359*5198Sjmcp INVALID, 360*5198Sjmcp INVALID, 361*5198Sjmcp 362*5198Sjmcp /* 0x30 */ 363*5198Sjmcp INST("ld", V8, FLG_RD(REG_CP)), 364*5198Sjmcp INST("ld", V8, FLG_RD(REG_CSR)), 365*5198Sjmcp INST("ldqa", V9|V9S, FLG_ASI|FLG_RD(REG_FPQ)), 366*5198Sjmcp INST("ldd", V8, FLG_RD(REG_CP)), 367*5198Sjmcp 368*5198Sjmcp INST("st", V8, FLG_STORE|FLG_RD(REG_CP)), 369*5198Sjmcp INST("st", V8, FLG_STORE|FLG_RD(REG_CSR)), 370*5198Sjmcp INST("std", V8, FLG_STORE|FLG_RD(REG_CQ)), 371*5198Sjmcp INST("std", V8, FLG_STORE|FLG_RD(REG_CP)), 372*5198Sjmcp 373*5198Sjmcp /* 0x38 */ 374*5198Sjmcp INVALID, 375*5198Sjmcp INVALID, 376*5198Sjmcp INVALID, 377*5198Sjmcp INVALID, 378*5198Sjmcp 379*5198Sjmcp INST("casa", V9|V9S, 0), 380*5198Sjmcp INST("prefetcha", V9|V9S, FLG_STORE|FLG_ASI), 381*5198Sjmcp INST("casxa", V9|V9S, 0), 382*5198Sjmcp INVALID 383*5198Sjmcp }; 384*5198Sjmcp 385*5198Sjmcp static const overlay_t ld_ov_table[] = { 386*5198Sjmcp OVERLAY(0x10, INST("lduwa", V9|V9S, FLG_ASI|FLG_RD(REG_INT))), 387*5198Sjmcp OVERLAY(0x14, INST("stwa", V9|V9S, 388*5198Sjmcp FLG_STORE|FLG_ASI|FLG_RD(REG_INT))), 389*5198Sjmcp OVERLAY(0x30, INST("lda", V9|V9S, FLG_ASI|FLG_RD(REG_FP))), 390*5198Sjmcp OVERLAY(0x33, INST("ldda", V9|V9S, FLG_ASI|FLG_RD(REG_FPD))), 391*5198Sjmcp 392*5198Sjmcp OVERLAY(0x34, INST("sta", V9|V9S, FLG_STORE|FLG_ASI|FLG_RD(REG_FP))), 393*5198Sjmcp OVERLAY(0x36, INST("stqa", V9|V9S, 394*5198Sjmcp FLG_STORE|FLG_ASI|FLG_RD(REG_FPQ))), 395*5198Sjmcp OVERLAY(0x37, INST("stda", V9|V9S, 396*5198Sjmcp FLG_STORE|FLG_ASI|FLG_RD(REG_FPD))), 397*5198Sjmcp 398*5198Sjmcp OVERLAY_END 399*5198Sjmcp }; 400*5198Sjmcp 401*5198Sjmcp static const table_t ls_table = { 402*5198Sjmcp .tbl_field = 24, 403*5198Sjmcp .tbl_len = 6, 404*5198Sjmcp .tbl_ovp = ld_ov_table, 405*5198Sjmcp .tbl_fmt = fmt_ls, 406*5198Sjmcp .tbl_inp = ls_table_def 407*5198Sjmcp }; 408*5198Sjmcp 409*5198Sjmcp /* ALU operations */ 410*5198Sjmcp static const inst_t Tcc_table_def[16] = { 411*5198Sjmcp INST("tn", VALL, 0), 412*5198Sjmcp INST("te", VALL, 0), 413*5198Sjmcp INST("tle", VALL, 0), 414*5198Sjmcp INST("tl", VALL, 0), 415*5198Sjmcp 416*5198Sjmcp INST("tleu", VALL, 0), 417*5198Sjmcp INST("tcs", VALL, 0), 418*5198Sjmcp INST("tneg", VALL, 0), 419*5198Sjmcp INST("tvs", VALL, 0), 420*5198Sjmcp 421*5198Sjmcp INST("ta", VALL, 0), 422*5198Sjmcp INST("tne", VALL, 0), 423*5198Sjmcp INST("tg", VALL, 0), 424*5198Sjmcp INST("tge", VALL, 0), 425*5198Sjmcp 426*5198Sjmcp INST("tgu", VALL, 0), 427*5198Sjmcp INST("tcc", VALL, 0), 428*5198Sjmcp INST("tpos", VALL, 0), 429*5198Sjmcp INST("tvc", VALL, 0) 430*5198Sjmcp }; 431*5198Sjmcp 432*5198Sjmcp static const table_t Tcc_table = { 433*5198Sjmcp .tbl_field = 28, 434*5198Sjmcp .tbl_len = 4, 435*5198Sjmcp .tbl_ovp = NULL, 436*5198Sjmcp .tbl_fmt = fmt_trap, 437*5198Sjmcp .tbl_inp = Tcc_table_def 438*5198Sjmcp }; 439*5198Sjmcp 440*5198Sjmcp static const inst_t rwin_table_def[32] = { 441*5198Sjmcp /* 0x00 */ 442*5198Sjmcp INST("saved", V9|V9S, 0), 443*5198Sjmcp INST("restored", V9|V9S, 0), 444*5198Sjmcp INST("allclean", V9|V9S, 0), 445*5198Sjmcp INST("otherw", V9|V9S, 0), 446*5198Sjmcp 447*5198Sjmcp INST("normalw", V9|V9S, 0), 448*5198Sjmcp INST("invalw", V9|V9S, 0), 449*5198Sjmcp INVALID, 450*5198Sjmcp INVALID, 451*5198Sjmcp 452*5198Sjmcp /* 0x08 */ 453*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 454*5198Sjmcp 455*5198Sjmcp /* 0x10 */ 456*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 457*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 458*5198Sjmcp }; 459*5198Sjmcp 460*5198Sjmcp static const table_t rwin_table = { 461*5198Sjmcp .tbl_field = 29, 462*5198Sjmcp .tbl_len = 5, 463*5198Sjmcp .tbl_ovp = NULL, 464*5198Sjmcp .tbl_fmt = fmt_regwin, 465*5198Sjmcp .tbl_inp = rwin_table_def 466*5198Sjmcp }; 467*5198Sjmcp 468*5198Sjmcp static const inst_t tr_table_def[32] = { 469*5198Sjmcp /* 0x00 */ 470*5198Sjmcp INST("done", V9|V9S, 0), 471*5198Sjmcp INST("retry", V9|V9S, 0), 472*5198Sjmcp INVALID, 473*5198Sjmcp INVALID, 474*5198Sjmcp 475*5198Sjmcp INVALID, 476*5198Sjmcp INVALID, 477*5198Sjmcp INVALID, 478*5198Sjmcp INVALID, 479*5198Sjmcp 480*5198Sjmcp /* 0x08 */ 481*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 482*5198Sjmcp 483*5198Sjmcp /* 0x10 */ 484*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 485*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 486*5198Sjmcp }; 487*5198Sjmcp 488*5198Sjmcp static const table_t tr_table = { 489*5198Sjmcp .tbl_field = 29, 490*5198Sjmcp .tbl_len = 5, 491*5198Sjmcp .tbl_ovp = NULL, 492*5198Sjmcp .tbl_fmt = fmt_trap_ret, 493*5198Sjmcp .tbl_inp = tr_table_def 494*5198Sjmcp }; 495*5198Sjmcp 496*5198Sjmcp static const inst_t movicc_table_def[16] = { 497*5198Sjmcp INST("movn", V9|V9S, 0), 498*5198Sjmcp INST("move", V9|V9S, 0), 499*5198Sjmcp INST("movle", V9|V9S, 0), 500*5198Sjmcp INST("movl", V9|V9S, 0), 501*5198Sjmcp 502*5198Sjmcp INST("movleu", V9|V9S, 0), 503*5198Sjmcp INST("movcs", V9|V9S, 0), 504*5198Sjmcp INST("movneg", V9|V9S, 0), 505*5198Sjmcp INST("movvs", V9|V9S, 0), 506*5198Sjmcp 507*5198Sjmcp INST("mova", V9|V9S, 0), 508*5198Sjmcp INST("movne", V9|V9S, 0), 509*5198Sjmcp INST("movg", V9|V9S, 0), 510*5198Sjmcp INST("movge", V9|V9S, 0), 511*5198Sjmcp 512*5198Sjmcp INST("movgu", V9|V9S, 0), 513*5198Sjmcp INST("movcc", V9|V9S, 0), 514*5198Sjmcp INST("movpos", V9|V9S, 0), 515*5198Sjmcp INST("movvc", V9|V9S, 0) 516*5198Sjmcp }; 517*5198Sjmcp 518*5198Sjmcp static const inst_t movfcc_table_def[16] = { 519*5198Sjmcp INST("movn", V9|V9S, 0), 520*5198Sjmcp INST("movne", V9|V9S, 0), 521*5198Sjmcp INST("movlg", V9|V9S, 0), 522*5198Sjmcp INST("movul", V9|V9S, 0), 523*5198Sjmcp 524*5198Sjmcp INST("movl", V9|V9S, 0), 525*5198Sjmcp INST("movug", V9|V9S, 0), 526*5198Sjmcp INST("movg", V9|V9S, 0), 527*5198Sjmcp INST("movu", V9|V9S, 0), 528*5198Sjmcp 529*5198Sjmcp INST("mova", V9|V9S, 0), 530*5198Sjmcp INST("move", V9|V9S, 0), 531*5198Sjmcp INST("movue", V9|V9S, 0), 532*5198Sjmcp INST("movge", V9|V9S, 0), 533*5198Sjmcp 534*5198Sjmcp INST("movuge", V9|V9S, 0), 535*5198Sjmcp INST("movle", V9|V9S, 0), 536*5198Sjmcp INST("movule", V9|V9S, 0), 537*5198Sjmcp INST("movo", V9|V9S, 0) 538*5198Sjmcp }; 539*5198Sjmcp 540*5198Sjmcp static const table_t movfcc_table = { 541*5198Sjmcp .tbl_field = 17, 542*5198Sjmcp .tbl_len = 4, 543*5198Sjmcp .tbl_ovp = NULL, 544*5198Sjmcp .tbl_fmt = fmt_movcc, 545*5198Sjmcp .tbl_inp = movfcc_table_def 546*5198Sjmcp }; 547*5198Sjmcp 548*5198Sjmcp static const table_t movicc_table = { 549*5198Sjmcp .tbl_field = 17, 550*5198Sjmcp .tbl_len = 4, 551*5198Sjmcp .tbl_ovp = NULL, 552*5198Sjmcp .tbl_fmt = fmt_movcc, 553*5198Sjmcp .tbl_inp = movicc_table_def 554*5198Sjmcp }; 555*5198Sjmcp 556*5198Sjmcp static const inst_t movcc_table_def[2] = { 557*5198Sjmcp TABLE(movfcc_table, V9|V9S), 558*5198Sjmcp TABLE(movicc_table, V9|V9S) 559*5198Sjmcp }; 560*5198Sjmcp 561*5198Sjmcp static const table_t movcc_table = { 562*5198Sjmcp .tbl_field = 18, 563*5198Sjmcp .tbl_len = 1, 564*5198Sjmcp .tbl_ovp = NULL, 565*5198Sjmcp .tbl_fmt = NULL, 566*5198Sjmcp .tbl_inp = movcc_table_def 567*5198Sjmcp }; 568*5198Sjmcp 569*5198Sjmcp static const inst_t movr_table_def[8] = { 570*5198Sjmcp INVALID, 571*5198Sjmcp /* aka movrz */ 572*5198Sjmcp INST("movre", V9|V9S, 0), 573*5198Sjmcp INST("movrlez", V9|V9S, 0), 574*5198Sjmcp INST("movrlz", V9|V9S, 0), 575*5198Sjmcp 576*5198Sjmcp INVALID, 577*5198Sjmcp /* aka movrnz */ 578*5198Sjmcp INST("movrne", V9|V9S, 0), 579*5198Sjmcp INST("movrgz", V9|V9S, 0), 580*5198Sjmcp INST("movrgez", V9|V9S, 0) 581*5198Sjmcp }; 582*5198Sjmcp 583*5198Sjmcp static const table_t movr_table = { 584*5198Sjmcp .tbl_field = 12, 585*5198Sjmcp .tbl_len = 3, 586*5198Sjmcp .tbl_ovp = NULL, 587*5198Sjmcp .tbl_fmt = fmt_movr, 588*5198Sjmcp .tbl_inp = movr_table_def 589*5198Sjmcp }; 590*5198Sjmcp 591*5198Sjmcp static const inst_t FPop1_table_def[512] = { 592*5198Sjmcp /* 0x000 */ 593*5198Sjmcp INVALID, 594*5198Sjmcp INST("fmovs", VALL, 595*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 596*5198Sjmcp INST("fmovd", V9|V9S, 597*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 598*5198Sjmcp INST("fmovq", V9|V9S, 599*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 600*5198Sjmcp 601*5198Sjmcp INVALID, 602*5198Sjmcp INST("fnegs", VALL, 603*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 604*5198Sjmcp INST("fnegd", V9|V9S, 605*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 606*5198Sjmcp INST("fnegq", V9|V9S, 607*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 608*5198Sjmcp 609*5198Sjmcp /* 0x008 */ 610*5198Sjmcp INVALID, 611*5198Sjmcp INST("fabss", VALL, 612*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 613*5198Sjmcp INST("fabsd", V9|V9S, 614*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 615*5198Sjmcp INST("fabsq", V9|V9S, 616*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 617*5198Sjmcp 618*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 619*5198Sjmcp 620*5198Sjmcp /* 0x010 */ 621*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 622*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 623*5198Sjmcp 624*5198Sjmcp /* 0x020 */ 625*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 626*5198Sjmcp 627*5198Sjmcp /* 0x028 */ 628*5198Sjmcp INVALID, 629*5198Sjmcp INST("fsqrts", VALL, 630*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 631*5198Sjmcp INST("fsqrtd", VALL, 632*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 633*5198Sjmcp INST("fsqrtq", VALL, 634*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 635*5198Sjmcp 636*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 637*5198Sjmcp 638*5198Sjmcp /* 0x30 */ 639*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 640*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 641*5198Sjmcp 642*5198Sjmcp /* 0x40 */ 643*5198Sjmcp INVALID, 644*5198Sjmcp INST("fadds", VALL, 645*5198Sjmcp FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 646*5198Sjmcp INST("faddd", VALL, 647*5198Sjmcp FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 648*5198Sjmcp INST("faddq", VALL, 649*5198Sjmcp FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 650*5198Sjmcp 651*5198Sjmcp INVALID, 652*5198Sjmcp INST("fsubs", VALL, 653*5198Sjmcp FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 654*5198Sjmcp INST("fsubd", VALL, 655*5198Sjmcp FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 656*5198Sjmcp INST("fsubq", VALL, 657*5198Sjmcp FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 658*5198Sjmcp 659*5198Sjmcp /* 0x048 */ 660*5198Sjmcp INVALID, 661*5198Sjmcp INST("fmuls", VALL, 662*5198Sjmcp FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 663*5198Sjmcp INST("fmuld", VALL, 664*5198Sjmcp FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 665*5198Sjmcp INST("fmulq", VALL, 666*5198Sjmcp FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 667*5198Sjmcp 668*5198Sjmcp INVALID, 669*5198Sjmcp INST("fdivs", VALL, 670*5198Sjmcp FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 671*5198Sjmcp INST("fdivd", VALL, 672*5198Sjmcp FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 673*5198Sjmcp INST("fdivq", VALL, 674*5198Sjmcp FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 675*5198Sjmcp 676*5198Sjmcp /* 0x050 */ 677*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 678*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 679*5198Sjmcp 680*5198Sjmcp /* 0x060 */ 681*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 682*5198Sjmcp 683*5198Sjmcp /* 0x068 */ 684*5198Sjmcp INVALID, 685*5198Sjmcp INST("fsmuld", VALL, 686*5198Sjmcp FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)), 687*5198Sjmcp INVALID, 688*5198Sjmcp INVALID, 689*5198Sjmcp 690*5198Sjmcp INVALID, 691*5198Sjmcp INVALID, 692*5198Sjmcp INST("fdmulq", VALL, 693*5198Sjmcp FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)), 694*5198Sjmcp INVALID, 695*5198Sjmcp 696*5198Sjmcp /* 0x070 */ 697*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 698*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 699*5198Sjmcp 700*5198Sjmcp /* 0x080 */ 701*5198Sjmcp INVALID, 702*5198Sjmcp INST("fstox", V9|V9S, 703*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)), 704*5198Sjmcp INST("fdtox", V9|V9S, 705*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 706*5198Sjmcp INST("fqtox", V9|V9S, 707*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPD)), 708*5198Sjmcp 709*5198Sjmcp INST("fxtos", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM| 710*5198Sjmcp FLG_P3(REG_FP)), 711*5198Sjmcp INVALID, 712*5198Sjmcp INVALID, 713*5198Sjmcp INVALID, 714*5198Sjmcp 715*5198Sjmcp /* 0x088 */ 716*5198Sjmcp INST("fxtod", V9|V9S, 717*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 718*5198Sjmcp INVALID, 719*5198Sjmcp INVALID, 720*5198Sjmcp INVALID, 721*5198Sjmcp 722*5198Sjmcp INST("fxtoq", V9|V9S, 723*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)), 724*5198Sjmcp INVALID, 725*5198Sjmcp INVALID, 726*5198Sjmcp INVALID, 727*5198Sjmcp 728*5198Sjmcp /* 0x090 */ 729*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 730*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 731*5198Sjmcp 732*5198Sjmcp /* 0x0a0 */ 733*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 734*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 735*5198Sjmcp 736*5198Sjmcp /* 0x0b0 */ 737*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 738*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 739*5198Sjmcp 740*5198Sjmcp /* 0x0c0 */ 741*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 742*5198Sjmcp 743*5198Sjmcp INST("fitos", VALL, 744*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 745*5198Sjmcp INVALID, 746*5198Sjmcp INST("fdtos", VALL, 747*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FP)), 748*5198Sjmcp INST("fqtos", VALL, 749*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FP)), 750*5198Sjmcp 751*5198Sjmcp /* 0x0c8 */ 752*5198Sjmcp INST("fitod", VALL, 753*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)), 754*5198Sjmcp INST("fstod", VALL, 755*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)), 756*5198Sjmcp INVALID, 757*5198Sjmcp INST("fqtod", VALL, 758*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPD)), 759*5198Sjmcp 760*5198Sjmcp INST("fitoq", VALL, 761*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPQ)), 762*5198Sjmcp INST("fstoq", VALL, 763*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPQ)), 764*5198Sjmcp INST("fdtoq", VALL, 765*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)), 766*5198Sjmcp INVALID, 767*5198Sjmcp 768*5198Sjmcp /* 0x0d0 */ 769*5198Sjmcp INVALID, 770*5198Sjmcp INST("fstoi", VALL, 771*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 772*5198Sjmcp INST("fdtoi", VALL, 773*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FP)), 774*5198Sjmcp INST("fqtoi", VALL, 775*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FP)), 776*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 777*5198Sjmcp 778*5198Sjmcp /* 0x0d8 */ 779*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 780*5198Sjmcp 781*5198Sjmcp /* 0x0e0 */ 782*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 783*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 784*5198Sjmcp 785*5198Sjmcp /* 0x0f0 */ 786*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 787*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 788*5198Sjmcp 789*5198Sjmcp /* 0x100 */ 790*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 791*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 792*5198Sjmcp 793*5198Sjmcp /* 0x110 */ 794*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 795*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 796*5198Sjmcp 797*5198Sjmcp /* 0x120 */ 798*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 799*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 800*5198Sjmcp 801*5198Sjmcp /* 0x130 */ 802*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 803*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 804*5198Sjmcp 805*5198Sjmcp /* 0x140 */ 806*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 807*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 808*5198Sjmcp 809*5198Sjmcp /* 0x150 */ 810*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 811*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 812*5198Sjmcp 813*5198Sjmcp /* 0x160 */ 814*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 815*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 816*5198Sjmcp 817*5198Sjmcp /* 0x170 */ 818*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 819*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 820*5198Sjmcp 821*5198Sjmcp /* 0x180 */ 822*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 823*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 824*5198Sjmcp 825*5198Sjmcp /* 0x190 */ 826*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 827*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 828*5198Sjmcp 829*5198Sjmcp /* 0x1a0 */ 830*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 831*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 832*5198Sjmcp 833*5198Sjmcp /* 0x1b0 */ 834*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 835*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 836*5198Sjmcp 837*5198Sjmcp /* 0x1c0 */ 838*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 839*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 840*5198Sjmcp 841*5198Sjmcp /* 0x1d0 */ 842*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 843*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 844*5198Sjmcp 845*5198Sjmcp /* 0x1e0 */ 846*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 847*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 848*5198Sjmcp 849*5198Sjmcp /* 0x1f0 */ 850*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 851*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 852*5198Sjmcp }; 853*5198Sjmcp 854*5198Sjmcp static const table_t FPop1_table = { 855*5198Sjmcp .tbl_field = 13, 856*5198Sjmcp .tbl_len = 9, 857*5198Sjmcp .tbl_ovp = NULL, 858*5198Sjmcp .tbl_fmt = fmt_fpop1, 859*5198Sjmcp .tbl_inp = FPop1_table_def 860*5198Sjmcp }; 861*5198Sjmcp 862*5198Sjmcp static const inst_t FPop2_table_def[512] = { 863*5198Sjmcp /* 0x000 */ 864*5198Sjmcp INVALID, 865*5198Sjmcp INST("fmovs", V9|V9S, 866*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 867*5198Sjmcp INST("fmovd", V9|V9S, 868*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 869*5198Sjmcp INST("fmovq", V9|V9S, 870*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 871*5198Sjmcp 872*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 873*5198Sjmcp 874*5198Sjmcp /* 0x008 */ 875*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 876*5198Sjmcp 877*5198Sjmcp /* 0x010 */ 878*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 879*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 880*5198Sjmcp 881*5198Sjmcp /* 0x020 */ 882*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 883*5198Sjmcp 884*5198Sjmcp INST("fmovrsz", V9|V9S, 885*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)), 886*5198Sjmcp INST("fmovrdz", V9|V9S, 887*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 888*5198Sjmcp INST("fmovrqz", V9|V9S, 889*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 890*5198Sjmcp INVALID, 891*5198Sjmcp 892*5198Sjmcp /* 0x028 */ 893*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 894*5198Sjmcp 895*5198Sjmcp /* 0x030 */ 896*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 897*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 898*5198Sjmcp 899*5198Sjmcp /* 0x040 */ 900*5198Sjmcp INVALID, 901*5198Sjmcp INST("fmovs", V9|V9S, 902*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 903*5198Sjmcp INST("fmovd", V9|V9S, 904*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 905*5198Sjmcp INST("fmovq", V9|V9S, 906*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 907*5198Sjmcp 908*5198Sjmcp INST("fmovrslez", V9|V9S, 909*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)), 910*5198Sjmcp INST("fmovrdlez", V9|V9S, 911*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 912*5198Sjmcp INST("fmovrqlez", V9|V9S, 913*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 914*5198Sjmcp INVALID, 915*5198Sjmcp 916*5198Sjmcp /* 0x048 */ 917*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 918*5198Sjmcp 919*5198Sjmcp /* 0x050 */ 920*5198Sjmcp INVALID, 921*5198Sjmcp INST("fcmps", VALL, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_NONE) 922*5198Sjmcp |FLG_NOIMM), 923*5198Sjmcp INST("fcmpd", VALL, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_NONE) 924*5198Sjmcp |FLG_NOIMM), 925*5198Sjmcp INST("fcmpq", VALL, FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_P3(REG_NONE) 926*5198Sjmcp |FLG_NOIMM), 927*5198Sjmcp 928*5198Sjmcp INVALID, 929*5198Sjmcp INST("fcmpes", VALL, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_NONE) 930*5198Sjmcp |FLG_NOIMM), 931*5198Sjmcp INST("fcmped", VALL, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_NONE) 932*5198Sjmcp |FLG_NOIMM), 933*5198Sjmcp INST("fcmpeq", VALL, FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_P3(REG_NONE) 934*5198Sjmcp |FLG_NOIMM), 935*5198Sjmcp 936*5198Sjmcp /* 0x058 */ 937*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 938*5198Sjmcp 939*5198Sjmcp /* 0x060 */ 940*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 941*5198Sjmcp 942*5198Sjmcp INVALID, 943*5198Sjmcp INST("fmovrslz", V9|V9S, 944*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)), 945*5198Sjmcp INST("fmovrdlz", V9|V9S, 946*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 947*5198Sjmcp INST("fmovrqlz", V9|V9S, 948*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 949*5198Sjmcp 950*5198Sjmcp /* 0x068 */ 951*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 952*5198Sjmcp 953*5198Sjmcp /* 0x070 */ 954*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 955*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 956*5198Sjmcp 957*5198Sjmcp /* 0x080 */ 958*5198Sjmcp INVALID, 959*5198Sjmcp INST("fmovs", V9|V9S, 960*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 961*5198Sjmcp INST("fmovd", V9|V9S, 962*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 963*5198Sjmcp INST("fmovq", V9|V9S, 964*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 965*5198Sjmcp 966*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 967*5198Sjmcp 968*5198Sjmcp /* 0x088 */ 969*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 970*5198Sjmcp 971*5198Sjmcp /* 0x090 */ 972*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 973*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 974*5198Sjmcp 975*5198Sjmcp /* 0x0a0 */ 976*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 977*5198Sjmcp 978*5198Sjmcp INVALID, 979*5198Sjmcp INST("fmovrsnz", V9|V9S, 980*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)), 981*5198Sjmcp INST("fmovrdnz", V9|V9S, 982*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 983*5198Sjmcp INST("fmovrqnz", V9|V9S, 984*5198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 985*5198Sjmcp 986*5198Sjmcp /* 0x0a8 */ 987*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 988*5198Sjmcp 989*5198Sjmcp /* 0x0b0 */ 990*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 991*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 992*5198Sjmcp 993*5198Sjmcp /* 0x0c0 */ 994*5198Sjmcp INVALID, 995*5198Sjmcp INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)| 996*5198Sjmcp FLG_NOIMM|FLG_P3(REG_FP)), 997*5198Sjmcp INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)| 998*5198Sjmcp FLG_NOIMM|FLG_P3(REG_FPD)), 999*5198Sjmcp INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)| 1000*5198Sjmcp FLG_NOIMM|FLG_P3(REG_FPQ)), 1001*5198Sjmcp 1002*5198Sjmcp INVALID, 1003*5198Sjmcp INST("fmovrsgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 1004*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1005*5198Sjmcp INST("fmovrdgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 1006*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1007*5198Sjmcp INST("fmovrqgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 1008*5198Sjmcp FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 1009*5198Sjmcp 1010*5198Sjmcp /* 0x0c8 */ 1011*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1012*5198Sjmcp 1013*5198Sjmcp /* 0x0d0 */ 1014*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1015*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1016*5198Sjmcp 1017*5198Sjmcp /* 0x0e0 */ 1018*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 1019*5198Sjmcp 1020*5198Sjmcp INVALID, 1021*5198Sjmcp INST("fmovrsgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 1022*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1023*5198Sjmcp INST("fmovrdgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 1024*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1025*5198Sjmcp INST("fmovrqgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 1026*5198Sjmcp FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 1027*5198Sjmcp 1028*5198Sjmcp /* 0x0e8 */ 1029*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1030*5198Sjmcp 1031*5198Sjmcp /* 0x0f0 */ 1032*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1033*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1034*5198Sjmcp 1035*5198Sjmcp /* 0x100 */ 1036*5198Sjmcp INVALID, 1037*5198Sjmcp INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)| 1038*5198Sjmcp FLG_NOIMM|FLG_P3(REG_FP)), 1039*5198Sjmcp INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)| 1040*5198Sjmcp FLG_NOIMM|FLG_P3(REG_FPD)), 1041*5198Sjmcp INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)| 1042*5198Sjmcp FLG_NOIMM|FLG_P3(REG_FPQ)), 1043*5198Sjmcp 1044*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 1045*5198Sjmcp 1046*5198Sjmcp /* 0x108 */ 1047*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1048*5198Sjmcp 1049*5198Sjmcp /* 0x110 */ 1050*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1051*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1052*5198Sjmcp 1053*5198Sjmcp /* 0x120 */ 1054*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1055*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1056*5198Sjmcp 1057*5198Sjmcp /* 0x130 */ 1058*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1059*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1060*5198Sjmcp 1061*5198Sjmcp /* 0x140 */ 1062*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1063*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1064*5198Sjmcp 1065*5198Sjmcp /* 0x150 */ 1066*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1067*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1068*5198Sjmcp 1069*5198Sjmcp /* 0x160 */ 1070*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1071*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1072*5198Sjmcp 1073*5198Sjmcp /* 0x170 */ 1074*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1075*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1076*5198Sjmcp 1077*5198Sjmcp /* 0x180 */ 1078*5198Sjmcp INVALID, 1079*5198Sjmcp INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)| 1080*5198Sjmcp FLG_NOIMM|FLG_P3(REG_FP)), 1081*5198Sjmcp INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)| 1082*5198Sjmcp FLG_NOIMM|FLG_P3(REG_FPD)), 1083*5198Sjmcp INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)| 1084*5198Sjmcp FLG_NOIMM|FLG_P3(REG_FPQ)), 1085*5198Sjmcp 1086*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 1087*5198Sjmcp 1088*5198Sjmcp /* 0x188 */ 1089*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1090*5198Sjmcp 1091*5198Sjmcp /* 0x190 */ 1092*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1093*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1094*5198Sjmcp 1095*5198Sjmcp /* 0x1a0 */ 1096*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1097*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1098*5198Sjmcp 1099*5198Sjmcp /* 0x1b0 */ 1100*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1101*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1102*5198Sjmcp 1103*5198Sjmcp /* 0x1c0 */ 1104*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1105*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1106*5198Sjmcp 1107*5198Sjmcp /* 0x1d0 */ 1108*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1109*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1110*5198Sjmcp 1111*5198Sjmcp /* 0x1e0 */ 1112*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1113*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1114*5198Sjmcp 1115*5198Sjmcp /* 0x1f0 */ 1116*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1117*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 1118*5198Sjmcp }; 1119*5198Sjmcp 1120*5198Sjmcp static const table_t FPop2_table = { 1121*5198Sjmcp .tbl_field = 13, 1122*5198Sjmcp .tbl_len = 9, 1123*5198Sjmcp .tbl_ovp = NULL, 1124*5198Sjmcp .tbl_fmt = fmt_fpop2, 1125*5198Sjmcp .tbl_inp = FPop2_table_def 1126*5198Sjmcp }; 1127*5198Sjmcp 1128*5198Sjmcp static const inst_t vis_table_def[512] = { 1129*5198Sjmcp /* 0x000 */ 1130*5198Sjmcp INST("edge8cc", V9S, FLG_NOIMM), 1131*5198Sjmcp INST("edge8n", V9S, FLG_NOIMM), 1132*5198Sjmcp INST("edge8lcc", V9S, FLG_NOIMM), 1133*5198Sjmcp INST("edge8ln", V9S, FLG_NOIMM), 1134*5198Sjmcp 1135*5198Sjmcp INST("edge16cc", V9S, FLG_NOIMM), 1136*5198Sjmcp INST("edge16n", V9S, FLG_NOIMM), 1137*5198Sjmcp INST("edge16lcc", V9S, FLG_NOIMM), 1138*5198Sjmcp INST("edge16ln", V9S, FLG_NOIMM), 1139*5198Sjmcp 1140*5198Sjmcp /* 0x008 */ 1141*5198Sjmcp INST("edge32cc", V9S, FLG_NOIMM), 1142*5198Sjmcp INST("edge32n", V9S, FLG_NOIMM), 1143*5198Sjmcp INST("edge32lcc", V9S, FLG_NOIMM), 1144*5198Sjmcp INST("edge32ln", V9S, FLG_NOIMM), 1145*5198Sjmcp 1146*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 1147*5198Sjmcp 1148*5198Sjmcp /* 0x010 */ 1149*5198Sjmcp INST("array8", V9S, FLG_NOIMM), 1150*5198Sjmcp INVALID, 1151*5198Sjmcp INST("array16", V9S, FLG_NOIMM), 1152*5198Sjmcp INVALID, 1153*5198Sjmcp 1154*5198Sjmcp INST("array32", V9S, FLG_NOIMM), 1155*5198Sjmcp INVALID, 1156*5198Sjmcp INVALID, 1157*5198Sjmcp INVALID, 1158*5198Sjmcp 1159*5198Sjmcp /* 0x018 */ 1160*5198Sjmcp INST("alignaddr", V9S, FLG_NOIMM), 1161*5198Sjmcp INST("bmask", V9S, FLG_NOIMM), 1162*5198Sjmcp INST("alignaddrl", V9S, FLG_NOIMM), 1163*5198Sjmcp INVALID, 1164*5198Sjmcp 1165*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 1166*5198Sjmcp 1167*5198Sjmcp /* 0x020 */ 1168*5198Sjmcp INST("fcmple16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1169*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 1170*5198Sjmcp INVALID, 1171*5198Sjmcp INST("fcmpne16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1172*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 1173*5198Sjmcp INVALID, 1174*5198Sjmcp 1175*5198Sjmcp INST("fcmple32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1176*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 1177*5198Sjmcp INVALID, 1178*5198Sjmcp INST("fcmpne32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1179*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 1180*5198Sjmcp INVALID, 1181*5198Sjmcp 1182*5198Sjmcp /* 0x028 */ 1183*5198Sjmcp INST("fcmpgt16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1184*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 1185*5198Sjmcp INVALID, 1186*5198Sjmcp INST("fcmpeq16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1187*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 1188*5198Sjmcp INVALID, 1189*5198Sjmcp 1190*5198Sjmcp INST("fcmpgt32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1191*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 1192*5198Sjmcp INVALID, 1193*5198Sjmcp INST("fcmpeq32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1194*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 1195*5198Sjmcp INVALID, 1196*5198Sjmcp 1197*5198Sjmcp /* 0x030 */ 1198*5198Sjmcp INVALID, 1199*5198Sjmcp INST("fmul8x16", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1200*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1201*5198Sjmcp INVALID, 1202*5198Sjmcp INST("fmul8x16au", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1203*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 1204*5198Sjmcp 1205*5198Sjmcp INVALID, 1206*5198Sjmcp INST("fmul8x16al", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1207*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 1208*5198Sjmcp INST("fmul8sux16", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1209*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1210*5198Sjmcp INST("fmul8ulx16", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1211*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1212*5198Sjmcp 1213*5198Sjmcp /* 0x038 */ 1214*5198Sjmcp INST("fmuld8sux16", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1215*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 1216*5198Sjmcp INST("fmuld8ulx16", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1217*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 1218*5198Sjmcp INST("fpack32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1219*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1220*5198Sjmcp INST("fpack16", V9S, FLG_P1(REG_NONE)|FLG_NOIMM| 1221*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FP)), 1222*5198Sjmcp 1223*5198Sjmcp INVALID, 1224*5198Sjmcp INST("fpackfix", V9S, FLG_P1(REG_NONE)|FLG_NOIMM| 1225*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FP)), 1226*5198Sjmcp INST("pdist", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1227*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1228*5198Sjmcp INVALID, 1229*5198Sjmcp 1230*5198Sjmcp /* 0x040 */ 1231*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1232*5198Sjmcp 1233*5198Sjmcp /* 0x048 */ 1234*5198Sjmcp INST("faligndata", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1235*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1236*5198Sjmcp INVALID, 1237*5198Sjmcp INVALID, 1238*5198Sjmcp INST("fpmerge", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1239*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 1240*5198Sjmcp 1241*5198Sjmcp INST("bshuffle", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1242*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1243*5198Sjmcp INST("fexpand", V9S, FLG_P1(REG_NONE)|FLG_NOIMM| 1244*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 1245*5198Sjmcp INVALID, 1246*5198Sjmcp INVALID, 1247*5198Sjmcp 1248*5198Sjmcp /* 0x050 */ 1249*5198Sjmcp INST("fpadd16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1250*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1251*5198Sjmcp INST("fpadd16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1252*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1253*5198Sjmcp INST("fpadd32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1254*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1255*5198Sjmcp INST("fpadd32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1256*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1257*5198Sjmcp 1258*5198Sjmcp INST("fpsub16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1259*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1260*5198Sjmcp INST("fpsub16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1261*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1262*5198Sjmcp INST("fpsub32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1263*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1264*5198Sjmcp INST("fpsub32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1265*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1266*5198Sjmcp 1267*5198Sjmcp /* 0x058 */ 1268*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1269*5198Sjmcp 1270*5198Sjmcp /* 0x060 */ 1271*5198Sjmcp INST("fzero", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)| 1272*5198Sjmcp FLG_P3(REG_FPD)), 1273*5198Sjmcp INST("fzeros", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)| 1274*5198Sjmcp FLG_P3(REG_FP)), 1275*5198Sjmcp INST("fnor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1276*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1277*5198Sjmcp INST("fnors", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1278*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1279*5198Sjmcp 1280*5198Sjmcp INST("fandnot2", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1281*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1282*5198Sjmcp INST("fandnot2s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1283*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1284*5198Sjmcp INST("fnot2", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)| 1285*5198Sjmcp FLG_P3(REG_FPD)), 1286*5198Sjmcp INST("fnot2s", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)| 1287*5198Sjmcp FLG_P3(REG_FP)), 1288*5198Sjmcp 1289*5198Sjmcp /* 0x068 */ 1290*5198Sjmcp INST("fandnot1", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1291*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1292*5198Sjmcp INST("fandnot1s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1293*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1294*5198Sjmcp INST("fnot1", V9S, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)| 1295*5198Sjmcp FLG_P3(REG_FPD)), 1296*5198Sjmcp INST("fnot1s", V9S, FLG_P1(REG_FP)|FLG_P2(REG_NONE)| 1297*5198Sjmcp FLG_P3(REG_FP)), 1298*5198Sjmcp 1299*5198Sjmcp INST("fxor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1300*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1301*5198Sjmcp INST("fxors", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1302*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1303*5198Sjmcp INST("fnand", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1304*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1305*5198Sjmcp INST("fnands", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1306*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1307*5198Sjmcp 1308*5198Sjmcp /* 0x070 */ 1309*5198Sjmcp INST("fand", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1310*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1311*5198Sjmcp INST("fands", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1312*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1313*5198Sjmcp INST("fxnor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1314*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1315*5198Sjmcp INST("fxnors", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1316*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1317*5198Sjmcp 1318*5198Sjmcp INST("fsrc1", V9S, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)| 1319*5198Sjmcp FLG_P3(REG_FPD)), 1320*5198Sjmcp INST("fsrc1s", V9S, FLG_P1(REG_FP)|FLG_P2(REG_NONE)| 1321*5198Sjmcp FLG_P3(REG_FP)), 1322*5198Sjmcp INST("fornot2", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1323*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1324*5198Sjmcp INST("fornot2s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1325*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1326*5198Sjmcp 1327*5198Sjmcp /* 0x078 */ 1328*5198Sjmcp INST("fsrc2", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)| 1329*5198Sjmcp FLG_P3(REG_FPD)), 1330*5198Sjmcp INST("fsrc2s", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)| 1331*5198Sjmcp FLG_P3(REG_FP)), 1332*5198Sjmcp INST("fornot1", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1333*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1334*5198Sjmcp INST("fornot1s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1335*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1336*5198Sjmcp 1337*5198Sjmcp INST("for", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 1338*5198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 1339*5198Sjmcp INST("fors", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 1340*5198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 1341*5198Sjmcp INST("fone", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)| 1342*5198Sjmcp FLG_P3(REG_FPD)), 1343*5198Sjmcp INST("fones", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)| 1344*5198Sjmcp FLG_P3(REG_FP)), 1345*5198Sjmcp 1346*5198Sjmcp /* 0x080 */ 1347*5198Sjmcp INST("shutdown", V9S, 0), 1348*5198Sjmcp INST("siam", V9S, 0), 1349*5198Sjmcp INVALID, 1350*5198Sjmcp INVALID, 1351*5198Sjmcp 1352*5198Sjmcp INVALID, INVALID, INVALID, INVALID, 1353*5198Sjmcp 1354*5198Sjmcp /* 0x088 */ 1355*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1356*5198Sjmcp 1357*5198Sjmcp /* 0x090 */ 1358*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1359*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1360*5198Sjmcp 1361*5198Sjmcp /* 0x0a0 */ 1362*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1363*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1364*5198Sjmcp 1365*5198Sjmcp /* 0x0b0 */ 1366*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1367*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1368*5198Sjmcp 1369*5198Sjmcp /* 0x0c0 */ 1370*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1371*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1372*5198Sjmcp 1373*5198Sjmcp /* 0x0d0 */ 1374*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1375*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1376*5198Sjmcp 1377*5198Sjmcp /* 0x0e0 */ 1378*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1379*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1380*5198Sjmcp 1381*5198Sjmcp /* 0x0f0 */ 1382*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1383*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1384*5198Sjmcp 1385*5198Sjmcp /* 0x100 */ 1386*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1387*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1388*5198Sjmcp 1389*5198Sjmcp /* 0x110 */ 1390*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1391*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1392*5198Sjmcp 1393*5198Sjmcp /* 0x120 */ 1394*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1395*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1396*5198Sjmcp 1397*5198Sjmcp /* 0x130 */ 1398*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1399*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1400*5198Sjmcp 1401*5198Sjmcp /* 0x140 */ 1402*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1403*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1404*5198Sjmcp 1405*5198Sjmcp /* 0x150 */ 1406*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1407*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1408*5198Sjmcp 1409*5198Sjmcp /* 0x160 */ 1410*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1411*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1412*5198Sjmcp 1413*5198Sjmcp /* 0x170 */ 1414*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1415*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1416*5198Sjmcp 1417*5198Sjmcp /* 0x180 */ 1418*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1419*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1420*5198Sjmcp 1421*5198Sjmcp /* 0x190 */ 1422*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1423*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1424*5198Sjmcp 1425*5198Sjmcp /* 0x1a0 */ 1426*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1427*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1428*5198Sjmcp 1429*5198Sjmcp /* 0x1b0 */ 1430*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1431*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1432*5198Sjmcp 1433*5198Sjmcp /* 0x1c0 */ 1434*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1435*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1436*5198Sjmcp 1437*5198Sjmcp /* 0x1d0 */ 1438*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1439*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1440*5198Sjmcp 1441*5198Sjmcp /* 0x1e0 */ 1442*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1443*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1444*5198Sjmcp 1445*5198Sjmcp /* 0x1f0 */ 1446*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 1447*5198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 1448*5198Sjmcp }; 1449*5198Sjmcp 1450*5198Sjmcp static const table_t vis_table = { 1451*5198Sjmcp .tbl_field = 13, 1452*5198Sjmcp .tbl_len = 9, 1453*5198Sjmcp .tbl_ovp = NULL, 1454*5198Sjmcp .tbl_fmt = fmt_vis, 1455*5198Sjmcp .tbl_inp = vis_table_def 1456*5198Sjmcp }; 1457*5198Sjmcp 1458*5198Sjmcp static const inst_t fused_table_def[16] = { 1459*5198Sjmcp /* 0x0 */ 1460*5198Sjmcp INVALID, 1461*5198Sjmcp INST("fmadds", V9O, FLG_P1(REG_FP)), 1462*5198Sjmcp INST("fmaddd", V9O, FLG_P1(REG_FPD)), 1463*5198Sjmcp INVALID, 1464*5198Sjmcp 1465*5198Sjmcp /* 0x4 */ 1466*5198Sjmcp INVALID, 1467*5198Sjmcp INST("fmsubs", V9O, FLG_P1(REG_FP)), 1468*5198Sjmcp INST("fmsubd", V9O, FLG_P1(REG_FPD)), 1469*5198Sjmcp INVALID, 1470*5198Sjmcp 1471*5198Sjmcp /* 0x8 */ 1472*5198Sjmcp INVALID, 1473*5198Sjmcp INST("fnmsubs", V9O, FLG_P1(REG_FP)), 1474*5198Sjmcp INST("fnmsubd", V9O, FLG_P1(REG_FPD)), 1475*5198Sjmcp INVALID, 1476*5198Sjmcp 1477*5198Sjmcp /* 0xc */ 1478*5198Sjmcp INVALID, 1479*5198Sjmcp INST("fnmadds", V9O, FLG_P1(REG_FP)), 1480*5198Sjmcp INST("fnmaddd", V9O, FLG_P1(REG_FPD)), 1481*5198Sjmcp INVALID 1482*5198Sjmcp }; 1483*5198Sjmcp 1484*5198Sjmcp static const table_t fused_table = { 1485*5198Sjmcp .tbl_field = 5, 1486*5198Sjmcp .tbl_len = 4, 1487*5198Sjmcp .tbl_ovp = NULL, 1488*5198Sjmcp .tbl_fmt = fmt_fused, 1489*5198Sjmcp .tbl_inp = fused_table_def 1490*5198Sjmcp }; 1491*5198Sjmcp 1492*5198Sjmcp static const inst_t alu_table_def[64] = { 1493*5198Sjmcp /* 0x00 */ 1494*5198Sjmcp INST("add", VALL, 0), 1495*5198Sjmcp INST("and", VALL, 0), 1496*5198Sjmcp INST("or", VALL, 0), 1497*5198Sjmcp INST("xor", VALL, 0), 1498*5198Sjmcp 1499*5198Sjmcp INST("sub", VALL, 0), 1500*5198Sjmcp INST("andn", VALL, 0), 1501*5198Sjmcp INST("orn", VALL, 0), 1502*5198Sjmcp INST("xnor", VALL, 0), 1503*5198Sjmcp 1504*5198Sjmcp /* 0x08 */ 1505*5198Sjmcp INST("addx", VALL, 0), 1506*5198Sjmcp INST("mulx", V9|V9S, 0), 1507*5198Sjmcp INST("umul", VALL, 0), 1508*5198Sjmcp INST("smul", VALL, 0), 1509*5198Sjmcp 1510*5198Sjmcp INST("subx", VALL, 0), 1511*5198Sjmcp INST("udivx", V9|V9S, 0), 1512*5198Sjmcp INST("udiv", VALL, 0), 1513*5198Sjmcp INST("sdiv", VALL, 0), 1514*5198Sjmcp 1515*5198Sjmcp /* 0x10 */ 1516*5198Sjmcp INST("addcc", VALL, 0), 1517*5198Sjmcp INST("andcc", VALL, 0), 1518*5198Sjmcp INST("orcc", VALL, 0), 1519*5198Sjmcp INST("xorcc", VALL, 0), 1520*5198Sjmcp 1521*5198Sjmcp INST("subcc", VALL, 0), 1522*5198Sjmcp INST("andncc", VALL, 0), 1523*5198Sjmcp INST("orncc", VALL, 0), 1524*5198Sjmcp INST("xnorcc", VALL, 0), 1525*5198Sjmcp 1526*5198Sjmcp /* 0x18 */ 1527*5198Sjmcp INST("addxcc", VALL, 0), 1528*5198Sjmcp INVALID, 1529*5198Sjmcp INST("umulcc", VALL, 0), 1530*5198Sjmcp INST("smulcc", VALL, 0), 1531*5198Sjmcp 1532*5198Sjmcp INST("subxcc", VALL, 0), 1533*5198Sjmcp INVALID, 1534*5198Sjmcp INST("udivcc", VALL, 0), 1535*5198Sjmcp INST("sdivcc", VALL, 0), 1536*5198Sjmcp 1537*5198Sjmcp /* 0x20 */ 1538*5198Sjmcp INST("taddcc", VALL, 0), 1539*5198Sjmcp INST("tsubcc", VALL, 0), 1540*5198Sjmcp INST("taddcctv", VALL, 0), 1541*5198Sjmcp INST("tsubcctv", VALL, 0), 1542*5198Sjmcp 1543*5198Sjmcp INST("mulscc", VALL, 0), 1544*5198Sjmcp INST("sll", VALL, 0), 1545*5198Sjmcp INST("srl", VALL, 0), 1546*5198Sjmcp INST("sra", VALL, 0), 1547*5198Sjmcp 1548*5198Sjmcp /* 0x28 */ 1549*5198Sjmcp INST("rd", VALL, 0), 1550*5198Sjmcp INST("rd", V8, 0), 1551*5198Sjmcp INST("rd", V8, 0), 1552*5198Sjmcp INST("rd", V8, 0), 1553*5198Sjmcp 1554*5198Sjmcp TABLE(movcc_table, V9|V9S), 1555*5198Sjmcp INST("sdivx", V9|V9S, 0), 1556*5198Sjmcp INST("popc", V9|V9S, 1557*5198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_INT)|FLG_P3(REG_INT)), 1558*5198Sjmcp TABLE(movr_table, V9|V9S), 1559*5198Sjmcp 1560*5198Sjmcp /* 0x30 */ 1561*5198Sjmcp INST("wr", VALL, 0), 1562*5198Sjmcp INST("wr", V8, 0), 1563*5198Sjmcp INST("wr", V8, 0), 1564*5198Sjmcp INST("wr", V8, 0), 1565*5198Sjmcp 1566*5198Sjmcp TABLE(FPop1_table, VALL), 1567*5198Sjmcp TABLE(FPop2_table, VALL), 1568*5198Sjmcp INST("cpop1", V8, 0), 1569*5198Sjmcp INST("cpop2", V8, 0), /* impdep2 */ 1570*5198Sjmcp 1571*5198Sjmcp /* 0x38 */ 1572*5198Sjmcp INST("jmpl", VALL, 0), 1573*5198Sjmcp INST("rett", VALL, 0), 1574*5198Sjmcp TABLE(Tcc_table, VALL), 1575*5198Sjmcp INST("flush", VALL, 0), 1576*5198Sjmcp 1577*5198Sjmcp INST("save", VALL, 0), 1578*5198Sjmcp INST("restore", VALL, 0), 1579*5198Sjmcp TABLE(tr_table, V9|V9S), 1580*5198Sjmcp INVALID 1581*5198Sjmcp }; 1582*5198Sjmcp 1583*5198Sjmcp static const overlay_t alu_ov_table[] = { 1584*5198Sjmcp OVERLAY(0x08, INST("addc", V9|V9S, 0)), 1585*5198Sjmcp OVERLAY(0x0c, INST("subc", V9|V9S, 0)), 1586*5198Sjmcp OVERLAY(0x18, INST("addccc", V9|V9S, 0)), 1587*5198Sjmcp OVERLAY(0x1c, INST("subccc", V9|V9S, 0)), 1588*5198Sjmcp 1589*5198Sjmcp OVERLAY(0x29, INVALIDA(V9|V9S)), 1590*5198Sjmcp OVERLAY(0x2a, INST("rdpr", V9|V9S, 0)), 1591*5198Sjmcp OVERLAY(0x2b, INST("flushw", V9|V9S, 0)), 1592*5198Sjmcp OVERLAY(0x31, TABLE(rwin_table, V9|V9S)), 1593*5198Sjmcp 1594*5198Sjmcp OVERLAY(0x32, INST("wrpr", V9|V9S, 0)), 1595*5198Sjmcp OVERLAY(0x33, INVALIDA(V9|V9S)), 1596*5198Sjmcp OVERLAY(0x36, TABLE(vis_table, V9S)), 1597*5198Sjmcp OVERLAY(0x37, TABLE(fused_table, V9O)), 1598*5198Sjmcp OVERLAY(0x39, INST("return", VALL, 0)), 1599*5198Sjmcp 1600*5198Sjmcp OVERLAY_END 1601*5198Sjmcp }; 1602*5198Sjmcp 1603*5198Sjmcp static const table_t alu_table = { 1604*5198Sjmcp .tbl_field = 24, 1605*5198Sjmcp .tbl_len = 6, 1606*5198Sjmcp .tbl_ovp = alu_ov_table, 1607*5198Sjmcp .tbl_fmt = fmt_alu, 1608*5198Sjmcp .tbl_inp = alu_table_def 1609*5198Sjmcp }; 1610*5198Sjmcp 1611*5198Sjmcp static const inst_t initial_table_def[4] = { 1612*5198Sjmcp TABLE(branch_table, VALL), 1613*5198Sjmcp INST("call", VALL, 0), 1614*5198Sjmcp TABLE(alu_table, VALL), 1615*5198Sjmcp TABLE(ls_table, VALL) 1616*5198Sjmcp }; 1617*5198Sjmcp 1618*5198Sjmcp /* NOTE: this must not be made static */ 1619*5198Sjmcp const table_t initial_table = { 1620*5198Sjmcp .tbl_field = 31, 1621*5198Sjmcp .tbl_len = 2, 1622*5198Sjmcp .tbl_ovp = NULL, 1623*5198Sjmcp .tbl_fmt = fmt_call, 1624*5198Sjmcp .tbl_inp = initial_table_def 1625*5198Sjmcp }; 1626