15198Sjmcp /* 25198Sjmcp * CDDL HEADER START 35198Sjmcp * 45198Sjmcp * The contents of this file are subject to the terms of the 55198Sjmcp * Common Development and Distribution License (the "License"). 65198Sjmcp * You may not use this file except in compliance with the License. 75198Sjmcp * 85198Sjmcp * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 95198Sjmcp * or http://www.opensolaris.org/os/licensing. 105198Sjmcp * See the License for the specific language governing permissions 115198Sjmcp * and limitations under the License. 125198Sjmcp * 135198Sjmcp * When distributing Covered Code, include this CDDL HEADER in each 145198Sjmcp * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 155198Sjmcp * If applicable, add the following below this CDDL HEADER, with the 165198Sjmcp * fields enclosed by brackets "[]" replaced with your own identifying 175198Sjmcp * information: Portions Copyright [yyyy] [name of copyright owner] 185198Sjmcp * 195198Sjmcp * CDDL HEADER END 205198Sjmcp */ 215198Sjmcp 225198Sjmcp /* 23*10271SJason.Beloro@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 245198Sjmcp * Use is subject to license terms. 255198Sjmcp */ 265198Sjmcp 275198Sjmcp /* 28*10271SJason.Beloro@Sun.COM * Copyright 2009 Jason King. All rights reserved. 295198Sjmcp * Use is subject to license terms. 305198Sjmcp */ 315198Sjmcp 325198Sjmcp #include "libdisasm.h" 335198Sjmcp #include "libdisasm_impl.h" 345198Sjmcp #include "dis_sparc.h" 355198Sjmcp #include "dis_sparc_fmt.h" 365198Sjmcp 375198Sjmcp #define INVALID \ 385198Sjmcp { \ 395198Sjmcp .in_type = INST_NONE, \ 405198Sjmcp .in_arch = 0, \ 415198Sjmcp .in_data = { \ 425198Sjmcp .in_tbl = NULL \ 435198Sjmcp } \ 445198Sjmcp } 455198Sjmcp 465198Sjmcp #define INVALIDA(_arch) \ 475198Sjmcp { \ 485198Sjmcp .in_type = INST_NONE, \ 495198Sjmcp .in_arch = _arch, \ 505198Sjmcp .in_data = { \ 515198Sjmcp .in_tbl = NULL \ 525198Sjmcp } \ 535198Sjmcp } 545198Sjmcp 555198Sjmcp #define INST(_name, _arch, _flags) \ 565198Sjmcp { \ 575198Sjmcp .in_type = INST_DEF, \ 585198Sjmcp .in_arch = _arch, \ 595198Sjmcp .in_data = { \ 605198Sjmcp .in_def = { \ 615198Sjmcp .in_name = _name, \ 625198Sjmcp .in_flags = _flags \ 635198Sjmcp } \ 645198Sjmcp } \ 655198Sjmcp } 665198Sjmcp 675198Sjmcp #define TABLE(_name, _arch) \ 685198Sjmcp { \ 695198Sjmcp .in_type = INST_TBL, \ 705198Sjmcp .in_arch = _arch, \ 715198Sjmcp .in_data = { \ 725198Sjmcp .in_tbl = &_name \ 735198Sjmcp } \ 745198Sjmcp } 755198Sjmcp 765198Sjmcp #define OVERLAY(_idx, _inst) \ 775198Sjmcp { \ 785198Sjmcp .ov_idx = _idx, \ 795198Sjmcp .ov_inst = _inst \ 805198Sjmcp } 815198Sjmcp 825198Sjmcp #define OVERLAY_END { .ov_idx = -1, .ov_inst = INVALID } 835198Sjmcp 845198Sjmcp #define V8 DIS_SPARC_V8 855198Sjmcp #define V9 DIS_SPARC_V9 865198Sjmcp #define V9S DIS_SPARC_V9_SGI 875198Sjmcp #define V9O DIS_SPARC_V9_OPL 885198Sjmcp #define VALL V8|V9|V9S|V9O 895198Sjmcp 905198Sjmcp /* branches */ 915198Sjmcp static const inst_t BPcc_table_def[16] = { 925198Sjmcp INST("bn", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 935198Sjmcp INST("be", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 945198Sjmcp INST("ble", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 955198Sjmcp INST("bl", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 965198Sjmcp 975198Sjmcp INST("bleu", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 985198Sjmcp INST("bcs", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 995198Sjmcp INST("bneg", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 1005198Sjmcp INST("bvs", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 1015198Sjmcp 1025198Sjmcp INST("ba", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 1035198Sjmcp INST("bne", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 1045198Sjmcp INST("bg", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 1055198Sjmcp INST("bge", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 1065198Sjmcp 1075198Sjmcp INST("bgu", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 1085198Sjmcp INST("bcc", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 1095198Sjmcp INST("bpos", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)), 1105198Sjmcp INST("bvc", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)) 1115198Sjmcp }; 1125198Sjmcp 1137718SJason.Beloro@Sun.COM 1145198Sjmcp static const table_t BPcc_table = { 1155198Sjmcp .tbl_field = 28, 1165198Sjmcp .tbl_len = 4, 1175198Sjmcp .tbl_ovp = NULL, 1185198Sjmcp .tbl_fmt = fmt_branch, 1195198Sjmcp .tbl_inp = BPcc_table_def 1205198Sjmcp }; 1215198Sjmcp 1225198Sjmcp static const inst_t Bicc_table_def[16] = { 1235198Sjmcp INST("bn", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1245198Sjmcp INST("be", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1255198Sjmcp INST("ble", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1265198Sjmcp INST("bl", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1275198Sjmcp 1285198Sjmcp INST("bleu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1295198Sjmcp /* docs say it's 'bcs' but disassembler calles it synonym 'blu' */ 1305198Sjmcp INST("blu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1315198Sjmcp INST("bneg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1325198Sjmcp INST("bvs", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1335198Sjmcp 1345198Sjmcp INST("ba", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1355198Sjmcp INST("bne", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1365198Sjmcp INST("bg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1375198Sjmcp INST("bge", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1385198Sjmcp 1395198Sjmcp INST("bgu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1405198Sjmcp /* 1415198Sjmcp * while the docs say it's officially 'bcc', existing disassembler 1425198Sjmcp * uses the synonym bgeu 1435198Sjmcp */ 1445198Sjmcp INST("bgeu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1455198Sjmcp INST("bpos", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 1465198Sjmcp INST("bvc", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)) 1475198Sjmcp }; 1485198Sjmcp 1495198Sjmcp static const table_t Bicc_table = { 1505198Sjmcp .tbl_field = 28, 1515198Sjmcp .tbl_len = 4, 1525198Sjmcp .tbl_ovp = NULL, 1535198Sjmcp .tbl_fmt = fmt_branch, 1545198Sjmcp .tbl_inp = Bicc_table_def 1555198Sjmcp }; 1565198Sjmcp 1575198Sjmcp static const inst_t BPr_table_def[16] = { 158*10271SJason.Beloro@Sun.COM INVALID, 1595198Sjmcp INST("brz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 1605198Sjmcp INST("brlez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 1615198Sjmcp INST("brlz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 1625198Sjmcp 163*10271SJason.Beloro@Sun.COM INVALID, 1645198Sjmcp INST("brnz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 1655198Sjmcp INST("brgz", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 1665198Sjmcp INST("brgez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)), 1675198Sjmcp 1685198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 1695198Sjmcp }; 1705198Sjmcp 1715198Sjmcp static const table_t BPr_table = { 1725198Sjmcp .tbl_field = 28, 1735198Sjmcp .tbl_len = 4, 1745198Sjmcp .tbl_ovp = NULL, 1755198Sjmcp .tbl_fmt = fmt_branch, 1765198Sjmcp .tbl_inp = BPr_table_def 1775198Sjmcp }; 1785198Sjmcp 1795198Sjmcp static const inst_t FBPfcc_table_def[16] = { 1805198Sjmcp INST("fbn", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1815198Sjmcp INST("fbne", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1825198Sjmcp INST("fblg", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1835198Sjmcp INST("fbul", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1845198Sjmcp 1855198Sjmcp INST("fbl", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1865198Sjmcp INST("fbug", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1875198Sjmcp INST("fbg", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1885198Sjmcp INST("fbu", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1895198Sjmcp 1905198Sjmcp INST("fba", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1915198Sjmcp INST("fbe", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1925198Sjmcp INST("fbue", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1935198Sjmcp INST("fbge", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1945198Sjmcp 1955198Sjmcp INST("fbuge", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1965198Sjmcp INST("fble", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1975198Sjmcp INST("fbule", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)), 1985198Sjmcp INST("fbo", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)) 1995198Sjmcp }; 2005198Sjmcp 2015198Sjmcp static const table_t FBPfcc_table = { 2025198Sjmcp .tbl_field = 28, 2035198Sjmcp .tbl_len = 4, 2045198Sjmcp .tbl_ovp = NULL, 2055198Sjmcp .tbl_fmt = fmt_branch, 2065198Sjmcp .tbl_inp = FBPfcc_table_def 2075198Sjmcp }; 2085198Sjmcp 2095198Sjmcp static const inst_t FBfcc_table_def[16] = { 2105198Sjmcp INST("fbn", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2115198Sjmcp INST("fbne", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2125198Sjmcp INST("fblg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2135198Sjmcp INST("fbul", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2145198Sjmcp 2155198Sjmcp INST("fbl", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2165198Sjmcp INST("fbug", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2175198Sjmcp INST("fbg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2185198Sjmcp INST("fbu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2195198Sjmcp 2205198Sjmcp INST("fba", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2215198Sjmcp INST("fbe", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2225198Sjmcp INST("fbue", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2235198Sjmcp INST("fbge", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2245198Sjmcp 2255198Sjmcp INST("fbuge", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2265198Sjmcp INST("fble", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2275198Sjmcp INST("fbule", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2285198Sjmcp INST("fbo", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)) 2295198Sjmcp }; 2305198Sjmcp 2315198Sjmcp static const table_t FBfcc_table = { 2325198Sjmcp .tbl_field = 28, 2335198Sjmcp .tbl_len = 4, 2345198Sjmcp .tbl_ovp = NULL, 2355198Sjmcp .tbl_fmt = fmt_branch, 2365198Sjmcp .tbl_inp = FBfcc_table_def 2375198Sjmcp }; 2385198Sjmcp 2395198Sjmcp static const inst_t CBccc_table_def[16] = { 2405198Sjmcp INST("cbn", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2415198Sjmcp INST("cb123", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2425198Sjmcp INST("cb12", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2435198Sjmcp INST("cb13", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2445198Sjmcp INST("cb1", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2455198Sjmcp INST("cb23", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2465198Sjmcp INST("cb2", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2475198Sjmcp INST("cb3", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2485198Sjmcp INST("cba", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2495198Sjmcp INST("cb0", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2505198Sjmcp INST("cb03", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2515198Sjmcp INST("cb02", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2525198Sjmcp INST("cb023", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2535198Sjmcp INST("cb01", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2545198Sjmcp INST("cb013", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)), 2555198Sjmcp INST("cb012", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)) 2565198Sjmcp }; 2575198Sjmcp 2585198Sjmcp static const table_t CBccc_table = { 2595198Sjmcp .tbl_field = 28, 2605198Sjmcp .tbl_len = 4, 2615198Sjmcp .tbl_ovp = NULL, 2625198Sjmcp .tbl_fmt = fmt_branch, 2635198Sjmcp .tbl_inp = CBccc_table_def 2645198Sjmcp }; 2655198Sjmcp 2665198Sjmcp static const inst_t branch_table_def[8] = { 2675198Sjmcp INST("unimp", VALL, 0), 2685198Sjmcp TABLE(BPcc_table, V9|V9S), 2695198Sjmcp TABLE(Bicc_table, VALL), 2705198Sjmcp TABLE(BPr_table, V9|V9S), 2715198Sjmcp 2725198Sjmcp INST("sethi", VALL, 0), 2735198Sjmcp TABLE(FBPfcc_table, V9|V9S), 2745198Sjmcp TABLE(FBfcc_table, VALL), 2755198Sjmcp TABLE(CBccc_table, V8) 2765198Sjmcp }; 2775198Sjmcp 2785198Sjmcp static const overlay_t branch_ov_table[] = { 2795198Sjmcp OVERLAY(0x00, INST("illtrap", V9|V9S, 0)), 2805198Sjmcp OVERLAY_END 2815198Sjmcp }; 2825198Sjmcp 2835198Sjmcp static const table_t branch_table = { 2845198Sjmcp .tbl_field = 24, 2855198Sjmcp .tbl_len = 3, 2865198Sjmcp .tbl_ovp = branch_ov_table, 2875198Sjmcp .tbl_fmt = fmt_sethi, 2885198Sjmcp .tbl_inp = branch_table_def 2895198Sjmcp }; 2905198Sjmcp 2915198Sjmcp /* load/stores */ 2925198Sjmcp static const inst_t ls_table_def[64] = { 2935198Sjmcp /* 0x00 */ 2945198Sjmcp INST("ld", VALL, 0), 2955198Sjmcp INST("ldub", VALL, 0), 2965198Sjmcp INST("lduh", VALL, 0), 2975198Sjmcp INST("ldd", VALL, 0), 2985198Sjmcp 2995198Sjmcp INST("st", VALL, FLG_STORE), 3005198Sjmcp INST("stb", VALL, FLG_STORE), 3015198Sjmcp INST("sth", VALL, FLG_STORE), 3025198Sjmcp INST("std", VALL, FLG_STORE), 3035198Sjmcp 3045198Sjmcp /* 0x08 */ 3055198Sjmcp INST("ldsw", V9|V9S, 0), 3065198Sjmcp INST("ldsb", VALL, 0), 3075198Sjmcp INST("ldsh", VALL, 0), 3085198Sjmcp INST("ldx", V9|V9S, 0), 3095198Sjmcp 3105198Sjmcp INVALID, 3115198Sjmcp INST("ldstub", VALL, 0), 3125198Sjmcp INST("stx", V9|V9S, FLG_STORE), 3135198Sjmcp INST("swap", VALL, 0), 3145198Sjmcp 3155198Sjmcp /* 0x10 */ 3165198Sjmcp INST("lda", VALL, FLG_ASI), 3175198Sjmcp INST("lduba", VALL, FLG_ASI), 3185198Sjmcp INST("lduha", VALL, FLG_ASI), 3195198Sjmcp INST("ldda", VALL, FLG_ASI), 3205198Sjmcp 3215198Sjmcp INST("sta", VALL, FLG_STORE|FLG_ASI), 3225198Sjmcp INST("stba", VALL, FLG_STORE|FLG_ASI), 3235198Sjmcp INST("stha", VALL, FLG_STORE|FLG_ASI), 3245198Sjmcp INST("stda", VALL, FLG_STORE|FLG_ASI), 3255198Sjmcp 3265198Sjmcp /* 0x18 */ 3275198Sjmcp INST("ldswa", V9|V9S, FLG_ASI), 3285198Sjmcp INST("ldsba", VALL, FLG_ASI), 3295198Sjmcp INST("ldsha", VALL, FLG_ASI), 3305198Sjmcp INST("ldxa", V9|V9S, FLG_ASI), 3315198Sjmcp 3325198Sjmcp INVALID, 3335198Sjmcp INST("ldstuba", VALL, FLG_ASI), 3345198Sjmcp INST("stxa", V9|V9S, FLG_STORE|FLG_ASI), 3355198Sjmcp INST("swapa", VALL, FLG_ASI), 3365198Sjmcp 3375198Sjmcp /* 0x20 */ 3385198Sjmcp INST("ld", VALL, FLG_RD(REG_FP)), 3395198Sjmcp /* ldx on v9 */ 3405198Sjmcp INST("ld", VALL, FLG_RD(REG_FSR)), 3415198Sjmcp INST("ldq", V9|V9S, FLG_RD(REG_FPQ)), 3425198Sjmcp INST("ldd", VALL, FLG_RD(REG_FPD)), 3435198Sjmcp 3445198Sjmcp INST("st", VALL, FLG_STORE|FLG_RD(REG_FP)), 3455198Sjmcp /* stx on v9 */ 3465198Sjmcp INST("st", VALL, FLG_STORE|FLG_RD(REG_FSR)), 3475198Sjmcp INST("stq", VALL, FLG_STORE|FLG_RD(REG_FPQ)), 3485198Sjmcp INST("std", VALL, FLG_STORE|FLG_RD(REG_FPD)), 3495198Sjmcp 3505198Sjmcp /* 0x28 */ 3515198Sjmcp INVALID, 3525198Sjmcp INVALID, 3535198Sjmcp INVALID, 3545198Sjmcp INVALID, 3555198Sjmcp 3565198Sjmcp INVALID, 3575198Sjmcp INST("prefetch", V9|V9S, 0), 3585198Sjmcp INVALID, 3595198Sjmcp INVALID, 3605198Sjmcp 3615198Sjmcp /* 0x30 */ 3625198Sjmcp INST("ld", V8, FLG_RD(REG_CP)), 3635198Sjmcp INST("ld", V8, FLG_RD(REG_CSR)), 3645198Sjmcp INST("ldqa", V9|V9S, FLG_ASI|FLG_RD(REG_FPQ)), 3655198Sjmcp INST("ldd", V8, FLG_RD(REG_CP)), 3665198Sjmcp 3675198Sjmcp INST("st", V8, FLG_STORE|FLG_RD(REG_CP)), 3685198Sjmcp INST("st", V8, FLG_STORE|FLG_RD(REG_CSR)), 3695198Sjmcp INST("std", V8, FLG_STORE|FLG_RD(REG_CQ)), 3705198Sjmcp INST("std", V8, FLG_STORE|FLG_RD(REG_CP)), 3715198Sjmcp 3725198Sjmcp /* 0x38 */ 3735198Sjmcp INVALID, 3745198Sjmcp INVALID, 3755198Sjmcp INVALID, 3765198Sjmcp INVALID, 3775198Sjmcp 3785198Sjmcp INST("casa", V9|V9S, 0), 3795198Sjmcp INST("prefetcha", V9|V9S, FLG_STORE|FLG_ASI), 3805198Sjmcp INST("casxa", V9|V9S, 0), 3815198Sjmcp INVALID 3825198Sjmcp }; 3835198Sjmcp 3845198Sjmcp static const overlay_t ld_ov_table[] = { 3855198Sjmcp OVERLAY(0x10, INST("lduwa", V9|V9S, FLG_ASI|FLG_RD(REG_INT))), 3865198Sjmcp OVERLAY(0x14, INST("stwa", V9|V9S, 3875198Sjmcp FLG_STORE|FLG_ASI|FLG_RD(REG_INT))), 3885198Sjmcp OVERLAY(0x30, INST("lda", V9|V9S, FLG_ASI|FLG_RD(REG_FP))), 3895198Sjmcp OVERLAY(0x33, INST("ldda", V9|V9S, FLG_ASI|FLG_RD(REG_FPD))), 3905198Sjmcp 3915198Sjmcp OVERLAY(0x34, INST("sta", V9|V9S, FLG_STORE|FLG_ASI|FLG_RD(REG_FP))), 3925198Sjmcp OVERLAY(0x36, INST("stqa", V9|V9S, 3935198Sjmcp FLG_STORE|FLG_ASI|FLG_RD(REG_FPQ))), 3945198Sjmcp OVERLAY(0x37, INST("stda", V9|V9S, 3955198Sjmcp FLG_STORE|FLG_ASI|FLG_RD(REG_FPD))), 3965198Sjmcp 3975198Sjmcp OVERLAY_END 3985198Sjmcp }; 3995198Sjmcp 4005198Sjmcp static const table_t ls_table = { 4015198Sjmcp .tbl_field = 24, 4025198Sjmcp .tbl_len = 6, 4035198Sjmcp .tbl_ovp = ld_ov_table, 4045198Sjmcp .tbl_fmt = fmt_ls, 4055198Sjmcp .tbl_inp = ls_table_def 4065198Sjmcp }; 4075198Sjmcp 4087718SJason.Beloro@Sun.COM 4095198Sjmcp /* ALU operations */ 4105198Sjmcp static const inst_t Tcc_table_def[16] = { 4115198Sjmcp INST("tn", VALL, 0), 4125198Sjmcp INST("te", VALL, 0), 4135198Sjmcp INST("tle", VALL, 0), 4145198Sjmcp INST("tl", VALL, 0), 4155198Sjmcp 4165198Sjmcp INST("tleu", VALL, 0), 4175198Sjmcp INST("tcs", VALL, 0), 4185198Sjmcp INST("tneg", VALL, 0), 4195198Sjmcp INST("tvs", VALL, 0), 4205198Sjmcp 4215198Sjmcp INST("ta", VALL, 0), 4225198Sjmcp INST("tne", VALL, 0), 4235198Sjmcp INST("tg", VALL, 0), 4245198Sjmcp INST("tge", VALL, 0), 4255198Sjmcp 4265198Sjmcp INST("tgu", VALL, 0), 4275198Sjmcp INST("tcc", VALL, 0), 4285198Sjmcp INST("tpos", VALL, 0), 4295198Sjmcp INST("tvc", VALL, 0) 4305198Sjmcp }; 4315198Sjmcp 4325198Sjmcp static const table_t Tcc_table = { 4335198Sjmcp .tbl_field = 28, 4345198Sjmcp .tbl_len = 4, 4355198Sjmcp .tbl_ovp = NULL, 4365198Sjmcp .tbl_fmt = fmt_trap, 4375198Sjmcp .tbl_inp = Tcc_table_def 4385198Sjmcp }; 4395198Sjmcp 4405198Sjmcp static const inst_t rwin_table_def[32] = { 4415198Sjmcp /* 0x00 */ 4425198Sjmcp INST("saved", V9|V9S, 0), 4435198Sjmcp INST("restored", V9|V9S, 0), 4445198Sjmcp INST("allclean", V9|V9S, 0), 4455198Sjmcp INST("otherw", V9|V9S, 0), 4465198Sjmcp 4475198Sjmcp INST("normalw", V9|V9S, 0), 4485198Sjmcp INST("invalw", V9|V9S, 0), 4495198Sjmcp INVALID, 4505198Sjmcp INVALID, 4515198Sjmcp 4525198Sjmcp /* 0x08 */ 4535198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 4545198Sjmcp 4555198Sjmcp /* 0x10 */ 4565198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 4575198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 4585198Sjmcp }; 4595198Sjmcp 4605198Sjmcp static const table_t rwin_table = { 4615198Sjmcp .tbl_field = 29, 4625198Sjmcp .tbl_len = 5, 4635198Sjmcp .tbl_ovp = NULL, 4645198Sjmcp .tbl_fmt = fmt_regwin, 4655198Sjmcp .tbl_inp = rwin_table_def 4665198Sjmcp }; 4675198Sjmcp 4685198Sjmcp static const inst_t tr_table_def[32] = { 4695198Sjmcp /* 0x00 */ 4705198Sjmcp INST("done", V9|V9S, 0), 4715198Sjmcp INST("retry", V9|V9S, 0), 4725198Sjmcp INVALID, 4735198Sjmcp INVALID, 4745198Sjmcp 4755198Sjmcp INVALID, 4765198Sjmcp INVALID, 4775198Sjmcp INVALID, 4785198Sjmcp INVALID, 4795198Sjmcp 4805198Sjmcp /* 0x08 */ 4817718SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 4827718SJason.Beloro@Sun.COM INST("jpriv", V9, FLG_DISP(DISP19)), 4835198Sjmcp 4845198Sjmcp /* 0x10 */ 4855198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 486*10271SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 4875198Sjmcp }; 4885198Sjmcp 4895198Sjmcp static const table_t tr_table = { 4905198Sjmcp .tbl_field = 29, 4915198Sjmcp .tbl_len = 5, 4925198Sjmcp .tbl_ovp = NULL, 4935198Sjmcp .tbl_fmt = fmt_trap_ret, 4945198Sjmcp .tbl_inp = tr_table_def 4955198Sjmcp }; 4965198Sjmcp 4975198Sjmcp static const inst_t movicc_table_def[16] = { 4985198Sjmcp INST("movn", V9|V9S, 0), 4995198Sjmcp INST("move", V9|V9S, 0), 5005198Sjmcp INST("movle", V9|V9S, 0), 5015198Sjmcp INST("movl", V9|V9S, 0), 5025198Sjmcp 5035198Sjmcp INST("movleu", V9|V9S, 0), 5045198Sjmcp INST("movcs", V9|V9S, 0), 5055198Sjmcp INST("movneg", V9|V9S, 0), 5065198Sjmcp INST("movvs", V9|V9S, 0), 5075198Sjmcp 5085198Sjmcp INST("mova", V9|V9S, 0), 5095198Sjmcp INST("movne", V9|V9S, 0), 5105198Sjmcp INST("movg", V9|V9S, 0), 5115198Sjmcp INST("movge", V9|V9S, 0), 5125198Sjmcp 5135198Sjmcp INST("movgu", V9|V9S, 0), 5145198Sjmcp INST("movcc", V9|V9S, 0), 5155198Sjmcp INST("movpos", V9|V9S, 0), 5165198Sjmcp INST("movvc", V9|V9S, 0) 5175198Sjmcp }; 5185198Sjmcp 5195198Sjmcp static const inst_t movfcc_table_def[16] = { 5205198Sjmcp INST("movn", V9|V9S, 0), 5215198Sjmcp INST("movne", V9|V9S, 0), 5225198Sjmcp INST("movlg", V9|V9S, 0), 5235198Sjmcp INST("movul", V9|V9S, 0), 5245198Sjmcp 5255198Sjmcp INST("movl", V9|V9S, 0), 5265198Sjmcp INST("movug", V9|V9S, 0), 5275198Sjmcp INST("movg", V9|V9S, 0), 5285198Sjmcp INST("movu", V9|V9S, 0), 5295198Sjmcp 5305198Sjmcp INST("mova", V9|V9S, 0), 5315198Sjmcp INST("move", V9|V9S, 0), 5325198Sjmcp INST("movue", V9|V9S, 0), 5335198Sjmcp INST("movge", V9|V9S, 0), 5345198Sjmcp 5355198Sjmcp INST("movuge", V9|V9S, 0), 5365198Sjmcp INST("movle", V9|V9S, 0), 5375198Sjmcp INST("movule", V9|V9S, 0), 5385198Sjmcp INST("movo", V9|V9S, 0) 5395198Sjmcp }; 5405198Sjmcp 5415198Sjmcp static const table_t movfcc_table = { 5425198Sjmcp .tbl_field = 17, 5435198Sjmcp .tbl_len = 4, 5445198Sjmcp .tbl_ovp = NULL, 5455198Sjmcp .tbl_fmt = fmt_movcc, 5465198Sjmcp .tbl_inp = movfcc_table_def 5475198Sjmcp }; 5485198Sjmcp 5495198Sjmcp static const table_t movicc_table = { 5505198Sjmcp .tbl_field = 17, 5515198Sjmcp .tbl_len = 4, 5525198Sjmcp .tbl_ovp = NULL, 5535198Sjmcp .tbl_fmt = fmt_movcc, 5545198Sjmcp .tbl_inp = movicc_table_def 5555198Sjmcp }; 5565198Sjmcp 5575198Sjmcp static const inst_t movcc_table_def[2] = { 5585198Sjmcp TABLE(movfcc_table, V9|V9S), 5595198Sjmcp TABLE(movicc_table, V9|V9S) 5605198Sjmcp }; 5615198Sjmcp 5625198Sjmcp static const table_t movcc_table = { 5635198Sjmcp .tbl_field = 18, 5645198Sjmcp .tbl_len = 1, 5655198Sjmcp .tbl_ovp = NULL, 5665198Sjmcp .tbl_fmt = NULL, 5675198Sjmcp .tbl_inp = movcc_table_def 5685198Sjmcp }; 5695198Sjmcp 5705198Sjmcp static const inst_t movr_table_def[8] = { 5715198Sjmcp INVALID, 5725198Sjmcp /* aka movrz */ 5735198Sjmcp INST("movre", V9|V9S, 0), 5745198Sjmcp INST("movrlez", V9|V9S, 0), 5755198Sjmcp INST("movrlz", V9|V9S, 0), 5765198Sjmcp 5775198Sjmcp INVALID, 5785198Sjmcp /* aka movrnz */ 5795198Sjmcp INST("movrne", V9|V9S, 0), 5805198Sjmcp INST("movrgz", V9|V9S, 0), 5815198Sjmcp INST("movrgez", V9|V9S, 0) 5825198Sjmcp }; 5835198Sjmcp 5845198Sjmcp static const table_t movr_table = { 5855198Sjmcp .tbl_field = 12, 5865198Sjmcp .tbl_len = 3, 5875198Sjmcp .tbl_ovp = NULL, 5885198Sjmcp .tbl_fmt = fmt_movr, 5895198Sjmcp .tbl_inp = movr_table_def 5905198Sjmcp }; 5915198Sjmcp 5925198Sjmcp static const inst_t FPop1_table_def[512] = { 5935198Sjmcp /* 0x000 */ 5945198Sjmcp INVALID, 5955198Sjmcp INST("fmovs", VALL, 5965198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 5975198Sjmcp INST("fmovd", V9|V9S, 5985198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 5995198Sjmcp INST("fmovq", V9|V9S, 6005198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 6015198Sjmcp 6025198Sjmcp INVALID, 6035198Sjmcp INST("fnegs", VALL, 6045198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 6055198Sjmcp INST("fnegd", V9|V9S, 6065198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 6075198Sjmcp INST("fnegq", V9|V9S, 6085198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 6095198Sjmcp 6105198Sjmcp /* 0x008 */ 6115198Sjmcp INVALID, 6125198Sjmcp INST("fabss", VALL, 6135198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 6145198Sjmcp INST("fabsd", V9|V9S, 6155198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 6165198Sjmcp INST("fabsq", V9|V9S, 6175198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 6185198Sjmcp 6195198Sjmcp INVALID, INVALID, INVALID, INVALID, 6205198Sjmcp 6215198Sjmcp /* 0x010 */ 6225198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 6235198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 6245198Sjmcp 6255198Sjmcp /* 0x020 */ 6265198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 6275198Sjmcp 6285198Sjmcp /* 0x028 */ 6295198Sjmcp INVALID, 6305198Sjmcp INST("fsqrts", VALL, 6315198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 6325198Sjmcp INST("fsqrtd", VALL, 6335198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 6345198Sjmcp INST("fsqrtq", VALL, 6355198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 6365198Sjmcp 637*10271SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, 6385198Sjmcp 6395198Sjmcp /* 0x30 */ 6405198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 6415198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 6425198Sjmcp 6435198Sjmcp /* 0x40 */ 6445198Sjmcp INVALID, 6455198Sjmcp INST("fadds", VALL, 6465198Sjmcp FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 6475198Sjmcp INST("faddd", VALL, 6485198Sjmcp FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 6495198Sjmcp INST("faddq", VALL, 6505198Sjmcp FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 6515198Sjmcp 6525198Sjmcp INVALID, 6535198Sjmcp INST("fsubs", VALL, 6545198Sjmcp FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 6555198Sjmcp INST("fsubd", VALL, 6565198Sjmcp FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 6575198Sjmcp INST("fsubq", VALL, 6585198Sjmcp FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 6595198Sjmcp 6605198Sjmcp /* 0x048 */ 6615198Sjmcp INVALID, 6625198Sjmcp INST("fmuls", VALL, 6635198Sjmcp FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 6645198Sjmcp INST("fmuld", VALL, 6655198Sjmcp FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 6665198Sjmcp INST("fmulq", VALL, 6675198Sjmcp FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 6685198Sjmcp 6695198Sjmcp INVALID, 6705198Sjmcp INST("fdivs", VALL, 6715198Sjmcp FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 6725198Sjmcp INST("fdivd", VALL, 6735198Sjmcp FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 6745198Sjmcp INST("fdivq", VALL, 6755198Sjmcp FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 6765198Sjmcp 6775198Sjmcp /* 0x050 */ 678*10271SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 679*10271SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 6805198Sjmcp 6815198Sjmcp /* 0x060 */ 682*10271SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 6835198Sjmcp 6845198Sjmcp /* 0x068 */ 6855198Sjmcp INVALID, 6865198Sjmcp INST("fsmuld", VALL, 6875198Sjmcp FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)), 6885198Sjmcp INVALID, 6895198Sjmcp INVALID, 6905198Sjmcp 6915198Sjmcp INVALID, 6925198Sjmcp INVALID, 6935198Sjmcp INST("fdmulq", VALL, 6945198Sjmcp FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)), 6955198Sjmcp INVALID, 6965198Sjmcp 6975198Sjmcp /* 0x070 */ 698*10271SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 699*10271SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7005198Sjmcp 7015198Sjmcp /* 0x080 */ 7025198Sjmcp INVALID, 7035198Sjmcp INST("fstox", V9|V9S, 7045198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)), 7055198Sjmcp INST("fdtox", V9|V9S, 7065198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 7075198Sjmcp INST("fqtox", V9|V9S, 7085198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPD)), 7095198Sjmcp 7105198Sjmcp INST("fxtos", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM| 7115198Sjmcp FLG_P3(REG_FP)), 7125198Sjmcp INVALID, 7135198Sjmcp INVALID, 7145198Sjmcp INVALID, 7155198Sjmcp 7165198Sjmcp /* 0x088 */ 7175198Sjmcp INST("fxtod", V9|V9S, 7185198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 7195198Sjmcp INVALID, 7205198Sjmcp INVALID, 7215198Sjmcp INVALID, 7225198Sjmcp 7235198Sjmcp INST("fxtoq", V9|V9S, 7245198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)), 7255198Sjmcp INVALID, 7265198Sjmcp INVALID, 7275198Sjmcp INVALID, 7285198Sjmcp 7295198Sjmcp /* 0x090 */ 7305198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7315198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7325198Sjmcp 7335198Sjmcp /* 0x0a0 */ 7345198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7355198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7365198Sjmcp 7375198Sjmcp /* 0x0b0 */ 7385198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7395198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7405198Sjmcp 7415198Sjmcp /* 0x0c0 */ 7425198Sjmcp INVALID, INVALID, INVALID, INVALID, 7435198Sjmcp 7445198Sjmcp INST("fitos", VALL, 7455198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 7465198Sjmcp INVALID, 7475198Sjmcp INST("fdtos", VALL, 7485198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FP)), 7495198Sjmcp INST("fqtos", VALL, 7505198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FP)), 7515198Sjmcp 7525198Sjmcp /* 0x0c8 */ 7535198Sjmcp INST("fitod", VALL, 7545198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)), 7555198Sjmcp INST("fstod", VALL, 7565198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)), 7575198Sjmcp INVALID, 7585198Sjmcp INST("fqtod", VALL, 7595198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPD)), 7605198Sjmcp 7615198Sjmcp INST("fitoq", VALL, 7625198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPQ)), 7635198Sjmcp INST("fstoq", VALL, 7645198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPQ)), 7655198Sjmcp INST("fdtoq", VALL, 7665198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)), 7675198Sjmcp INVALID, 7685198Sjmcp 7695198Sjmcp /* 0x0d0 */ 7705198Sjmcp INVALID, 7715198Sjmcp INST("fstoi", VALL, 7725198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 7735198Sjmcp INST("fdtoi", VALL, 7745198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FP)), 7755198Sjmcp INST("fqtoi", VALL, 7765198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FP)), 7775198Sjmcp INVALID, INVALID, INVALID, INVALID, 7785198Sjmcp 7795198Sjmcp /* 0x0d8 */ 7805198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7815198Sjmcp 7825198Sjmcp /* 0x0e0 */ 7835198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7845198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7855198Sjmcp 7865198Sjmcp /* 0x0f0 */ 7875198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7885198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7895198Sjmcp 7905198Sjmcp /* 0x100 */ 7915198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7925198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7935198Sjmcp 7945198Sjmcp /* 0x110 */ 7955198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7965198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 7975198Sjmcp 7985198Sjmcp /* 0x120 */ 7995198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8005198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8015198Sjmcp 8025198Sjmcp /* 0x130 */ 8035198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8045198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8055198Sjmcp 8065198Sjmcp /* 0x140 */ 8075198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8085198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8095198Sjmcp 8105198Sjmcp /* 0x150 */ 8115198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8125198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8135198Sjmcp 8145198Sjmcp /* 0x160 */ 8155198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8165198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8175198Sjmcp 8185198Sjmcp /* 0x170 */ 8195198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8205198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8215198Sjmcp 8225198Sjmcp /* 0x180 */ 8235198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8245198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8255198Sjmcp 8265198Sjmcp /* 0x190 */ 8275198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8285198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8295198Sjmcp 8305198Sjmcp /* 0x1a0 */ 8315198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8325198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8335198Sjmcp 8345198Sjmcp /* 0x1b0 */ 8355198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8365198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8375198Sjmcp 8385198Sjmcp /* 0x1c0 */ 8395198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8405198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8415198Sjmcp 8425198Sjmcp /* 0x1d0 */ 8435198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8445198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8455198Sjmcp 8465198Sjmcp /* 0x1e0 */ 8475198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8485198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8495198Sjmcp 8505198Sjmcp /* 0x1f0 */ 8515198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8525198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 8535198Sjmcp }; 8545198Sjmcp 8555198Sjmcp static const table_t FPop1_table = { 8565198Sjmcp .tbl_field = 13, 8575198Sjmcp .tbl_len = 9, 8585198Sjmcp .tbl_ovp = NULL, 8595198Sjmcp .tbl_fmt = fmt_fpop1, 8605198Sjmcp .tbl_inp = FPop1_table_def 8615198Sjmcp }; 8625198Sjmcp 8635198Sjmcp static const inst_t FPop2_table_def[512] = { 8645198Sjmcp /* 0x000 */ 8655198Sjmcp INVALID, 8665198Sjmcp INST("fmovs", V9|V9S, 8675198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 8685198Sjmcp INST("fmovd", V9|V9S, 8695198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 8705198Sjmcp INST("fmovq", V9|V9S, 8715198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 8725198Sjmcp 8735198Sjmcp INVALID, INVALID, INVALID, INVALID, 8745198Sjmcp 8755198Sjmcp /* 0x008 */ 8765198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8775198Sjmcp 8785198Sjmcp /* 0x010 */ 8795198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8805198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8815198Sjmcp 8825198Sjmcp /* 0x020 */ 8835198Sjmcp INVALID, INVALID, INVALID, INVALID, 8845198Sjmcp 8855198Sjmcp INST("fmovrsz", V9|V9S, 8865198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)), 8875198Sjmcp INST("fmovrdz", V9|V9S, 8885198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 8895198Sjmcp INST("fmovrqz", V9|V9S, 8905198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 8915198Sjmcp INVALID, 8925198Sjmcp 8935198Sjmcp /* 0x028 */ 8945198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8955198Sjmcp 8965198Sjmcp /* 0x030 */ 8975198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8985198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 8995198Sjmcp 9005198Sjmcp /* 0x040 */ 9015198Sjmcp INVALID, 9025198Sjmcp INST("fmovs", V9|V9S, 9035198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 9045198Sjmcp INST("fmovd", V9|V9S, 9055198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 9065198Sjmcp INST("fmovq", V9|V9S, 9075198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 9085198Sjmcp 9095198Sjmcp INST("fmovrslez", V9|V9S, 9105198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)), 9115198Sjmcp INST("fmovrdlez", V9|V9S, 9125198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 9135198Sjmcp INST("fmovrqlez", V9|V9S, 9145198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 9155198Sjmcp INVALID, 9165198Sjmcp 9175198Sjmcp /* 0x048 */ 9185198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 9195198Sjmcp 9205198Sjmcp /* 0x050 */ 9215198Sjmcp INVALID, 9225198Sjmcp INST("fcmps", VALL, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_NONE) 9235198Sjmcp |FLG_NOIMM), 9245198Sjmcp INST("fcmpd", VALL, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_NONE) 9255198Sjmcp |FLG_NOIMM), 9265198Sjmcp INST("fcmpq", VALL, FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_P3(REG_NONE) 9275198Sjmcp |FLG_NOIMM), 9285198Sjmcp 9295198Sjmcp INVALID, 9305198Sjmcp INST("fcmpes", VALL, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_NONE) 9315198Sjmcp |FLG_NOIMM), 9325198Sjmcp INST("fcmped", VALL, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_NONE) 9335198Sjmcp |FLG_NOIMM), 9345198Sjmcp INST("fcmpeq", VALL, FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_P3(REG_NONE) 9355198Sjmcp |FLG_NOIMM), 9365198Sjmcp 9375198Sjmcp /* 0x058 */ 9385198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 9395198Sjmcp 9405198Sjmcp /* 0x060 */ 9415198Sjmcp INVALID, INVALID, INVALID, INVALID, 9425198Sjmcp 9435198Sjmcp INVALID, 9445198Sjmcp INST("fmovrslz", V9|V9S, 9455198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)), 9465198Sjmcp INST("fmovrdlz", V9|V9S, 9475198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 9485198Sjmcp INST("fmovrqlz", V9|V9S, 9495198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 9505198Sjmcp 9515198Sjmcp /* 0x068 */ 9525198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 9535198Sjmcp 9545198Sjmcp /* 0x070 */ 9555198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 9565198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 9575198Sjmcp 9585198Sjmcp /* 0x080 */ 9595198Sjmcp INVALID, 9605198Sjmcp INST("fmovs", V9|V9S, 9615198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)), 9625198Sjmcp INST("fmovd", V9|V9S, 9635198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)), 9645198Sjmcp INST("fmovq", V9|V9S, 9655198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)), 9665198Sjmcp 9675198Sjmcp INVALID, INVALID, INVALID, INVALID, 9685198Sjmcp 9695198Sjmcp /* 0x088 */ 9705198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 9715198Sjmcp 9725198Sjmcp /* 0x090 */ 9735198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 9745198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 9755198Sjmcp 9765198Sjmcp /* 0x0a0 */ 9775198Sjmcp INVALID, INVALID, INVALID, INVALID, 9785198Sjmcp 9795198Sjmcp INVALID, 9805198Sjmcp INST("fmovrsnz", V9|V9S, 9815198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)), 9825198Sjmcp INST("fmovrdnz", V9|V9S, 9835198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 9845198Sjmcp INST("fmovrqnz", V9|V9S, 9855198Sjmcp FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 9865198Sjmcp 9875198Sjmcp /* 0x0a8 */ 9885198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 9895198Sjmcp 9905198Sjmcp /* 0x0b0 */ 9915198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 9925198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 9935198Sjmcp 9945198Sjmcp /* 0x0c0 */ 9955198Sjmcp INVALID, 9965198Sjmcp INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)| 9975198Sjmcp FLG_NOIMM|FLG_P3(REG_FP)), 9985198Sjmcp INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)| 9995198Sjmcp FLG_NOIMM|FLG_P3(REG_FPD)), 10005198Sjmcp INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)| 10015198Sjmcp FLG_NOIMM|FLG_P3(REG_FPQ)), 10025198Sjmcp 10035198Sjmcp INVALID, 10045198Sjmcp INST("fmovrsgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 10055198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 10065198Sjmcp INST("fmovrdgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 10075198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 10085198Sjmcp INST("fmovrqgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 10095198Sjmcp FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 10105198Sjmcp 10115198Sjmcp /* 0x0c8 */ 10125198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10135198Sjmcp 10145198Sjmcp /* 0x0d0 */ 10155198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10165198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10175198Sjmcp 10185198Sjmcp /* 0x0e0 */ 10195198Sjmcp INVALID, INVALID, INVALID, INVALID, 10205198Sjmcp 10215198Sjmcp INVALID, 10225198Sjmcp INST("fmovrsgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 10235198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 10245198Sjmcp INST("fmovrdgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 10255198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 10265198Sjmcp INST("fmovrqgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM| 10275198Sjmcp FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)), 10285198Sjmcp 10295198Sjmcp /* 0x0e8 */ 10305198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10315198Sjmcp 10325198Sjmcp /* 0x0f0 */ 10335198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10345198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10355198Sjmcp 10365198Sjmcp /* 0x100 */ 10375198Sjmcp INVALID, 10385198Sjmcp INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)| 10395198Sjmcp FLG_NOIMM|FLG_P3(REG_FP)), 10405198Sjmcp INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)| 10415198Sjmcp FLG_NOIMM|FLG_P3(REG_FPD)), 10425198Sjmcp INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)| 10435198Sjmcp FLG_NOIMM|FLG_P3(REG_FPQ)), 10445198Sjmcp 10455198Sjmcp INVALID, INVALID, INVALID, INVALID, 10465198Sjmcp 10475198Sjmcp /* 0x108 */ 10485198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10495198Sjmcp 10505198Sjmcp /* 0x110 */ 10515198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10525198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10535198Sjmcp 10545198Sjmcp /* 0x120 */ 10555198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10565198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10575198Sjmcp 10585198Sjmcp /* 0x130 */ 10595198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10605198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10615198Sjmcp 10625198Sjmcp /* 0x140 */ 10635198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10645198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10655198Sjmcp 10665198Sjmcp /* 0x150 */ 10675198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10685198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10695198Sjmcp 10705198Sjmcp /* 0x160 */ 10715198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10725198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10735198Sjmcp 10745198Sjmcp /* 0x170 */ 10755198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10765198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10775198Sjmcp 10785198Sjmcp /* 0x180 */ 10795198Sjmcp INVALID, 10805198Sjmcp INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)| 10815198Sjmcp FLG_NOIMM|FLG_P3(REG_FP)), 10825198Sjmcp INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)| 10835198Sjmcp FLG_NOIMM|FLG_P3(REG_FPD)), 10845198Sjmcp INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)| 10855198Sjmcp FLG_NOIMM|FLG_P3(REG_FPQ)), 10865198Sjmcp 10875198Sjmcp INVALID, INVALID, INVALID, INVALID, 10885198Sjmcp 10895198Sjmcp /* 0x188 */ 10905198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10915198Sjmcp 10925198Sjmcp /* 0x190 */ 10935198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10945198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10955198Sjmcp 10965198Sjmcp /* 0x1a0 */ 10975198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10985198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 10995198Sjmcp 11005198Sjmcp /* 0x1b0 */ 11015198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 11025198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 11035198Sjmcp 11045198Sjmcp /* 0x1c0 */ 11055198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 11065198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 11075198Sjmcp 11085198Sjmcp /* 0x1d0 */ 11095198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 11105198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 11115198Sjmcp 11125198Sjmcp /* 0x1e0 */ 11135198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 11145198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 11155198Sjmcp 11165198Sjmcp /* 0x1f0 */ 11175198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 11185198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 11195198Sjmcp }; 11205198Sjmcp 11215198Sjmcp static const table_t FPop2_table = { 11225198Sjmcp .tbl_field = 13, 11235198Sjmcp .tbl_len = 9, 11245198Sjmcp .tbl_ovp = NULL, 11255198Sjmcp .tbl_fmt = fmt_fpop2, 11265198Sjmcp .tbl_inp = FPop2_table_def 11275198Sjmcp }; 11285198Sjmcp 11295198Sjmcp static const inst_t vis_table_def[512] = { 11305198Sjmcp /* 0x000 */ 11315198Sjmcp INST("edge8cc", V9S, FLG_NOIMM), 11325198Sjmcp INST("edge8n", V9S, FLG_NOIMM), 11335198Sjmcp INST("edge8lcc", V9S, FLG_NOIMM), 11345198Sjmcp INST("edge8ln", V9S, FLG_NOIMM), 11355198Sjmcp 11365198Sjmcp INST("edge16cc", V9S, FLG_NOIMM), 11375198Sjmcp INST("edge16n", V9S, FLG_NOIMM), 11385198Sjmcp INST("edge16lcc", V9S, FLG_NOIMM), 11395198Sjmcp INST("edge16ln", V9S, FLG_NOIMM), 11405198Sjmcp 11415198Sjmcp /* 0x008 */ 11425198Sjmcp INST("edge32cc", V9S, FLG_NOIMM), 11435198Sjmcp INST("edge32n", V9S, FLG_NOIMM), 11445198Sjmcp INST("edge32lcc", V9S, FLG_NOIMM), 11455198Sjmcp INST("edge32ln", V9S, FLG_NOIMM), 11465198Sjmcp 11475198Sjmcp INVALID, INVALID, INVALID, INVALID, 11485198Sjmcp 11495198Sjmcp /* 0x010 */ 11505198Sjmcp INST("array8", V9S, FLG_NOIMM), 11517718SJason.Beloro@Sun.COM INST("addxc", V9, 0), 11525198Sjmcp INST("array16", V9S, FLG_NOIMM), 11537718SJason.Beloro@Sun.COM INST("addxccc", V9, 0), 11545198Sjmcp 11555198Sjmcp INST("array32", V9S, FLG_NOIMM), 11567718SJason.Beloro@Sun.COM INST("random", V9, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)| 11577718SJason.Beloro@Sun.COM FLG_RD(REG_FPD)|FLG_NOIMM), 11587718SJason.Beloro@Sun.COM INST("umulxhi", V9, FLG_P1(REG_INT)|FLG_NOIMM| 11597718SJason.Beloro@Sun.COM FLG_P2(REG_INT)|FLG_P3(REG_INT)), 11607718SJason.Beloro@Sun.COM INST("lzd", V9, FLG_P1(REG_NONE)|FLG_NOIMM| 11617718SJason.Beloro@Sun.COM FLG_P2(REG_INT)|FLG_RD(REG_INT)), 11625198Sjmcp 11635198Sjmcp /* 0x018 */ 11645198Sjmcp INST("alignaddr", V9S, FLG_NOIMM), 11657718SJason.Beloro@Sun.COM INST("bmask", V9S, FLG_P1(REG_INT)|FLG_P2(REG_INT)|FLG_RD(REG_INT)), 11665198Sjmcp INST("alignaddrl", V9S, FLG_NOIMM), 11677718SJason.Beloro@Sun.COM INST("cmask8", V9, FLG_P1(REG_NONE)|FLG_NOIMM| 11687718SJason.Beloro@Sun.COM FLG_P2(REG_INT)|FLG_P3(REG_NONE)), 11695198Sjmcp INVALID, 11707718SJason.Beloro@Sun.COM INST("cmask16", V9, FLG_P1(REG_NONE)|FLG_NOIMM| 11717718SJason.Beloro@Sun.COM FLG_P2(REG_INT)|FLG_P3(REG_NONE)), 11727718SJason.Beloro@Sun.COM INVALID, 11737718SJason.Beloro@Sun.COM INST("cmask32", V9, FLG_P1(REG_NONE)|FLG_NOIMM| 11747718SJason.Beloro@Sun.COM FLG_P2(REG_INT)|FLG_P3(REG_NONE)), 11755198Sjmcp 11765198Sjmcp /* 0x020 */ 11775198Sjmcp INST("fcmple16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 11785198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 11797718SJason.Beloro@Sun.COM INST("fsll16", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 11807718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 11815198Sjmcp INST("fcmpne16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 11825198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 11837718SJason.Beloro@Sun.COM INST("fsrl16", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 11847718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 11855198Sjmcp 11865198Sjmcp INST("fcmple32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 11875198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 11887718SJason.Beloro@Sun.COM INST("fsll32", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 11897718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 11905198Sjmcp INST("fcmpne32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 11915198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 11927718SJason.Beloro@Sun.COM INST("fsrl32", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 11937718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 11945198Sjmcp 11955198Sjmcp /* 0x028 */ 11965198Sjmcp INST("fcmpgt16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 11975198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 11987718SJason.Beloro@Sun.COM INST("fslas16", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 11997718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12005198Sjmcp INST("fcmpeq16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12015198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 12027718SJason.Beloro@Sun.COM INST("fsra16", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 12037718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12045198Sjmcp 12055198Sjmcp INST("fcmpgt32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12065198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 12077718SJason.Beloro@Sun.COM INST("fslas32", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 12087718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12095198Sjmcp INST("fcmpeq32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12105198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 12117718SJason.Beloro@Sun.COM INST("fsra32", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 12127718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12135198Sjmcp 12145198Sjmcp /* 0x030 */ 12155198Sjmcp INVALID, 12165198Sjmcp INST("fmul8x16", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12175198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12185198Sjmcp INVALID, 12195198Sjmcp INST("fmul8x16au", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12205198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 12215198Sjmcp 12225198Sjmcp INVALID, 12235198Sjmcp INST("fmul8x16al", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12245198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 12255198Sjmcp INST("fmul8sux16", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12265198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12275198Sjmcp INST("fmul8ulx16", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12285198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12295198Sjmcp 12305198Sjmcp /* 0x038 */ 12315198Sjmcp INST("fmuld8sux16", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12325198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 12335198Sjmcp INST("fmuld8ulx16", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12345198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 12355198Sjmcp INST("fpack32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12365198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12375198Sjmcp INST("fpack16", V9S, FLG_P1(REG_NONE)|FLG_NOIMM| 12385198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FP)), 12395198Sjmcp 12405198Sjmcp INVALID, 12415198Sjmcp INST("fpackfix", V9S, FLG_P1(REG_NONE)|FLG_NOIMM| 12425198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FP)), 12435198Sjmcp INST("pdist", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12445198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12457718SJason.Beloro@Sun.COM INST("pdistn", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 12467718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_INT)), 12475198Sjmcp 12485198Sjmcp /* 0x040 */ 12497718SJason.Beloro@Sun.COM INST("fmean16", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 12507718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12517718SJason.Beloro@Sun.COM INVALID, 12527718SJason.Beloro@Sun.COM INST("fpadd64", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12537718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12547718SJason.Beloro@Sun.COM INVALID, 12557718SJason.Beloro@Sun.COM INST("fchksm16", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 12567718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12577718SJason.Beloro@Sun.COM INVALID, 12587718SJason.Beloro@Sun.COM INST("fpsub64", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12597718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12607718SJason.Beloro@Sun.COM INVALID, 12615198Sjmcp 12625198Sjmcp /* 0x048 */ 12635198Sjmcp INST("faligndata", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12645198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12655198Sjmcp INVALID, 12665198Sjmcp INVALID, 12675198Sjmcp INST("fpmerge", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12685198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 12695198Sjmcp 12705198Sjmcp INST("bshuffle", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12715198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12725198Sjmcp INST("fexpand", V9S, FLG_P1(REG_NONE)|FLG_NOIMM| 12735198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FPD)), 12745198Sjmcp INVALID, 12755198Sjmcp INVALID, 12765198Sjmcp 12775198Sjmcp /* 0x050 */ 12785198Sjmcp INST("fpadd16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12795198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12805198Sjmcp INST("fpadd16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12815198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 12825198Sjmcp INST("fpadd32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12835198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12845198Sjmcp INST("fpadd32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12855198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 12865198Sjmcp 12875198Sjmcp INST("fpsub16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12885198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12895198Sjmcp INST("fpsub16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12905198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 12915198Sjmcp INST("fpsub32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12925198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12935198Sjmcp INST("fpsub32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 12945198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 12955198Sjmcp 12965198Sjmcp /* 0x058 */ 12977718SJason.Beloro@Sun.COM INST("fpadds16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 12987718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 12997718SJason.Beloro@Sun.COM INST("fpadds16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13007718SJason.Beloro@Sun.COM FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13017718SJason.Beloro@Sun.COM INST("fpadds32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13027718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13037718SJason.Beloro@Sun.COM INST("fpadds32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13047718SJason.Beloro@Sun.COM FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13057718SJason.Beloro@Sun.COM INST("fpsubs16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13067718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13077718SJason.Beloro@Sun.COM INST("fpsubs16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13087718SJason.Beloro@Sun.COM FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13097718SJason.Beloro@Sun.COM INST("fpsubs32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13107718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13117718SJason.Beloro@Sun.COM INST("fpsubs32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13127718SJason.Beloro@Sun.COM FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13135198Sjmcp 13145198Sjmcp /* 0x060 */ 13155198Sjmcp INST("fzero", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)| 13165198Sjmcp FLG_P3(REG_FPD)), 13175198Sjmcp INST("fzeros", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)| 13185198Sjmcp FLG_P3(REG_FP)), 13195198Sjmcp INST("fnor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13205198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13215198Sjmcp INST("fnors", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13225198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13235198Sjmcp 13245198Sjmcp INST("fandnot2", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13255198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13265198Sjmcp INST("fandnot2s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13275198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13285198Sjmcp INST("fnot2", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)| 13295198Sjmcp FLG_P3(REG_FPD)), 13305198Sjmcp INST("fnot2s", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)| 13315198Sjmcp FLG_P3(REG_FP)), 13325198Sjmcp 13335198Sjmcp /* 0x068 */ 13345198Sjmcp INST("fandnot1", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13355198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13365198Sjmcp INST("fandnot1s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13375198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13385198Sjmcp INST("fnot1", V9S, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)| 13395198Sjmcp FLG_P3(REG_FPD)), 13405198Sjmcp INST("fnot1s", V9S, FLG_P1(REG_FP)|FLG_P2(REG_NONE)| 13415198Sjmcp FLG_P3(REG_FP)), 13425198Sjmcp 13435198Sjmcp INST("fxor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13445198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13455198Sjmcp INST("fxors", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13465198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13475198Sjmcp INST("fnand", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13485198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13495198Sjmcp INST("fnands", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13505198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13515198Sjmcp 13525198Sjmcp /* 0x070 */ 13535198Sjmcp INST("fand", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13545198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13555198Sjmcp INST("fands", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13565198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13575198Sjmcp INST("fxnor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13585198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13595198Sjmcp INST("fxnors", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13605198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13615198Sjmcp 13625198Sjmcp INST("fsrc1", V9S, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)| 13635198Sjmcp FLG_P3(REG_FPD)), 13645198Sjmcp INST("fsrc1s", V9S, FLG_P1(REG_FP)|FLG_P2(REG_NONE)| 13655198Sjmcp FLG_P3(REG_FP)), 13665198Sjmcp INST("fornot2", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13675198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13685198Sjmcp INST("fornot2s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13695198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13705198Sjmcp 13715198Sjmcp /* 0x078 */ 13725198Sjmcp INST("fsrc2", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)| 13735198Sjmcp FLG_P3(REG_FPD)), 13745198Sjmcp INST("fsrc2s", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)| 13755198Sjmcp FLG_P3(REG_FP)), 13765198Sjmcp INST("fornot1", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13775198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13785198Sjmcp INST("fornot1s", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13795198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13805198Sjmcp 13815198Sjmcp INST("for", V9S, FLG_P1(REG_FPD)|FLG_NOIMM| 13825198Sjmcp FLG_P2(REG_FPD)|FLG_P3(REG_FPD)), 13835198Sjmcp INST("fors", V9S, FLG_P1(REG_FP)|FLG_NOIMM| 13845198Sjmcp FLG_P2(REG_FP)|FLG_P3(REG_FP)), 13855198Sjmcp INST("fone", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)| 13865198Sjmcp FLG_P3(REG_FPD)), 13875198Sjmcp INST("fones", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)| 13885198Sjmcp FLG_P3(REG_FP)), 13895198Sjmcp 13905198Sjmcp /* 0x080 */ 13915198Sjmcp INST("shutdown", V9S, 0), 13925198Sjmcp INST("siam", V9S, 0), 13935198Sjmcp INVALID, 13945198Sjmcp INVALID, 13955198Sjmcp 13965198Sjmcp INVALID, INVALID, INVALID, INVALID, 13975198Sjmcp 13985198Sjmcp /* 0x088 */ 13995198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14005198Sjmcp 14015198Sjmcp /* 0x090 */ 14025198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14035198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14045198Sjmcp 14055198Sjmcp /* 0x0a0 */ 14065198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14075198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14085198Sjmcp 14095198Sjmcp /* 0x0b0 */ 14105198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14115198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14125198Sjmcp 14135198Sjmcp /* 0x0c0 */ 14145198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14155198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14165198Sjmcp 14175198Sjmcp /* 0x0d0 */ 14185198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14195198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14205198Sjmcp 14215198Sjmcp /* 0x0e0 */ 14225198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14235198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14245198Sjmcp 14255198Sjmcp /* 0x0f0 */ 14265198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14275198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14285198Sjmcp 14295198Sjmcp /* 0x100 */ 14305198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14315198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14325198Sjmcp 14335198Sjmcp /* 0x110 */ 14347718SJason.Beloro@Sun.COM INST("movdtox", V9, FLG_P1(REG_NONE)|FLG_NOIMM| 14357718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_RD(REG_INT)), 14367718SJason.Beloro@Sun.COM INST("movstouw", V9, FLG_P1(REG_NONE)|FLG_NOIMM| 14377718SJason.Beloro@Sun.COM FLG_P2(REG_FP)|FLG_RD(REG_INT)), 14387718SJason.Beloro@Sun.COM INVALID, 14397718SJason.Beloro@Sun.COM INST("movstosw", V9, FLG_P1(REG_NONE)|FLG_NOIMM| 14407718SJason.Beloro@Sun.COM FLG_P2(REG_FP)|FLG_RD(REG_INT)), 14417718SJason.Beloro@Sun.COM INVALID, 14427718SJason.Beloro@Sun.COM INST("xmulx", V9, FLG_P1(REG_INT)|FLG_NOIMM| 14437718SJason.Beloro@Sun.COM FLG_P2(REG_INT)|FLG_P3(REG_INT)), 14447718SJason.Beloro@Sun.COM INST("xmulxhi", V9, FLG_P1(REG_INT)|FLG_NOIMM| 14457718SJason.Beloro@Sun.COM FLG_P2(REG_INT)|FLG_P3(REG_INT)), 14467718SJason.Beloro@Sun.COM INVALID, 14477718SJason.Beloro@Sun.COM INST("movxtod", V9, FLG_P1(REG_NONE)|FLG_NOIMM| 14487718SJason.Beloro@Sun.COM FLG_P2(REG_INT)|FLG_RD(REG_FPD)), 14497718SJason.Beloro@Sun.COM INST("movwtos", V9, FLG_P1(REG_NONE)|FLG_NOIMM| 14507718SJason.Beloro@Sun.COM FLG_P2(REG_INT)|FLG_RD(REG_FP)), 14517718SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14525198Sjmcp 14535198Sjmcp /* 0x120 */ 14547718SJason.Beloro@Sun.COM INST("fucmple8", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 14557718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_RD(REG_INT)), 14567718SJason.Beloro@Sun.COM INVALID, 14577718SJason.Beloro@Sun.COM INST("fucmpne8", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 14587718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_RD(REG_INT)), 14597718SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, INVALID, 14607718SJason.Beloro@Sun.COM INST("fucmpgt8", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 14617718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_RD(REG_INT)), 14627718SJason.Beloro@Sun.COM INVALID, 14637718SJason.Beloro@Sun.COM INST("fucmpeq8", V9, FLG_P1(REG_FPD)|FLG_NOIMM| 14647718SJason.Beloro@Sun.COM FLG_P2(REG_FPD)|FLG_RD(REG_INT)), 14657718SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, INVALID, 14665198Sjmcp 14675198Sjmcp /* 0x130 */ 14685198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14695198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14705198Sjmcp 14715198Sjmcp /* 0x140 */ 14725198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14735198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14745198Sjmcp 14755198Sjmcp /* 0x150 */ 14767718SJason.Beloro@Sun.COM INVALID, 14777718SJason.Beloro@Sun.COM INST("flcmps", V9, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_FCC) 14787718SJason.Beloro@Sun.COM |FLG_NOIMM), 14797718SJason.Beloro@Sun.COM INST("flcmpd", V9, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_FCC) 14807718SJason.Beloro@Sun.COM |FLG_NOIMM), 14817718SJason.Beloro@Sun.COM INVALID, INVALID, INVALID, INVALID, INVALID, 14825198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14835198Sjmcp 14845198Sjmcp /* 0x160 */ 14855198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14865198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14875198Sjmcp 14885198Sjmcp /* 0x170 */ 14895198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14905198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14915198Sjmcp 14925198Sjmcp /* 0x180 */ 14935198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14945198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14955198Sjmcp 14965198Sjmcp /* 0x190 */ 14975198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14985198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 14995198Sjmcp 15005198Sjmcp /* 0x1a0 */ 15015198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 15025198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 15035198Sjmcp 15045198Sjmcp /* 0x1b0 */ 15055198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 15065198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 15075198Sjmcp 15085198Sjmcp /* 0x1c0 */ 15095198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 15105198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 15115198Sjmcp 15125198Sjmcp /* 0x1d0 */ 15135198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 15145198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 15155198Sjmcp 15165198Sjmcp /* 0x1e0 */ 15175198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 15185198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 15195198Sjmcp 15205198Sjmcp /* 0x1f0 */ 15215198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, 15225198Sjmcp INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID 15235198Sjmcp }; 15245198Sjmcp 15255198Sjmcp static const table_t vis_table = { 15265198Sjmcp .tbl_field = 13, 15275198Sjmcp .tbl_len = 9, 15285198Sjmcp .tbl_ovp = NULL, 15295198Sjmcp .tbl_fmt = fmt_vis, 15305198Sjmcp .tbl_inp = vis_table_def 15315198Sjmcp }; 15325198Sjmcp 15335198Sjmcp static const inst_t fused_table_def[16] = { 15345198Sjmcp /* 0x0 */ 15355198Sjmcp INVALID, 15367718SJason.Beloro@Sun.COM INST("fmadds", V9, FLG_P1(REG_FP)), 15377718SJason.Beloro@Sun.COM INST("fmaddd", V9, FLG_P1(REG_FPD)), 15385198Sjmcp INVALID, 15395198Sjmcp 15405198Sjmcp /* 0x4 */ 15415198Sjmcp INVALID, 15427718SJason.Beloro@Sun.COM INST("fmsubs", V9, FLG_P1(REG_FP)), 15437718SJason.Beloro@Sun.COM INST("fmsubd", V9, FLG_P1(REG_FPD)), 15445198Sjmcp INVALID, 15455198Sjmcp 15465198Sjmcp /* 0x8 */ 15475198Sjmcp INVALID, 15487718SJason.Beloro@Sun.COM INST("fnmsubs", V9, FLG_P1(REG_FP)), 15497718SJason.Beloro@Sun.COM INST("fnmsubd", V9, FLG_P1(REG_FPD)), 15505198Sjmcp INVALID, 15515198Sjmcp 15525198Sjmcp /* 0xc */ 15535198Sjmcp INVALID, 15547718SJason.Beloro@Sun.COM INST("fnmadds", V9, FLG_P1(REG_FP)), 15557718SJason.Beloro@Sun.COM INST("fnmaddd", V9, FLG_P1(REG_FPD)), 15565198Sjmcp INVALID 15575198Sjmcp }; 15585198Sjmcp 15595198Sjmcp static const table_t fused_table = { 15607718SJason.Beloro@Sun.COM .tbl_field = 8, 15615198Sjmcp .tbl_len = 4, 15625198Sjmcp .tbl_ovp = NULL, 15635198Sjmcp .tbl_fmt = fmt_fused, 15645198Sjmcp .tbl_inp = fused_table_def 15655198Sjmcp }; 15665198Sjmcp 15675198Sjmcp static const inst_t alu_table_def[64] = { 15685198Sjmcp /* 0x00 */ 15695198Sjmcp INST("add", VALL, 0), 15705198Sjmcp INST("and", VALL, 0), 15715198Sjmcp INST("or", VALL, 0), 15725198Sjmcp INST("xor", VALL, 0), 15735198Sjmcp 15745198Sjmcp INST("sub", VALL, 0), 15755198Sjmcp INST("andn", VALL, 0), 15765198Sjmcp INST("orn", VALL, 0), 15775198Sjmcp INST("xnor", VALL, 0), 15785198Sjmcp 15795198Sjmcp /* 0x08 */ 15805198Sjmcp INST("addx", VALL, 0), 15815198Sjmcp INST("mulx", V9|V9S, 0), 15825198Sjmcp INST("umul", VALL, 0), 15835198Sjmcp INST("smul", VALL, 0), 15845198Sjmcp 15855198Sjmcp INST("subx", VALL, 0), 15865198Sjmcp INST("udivx", V9|V9S, 0), 15875198Sjmcp INST("udiv", VALL, 0), 15885198Sjmcp INST("sdiv", VALL, 0), 15895198Sjmcp 15905198Sjmcp /* 0x10 */ 15915198Sjmcp INST("addcc", VALL, 0), 15925198Sjmcp INST("andcc", VALL, 0), 15935198Sjmcp INST("orcc", VALL, 0), 15945198Sjmcp INST("xorcc", VALL, 0), 15955198Sjmcp 15965198Sjmcp INST("subcc", VALL, 0), 15975198Sjmcp INST("andncc", VALL, 0), 15985198Sjmcp INST("orncc", VALL, 0), 15995198Sjmcp INST("xnorcc", VALL, 0), 16005198Sjmcp 16015198Sjmcp /* 0x18 */ 16025198Sjmcp INST("addxcc", VALL, 0), 16035198Sjmcp INVALID, 16045198Sjmcp INST("umulcc", VALL, 0), 16055198Sjmcp INST("smulcc", VALL, 0), 16065198Sjmcp 16075198Sjmcp INST("subxcc", VALL, 0), 16085198Sjmcp INVALID, 16095198Sjmcp INST("udivcc", VALL, 0), 16105198Sjmcp INST("sdivcc", VALL, 0), 16115198Sjmcp 16125198Sjmcp /* 0x20 */ 16135198Sjmcp INST("taddcc", VALL, 0), 16145198Sjmcp INST("tsubcc", VALL, 0), 16155198Sjmcp INST("taddcctv", VALL, 0), 16165198Sjmcp INST("tsubcctv", VALL, 0), 16175198Sjmcp 16185198Sjmcp INST("mulscc", VALL, 0), 16195198Sjmcp INST("sll", VALL, 0), 16205198Sjmcp INST("srl", VALL, 0), 16215198Sjmcp INST("sra", VALL, 0), 16225198Sjmcp 16235198Sjmcp /* 0x28 */ 16245198Sjmcp INST("rd", VALL, 0), 16255198Sjmcp INST("rd", V8, 0), 16265198Sjmcp INST("rd", V8, 0), 16275198Sjmcp INST("rd", V8, 0), 16285198Sjmcp 16295198Sjmcp TABLE(movcc_table, V9|V9S), 16305198Sjmcp INST("sdivx", V9|V9S, 0), 16315198Sjmcp INST("popc", V9|V9S, 16325198Sjmcp FLG_P1(REG_NONE)|FLG_P2(REG_INT)|FLG_P3(REG_INT)), 16335198Sjmcp TABLE(movr_table, V9|V9S), 16345198Sjmcp 16355198Sjmcp /* 0x30 */ 16365198Sjmcp INST("wr", VALL, 0), 16375198Sjmcp INST("wr", V8, 0), 16385198Sjmcp INST("wr", V8, 0), 16395198Sjmcp INST("wr", V8, 0), 16405198Sjmcp 16415198Sjmcp TABLE(FPop1_table, VALL), 16425198Sjmcp TABLE(FPop2_table, VALL), 16435198Sjmcp INST("cpop1", V8, 0), 16445198Sjmcp INST("cpop2", V8, 0), /* impdep2 */ 16455198Sjmcp 16465198Sjmcp /* 0x38 */ 16475198Sjmcp INST("jmpl", VALL, 0), 16485198Sjmcp INST("rett", VALL, 0), 16495198Sjmcp TABLE(Tcc_table, VALL), 16505198Sjmcp INST("flush", VALL, 0), 16515198Sjmcp 16525198Sjmcp INST("save", VALL, 0), 16535198Sjmcp INST("restore", VALL, 0), 16545198Sjmcp TABLE(tr_table, V9|V9S), 1655*10271SJason.Beloro@Sun.COM INVALID 16565198Sjmcp }; 16575198Sjmcp 16587718SJason.Beloro@Sun.COM 16595198Sjmcp static const overlay_t alu_ov_table[] = { 16605198Sjmcp OVERLAY(0x08, INST("addc", V9|V9S, 0)), 16615198Sjmcp OVERLAY(0x0c, INST("subc", V9|V9S, 0)), 16625198Sjmcp OVERLAY(0x18, INST("addccc", V9|V9S, 0)), 16635198Sjmcp OVERLAY(0x1c, INST("subccc", V9|V9S, 0)), 16645198Sjmcp 16657718SJason.Beloro@Sun.COM OVERLAY(0x29, INST("rdhpr", V9|V9S, 0)), 16665198Sjmcp OVERLAY(0x2a, INST("rdpr", V9|V9S, 0)), 16675198Sjmcp OVERLAY(0x2b, INST("flushw", V9|V9S, 0)), 16685198Sjmcp OVERLAY(0x31, TABLE(rwin_table, V9|V9S)), 16695198Sjmcp 16705198Sjmcp OVERLAY(0x32, INST("wrpr", V9|V9S, 0)), 16717718SJason.Beloro@Sun.COM OVERLAY(0x33, INST("wrhpr", V9|V9S, 0)), 16725198Sjmcp OVERLAY(0x36, TABLE(vis_table, V9S)), 16737718SJason.Beloro@Sun.COM OVERLAY(0x37, TABLE(fused_table, VALL)), 16745198Sjmcp OVERLAY(0x39, INST("return", VALL, 0)), 16755198Sjmcp 16765198Sjmcp OVERLAY_END 16775198Sjmcp }; 16785198Sjmcp 16795198Sjmcp static const table_t alu_table = { 16805198Sjmcp .tbl_field = 24, 16815198Sjmcp .tbl_len = 6, 16825198Sjmcp .tbl_ovp = alu_ov_table, 16835198Sjmcp .tbl_fmt = fmt_alu, 16845198Sjmcp .tbl_inp = alu_table_def 16855198Sjmcp }; 16865198Sjmcp 16875198Sjmcp static const inst_t initial_table_def[4] = { 16885198Sjmcp TABLE(branch_table, VALL), 16895198Sjmcp INST("call", VALL, 0), 16905198Sjmcp TABLE(alu_table, VALL), 16915198Sjmcp TABLE(ls_table, VALL) 16925198Sjmcp }; 16935198Sjmcp 16945198Sjmcp /* NOTE: this must not be made static */ 16955198Sjmcp const table_t initial_table = { 16965198Sjmcp .tbl_field = 31, 16975198Sjmcp .tbl_len = 2, 16985198Sjmcp .tbl_ovp = NULL, 16995198Sjmcp .tbl_fmt = fmt_call, 17005198Sjmcp .tbl_inp = initial_table_def 17015198Sjmcp }; 1702