1139790Simp/*- 2159916Smarcel * Copyright (c) 2000-2006 Marcel Moolenaar 3121404Smarcel * All rights reserved. 4121404Smarcel * 5121404Smarcel * Redistribution and use in source and binary forms, with or without 6121404Smarcel * modification, are permitted provided that the following conditions 7121404Smarcel * are met: 8121404Smarcel * 9121404Smarcel * 1. Redistributions of source code must retain the above copyright 10121404Smarcel * notice, this list of conditions and the following disclaimer. 11121404Smarcel * 2. Redistributions in binary form must reproduce the above copyright 12121404Smarcel * notice, this list of conditions and the following disclaimer in the 13121404Smarcel * documentation and/or other materials provided with the distribution. 14121404Smarcel * 15121404Smarcel * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16121404Smarcel * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17121404Smarcel * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18121404Smarcel * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19121404Smarcel * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20121404Smarcel * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21121404Smarcel * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22121404Smarcel * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23121404Smarcel * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24121404Smarcel * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25121404Smarcel */ 26121404Smarcel 27121404Smarcel#include <sys/cdefs.h> 28121404Smarcel__FBSDID("$FreeBSD$"); 29121404Smarcel 30121404Smarcel#include <sys/param.h> 31121404Smarcel#include <sys/systm.h> 32121404Smarcel 33121404Smarcel#include <machine/stdarg.h> 34121404Smarcel 35121404Smarcel#include <ia64/disasm/disasm_int.h> 36121404Smarcel#include <ia64/disasm/disasm.h> 37121404Smarcel 38121404Smarcel#define FRAG(o,l) ((int)((o << 8) | (l & 0xff))) 39121404Smarcel#define FRAG_OFS(f) (f >> 8) 40121404Smarcel#define FRAG_LEN(f) (f & 0xff) 41121404Smarcel 42121404Smarcel/* 43121404Smarcel * Support functions. 44121404Smarcel */ 45121404Smarcelstatic void 46121404Smarcelasm_cmpltr_add(struct asm_inst *i, enum asm_cmpltr_class c, 47121404Smarcel enum asm_cmpltr_type t) 48121404Smarcel{ 49121404Smarcel 50121404Smarcel i->i_cmpltr[i->i_ncmpltrs].c_class = c; 51121404Smarcel i->i_cmpltr[i->i_ncmpltrs].c_type = t; 52121404Smarcel i->i_ncmpltrs++; 53121404Smarcel KASSERT(i->i_ncmpltrs < 6, ("foo")); 54121404Smarcel} 55121404Smarcel 56121404Smarcelstatic void 57121404Smarcelasm_hint(struct asm_inst *i, enum asm_cmpltr_class c) 58121404Smarcel{ 59121404Smarcel 60121404Smarcel switch (FIELD(i->i_bits, 28, 2)) { /* hint */ 61121404Smarcel case 0: 62121404Smarcel asm_cmpltr_add(i, c, ASM_CT_NONE); 63121404Smarcel break; 64121404Smarcel case 1: 65121404Smarcel asm_cmpltr_add(i, c, ASM_CT_NT1); 66121404Smarcel break; 67121404Smarcel case 2: 68121404Smarcel asm_cmpltr_add(i, c, ASM_CT_NT2); 69121404Smarcel break; 70121404Smarcel case 3: 71121404Smarcel asm_cmpltr_add(i, c, ASM_CT_NTA); 72121404Smarcel break; 73121404Smarcel } 74121404Smarcel} 75121404Smarcel 76121404Smarcelstatic void 77121404Smarcelasm_sf(struct asm_inst *i) 78121404Smarcel{ 79121404Smarcel 80121404Smarcel switch (FIELD(i->i_bits, 34, 2)) { 81121404Smarcel case 0: 82121404Smarcel asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S0); 83121404Smarcel break; 84121404Smarcel case 1: 85121404Smarcel asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S1); 86121404Smarcel break; 87121404Smarcel case 2: 88121404Smarcel asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S2); 89121404Smarcel break; 90121404Smarcel case 3: 91121404Smarcel asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S3); 92121404Smarcel break; 93121404Smarcel } 94121404Smarcel} 95121404Smarcel 96121404Smarcelstatic void 97121404Smarcelasm_brhint(struct asm_inst *i) 98121404Smarcel{ 99121404Smarcel uint64_t bits = i->i_bits; 100121404Smarcel 101121404Smarcel switch (FIELD(bits, 33, 2)) { /* bwh */ 102121404Smarcel case 0: 103121404Smarcel asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_SPTK); 104121404Smarcel break; 105121404Smarcel case 1: 106121404Smarcel asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_SPNT); 107121404Smarcel break; 108121404Smarcel case 2: 109121404Smarcel asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_DPTK); 110121404Smarcel break; 111121404Smarcel case 3: 112121404Smarcel asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_DPNT); 113121404Smarcel break; 114121404Smarcel } 115121404Smarcel 116121404Smarcel if (FIELD(bits, 12, 1)) /* ph */ 117121404Smarcel asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_MANY); 118121404Smarcel else 119121404Smarcel asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_FEW); 120121404Smarcel 121121404Smarcel if (FIELD(bits, 35, 1)) /* dh */ 122121404Smarcel asm_cmpltr_add(i, ASM_CC_DH, ASM_CT_CLR); 123121404Smarcel else 124121404Smarcel asm_cmpltr_add(i, ASM_CC_DH, ASM_CT_NONE); 125121404Smarcel} 126121404Smarcel 127121404Smarcelstatic void 128121404Smarcelasm_brphint(struct asm_inst *i) 129121404Smarcel{ 130121404Smarcel uint64_t bits = i->i_bits; 131121404Smarcel 132121404Smarcel switch (FIELD(bits, 3, 2)) { /* ipwh, indwh */ 133121404Smarcel case 0: 134121404Smarcel asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_SPTK); 135121404Smarcel break; 136121404Smarcel case 1: 137121404Smarcel asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_LOOP); 138121404Smarcel break; 139121404Smarcel case 2: 140121404Smarcel asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_DPTK); 141121404Smarcel break; 142121404Smarcel case 3: 143121404Smarcel asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_EXIT); 144121404Smarcel break; 145121404Smarcel } 146121404Smarcel 147121404Smarcel if (FIELD(bits, 5, 1)) /* ph */ 148121404Smarcel asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_MANY); 149121404Smarcel else 150121404Smarcel asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_FEW); 151121404Smarcel 152121404Smarcel switch (FIELD(bits, 0, 3)) { /* pvec */ 153121404Smarcel case 0: 154121404Smarcel asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_DC_DC); 155121404Smarcel break; 156121404Smarcel case 1: 157121404Smarcel asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_DC_NT); 158121404Smarcel break; 159121404Smarcel case 2: 160121404Smarcel asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_TK_DC); 161121404Smarcel break; 162121404Smarcel case 3: 163121404Smarcel asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_TK_TK); 164121404Smarcel break; 165121404Smarcel case 4: 166121404Smarcel asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_TK_NT); 167121404Smarcel break; 168121404Smarcel case 5: 169121404Smarcel asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_NT_DC); 170121404Smarcel break; 171121404Smarcel case 6: 172121404Smarcel asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_NT_TK); 173121404Smarcel break; 174121404Smarcel case 7: 175121404Smarcel asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_NT_NT); 176121404Smarcel break; 177121404Smarcel } 178121404Smarcel 179121404Smarcel if (FIELD(bits, 35, 1)) /* ih */ 180121404Smarcel asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_IMP); 181121404Smarcel else 182121404Smarcel asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_NONE); 183121404Smarcel} 184121404Smarcel 185121404Smarcelstatic enum asm_oper_type 186121404Smarcelasm_normalize(struct asm_inst *i, enum asm_op op) 187121404Smarcel{ 188121404Smarcel enum asm_oper_type ot = ASM_OPER_NONE; 189121404Smarcel 190121404Smarcel switch (op) { 191121404Smarcel case ASM_OP_BR_CALL: 192121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CALL); 193121404Smarcel op = ASM_OP_BR; 194121404Smarcel break; 195121404Smarcel case ASM_OP_BR_CEXIT: 196121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CEXIT); 197121404Smarcel op = ASM_OP_BR; 198121404Smarcel break; 199121404Smarcel case ASM_OP_BR_CLOOP: 200121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CLOOP); 201121404Smarcel op = ASM_OP_BR; 202121404Smarcel break; 203121404Smarcel case ASM_OP_BR_COND: 204121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_COND); 205121404Smarcel op = ASM_OP_BR; 206121404Smarcel break; 207121404Smarcel case ASM_OP_BR_CTOP: 208121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CTOP); 209121404Smarcel op = ASM_OP_BR; 210121404Smarcel break; 211121404Smarcel case ASM_OP_BR_IA: 212121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_IA); 213121404Smarcel op = ASM_OP_BR; 214121404Smarcel break; 215121404Smarcel case ASM_OP_BR_RET: 216121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_RET); 217121404Smarcel op = ASM_OP_BR; 218121404Smarcel break; 219121404Smarcel case ASM_OP_BR_WEXIT: 220121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_WEXIT); 221121404Smarcel op = ASM_OP_BR; 222121404Smarcel break; 223121404Smarcel case ASM_OP_BR_WTOP: 224121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_WTOP); 225121404Smarcel op = ASM_OP_BR; 226121404Smarcel break; 227121404Smarcel case ASM_OP_BREAK_B: 228121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_B); 229121404Smarcel op = ASM_OP_BREAK; 230121404Smarcel break; 231121404Smarcel case ASM_OP_BREAK_F: 232121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_F); 233121404Smarcel op = ASM_OP_BREAK; 234121404Smarcel break; 235121404Smarcel case ASM_OP_BREAK_I: 236121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I); 237121404Smarcel op = ASM_OP_BREAK; 238121404Smarcel break; 239121404Smarcel case ASM_OP_BREAK_M: 240121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M); 241121404Smarcel op = ASM_OP_BREAK; 242121404Smarcel break; 243121404Smarcel case ASM_OP_BREAK_X: 244121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_X); 245121404Smarcel op = ASM_OP_BREAK; 246121404Smarcel break; 247121404Smarcel case ASM_OP_BRL_COND: 248121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_COND); 249121404Smarcel op = ASM_OP_BRL; 250121404Smarcel break; 251121404Smarcel case ASM_OP_BRL_CALL: 252121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CALL); 253121404Smarcel op = ASM_OP_BRL; 254121404Smarcel break; 255121404Smarcel case ASM_OP_BRP_: 256121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_NONE); 257121404Smarcel op = ASM_OP_BRP; 258121404Smarcel break; 259121404Smarcel case ASM_OP_BRP_RET: 260121404Smarcel asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_RET); 261121404Smarcel op = ASM_OP_BRP; 262121404Smarcel break; 263121404Smarcel case ASM_OP_BSW_0: 264121404Smarcel asm_cmpltr_add(i, ASM_CC_BSW, ASM_CT_0); 265121404Smarcel op = ASM_OP_BSW; 266121404Smarcel break; 267121404Smarcel case ASM_OP_BSW_1: 268121404Smarcel asm_cmpltr_add(i, ASM_CC_BSW, ASM_CT_1); 269121404Smarcel op = ASM_OP_BSW; 270121404Smarcel break; 271121404Smarcel case ASM_OP_CHK_A_CLR: 272121404Smarcel asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_A); 273121404Smarcel asm_cmpltr_add(i, ASM_CC_ACLR, ASM_CT_CLR); 274121404Smarcel op = ASM_OP_CHK; 275121404Smarcel break; 276121404Smarcel case ASM_OP_CHK_A_NC: 277121404Smarcel asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_A); 278121404Smarcel asm_cmpltr_add(i, ASM_CC_ACLR, ASM_CT_NC); 279121404Smarcel op = ASM_OP_CHK; 280121404Smarcel break; 281121404Smarcel case ASM_OP_CHK_S: 282121404Smarcel asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_S); 283121404Smarcel op = ASM_OP_CHK; 284121404Smarcel break; 285121404Smarcel case ASM_OP_CHK_S_I: 286121404Smarcel asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_S); 287121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I); 288121404Smarcel op = ASM_OP_CHK; 289121404Smarcel break; 290121404Smarcel case ASM_OP_CHK_S_M: 291121404Smarcel asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_S); 292121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M); 293121404Smarcel op = ASM_OP_CHK; 294121404Smarcel break; 295121404Smarcel case ASM_OP_CLRRRB_: 296121404Smarcel asm_cmpltr_add(i, ASM_CC_CLRRRB, ASM_CT_NONE); 297121404Smarcel op = ASM_OP_CLRRRB; 298121404Smarcel break; 299121404Smarcel case ASM_OP_CLRRRB_PR: 300121404Smarcel asm_cmpltr_add(i, ASM_CC_CLRRRB, ASM_CT_PR); 301121404Smarcel op = ASM_OP_CLRRRB; 302121404Smarcel break; 303121404Smarcel case ASM_OP_CMP_EQ: 304121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 305121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 306121404Smarcel op = ASM_OP_CMP; 307121404Smarcel break; 308121404Smarcel case ASM_OP_CMP_EQ_AND: 309121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 310121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 311121404Smarcel op = ASM_OP_CMP; 312121404Smarcel break; 313121404Smarcel case ASM_OP_CMP_EQ_OR: 314121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 315121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 316121404Smarcel op = ASM_OP_CMP; 317121404Smarcel break; 318121404Smarcel case ASM_OP_CMP_EQ_OR_ANDCM: 319121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 320121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 321121404Smarcel op = ASM_OP_CMP; 322121404Smarcel break; 323121404Smarcel case ASM_OP_CMP_EQ_UNC: 324121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 325121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 326121404Smarcel op = ASM_OP_CMP; 327121404Smarcel break; 328121404Smarcel case ASM_OP_CMP_GE_AND: 329121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 330121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 331121404Smarcel op = ASM_OP_CMP; 332121404Smarcel break; 333121404Smarcel case ASM_OP_CMP_GE_OR: 334121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 335121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 336121404Smarcel op = ASM_OP_CMP; 337121404Smarcel break; 338121404Smarcel case ASM_OP_CMP_GE_OR_ANDCM: 339121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 340121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 341121404Smarcel op = ASM_OP_CMP; 342121404Smarcel break; 343121404Smarcel case ASM_OP_CMP_GT_AND: 344121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 345121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 346121404Smarcel op = ASM_OP_CMP; 347121404Smarcel break; 348121404Smarcel case ASM_OP_CMP_GT_OR: 349121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 350121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 351121404Smarcel op = ASM_OP_CMP; 352121404Smarcel break; 353121404Smarcel case ASM_OP_CMP_GT_OR_ANDCM: 354121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 355121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 356121404Smarcel op = ASM_OP_CMP; 357121404Smarcel break; 358121404Smarcel case ASM_OP_CMP_LE_AND: 359121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 360121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 361121404Smarcel op = ASM_OP_CMP; 362121404Smarcel break; 363121404Smarcel case ASM_OP_CMP_LE_OR: 364121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 365121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 366121404Smarcel op = ASM_OP_CMP; 367121404Smarcel break; 368121404Smarcel case ASM_OP_CMP_LE_OR_ANDCM: 369121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 370121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 371121404Smarcel op = ASM_OP_CMP; 372121404Smarcel break; 373121404Smarcel case ASM_OP_CMP_LT: 374121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 375121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 376121404Smarcel op = ASM_OP_CMP; 377121404Smarcel break; 378121404Smarcel case ASM_OP_CMP_LT_AND: 379121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 380121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 381121404Smarcel op = ASM_OP_CMP; 382121404Smarcel break; 383121404Smarcel case ASM_OP_CMP_LT_OR: 384121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 385121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 386121404Smarcel op = ASM_OP_CMP; 387121404Smarcel break; 388121404Smarcel case ASM_OP_CMP_LT_OR_ANDCM: 389121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 390121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 391121404Smarcel op = ASM_OP_CMP; 392121404Smarcel break; 393121404Smarcel case ASM_OP_CMP_LT_UNC: 394121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 395121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 396121404Smarcel op = ASM_OP_CMP; 397121404Smarcel break; 398121404Smarcel case ASM_OP_CMP_LTU: 399121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU); 400121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 401121404Smarcel op = ASM_OP_CMP; 402121404Smarcel break; 403121404Smarcel case ASM_OP_CMP_LTU_UNC: 404121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU); 405121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 406121404Smarcel op = ASM_OP_CMP; 407121404Smarcel break; 408121404Smarcel case ASM_OP_CMP_NE_AND: 409121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 410121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 411121404Smarcel op = ASM_OP_CMP; 412121404Smarcel break; 413121404Smarcel case ASM_OP_CMP_NE_OR: 414121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 415121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 416121404Smarcel op = ASM_OP_CMP; 417121404Smarcel break; 418121404Smarcel case ASM_OP_CMP_NE_OR_ANDCM: 419121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 420121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 421121404Smarcel op = ASM_OP_CMP; 422121404Smarcel break; 423121404Smarcel case ASM_OP_CMP4_EQ: 424121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 425121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 426121404Smarcel op = ASM_OP_CMP4; 427121404Smarcel break; 428121404Smarcel case ASM_OP_CMP4_EQ_AND: 429121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 430121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 431121404Smarcel op = ASM_OP_CMP4; 432121404Smarcel break; 433121404Smarcel case ASM_OP_CMP4_EQ_OR: 434121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 435121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 436121404Smarcel op = ASM_OP_CMP4; 437121404Smarcel break; 438121404Smarcel case ASM_OP_CMP4_EQ_OR_ANDCM: 439121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 440121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 441121404Smarcel op = ASM_OP_CMP4; 442121404Smarcel break; 443121404Smarcel case ASM_OP_CMP4_EQ_UNC: 444121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 445121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 446121404Smarcel op = ASM_OP_CMP4; 447121404Smarcel break; 448121404Smarcel case ASM_OP_CMP4_GE_AND: 449121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 450121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 451121404Smarcel op = ASM_OP_CMP4; 452121404Smarcel break; 453121404Smarcel case ASM_OP_CMP4_GE_OR: 454121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 455121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 456121404Smarcel op = ASM_OP_CMP4; 457121404Smarcel break; 458121404Smarcel case ASM_OP_CMP4_GE_OR_ANDCM: 459121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 460121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 461121404Smarcel op = ASM_OP_CMP4; 462121404Smarcel break; 463121404Smarcel case ASM_OP_CMP4_GT_AND: 464121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 465121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 466121404Smarcel op = ASM_OP_CMP4; 467121404Smarcel break; 468121404Smarcel case ASM_OP_CMP4_GT_OR: 469121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 470121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 471121404Smarcel op = ASM_OP_CMP4; 472121404Smarcel break; 473121404Smarcel case ASM_OP_CMP4_GT_OR_ANDCM: 474121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 475121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 476121404Smarcel op = ASM_OP_CMP4; 477121404Smarcel break; 478121404Smarcel case ASM_OP_CMP4_LE_AND: 479121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 480121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 481121404Smarcel op = ASM_OP_CMP4; 482121404Smarcel break; 483121404Smarcel case ASM_OP_CMP4_LE_OR: 484121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 485121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 486121404Smarcel op = ASM_OP_CMP4; 487121404Smarcel break; 488121404Smarcel case ASM_OP_CMP4_LE_OR_ANDCM: 489121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 490121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 491121404Smarcel op = ASM_OP_CMP4; 492121404Smarcel break; 493121404Smarcel case ASM_OP_CMP4_LT: 494121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 495121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 496121404Smarcel op = ASM_OP_CMP4; 497121404Smarcel break; 498121404Smarcel case ASM_OP_CMP4_LT_AND: 499121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 500121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 501121404Smarcel op = ASM_OP_CMP4; 502121404Smarcel break; 503121404Smarcel case ASM_OP_CMP4_LT_OR: 504121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 505121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 506121404Smarcel op = ASM_OP_CMP4; 507121404Smarcel break; 508121404Smarcel case ASM_OP_CMP4_LT_OR_ANDCM: 509121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 510121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 511121404Smarcel op = ASM_OP_CMP4; 512121404Smarcel break; 513121404Smarcel case ASM_OP_CMP4_LT_UNC: 514121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 515121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 516121404Smarcel op = ASM_OP_CMP4; 517121404Smarcel break; 518121404Smarcel case ASM_OP_CMP4_LTU: 519121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU); 520121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 521121404Smarcel op = ASM_OP_CMP4; 522121404Smarcel break; 523121404Smarcel case ASM_OP_CMP4_LTU_UNC: 524121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU); 525121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 526121404Smarcel op = ASM_OP_CMP4; 527121404Smarcel break; 528121404Smarcel case ASM_OP_CMP4_NE_AND: 529121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 530121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 531121404Smarcel op = ASM_OP_CMP4; 532121404Smarcel break; 533121404Smarcel case ASM_OP_CMP4_NE_OR: 534121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 535121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 536121404Smarcel op = ASM_OP_CMP4; 537121404Smarcel break; 538121404Smarcel case ASM_OP_CMP4_NE_OR_ANDCM: 539121404Smarcel asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 540121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 541121404Smarcel op = ASM_OP_CMP4; 542121404Smarcel break; 543121404Smarcel case ASM_OP_CMP8XCHG16_ACQ: 544121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 545121404Smarcel op = ASM_OP_CMP8XCHG16; 546121404Smarcel break; 547121404Smarcel case ASM_OP_CMP8XCHG16_REL: 548121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 549121404Smarcel op = ASM_OP_CMP8XCHG16; 550121404Smarcel break; 551121404Smarcel case ASM_OP_CMPXCHG1_ACQ: 552121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 553121404Smarcel op = ASM_OP_CMPXCHG1; 554121404Smarcel break; 555121404Smarcel case ASM_OP_CMPXCHG1_REL: 556121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 557121404Smarcel op = ASM_OP_CMPXCHG1; 558121404Smarcel break; 559121404Smarcel case ASM_OP_CMPXCHG2_ACQ: 560121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 561121404Smarcel op = ASM_OP_CMPXCHG2; 562121404Smarcel break; 563121404Smarcel case ASM_OP_CMPXCHG2_REL: 564121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 565121404Smarcel op = ASM_OP_CMPXCHG2; 566121404Smarcel break; 567121404Smarcel case ASM_OP_CMPXCHG4_ACQ: 568121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 569121404Smarcel op = ASM_OP_CMPXCHG4; 570121404Smarcel break; 571121404Smarcel case ASM_OP_CMPXCHG4_REL: 572121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 573121404Smarcel op = ASM_OP_CMPXCHG4; 574121404Smarcel break; 575121404Smarcel case ASM_OP_CMPXCHG8_ACQ: 576121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 577121404Smarcel op = ASM_OP_CMPXCHG8; 578121404Smarcel break; 579121404Smarcel case ASM_OP_CMPXCHG8_REL: 580121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 581121404Smarcel op = ASM_OP_CMPXCHG8; 582121404Smarcel break; 583121404Smarcel case ASM_OP_CZX1_L: 584121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 585121404Smarcel op = ASM_OP_CZX1; 586121404Smarcel break; 587121404Smarcel case ASM_OP_CZX1_R: 588121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 589121404Smarcel op = ASM_OP_CZX1; 590121404Smarcel break; 591121404Smarcel case ASM_OP_CZX2_L: 592121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 593121404Smarcel op = ASM_OP_CZX2; 594121404Smarcel break; 595121404Smarcel case ASM_OP_CZX2_R: 596121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 597121404Smarcel op = ASM_OP_CZX2; 598121404Smarcel break; 599121404Smarcel case ASM_OP_DEP_: 600121404Smarcel asm_cmpltr_add(i, ASM_CC_DEP, ASM_CT_NONE); 601121404Smarcel op = ASM_OP_DEP; 602121404Smarcel break; 603121404Smarcel case ASM_OP_DEP_Z: 604121404Smarcel asm_cmpltr_add(i, ASM_CC_DEP, ASM_CT_Z); 605121404Smarcel op = ASM_OP_DEP; 606121404Smarcel break; 607121404Smarcel case ASM_OP_FC_: 608121404Smarcel asm_cmpltr_add(i, ASM_CC_FC, ASM_CT_NONE); 609121404Smarcel op = ASM_OP_FC; 610121404Smarcel break; 611121404Smarcel case ASM_OP_FC_I: 612121404Smarcel asm_cmpltr_add(i, ASM_CC_FC, ASM_CT_I); 613121404Smarcel op = ASM_OP_FC; 614121404Smarcel break; 615121404Smarcel case ASM_OP_FCLASS_M: 616121404Smarcel asm_cmpltr_add(i, ASM_CC_FCREL, ASM_CT_M); 617121404Smarcel op = ASM_OP_FCLASS; 618121404Smarcel break; 619121404Smarcel case ASM_OP_FCVT_FX: 620121404Smarcel asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX); 621121404Smarcel asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE); 622121404Smarcel op = ASM_OP_FCVT; 623121404Smarcel break; 624121404Smarcel case ASM_OP_FCVT_FX_TRUNC: 625121404Smarcel asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX); 626121404Smarcel asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC); 627121404Smarcel op = ASM_OP_FCVT; 628121404Smarcel break; 629121404Smarcel case ASM_OP_FCVT_FXU: 630121404Smarcel asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU); 631121404Smarcel asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE); 632121404Smarcel op = ASM_OP_FCVT; 633121404Smarcel break; 634121404Smarcel case ASM_OP_FCVT_FXU_TRUNC: 635121404Smarcel asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU); 636121404Smarcel asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC); 637121404Smarcel op = ASM_OP_FCVT; 638121404Smarcel break; 639121404Smarcel case ASM_OP_FCVT_XF: 640121404Smarcel asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_XF); 641121404Smarcel asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE); 642121404Smarcel op = ASM_OP_FCVT; 643121404Smarcel break; 644121404Smarcel case ASM_OP_FETCHADD4_ACQ: 645121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 646121404Smarcel op = ASM_OP_FETCHADD4; 647121404Smarcel break; 648121404Smarcel case ASM_OP_FETCHADD4_REL: 649121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 650121404Smarcel op = ASM_OP_FETCHADD4; 651121404Smarcel break; 652121404Smarcel case ASM_OP_FETCHADD8_ACQ: 653121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 654121404Smarcel op = ASM_OP_FETCHADD8; 655121404Smarcel break; 656121404Smarcel case ASM_OP_FETCHADD8_REL: 657121404Smarcel asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 658121404Smarcel op = ASM_OP_FETCHADD8; 659121404Smarcel break; 660121404Smarcel case ASM_OP_FMA_: 661121404Smarcel asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_NONE); 662121404Smarcel op = ASM_OP_FMA; 663121404Smarcel break; 664121404Smarcel case ASM_OP_FMA_D: 665121404Smarcel asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_D); 666121404Smarcel op = ASM_OP_FMA; 667121404Smarcel break; 668121404Smarcel case ASM_OP_FMA_S: 669121404Smarcel asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_S); 670121404Smarcel op = ASM_OP_FMA; 671121404Smarcel break; 672121404Smarcel case ASM_OP_FMERGE_NS: 673121404Smarcel asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_NS); 674121404Smarcel op = ASM_OP_FMERGE; 675121404Smarcel break; 676121404Smarcel case ASM_OP_FMERGE_S: 677121404Smarcel asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_S); 678121404Smarcel op = ASM_OP_FMERGE; 679121404Smarcel break; 680121404Smarcel case ASM_OP_FMERGE_SE: 681121404Smarcel asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_SE); 682121404Smarcel op = ASM_OP_FMERGE; 683121404Smarcel break; 684121404Smarcel case ASM_OP_FMIX_L: 685121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 686121404Smarcel op = ASM_OP_FMIX; 687121404Smarcel break; 688121404Smarcel case ASM_OP_FMIX_LR: 689121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_LR); 690121404Smarcel op = ASM_OP_FMIX; 691121404Smarcel break; 692121404Smarcel case ASM_OP_FMIX_R: 693121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 694121404Smarcel op = ASM_OP_FMIX; 695121404Smarcel break; 696121404Smarcel case ASM_OP_FMS_: 697121404Smarcel asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_NONE); 698121404Smarcel op = ASM_OP_FMS; 699121404Smarcel break; 700121404Smarcel case ASM_OP_FMS_D: 701121404Smarcel asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_D); 702121404Smarcel op = ASM_OP_FMS; 703121404Smarcel break; 704121404Smarcel case ASM_OP_FMS_S: 705121404Smarcel asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_S); 706121404Smarcel op = ASM_OP_FMS; 707121404Smarcel break; 708121404Smarcel case ASM_OP_FNMA_: 709121404Smarcel asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_NONE); 710121404Smarcel op = ASM_OP_FNMA; 711121404Smarcel break; 712121404Smarcel case ASM_OP_FNMA_D: 713121404Smarcel asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_D); 714121404Smarcel op = ASM_OP_FNMA; 715121404Smarcel break; 716121404Smarcel case ASM_OP_FNMA_S: 717121404Smarcel asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_S); 718121404Smarcel op = ASM_OP_FNMA; 719121404Smarcel break; 720121404Smarcel case ASM_OP_FPCMP_EQ: 721121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_EQ); 722121404Smarcel op = ASM_OP_FPCMP; 723121404Smarcel break; 724121404Smarcel case ASM_OP_FPCMP_LE: 725121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LE); 726121404Smarcel op = ASM_OP_FPCMP; 727121404Smarcel break; 728121404Smarcel case ASM_OP_FPCMP_LT: 729121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LT); 730121404Smarcel op = ASM_OP_FPCMP; 731121404Smarcel break; 732121404Smarcel case ASM_OP_FPCMP_NEQ: 733121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_NEQ); 734121404Smarcel op = ASM_OP_FPCMP; 735121404Smarcel break; 736121404Smarcel case ASM_OP_FPCMP_NLE: 737121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_NLE); 738121404Smarcel op = ASM_OP_FPCMP; 739121404Smarcel break; 740121404Smarcel case ASM_OP_FPCMP_NLT: 741121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_NLT); 742121404Smarcel op = ASM_OP_FPCMP; 743121404Smarcel break; 744121404Smarcel case ASM_OP_FPCMP_ORD: 745121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_ORD); 746121404Smarcel op = ASM_OP_FPCMP; 747121404Smarcel break; 748121404Smarcel case ASM_OP_FPCMP_UNORD: 749121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_UNORD); 750121404Smarcel op = ASM_OP_FPCMP; 751121404Smarcel break; 752121404Smarcel case ASM_OP_FPCVT_FX: 753121404Smarcel asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX); 754121404Smarcel asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE); 755121404Smarcel op = ASM_OP_FPCVT; 756121404Smarcel break; 757121404Smarcel case ASM_OP_FPCVT_FX_TRUNC: 758121404Smarcel asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX); 759121404Smarcel asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC); 760121404Smarcel op = ASM_OP_FPCVT; 761121404Smarcel break; 762121404Smarcel case ASM_OP_FPCVT_FXU: 763121404Smarcel asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU); 764121404Smarcel asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE); 765121404Smarcel op = ASM_OP_FPCVT; 766121404Smarcel break; 767121404Smarcel case ASM_OP_FPCVT_FXU_TRUNC: 768121404Smarcel asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU); 769121404Smarcel asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC); 770121404Smarcel op = ASM_OP_FPCVT; 771121404Smarcel break; 772121404Smarcel case ASM_OP_FPMERGE_NS: 773121404Smarcel asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_NS); 774121404Smarcel op = ASM_OP_FPMERGE; 775121404Smarcel break; 776121404Smarcel case ASM_OP_FPMERGE_S: 777121404Smarcel asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_S); 778121404Smarcel op = ASM_OP_FPMERGE; 779121404Smarcel break; 780121404Smarcel case ASM_OP_FPMERGE_SE: 781121404Smarcel asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_SE); 782121404Smarcel op = ASM_OP_FPMERGE; 783121404Smarcel break; 784121404Smarcel case ASM_OP_FSWAP_: 785121404Smarcel asm_cmpltr_add(i, ASM_CC_FSWAP, ASM_CT_NONE); 786121404Smarcel op = ASM_OP_FSWAP; 787121404Smarcel break; 788121404Smarcel case ASM_OP_FSWAP_NL: 789121404Smarcel asm_cmpltr_add(i, ASM_CC_FSWAP, ASM_CT_NL); 790121404Smarcel op = ASM_OP_FSWAP; 791121404Smarcel break; 792121404Smarcel case ASM_OP_FSWAP_NR: 793121404Smarcel asm_cmpltr_add(i, ASM_CC_FSWAP, ASM_CT_NR); 794121404Smarcel op = ASM_OP_FSWAP; 795121404Smarcel break; 796121404Smarcel case ASM_OP_FSXT_L: 797121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 798121404Smarcel op = ASM_OP_FSXT; 799121404Smarcel break; 800121404Smarcel case ASM_OP_FSXT_R: 801121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 802121404Smarcel op = ASM_OP_FSXT; 803121404Smarcel break; 804121404Smarcel case ASM_OP_GETF_D: 805121404Smarcel asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_D); 806121404Smarcel op = ASM_OP_GETF; 807121404Smarcel break; 808121404Smarcel case ASM_OP_GETF_EXP: 809121404Smarcel asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_EXP); 810121404Smarcel op = ASM_OP_GETF; 811121404Smarcel break; 812121404Smarcel case ASM_OP_GETF_S: 813121404Smarcel asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_S); 814121404Smarcel op = ASM_OP_GETF; 815121404Smarcel break; 816121404Smarcel case ASM_OP_GETF_SIG: 817121404Smarcel asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_SIG); 818121404Smarcel op = ASM_OP_GETF; 819121404Smarcel break; 820159909Smarcel case ASM_OP_HINT_B: 821159909Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_B); 822159909Smarcel op = ASM_OP_HINT; 823159909Smarcel break; 824159909Smarcel case ASM_OP_HINT_F: 825159909Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_F); 826159909Smarcel op = ASM_OP_HINT; 827159909Smarcel break; 828159909Smarcel case ASM_OP_HINT_I: 829159909Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I); 830159909Smarcel op = ASM_OP_HINT; 831159909Smarcel break; 832159909Smarcel case ASM_OP_HINT_M: 833159909Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M); 834159909Smarcel op = ASM_OP_HINT; 835159909Smarcel break; 836159909Smarcel case ASM_OP_HINT_X: 837159909Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_X); 838159909Smarcel op = ASM_OP_HINT; 839159909Smarcel break; 840121404Smarcel case ASM_OP_INVALA_: 841121404Smarcel asm_cmpltr_add(i, ASM_CC_INVALA, ASM_CT_NONE); 842121404Smarcel op = ASM_OP_INVALA; 843121404Smarcel break; 844121404Smarcel case ASM_OP_INVALA_E: 845121404Smarcel asm_cmpltr_add(i, ASM_CC_INVALA, ASM_CT_E); 846121404Smarcel op = ASM_OP_INVALA; 847121404Smarcel break; 848121404Smarcel case ASM_OP_ITC_D: 849121404Smarcel asm_cmpltr_add(i, ASM_CC_ITC, ASM_CT_D); 850121404Smarcel op = ASM_OP_ITC; 851121404Smarcel break; 852121404Smarcel case ASM_OP_ITC_I: 853121404Smarcel asm_cmpltr_add(i, ASM_CC_ITC, ASM_CT_I); 854121404Smarcel op = ASM_OP_ITC; 855121404Smarcel break; 856121404Smarcel case ASM_OP_ITR_D: 857121404Smarcel asm_cmpltr_add(i, ASM_CC_ITR, ASM_CT_D); 858121404Smarcel ot = ASM_OPER_DTR; 859121404Smarcel op = ASM_OP_ITR; 860121404Smarcel break; 861121404Smarcel case ASM_OP_ITR_I: 862121404Smarcel asm_cmpltr_add(i, ASM_CC_ITR, ASM_CT_I); 863121404Smarcel ot = ASM_OPER_ITR; 864121404Smarcel op = ASM_OP_ITR; 865121404Smarcel break; 866121404Smarcel case ASM_OP_LD1_: 867121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE); 868121404Smarcel op = ASM_OP_LD1; 869121404Smarcel break; 870121404Smarcel case ASM_OP_LD1_A: 871121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A); 872121404Smarcel op = ASM_OP_LD1; 873121404Smarcel break; 874121404Smarcel case ASM_OP_LD1_ACQ: 875121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ); 876121404Smarcel op = ASM_OP_LD1; 877121404Smarcel break; 878121404Smarcel case ASM_OP_LD1_BIAS: 879121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS); 880121404Smarcel op = ASM_OP_LD1; 881121404Smarcel break; 882121404Smarcel case ASM_OP_LD1_C_CLR: 883121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR); 884121404Smarcel op = ASM_OP_LD1; 885121404Smarcel break; 886121404Smarcel case ASM_OP_LD1_C_CLR_ACQ: 887121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ); 888121404Smarcel op = ASM_OP_LD1; 889121404Smarcel break; 890121404Smarcel case ASM_OP_LD1_C_NC: 891121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC); 892121404Smarcel op = ASM_OP_LD1; 893121404Smarcel break; 894121404Smarcel case ASM_OP_LD1_S: 895121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S); 896121404Smarcel op = ASM_OP_LD1; 897121404Smarcel break; 898121404Smarcel case ASM_OP_LD1_SA: 899121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA); 900121404Smarcel op = ASM_OP_LD1; 901121404Smarcel break; 902121404Smarcel case ASM_OP_LD16_: 903121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE); 904121404Smarcel op = ASM_OP_LD16; 905121404Smarcel break; 906121404Smarcel case ASM_OP_LD16_ACQ: 907121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ); 908121404Smarcel op = ASM_OP_LD16; 909121404Smarcel break; 910121404Smarcel case ASM_OP_LD2_: 911121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE); 912121404Smarcel op = ASM_OP_LD2; 913121404Smarcel break; 914121404Smarcel case ASM_OP_LD2_A: 915121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A); 916121404Smarcel op = ASM_OP_LD2; 917121404Smarcel break; 918121404Smarcel case ASM_OP_LD2_ACQ: 919121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ); 920121404Smarcel op = ASM_OP_LD2; 921121404Smarcel break; 922121404Smarcel case ASM_OP_LD2_BIAS: 923121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS); 924121404Smarcel op = ASM_OP_LD2; 925121404Smarcel break; 926121404Smarcel case ASM_OP_LD2_C_CLR: 927121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR); 928121404Smarcel op = ASM_OP_LD2; 929121404Smarcel break; 930121404Smarcel case ASM_OP_LD2_C_CLR_ACQ: 931121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ); 932121404Smarcel op = ASM_OP_LD2; 933121404Smarcel break; 934121404Smarcel case ASM_OP_LD2_C_NC: 935121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC); 936121404Smarcel op = ASM_OP_LD2; 937121404Smarcel break; 938121404Smarcel case ASM_OP_LD2_S: 939121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S); 940121404Smarcel op = ASM_OP_LD2; 941121404Smarcel break; 942121404Smarcel case ASM_OP_LD2_SA: 943121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA); 944121404Smarcel op = ASM_OP_LD2; 945121404Smarcel break; 946121404Smarcel case ASM_OP_LD4_: 947121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE); 948121404Smarcel op = ASM_OP_LD4; 949121404Smarcel break; 950121404Smarcel case ASM_OP_LD4_A: 951121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A); 952121404Smarcel op = ASM_OP_LD4; 953121404Smarcel break; 954121404Smarcel case ASM_OP_LD4_ACQ: 955121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ); 956121404Smarcel op = ASM_OP_LD4; 957121404Smarcel break; 958121404Smarcel case ASM_OP_LD4_BIAS: 959121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS); 960121404Smarcel op = ASM_OP_LD4; 961121404Smarcel break; 962121404Smarcel case ASM_OP_LD4_C_CLR: 963121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR); 964121404Smarcel op = ASM_OP_LD4; 965121404Smarcel break; 966121404Smarcel case ASM_OP_LD4_C_CLR_ACQ: 967121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ); 968121404Smarcel op = ASM_OP_LD4; 969121404Smarcel break; 970121404Smarcel case ASM_OP_LD4_C_NC: 971121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC); 972121404Smarcel op = ASM_OP_LD4; 973121404Smarcel break; 974121404Smarcel case ASM_OP_LD4_S: 975121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S); 976121404Smarcel op = ASM_OP_LD4; 977121404Smarcel break; 978121404Smarcel case ASM_OP_LD4_SA: 979121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA); 980121404Smarcel op = ASM_OP_LD4; 981121404Smarcel break; 982121404Smarcel case ASM_OP_LD8_: 983121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE); 984121404Smarcel op = ASM_OP_LD8; 985121404Smarcel break; 986121404Smarcel case ASM_OP_LD8_A: 987121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A); 988121404Smarcel op = ASM_OP_LD8; 989121404Smarcel break; 990121404Smarcel case ASM_OP_LD8_ACQ: 991121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ); 992121404Smarcel op = ASM_OP_LD8; 993121404Smarcel break; 994121404Smarcel case ASM_OP_LD8_BIAS: 995121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS); 996121404Smarcel op = ASM_OP_LD8; 997121404Smarcel break; 998121404Smarcel case ASM_OP_LD8_C_CLR: 999121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR); 1000121404Smarcel op = ASM_OP_LD8; 1001121404Smarcel break; 1002121404Smarcel case ASM_OP_LD8_C_CLR_ACQ: 1003121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ); 1004121404Smarcel op = ASM_OP_LD8; 1005121404Smarcel break; 1006121404Smarcel case ASM_OP_LD8_C_NC: 1007121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC); 1008121404Smarcel op = ASM_OP_LD8; 1009121404Smarcel break; 1010121404Smarcel case ASM_OP_LD8_FILL: 1011121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_FILL); 1012121404Smarcel op = ASM_OP_LD8; 1013121404Smarcel break; 1014121404Smarcel case ASM_OP_LD8_S: 1015121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S); 1016121404Smarcel op = ASM_OP_LD8; 1017121404Smarcel break; 1018121404Smarcel case ASM_OP_LD8_SA: 1019121404Smarcel asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA); 1020121404Smarcel op = ASM_OP_LD8; 1021121404Smarcel break; 1022121404Smarcel case ASM_OP_LDF_FILL: 1023121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_FILL); 1024121404Smarcel op = ASM_OP_LDF; 1025121404Smarcel break; 1026121404Smarcel case ASM_OP_LDF8_: 1027121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1028121404Smarcel op = ASM_OP_LDF8; 1029121404Smarcel break; 1030121404Smarcel case ASM_OP_LDF8_A: 1031121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1032121404Smarcel op = ASM_OP_LDF8; 1033121404Smarcel break; 1034121404Smarcel case ASM_OP_LDF8_C_CLR: 1035121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1036121404Smarcel op = ASM_OP_LDF8; 1037121404Smarcel break; 1038121404Smarcel case ASM_OP_LDF8_C_NC: 1039121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1040121404Smarcel op = ASM_OP_LDF8; 1041121404Smarcel break; 1042121404Smarcel case ASM_OP_LDF8_S: 1043121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1044121404Smarcel op = ASM_OP_LDF8; 1045121404Smarcel break; 1046121404Smarcel case ASM_OP_LDF8_SA: 1047121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1048121404Smarcel op = ASM_OP_LDF8; 1049121404Smarcel break; 1050121404Smarcel case ASM_OP_LDFD_: 1051121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1052121404Smarcel op = ASM_OP_LDFD; 1053121404Smarcel break; 1054121404Smarcel case ASM_OP_LDFD_A: 1055121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1056121404Smarcel op = ASM_OP_LDFD; 1057121404Smarcel break; 1058121404Smarcel case ASM_OP_LDFD_C_CLR: 1059121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1060121404Smarcel op = ASM_OP_LDFD; 1061121404Smarcel break; 1062121404Smarcel case ASM_OP_LDFD_C_NC: 1063121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1064121404Smarcel op = ASM_OP_LDFD; 1065121404Smarcel break; 1066121404Smarcel case ASM_OP_LDFD_S: 1067121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1068121404Smarcel op = ASM_OP_LDFD; 1069121404Smarcel break; 1070121404Smarcel case ASM_OP_LDFD_SA: 1071121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1072121404Smarcel op = ASM_OP_LDFD; 1073121404Smarcel break; 1074121404Smarcel case ASM_OP_LDFE_: 1075121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1076121404Smarcel op = ASM_OP_LDFE; 1077121404Smarcel break; 1078121404Smarcel case ASM_OP_LDFE_A: 1079121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1080121404Smarcel op = ASM_OP_LDFE; 1081121404Smarcel break; 1082121404Smarcel case ASM_OP_LDFE_C_CLR: 1083121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1084121404Smarcel op = ASM_OP_LDFE; 1085121404Smarcel break; 1086121404Smarcel case ASM_OP_LDFE_C_NC: 1087121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1088121404Smarcel op = ASM_OP_LDFE; 1089121404Smarcel break; 1090121404Smarcel case ASM_OP_LDFE_S: 1091121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1092121404Smarcel op = ASM_OP_LDFE; 1093121404Smarcel break; 1094121404Smarcel case ASM_OP_LDFE_SA: 1095121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1096121404Smarcel op = ASM_OP_LDFE; 1097121404Smarcel break; 1098121404Smarcel case ASM_OP_LDFP8_: 1099121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1100121404Smarcel op = ASM_OP_LDFP8; 1101121404Smarcel break; 1102121404Smarcel case ASM_OP_LDFP8_A: 1103121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1104121404Smarcel op = ASM_OP_LDFP8; 1105121404Smarcel break; 1106121404Smarcel case ASM_OP_LDFP8_C_CLR: 1107121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1108121404Smarcel op = ASM_OP_LDFP8; 1109121404Smarcel break; 1110121404Smarcel case ASM_OP_LDFP8_C_NC: 1111121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1112121404Smarcel op = ASM_OP_LDFP8; 1113121404Smarcel break; 1114121404Smarcel case ASM_OP_LDFP8_S: 1115121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1116121404Smarcel op = ASM_OP_LDFP8; 1117121404Smarcel break; 1118121404Smarcel case ASM_OP_LDFP8_SA: 1119121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1120121404Smarcel op = ASM_OP_LDFP8; 1121121404Smarcel break; 1122121404Smarcel case ASM_OP_LDFPD_: 1123121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1124121404Smarcel op = ASM_OP_LDFPD; 1125121404Smarcel break; 1126121404Smarcel case ASM_OP_LDFPD_A: 1127121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1128121404Smarcel op = ASM_OP_LDFPD; 1129121404Smarcel break; 1130121404Smarcel case ASM_OP_LDFPD_C_CLR: 1131121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1132121404Smarcel op = ASM_OP_LDFPD; 1133121404Smarcel break; 1134121404Smarcel case ASM_OP_LDFPD_C_NC: 1135121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1136121404Smarcel op = ASM_OP_LDFPD; 1137121404Smarcel break; 1138121404Smarcel case ASM_OP_LDFPD_S: 1139121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1140121404Smarcel op = ASM_OP_LDFPD; 1141121404Smarcel break; 1142121404Smarcel case ASM_OP_LDFPD_SA: 1143121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1144121404Smarcel op = ASM_OP_LDFPD; 1145121404Smarcel break; 1146121404Smarcel case ASM_OP_LDFPS_: 1147121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1148121404Smarcel op = ASM_OP_LDFPS; 1149121404Smarcel break; 1150121404Smarcel case ASM_OP_LDFPS_A: 1151121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1152121404Smarcel op = ASM_OP_LDFPS; 1153121404Smarcel break; 1154121404Smarcel case ASM_OP_LDFPS_C_CLR: 1155121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1156121404Smarcel op = ASM_OP_LDFPS; 1157121404Smarcel break; 1158121404Smarcel case ASM_OP_LDFPS_C_NC: 1159121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1160121404Smarcel op = ASM_OP_LDFPS; 1161121404Smarcel break; 1162121404Smarcel case ASM_OP_LDFPS_S: 1163121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1164121404Smarcel op = ASM_OP_LDFPS; 1165121404Smarcel break; 1166121404Smarcel case ASM_OP_LDFPS_SA: 1167121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1168121404Smarcel op = ASM_OP_LDFPS; 1169121404Smarcel break; 1170121404Smarcel case ASM_OP_LDFS_: 1171121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1172121404Smarcel op = ASM_OP_LDFS; 1173121404Smarcel break; 1174121404Smarcel case ASM_OP_LDFS_A: 1175121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1176121404Smarcel op = ASM_OP_LDFS; 1177121404Smarcel break; 1178121404Smarcel case ASM_OP_LDFS_C_CLR: 1179121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1180121404Smarcel op = ASM_OP_LDFS; 1181121404Smarcel break; 1182121404Smarcel case ASM_OP_LDFS_C_NC: 1183121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1184121404Smarcel op = ASM_OP_LDFS; 1185121404Smarcel break; 1186121404Smarcel case ASM_OP_LDFS_S: 1187121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1188121404Smarcel op = ASM_OP_LDFS; 1189121404Smarcel break; 1190121404Smarcel case ASM_OP_LDFS_SA: 1191121404Smarcel asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1192121404Smarcel op = ASM_OP_LDFS; 1193121404Smarcel break; 1194121404Smarcel case ASM_OP_LFETCH_: 1195121404Smarcel asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_NONE); 1196121404Smarcel asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_NONE); 1197121404Smarcel op = ASM_OP_LFETCH; 1198121404Smarcel break; 1199121404Smarcel case ASM_OP_LFETCH_EXCL: 1200121404Smarcel asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_NONE); 1201121404Smarcel asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_EXCL); 1202121404Smarcel op = ASM_OP_LFETCH; 1203121404Smarcel break; 1204121404Smarcel case ASM_OP_LFETCH_FAULT: 1205121404Smarcel asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_FAULT); 1206121404Smarcel asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_NONE); 1207121404Smarcel op = ASM_OP_LFETCH; 1208121404Smarcel break; 1209121404Smarcel case ASM_OP_LFETCH_FAULT_EXCL: 1210121404Smarcel asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_FAULT); 1211121404Smarcel asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_EXCL); 1212121404Smarcel op = ASM_OP_LFETCH; 1213121404Smarcel break; 1214121404Smarcel case ASM_OP_MF_: 1215121404Smarcel asm_cmpltr_add(i, ASM_CC_MF, ASM_CT_NONE); 1216121404Smarcel op = ASM_OP_MF; 1217121404Smarcel break; 1218121404Smarcel case ASM_OP_MF_A: 1219121404Smarcel asm_cmpltr_add(i, ASM_CC_MF, ASM_CT_A); 1220121404Smarcel op = ASM_OP_MF; 1221121404Smarcel break; 1222121404Smarcel case ASM_OP_MIX1_L: 1223121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 1224121404Smarcel op = ASM_OP_MIX1; 1225121404Smarcel break; 1226121404Smarcel case ASM_OP_MIX1_R: 1227121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 1228121404Smarcel op = ASM_OP_MIX1; 1229121404Smarcel break; 1230121404Smarcel case ASM_OP_MIX2_L: 1231121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 1232121404Smarcel op = ASM_OP_MIX2; 1233121404Smarcel break; 1234121404Smarcel case ASM_OP_MIX2_R: 1235121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 1236121404Smarcel op = ASM_OP_MIX2; 1237121404Smarcel break; 1238121404Smarcel case ASM_OP_MIX4_L: 1239121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 1240121404Smarcel op = ASM_OP_MIX4; 1241121404Smarcel break; 1242121404Smarcel case ASM_OP_MIX4_R: 1243121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 1244121404Smarcel op = ASM_OP_MIX4; 1245121404Smarcel break; 1246121404Smarcel case ASM_OP_MOV_: 1247121404Smarcel asm_cmpltr_add(i, ASM_CC_MOV, ASM_CT_NONE); 1248121404Smarcel op = ASM_OP_MOV; 1249121404Smarcel break; 1250121404Smarcel case ASM_OP_MOV_I: 1251121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I); 1252121404Smarcel op = ASM_OP_MOV; 1253121404Smarcel break; 1254121404Smarcel case ASM_OP_MOV_M: 1255121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M); 1256121404Smarcel op = ASM_OP_MOV; 1257121404Smarcel break; 1258121404Smarcel case ASM_OP_MOV_RET: 1259121404Smarcel asm_cmpltr_add(i, ASM_CC_MOV, ASM_CT_RET); 1260121404Smarcel op = ASM_OP_MOV; 1261121404Smarcel break; 1262121404Smarcel case ASM_OP_MOV_CPUID: 1263121404Smarcel ot = ASM_OPER_CPUID; 1264121404Smarcel op = ASM_OP_MOV; 1265121404Smarcel break; 1266121404Smarcel case ASM_OP_MOV_DBR: 1267121404Smarcel ot = ASM_OPER_DBR; 1268121404Smarcel op = ASM_OP_MOV; 1269121404Smarcel break; 1270121404Smarcel case ASM_OP_MOV_IBR: 1271121404Smarcel ot = ASM_OPER_IBR; 1272121404Smarcel op = ASM_OP_MOV; 1273121404Smarcel break; 1274121404Smarcel case ASM_OP_MOV_IP: 1275121404Smarcel ot = ASM_OPER_IP; 1276121404Smarcel op = ASM_OP_MOV; 1277121404Smarcel break; 1278121404Smarcel case ASM_OP_MOV_MSR: 1279121404Smarcel ot = ASM_OPER_MSR; 1280121404Smarcel op = ASM_OP_MOV; 1281121404Smarcel break; 1282121404Smarcel case ASM_OP_MOV_PKR: 1283121404Smarcel ot = ASM_OPER_PKR; 1284121404Smarcel op = ASM_OP_MOV; 1285121404Smarcel break; 1286121404Smarcel case ASM_OP_MOV_PMC: 1287121404Smarcel ot = ASM_OPER_PMC; 1288121404Smarcel op = ASM_OP_MOV; 1289121404Smarcel break; 1290121404Smarcel case ASM_OP_MOV_PMD: 1291121404Smarcel ot = ASM_OPER_PMD; 1292121404Smarcel op = ASM_OP_MOV; 1293121404Smarcel break; 1294121404Smarcel case ASM_OP_MOV_PR: 1295121404Smarcel ot = ASM_OPER_PR; 1296121404Smarcel op = ASM_OP_MOV; 1297121404Smarcel break; 1298121404Smarcel case ASM_OP_MOV_PSR: 1299121404Smarcel ot = ASM_OPER_PSR; 1300121404Smarcel op = ASM_OP_MOV; 1301121404Smarcel break; 1302121404Smarcel case ASM_OP_MOV_PSR_L: 1303121404Smarcel ot = ASM_OPER_PSR_L; 1304121404Smarcel op = ASM_OP_MOV; 1305121404Smarcel break; 1306121404Smarcel case ASM_OP_MOV_PSR_UM: 1307121404Smarcel ot = ASM_OPER_PSR_UM; 1308121404Smarcel op = ASM_OP_MOV; 1309121404Smarcel break; 1310121404Smarcel case ASM_OP_MOV_RR: 1311121404Smarcel ot = ASM_OPER_RR; 1312121404Smarcel op = ASM_OP_MOV; 1313121404Smarcel break; 1314121404Smarcel case ASM_OP_NOP_B: 1315121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_B); 1316121404Smarcel op = ASM_OP_NOP; 1317121404Smarcel break; 1318121404Smarcel case ASM_OP_NOP_F: 1319121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_F); 1320121404Smarcel op = ASM_OP_NOP; 1321121404Smarcel break; 1322121404Smarcel case ASM_OP_NOP_I: 1323121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I); 1324121404Smarcel op = ASM_OP_NOP; 1325121404Smarcel break; 1326121404Smarcel case ASM_OP_NOP_M: 1327121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M); 1328121404Smarcel op = ASM_OP_NOP; 1329121404Smarcel break; 1330121404Smarcel case ASM_OP_NOP_X: 1331121404Smarcel asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_X); 1332121404Smarcel op = ASM_OP_NOP; 1333121404Smarcel break; 1334121404Smarcel case ASM_OP_PACK2_SSS: 1335121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1336121404Smarcel op = ASM_OP_PACK2; 1337121404Smarcel break; 1338121404Smarcel case ASM_OP_PACK2_USS: 1339121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_USS); 1340121404Smarcel op = ASM_OP_PACK2; 1341121404Smarcel break; 1342121404Smarcel case ASM_OP_PACK4_SSS: 1343121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1344121404Smarcel op = ASM_OP_PACK4; 1345121404Smarcel break; 1346121404Smarcel case ASM_OP_PADD1_: 1347121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE); 1348121404Smarcel op = ASM_OP_PADD1; 1349121404Smarcel break; 1350121404Smarcel case ASM_OP_PADD1_SSS: 1351121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1352121404Smarcel op = ASM_OP_PADD1; 1353121404Smarcel break; 1354121404Smarcel case ASM_OP_PADD1_UUS: 1355121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS); 1356121404Smarcel op = ASM_OP_PADD1; 1357121404Smarcel break; 1358121404Smarcel case ASM_OP_PADD1_UUU: 1359121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU); 1360121404Smarcel op = ASM_OP_PADD1; 1361121404Smarcel break; 1362121404Smarcel case ASM_OP_PADD2_: 1363121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE); 1364121404Smarcel op = ASM_OP_PADD2; 1365121404Smarcel break; 1366121404Smarcel case ASM_OP_PADD2_SSS: 1367121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1368121404Smarcel op = ASM_OP_PADD2; 1369121404Smarcel break; 1370121404Smarcel case ASM_OP_PADD2_UUS: 1371121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS); 1372121404Smarcel op = ASM_OP_PADD2; 1373121404Smarcel break; 1374121404Smarcel case ASM_OP_PADD2_UUU: 1375121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU); 1376121404Smarcel op = ASM_OP_PADD2; 1377121404Smarcel break; 1378121404Smarcel case ASM_OP_PAVG1_: 1379121404Smarcel asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_NONE); 1380121404Smarcel op = ASM_OP_PAVG1; 1381121404Smarcel break; 1382121404Smarcel case ASM_OP_PAVG1_RAZ: 1383121404Smarcel asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_RAZ); 1384121404Smarcel op = ASM_OP_PAVG1; 1385121404Smarcel break; 1386121404Smarcel case ASM_OP_PAVG2_: 1387121404Smarcel asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_NONE); 1388121404Smarcel op = ASM_OP_PAVG2; 1389121404Smarcel break; 1390121404Smarcel case ASM_OP_PAVG2_RAZ: 1391121404Smarcel asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_RAZ); 1392121404Smarcel op = ASM_OP_PAVG2; 1393121404Smarcel break; 1394121404Smarcel case ASM_OP_PCMP1_EQ: 1395121404Smarcel asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_EQ); 1396121404Smarcel op = ASM_OP_PCMP1; 1397121404Smarcel break; 1398121404Smarcel case ASM_OP_PCMP1_GT: 1399121404Smarcel asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_GT); 1400121404Smarcel op = ASM_OP_PCMP1; 1401121404Smarcel break; 1402121404Smarcel case ASM_OP_PCMP2_EQ: 1403121404Smarcel asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_EQ); 1404121404Smarcel op = ASM_OP_PCMP2; 1405121404Smarcel break; 1406121404Smarcel case ASM_OP_PCMP2_GT: 1407121404Smarcel asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_GT); 1408121404Smarcel op = ASM_OP_PCMP2; 1409121404Smarcel break; 1410121404Smarcel case ASM_OP_PCMP4_EQ: 1411121404Smarcel asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_EQ); 1412121404Smarcel op = ASM_OP_PCMP4; 1413121404Smarcel break; 1414121404Smarcel case ASM_OP_PCMP4_GT: 1415121404Smarcel asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_GT); 1416121404Smarcel op = ASM_OP_PCMP4; 1417121404Smarcel break; 1418121404Smarcel case ASM_OP_PMAX1_U: 1419121404Smarcel asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1420121404Smarcel op = ASM_OP_PMAX1; 1421121404Smarcel break; 1422121404Smarcel case ASM_OP_PMIN1_U: 1423121404Smarcel asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1424121404Smarcel op = ASM_OP_PMIN1; 1425121404Smarcel break; 1426121404Smarcel case ASM_OP_PMPY2_L: 1427121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 1428121404Smarcel op = ASM_OP_PMPY2; 1429121404Smarcel break; 1430121404Smarcel case ASM_OP_PMPY2_R: 1431121404Smarcel asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 1432121404Smarcel op = ASM_OP_PMPY2; 1433121404Smarcel break; 1434121404Smarcel case ASM_OP_PMPYSHR2_: 1435121404Smarcel asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE); 1436121404Smarcel op = ASM_OP_PMPYSHR2; 1437121404Smarcel break; 1438121404Smarcel case ASM_OP_PMPYSHR2_U: 1439121404Smarcel asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1440121404Smarcel op = ASM_OP_PMPYSHR2; 1441121404Smarcel break; 1442121404Smarcel case ASM_OP_PROBE_R: 1443121404Smarcel asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_R); 1444121404Smarcel asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_NONE); 1445121404Smarcel op = ASM_OP_PROBE; 1446121404Smarcel break; 1447121404Smarcel case ASM_OP_PROBE_R_FAULT: 1448121404Smarcel asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_R); 1449121404Smarcel asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_FAULT); 1450121404Smarcel op = ASM_OP_PROBE; 1451121404Smarcel break; 1452121404Smarcel case ASM_OP_PROBE_RW_FAULT: 1453121404Smarcel asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_RW); 1454121404Smarcel asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_FAULT); 1455121404Smarcel op = ASM_OP_PROBE; 1456121404Smarcel break; 1457121404Smarcel case ASM_OP_PROBE_W: 1458121404Smarcel asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_W); 1459121404Smarcel asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_NONE); 1460121404Smarcel op = ASM_OP_PROBE; 1461121404Smarcel break; 1462121404Smarcel case ASM_OP_PROBE_W_FAULT: 1463121404Smarcel asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_W); 1464121404Smarcel asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_FAULT); 1465121404Smarcel op = ASM_OP_PROBE; 1466121404Smarcel break; 1467121404Smarcel case ASM_OP_PSHR2_: 1468121404Smarcel asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE); 1469121404Smarcel op = ASM_OP_PSHR2; 1470121404Smarcel break; 1471121404Smarcel case ASM_OP_PSHR2_U: 1472121404Smarcel asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1473121404Smarcel op = ASM_OP_PSHR2; 1474121404Smarcel break; 1475121404Smarcel case ASM_OP_PSHR4_: 1476121404Smarcel asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE); 1477121404Smarcel op = ASM_OP_PSHR4; 1478121404Smarcel break; 1479121404Smarcel case ASM_OP_PSHR4_U: 1480121404Smarcel asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1481121404Smarcel op = ASM_OP_PSHR4; 1482121404Smarcel break; 1483121404Smarcel case ASM_OP_PSUB1_: 1484121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE); 1485121404Smarcel op = ASM_OP_PSUB1; 1486121404Smarcel break; 1487121404Smarcel case ASM_OP_PSUB1_SSS: 1488121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1489121404Smarcel op = ASM_OP_PSUB1; 1490121404Smarcel break; 1491121404Smarcel case ASM_OP_PSUB1_UUS: 1492121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS); 1493121404Smarcel op = ASM_OP_PSUB1; 1494121404Smarcel break; 1495121404Smarcel case ASM_OP_PSUB1_UUU: 1496121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU); 1497121404Smarcel op = ASM_OP_PSUB1; 1498121404Smarcel break; 1499121404Smarcel case ASM_OP_PSUB2_: 1500121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE); 1501121404Smarcel op = ASM_OP_PSUB2; 1502121404Smarcel break; 1503121404Smarcel case ASM_OP_PSUB2_SSS: 1504121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1505121404Smarcel op = ASM_OP_PSUB2; 1506121404Smarcel break; 1507121404Smarcel case ASM_OP_PSUB2_UUS: 1508121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS); 1509121404Smarcel op = ASM_OP_PSUB2; 1510121404Smarcel break; 1511121404Smarcel case ASM_OP_PSUB2_UUU: 1512121404Smarcel asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU); 1513121404Smarcel op = ASM_OP_PSUB2; 1514121404Smarcel break; 1515121404Smarcel case ASM_OP_PTC_E: 1516121404Smarcel asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_E); 1517121404Smarcel op = ASM_OP_PTC; 1518121404Smarcel break; 1519121404Smarcel case ASM_OP_PTC_G: 1520121404Smarcel asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_G); 1521121404Smarcel op = ASM_OP_PTC; 1522121404Smarcel break; 1523121404Smarcel case ASM_OP_PTC_GA: 1524121404Smarcel asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_GA); 1525121404Smarcel op = ASM_OP_PTC; 1526121404Smarcel break; 1527121404Smarcel case ASM_OP_PTC_L: 1528121404Smarcel asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_L); 1529121404Smarcel op = ASM_OP_PTC; 1530121404Smarcel break; 1531121404Smarcel case ASM_OP_PTR_D: 1532121404Smarcel asm_cmpltr_add(i, ASM_CC_PTR, ASM_CT_D); 1533121404Smarcel op = ASM_OP_PTR; 1534121404Smarcel break; 1535121404Smarcel case ASM_OP_PTR_I: 1536121404Smarcel asm_cmpltr_add(i, ASM_CC_PTR, ASM_CT_I); 1537121404Smarcel op = ASM_OP_PTR; 1538121404Smarcel break; 1539121404Smarcel case ASM_OP_SETF_D: 1540121404Smarcel asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_D); 1541121404Smarcel op = ASM_OP_SETF; 1542121404Smarcel break; 1543121404Smarcel case ASM_OP_SETF_EXP: 1544121404Smarcel asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_EXP); 1545121404Smarcel op = ASM_OP_SETF; 1546121404Smarcel break; 1547121404Smarcel case ASM_OP_SETF_S: 1548121404Smarcel asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_S); 1549121404Smarcel op = ASM_OP_SETF; 1550121404Smarcel break; 1551121404Smarcel case ASM_OP_SETF_SIG: 1552121404Smarcel asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_SIG); 1553121404Smarcel op = ASM_OP_SETF; 1554121404Smarcel break; 1555121404Smarcel case ASM_OP_SHR_: 1556121404Smarcel asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE); 1557121404Smarcel op = ASM_OP_SHR; 1558121404Smarcel break; 1559121404Smarcel case ASM_OP_SHR_U: 1560121404Smarcel asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1561121404Smarcel op = ASM_OP_SHR; 1562121404Smarcel break; 1563121404Smarcel case ASM_OP_SRLZ_D: 1564121404Smarcel asm_cmpltr_add(i, ASM_CC_SRLZ, ASM_CT_D); 1565121404Smarcel op = ASM_OP_SRLZ; 1566121404Smarcel break; 1567121404Smarcel case ASM_OP_SRLZ_I: 1568121404Smarcel asm_cmpltr_add(i, ASM_CC_SRLZ, ASM_CT_I); 1569121404Smarcel op = ASM_OP_SRLZ; 1570121404Smarcel break; 1571121404Smarcel case ASM_OP_ST1_: 1572121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE); 1573121404Smarcel op = ASM_OP_ST1; 1574121404Smarcel break; 1575121404Smarcel case ASM_OP_ST1_REL: 1576121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL); 1577121404Smarcel op = ASM_OP_ST1; 1578121404Smarcel break; 1579121404Smarcel case ASM_OP_ST16_: 1580121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE); 1581121404Smarcel op = ASM_OP_ST16; 1582121404Smarcel break; 1583121404Smarcel case ASM_OP_ST16_REL: 1584121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL); 1585121404Smarcel op = ASM_OP_ST16; 1586121404Smarcel break; 1587121404Smarcel case ASM_OP_ST2_: 1588121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE); 1589121404Smarcel op = ASM_OP_ST2; 1590121404Smarcel break; 1591121404Smarcel case ASM_OP_ST2_REL: 1592121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL); 1593121404Smarcel op = ASM_OP_ST2; 1594121404Smarcel break; 1595121404Smarcel case ASM_OP_ST4_: 1596121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE); 1597121404Smarcel op = ASM_OP_ST4; 1598121404Smarcel break; 1599121404Smarcel case ASM_OP_ST4_REL: 1600121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL); 1601121404Smarcel op = ASM_OP_ST4; 1602121404Smarcel break; 1603121404Smarcel case ASM_OP_ST8_: 1604121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE); 1605121404Smarcel op = ASM_OP_ST8; 1606121404Smarcel break; 1607121404Smarcel case ASM_OP_ST8_REL: 1608121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL); 1609121404Smarcel op = ASM_OP_ST8; 1610121404Smarcel break; 1611121404Smarcel case ASM_OP_ST8_SPILL: 1612121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_SPILL); 1613121404Smarcel op = ASM_OP_ST8; 1614121404Smarcel break; 1615121404Smarcel case ASM_OP_STF_SPILL: 1616121404Smarcel asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_SPILL); 1617121404Smarcel op = ASM_OP_STF; 1618121404Smarcel break; 1619121404Smarcel case ASM_OP_SYNC_I: 1620121404Smarcel asm_cmpltr_add(i, ASM_CC_SYNC, ASM_CT_I); 1621121404Smarcel op = ASM_OP_SYNC; 1622121404Smarcel break; 1623121404Smarcel case ASM_OP_TBIT_NZ_AND: 1624121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1625121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 1626121404Smarcel op = ASM_OP_TBIT; 1627121404Smarcel break; 1628121404Smarcel case ASM_OP_TBIT_NZ_OR: 1629121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1630121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 1631121404Smarcel op = ASM_OP_TBIT; 1632121404Smarcel break; 1633121404Smarcel case ASM_OP_TBIT_NZ_OR_ANDCM: 1634121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1635121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 1636121404Smarcel op = ASM_OP_TBIT; 1637121404Smarcel break; 1638121404Smarcel case ASM_OP_TBIT_Z: 1639121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1640121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 1641121404Smarcel op = ASM_OP_TBIT; 1642121404Smarcel break; 1643121404Smarcel case ASM_OP_TBIT_Z_AND: 1644121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1645121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 1646121404Smarcel op = ASM_OP_TBIT; 1647121404Smarcel break; 1648121404Smarcel case ASM_OP_TBIT_Z_OR: 1649121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1650121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 1651121404Smarcel op = ASM_OP_TBIT; 1652121404Smarcel break; 1653121404Smarcel case ASM_OP_TBIT_Z_OR_ANDCM: 1654121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1655121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 1656121404Smarcel op = ASM_OP_TBIT; 1657121404Smarcel break; 1658121404Smarcel case ASM_OP_TBIT_Z_UNC: 1659121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1660121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 1661121404Smarcel op = ASM_OP_TBIT; 1662121404Smarcel break; 1663159916Smarcel case ASM_OP_TF_NZ_AND: 1664159916Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1665159916Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 1666159916Smarcel op = ASM_OP_TF; 1667159916Smarcel break; 1668159916Smarcel case ASM_OP_TF_NZ_OR: 1669159916Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1670159916Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 1671159916Smarcel op = ASM_OP_TF; 1672159916Smarcel break; 1673159916Smarcel case ASM_OP_TF_NZ_OR_ANDCM: 1674159916Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1675159916Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 1676159916Smarcel op = ASM_OP_TF; 1677159916Smarcel break; 1678159916Smarcel case ASM_OP_TF_Z: 1679159916Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1680159916Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 1681159916Smarcel op = ASM_OP_TF; 1682159916Smarcel break; 1683159916Smarcel case ASM_OP_TF_Z_AND: 1684159916Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1685159916Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 1686159916Smarcel op = ASM_OP_TF; 1687159916Smarcel break; 1688159916Smarcel case ASM_OP_TF_Z_OR: 1689159916Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1690159916Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 1691159916Smarcel op = ASM_OP_TF; 1692159916Smarcel break; 1693159916Smarcel case ASM_OP_TF_Z_OR_ANDCM: 1694159916Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1695159916Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 1696159916Smarcel op = ASM_OP_TF; 1697159916Smarcel break; 1698159916Smarcel case ASM_OP_TF_Z_UNC: 1699159916Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1700159916Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 1701159916Smarcel op = ASM_OP_TF; 1702159916Smarcel break; 1703121404Smarcel case ASM_OP_TNAT_NZ_AND: 1704121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1705121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 1706121404Smarcel op = ASM_OP_TNAT; 1707121404Smarcel break; 1708121404Smarcel case ASM_OP_TNAT_NZ_OR: 1709121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1710121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 1711121404Smarcel op = ASM_OP_TNAT; 1712121404Smarcel break; 1713121404Smarcel case ASM_OP_TNAT_NZ_OR_ANDCM: 1714121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1715121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 1716121404Smarcel op = ASM_OP_TNAT; 1717121404Smarcel break; 1718121404Smarcel case ASM_OP_TNAT_Z: 1719121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1720121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 1721121404Smarcel op = ASM_OP_TNAT; 1722121404Smarcel break; 1723121404Smarcel case ASM_OP_TNAT_Z_AND: 1724121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1725121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 1726121404Smarcel op = ASM_OP_TNAT; 1727121404Smarcel break; 1728121404Smarcel case ASM_OP_TNAT_Z_OR: 1729121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1730121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 1731121404Smarcel op = ASM_OP_TNAT; 1732121404Smarcel break; 1733121404Smarcel case ASM_OP_TNAT_Z_OR_ANDCM: 1734121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1735121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 1736121404Smarcel op = ASM_OP_TNAT; 1737121404Smarcel break; 1738121404Smarcel case ASM_OP_TNAT_Z_UNC: 1739121404Smarcel asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1740121404Smarcel asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 1741121404Smarcel op = ASM_OP_TNAT; 1742121404Smarcel break; 1743121404Smarcel case ASM_OP_UNPACK1_H: 1744121404Smarcel asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_H); 1745121404Smarcel op = ASM_OP_UNPACK1; 1746121404Smarcel break; 1747121404Smarcel case ASM_OP_UNPACK1_L: 1748121404Smarcel asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_L); 1749121404Smarcel op = ASM_OP_UNPACK1; 1750121404Smarcel break; 1751121404Smarcel case ASM_OP_UNPACK2_H: 1752121404Smarcel asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_H); 1753121404Smarcel op = ASM_OP_UNPACK2; 1754121404Smarcel break; 1755121404Smarcel case ASM_OP_UNPACK2_L: 1756121404Smarcel asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_L); 1757121404Smarcel op = ASM_OP_UNPACK2; 1758121404Smarcel break; 1759121404Smarcel case ASM_OP_UNPACK4_H: 1760121404Smarcel asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_H); 1761121404Smarcel op = ASM_OP_UNPACK4; 1762121404Smarcel break; 1763121404Smarcel case ASM_OP_UNPACK4_L: 1764121404Smarcel asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_L); 1765121404Smarcel op = ASM_OP_UNPACK4; 1766121404Smarcel break; 1767159916Smarcel case ASM_OP_VMSW_0: 1768159916Smarcel asm_cmpltr_add(i, ASM_CC_VMSW, ASM_CT_0); 1769159916Smarcel op = ASM_OP_VMSW; 1770159916Smarcel break; 1771159916Smarcel case ASM_OP_VMSW_1: 1772159916Smarcel asm_cmpltr_add(i, ASM_CC_VMSW, ASM_CT_1); 1773159916Smarcel op = ASM_OP_VMSW; 1774159916Smarcel break; 1775121404Smarcel case ASM_OP_XMA_H: 1776121404Smarcel asm_cmpltr_add(i, ASM_CC_XMA, ASM_CT_H); 1777121404Smarcel op = ASM_OP_XMA; 1778121404Smarcel break; 1779121404Smarcel case ASM_OP_XMA_HU: 1780121404Smarcel asm_cmpltr_add(i, ASM_CC_XMA, ASM_CT_HU); 1781121404Smarcel op = ASM_OP_XMA; 1782121404Smarcel break; 1783121404Smarcel case ASM_OP_XMA_L: 1784121404Smarcel asm_cmpltr_add(i, ASM_CC_XMA, ASM_CT_L); 1785121404Smarcel op = ASM_OP_XMA; 1786121404Smarcel break; 1787121404Smarcel default: 1788121404Smarcel KASSERT(op < ASM_OP_NUMBER_OF_OPCODES, ("foo")); 1789121404Smarcel break; 1790121404Smarcel } 1791121404Smarcel i->i_op = op; 1792121404Smarcel return (ot); 1793121404Smarcel} 1794121404Smarcel 1795121404Smarcelstatic __inline void 1796121404Smarcelop_imm(struct asm_inst *i, int op, uint64_t val) 1797121404Smarcel{ 1798121404Smarcel i->i_oper[op].o_type = ASM_OPER_IMM; 1799121404Smarcel i->i_oper[op].o_value = val; 1800121404Smarcel} 1801121404Smarcel 1802121404Smarcelstatic __inline void 1803121404Smarcelop_type(struct asm_inst *i, int op, enum asm_oper_type ot) 1804121404Smarcel{ 1805121404Smarcel i->i_oper[op].o_type = ot; 1806121404Smarcel} 1807121404Smarcel 1808121404Smarcelstatic __inline void 1809121404Smarcelop_value(struct asm_inst *i, int op, uint64_t val) 1810121404Smarcel{ 1811121404Smarcel i->i_oper[op].o_value = val; 1812121404Smarcel} 1813121404Smarcel 1814121404Smarcelstatic __inline void 1815121404Smarceloperand(struct asm_inst *i, int op, enum asm_oper_type ot, uint64_t bits, 1816121404Smarcel int o, int l) 1817121404Smarcel{ 1818121404Smarcel i->i_oper[op].o_type = ot; 1819121404Smarcel i->i_oper[op].o_value = FIELD(bits, o, l); 1820121404Smarcel} 1821121404Smarcel 1822121404Smarcelstatic uint64_t 1823121404Smarcelimm(uint64_t bits, int sign, int o, int l) 1824121404Smarcel{ 1825121404Smarcel uint64_t val = FIELD(bits, o, l); 1826121404Smarcel 1827121404Smarcel if (sign && (val & (1LL << (l - 1))) != 0) 1828121404Smarcel val |= -1LL << l; 1829121404Smarcel return (val); 1830121404Smarcel} 1831121404Smarcel 1832121404Smarcelstatic void 1833121404Smarcels_imm(struct asm_inst *i, int op, uint64_t bits, int o, int l) 1834121404Smarcel{ 1835121404Smarcel i->i_oper[op].o_type = ASM_OPER_IMM; 1836121404Smarcel i->i_oper[op].o_value = imm(bits, 1, o, l); 1837121404Smarcel} 1838121404Smarcel 1839121404Smarcelstatic void 1840121404Smarcelu_imm(struct asm_inst *i, int op, uint64_t bits, int o, int l) 1841121404Smarcel{ 1842121404Smarcel i->i_oper[op].o_type = ASM_OPER_IMM; 1843121404Smarcel i->i_oper[op].o_value = imm(bits, 0, o, l); 1844121404Smarcel} 1845121404Smarcel 1846121404Smarcelstatic uint64_t 1847121404Smarcelvimm(uint64_t bits, int sign, va_list ap) 1848121404Smarcel{ 1849121404Smarcel uint64_t val = 0; 1850121404Smarcel int len = 0; 1851121404Smarcel int frag; 1852121404Smarcel 1853121404Smarcel while ((frag = va_arg(ap, int)) != 0) { 1854121404Smarcel val |= (uint64_t)FIELD(bits, FRAG_OFS(frag), FRAG_LEN(frag)) 1855121404Smarcel << len; 1856121404Smarcel len += FRAG_LEN(frag); 1857121404Smarcel } 1858121404Smarcel if (sign && (val & (1LL << (len - 1))) != 0) 1859121404Smarcel val |= -1LL << len; 1860121404Smarcel return (val); 1861121404Smarcel} 1862121404Smarcel 1863121404Smarcelstatic void 1864121404Smarcels_immf(struct asm_inst *i, int op, uint64_t bits, ...) 1865121404Smarcel{ 1866121404Smarcel va_list ap; 1867121404Smarcel va_start(ap, bits); 1868121404Smarcel i->i_oper[op].o_type = ASM_OPER_IMM; 1869121404Smarcel i->i_oper[op].o_value = vimm(bits, 1, ap); 1870121404Smarcel va_end(ap); 1871121404Smarcel} 1872121404Smarcel 1873121404Smarcelstatic void 1874121404Smarcelu_immf(struct asm_inst *i, int op, uint64_t bits, ...) 1875121404Smarcel{ 1876121404Smarcel va_list ap; 1877121404Smarcel va_start(ap, bits); 1878121404Smarcel i->i_oper[op].o_type = ASM_OPER_IMM; 1879121404Smarcel i->i_oper[op].o_value = vimm(bits, 0, ap); 1880121404Smarcel va_end(ap); 1881121404Smarcel} 1882121404Smarcel 1883121404Smarcelstatic void 1884121404Smarceldisp(struct asm_inst *i, int op, uint64_t bits, ...) 1885121404Smarcel{ 1886121404Smarcel va_list ap; 1887121404Smarcel va_start(ap, bits); 1888121404Smarcel i->i_oper[op].o_type = ASM_OPER_DISP; 1889121404Smarcel i->i_oper[op].o_value = vimm(bits, 1, ap) << 4; 1890121404Smarcel va_end(ap); 1891121404Smarcel} 1892121404Smarcel 1893121404Smarcelstatic __inline void 1894121404Smarcelcombine(uint64_t *dst, int dl, uint64_t src, int sl, int so) 1895121404Smarcel{ 1896121404Smarcel *dst = (*dst & ((1LL << dl) - 1LL)) | 1897121404Smarcel ((uint64_t)_FLD64(src, so, sl) << dl); 1898121404Smarcel} 1899121404Smarcel 1900121404Smarcelint 1901121404Smarcelasm_extract(enum asm_op op, enum asm_fmt fmt, uint64_t bits, 1902121404Smarcel struct asm_bundle *b, int slot) 1903121404Smarcel{ 1904121404Smarcel struct asm_inst *i = b->b_inst + slot; 1905121404Smarcel enum asm_oper_type ot; 1906121404Smarcel 1907121404Smarcel KASSERT(op != ASM_OP_NONE, ("foo")); 1908121404Smarcel i->i_bits = bits; 1909121404Smarcel i->i_format = fmt; 1910121404Smarcel i->i_srcidx = 2; 1911121404Smarcel 1912121404Smarcel ot = asm_normalize(i, op); 1913121404Smarcel 1914121404Smarcel if (fmt != ASM_FMT_B6 && fmt != ASM_FMT_B7) 1915121404Smarcel operand(i, 0, ASM_OPER_PREG, bits, 0, 6); 1916121404Smarcel 1917121404Smarcel switch (fmt) { 1918121404Smarcel case ASM_FMT_A1: 1919121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1920121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 1921121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 1922121404Smarcel if ((op == ASM_OP_ADD && FIELD(bits, 27, 2) == 1) || 1923121404Smarcel (op == ASM_OP_SUB && FIELD(bits, 27, 2) == 0)) 1924121404Smarcel op_imm(i, 4, 1LL); 1925121404Smarcel break; 1926121404Smarcel case ASM_FMT_A2: 1927121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1928121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 1929121404Smarcel op_imm(i, 3, 1LL + FIELD(bits, 27, 2)); 1930121404Smarcel operand(i, 4, ASM_OPER_GREG, bits, 20, 7); 1931121404Smarcel break; 1932121404Smarcel case ASM_FMT_A3: 1933121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1934121404Smarcel s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0); 1935121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 1936121404Smarcel break; 1937121404Smarcel case ASM_FMT_A4: 1938121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1939121404Smarcel s_immf(i, 2, bits, FRAG(13,7), FRAG(27,6), FRAG(36,1), 0); 1940121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 1941121404Smarcel break; 1942121404Smarcel case ASM_FMT_A5: 1943121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1944121404Smarcel s_immf(i, 2, bits, FRAG(13,7), FRAG(27,9), FRAG(22,5), 1945121404Smarcel FRAG(36,1), 0); 1946121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 2); 1947121404Smarcel break; 1948121404Smarcel case ASM_FMT_A6: /* 2 dst */ 1949121404Smarcel operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 1950121404Smarcel operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 1951121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 1952121404Smarcel operand(i, 4, ASM_OPER_GREG, bits, 20, 7); 1953121404Smarcel i->i_srcidx++; 1954121404Smarcel break; 1955121404Smarcel case ASM_FMT_A7: /* 2 dst */ 1956121404Smarcel if (FIELD(bits, 13, 7) != 0) 1957121404Smarcel return (0); 1958121404Smarcel operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 1959121404Smarcel operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 1960121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 1961121404Smarcel operand(i, 4, ASM_OPER_GREG, bits, 20, 7); 1962121404Smarcel i->i_srcidx++; 1963121404Smarcel break; 1964121404Smarcel case ASM_FMT_A8: /* 2 dst */ 1965121404Smarcel operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 1966121404Smarcel operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 1967121404Smarcel s_immf(i, 3, bits, FRAG(13,7), FRAG(36,1), 0); 1968121404Smarcel operand(i, 4, ASM_OPER_GREG, bits, 20, 7); 1969121404Smarcel i->i_srcidx++; 1970121404Smarcel break; 1971121404Smarcel case ASM_FMT_A9: 1972121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1973121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 1974121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 1975121404Smarcel break; 1976121404Smarcel case ASM_FMT_A10: 1977121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1978121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 1979121404Smarcel op_imm(i, 3, 1LL + FIELD(bits, 27, 2)); 1980121404Smarcel operand(i, 4, ASM_OPER_GREG, bits, 20, 7); 1981121404Smarcel break; 1982121404Smarcel case ASM_FMT_B1: /* 0 dst */ 1983121404Smarcel asm_brhint(i); 1984121404Smarcel disp(i, 1, bits, FRAG(13,20), FRAG(36,1), 0); 1985121404Smarcel break; 1986121404Smarcel case ASM_FMT_B2: /* 0 dst */ 1987121404Smarcel if (FIELD(bits, 0, 6) != 0) 1988121404Smarcel return (0); 1989121404Smarcel asm_brhint(i); 1990121404Smarcel disp(i, 1, bits, FRAG(13,20), FRAG(36,1), 0); 1991121404Smarcel break; 1992121404Smarcel case ASM_FMT_B3: 1993121404Smarcel asm_brhint(i); 1994121404Smarcel operand(i, 1, ASM_OPER_BREG, bits, 6, 3); 1995121404Smarcel disp(i, 2, bits, FRAG(13,20), FRAG(36,1), 0); 1996121404Smarcel break; 1997121404Smarcel case ASM_FMT_B4: /* 0 dst */ 1998121404Smarcel asm_brhint(i); 1999121404Smarcel operand(i, 1, ASM_OPER_BREG, bits, 13, 3); 2000121404Smarcel break; 2001121404Smarcel case ASM_FMT_B5: 2002121404Smarcel#if 0 2003121404Smarcel if (FIELD(bits, 32, 1) == 0) 2004121404Smarcel return (0); 2005121404Smarcel#endif 2006121404Smarcel asm_brhint(i); 2007121404Smarcel operand(i, 1, ASM_OPER_BREG, bits, 6, 3); 2008121404Smarcel operand(i, 2, ASM_OPER_BREG, bits, 13, 3); 2009121404Smarcel break; 2010121404Smarcel case ASM_FMT_B6: /* 0 dst */ 2011121404Smarcel asm_brphint(i); 2012121404Smarcel disp(i, 1, bits, FRAG(13,20), FRAG(36,1), 0); 2013121404Smarcel disp(i, 2, bits, FRAG(6,7), FRAG(33,2), 0); 2014121404Smarcel i->i_srcidx--; 2015121404Smarcel break; 2016121404Smarcel case ASM_FMT_B7: /* 0 dst */ 2017121404Smarcel asm_brphint(i); 2018121404Smarcel operand(i, 1, ASM_OPER_BREG, bits, 13, 3); 2019121404Smarcel disp(i, 2, bits, FRAG(6,7), FRAG(33,2), 0); 2020121404Smarcel i->i_srcidx--; 2021121404Smarcel break; 2022121404Smarcel case ASM_FMT_B8: 2023121404Smarcel /* no operands */ 2024121404Smarcel break; 2025121404Smarcel case ASM_FMT_B9: /* 0 dst */ 2026121404Smarcel u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2027121404Smarcel break; 2028121404Smarcel case ASM_FMT_F1: 2029121404Smarcel asm_sf(i); 2030121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2031121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2032121404Smarcel operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 2033121404Smarcel operand(i, 4, ASM_OPER_FREG, bits, 27, 7); 2034121404Smarcel break; 2035121404Smarcel case ASM_FMT_F2: 2036121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2037121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2038121404Smarcel operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 2039121404Smarcel operand(i, 4, ASM_OPER_FREG, bits, 27, 7); 2040121404Smarcel break; 2041121404Smarcel case ASM_FMT_F3: 2042121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2043121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2044121404Smarcel operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 2045121404Smarcel operand(i, 4, ASM_OPER_FREG, bits, 27, 7); 2046121404Smarcel break; 2047121404Smarcel case ASM_FMT_F4: /* 2 dst */ 2048121404Smarcel if (FIELD(bits, 33, 1)) { /* ra */ 2049121404Smarcel if (FIELD(bits, 36, 1)) /* rb */ 2050121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_UNORD); 2051121404Smarcel else 2052121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LE); 2053121404Smarcel } else { 2054121404Smarcel if (FIELD(bits, 36, 1)) /* rb */ 2055121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LT); 2056121404Smarcel else 2057121404Smarcel asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_EQ); 2058121404Smarcel } 2059121404Smarcel if (FIELD(bits, 12, 1)) /* ta */ 2060121404Smarcel asm_cmpltr_add(i, ASM_CC_FCTYPE, ASM_CT_UNC); 2061121404Smarcel else 2062121404Smarcel asm_cmpltr_add(i, ASM_CC_FCTYPE, ASM_CT_NONE); 2063121404Smarcel asm_sf(i); 2064121404Smarcel operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 2065121404Smarcel operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2066121404Smarcel operand(i, 3, ASM_OPER_FREG, bits, 13, 7); 2067121404Smarcel operand(i, 4, ASM_OPER_FREG, bits, 20, 7); 2068121404Smarcel i->i_srcidx++; 2069121404Smarcel break; 2070121404Smarcel case ASM_FMT_F5: /* 2 dst */ 2071121404Smarcel operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 2072121404Smarcel operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2073121404Smarcel operand(i, 3, ASM_OPER_FREG, bits, 13, 7); 2074121404Smarcel u_immf(i, 4, bits, FRAG(33,2), FRAG(20,7), 0); 2075121404Smarcel i->i_srcidx++; 2076121404Smarcel break; 2077121404Smarcel case ASM_FMT_F6: /* 2 dst */ 2078121404Smarcel asm_sf(i); 2079121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2080121404Smarcel operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2081121404Smarcel operand(i, 3, ASM_OPER_FREG, bits, 13, 7); 2082121404Smarcel operand(i, 4, ASM_OPER_FREG, bits, 20, 7); 2083121404Smarcel i->i_srcidx++; 2084121404Smarcel break; 2085121404Smarcel case ASM_FMT_F7: /* 2 dst */ 2086121404Smarcel asm_sf(i); 2087121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2088121404Smarcel operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2089121404Smarcel operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 2090121404Smarcel i->i_srcidx++; 2091121404Smarcel break; 2092121404Smarcel case ASM_FMT_F8: 2093121404Smarcel asm_sf(i); 2094121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2095121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2096121404Smarcel operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 2097121404Smarcel break; 2098121404Smarcel case ASM_FMT_F9: 2099121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2100121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2101121404Smarcel operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 2102121404Smarcel break; 2103121404Smarcel case ASM_FMT_F10: 2104121404Smarcel asm_sf(i); 2105121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2106121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2107121404Smarcel break; 2108121404Smarcel case ASM_FMT_F11: 2109121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2110121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2111121404Smarcel break; 2112121404Smarcel case ASM_FMT_F12: /* 0 dst */ 2113121404Smarcel asm_sf(i); 2114121404Smarcel u_imm(i, 1, bits, 13, 7); 2115121404Smarcel u_imm(i, 2, bits, 20, 7); 2116121404Smarcel i->i_srcidx--; 2117121404Smarcel break; 2118121404Smarcel case ASM_FMT_F13: 2119121404Smarcel asm_sf(i); 2120121404Smarcel /* no operands */ 2121121404Smarcel break; 2122121404Smarcel case ASM_FMT_F14: /* 0 dst */ 2123121404Smarcel asm_sf(i); 2124121404Smarcel disp(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2125121404Smarcel break; 2126121404Smarcel case ASM_FMT_F15: /* 0 dst */ 2127121404Smarcel u_imm(i, 1, bits, 6, 20); 2128121404Smarcel break; 2129159909Smarcel case ASM_FMT_F16: /* 0 dst */ 2130159909Smarcel u_imm(i, 1, bits, 6, 20); 2131159909Smarcel break; 2132121404Smarcel case ASM_FMT_I1: 2133121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2134121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2135121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2136121404Smarcel switch (FIELD(bits, 30, 2)) { 2137121404Smarcel case 0: op_imm(i, 4, 0LL); break; 2138121404Smarcel case 1: op_imm(i, 4, 7LL); break; 2139121404Smarcel case 2: op_imm(i, 4, 15LL); break; 2140121404Smarcel case 3: op_imm(i, 4, 16LL); break; 2141121404Smarcel } 2142121404Smarcel break; 2143121404Smarcel case ASM_FMT_I2: 2144121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2145121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2146121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2147121404Smarcel break; 2148121404Smarcel case ASM_FMT_I3: 2149121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2150121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2151121404Smarcel u_imm(i, 3, bits, 20, 4); 2152121404Smarcel break; 2153121404Smarcel case ASM_FMT_I4: 2154121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2155121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2156121404Smarcel u_imm(i, 3, bits, 20, 8); 2157121404Smarcel break; 2158121404Smarcel case ASM_FMT_I5: 2159121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2160121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2161121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 2162121404Smarcel break; 2163121404Smarcel case ASM_FMT_I6: 2164121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2165121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2166121404Smarcel u_imm(i, 3, bits, 14, 5); 2167121404Smarcel break; 2168121404Smarcel case ASM_FMT_I7: 2169121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2170121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2171121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2172121404Smarcel break; 2173121404Smarcel case ASM_FMT_I8: 2174121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2175121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2176121404Smarcel op_imm(i, 3, 31LL - FIELD(bits, 20, 5)); 2177121404Smarcel break; 2178121404Smarcel case ASM_FMT_I9: 2179121404Smarcel if (FIELD(bits, 13, 7) != 0) 2180121404Smarcel return (0); 2181121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2182121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2183121404Smarcel break; 2184121404Smarcel case ASM_FMT_I10: 2185121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2186121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2187121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2188121404Smarcel u_imm(i, 4, bits, 27, 6); 2189121404Smarcel break; 2190121404Smarcel case ASM_FMT_I11: 2191121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2192121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2193121404Smarcel u_imm(i, 3, bits, 14, 6); 2194121404Smarcel op_imm(i, 4, 1LL + FIELD(bits, 27, 6)); 2195121404Smarcel break; 2196121404Smarcel case ASM_FMT_I12: 2197121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2198121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2199121404Smarcel op_imm(i, 3, 63LL - FIELD(bits, 20, 6)); 2200121404Smarcel op_imm(i, 4, 1LL + FIELD(bits, 27, 6)); 2201121404Smarcel break; 2202121404Smarcel case ASM_FMT_I13: 2203121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2204121404Smarcel s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0); 2205121404Smarcel op_imm(i, 3, 63LL - FIELD(bits, 20, 6)); 2206121404Smarcel op_imm(i, 4, 1LL + FIELD(bits, 27, 6)); 2207121404Smarcel break; 2208121404Smarcel case ASM_FMT_I14: 2209121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2210121404Smarcel s_imm(i, 2, bits, 36, 1); 2211121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2212121404Smarcel op_imm(i, 4, 63LL - FIELD(bits, 14, 6)); 2213121404Smarcel op_imm(i, 5, 1LL + FIELD(bits, 27, 6)); 2214121404Smarcel break; 2215121404Smarcel case ASM_FMT_I15: 2216121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2217121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2218121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2219121404Smarcel op_imm(i, 4, 63LL - FIELD(bits, 31, 6)); 2220121404Smarcel op_imm(i, 5, 1LL + FIELD(bits, 27, 4)); 2221121404Smarcel break; 2222121404Smarcel case ASM_FMT_I16: /* 2 dst */ 2223121404Smarcel operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 2224121404Smarcel operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2225121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2226121404Smarcel u_imm(i, 4, bits, 14, 6); 2227121404Smarcel i->i_srcidx++; 2228121404Smarcel break; 2229121404Smarcel case ASM_FMT_I17: /* 2 dst */ 2230121404Smarcel operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 2231121404Smarcel operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2232121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2233121404Smarcel i->i_srcidx++; 2234121404Smarcel break; 2235159909Smarcel case ASM_FMT_I18: 2236159909Smarcel u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2237159909Smarcel break; 2238121404Smarcel case ASM_FMT_I19: 2239121404Smarcel u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2240121404Smarcel break; 2241121404Smarcel case ASM_FMT_I20: /* 0 dst */ 2242121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 13, 7); 2243121404Smarcel disp(i, 2, bits, FRAG(6,7), FRAG(20,13), FRAG(36,1), 0); 2244121404Smarcel i->i_srcidx--; 2245121404Smarcel break; 2246121404Smarcel case ASM_FMT_I21: 2247121404Smarcel switch (FIELD(bits, 20, 2)) { /* wh */ 2248121404Smarcel case 0: asm_cmpltr_add(i, ASM_CC_MWH, ASM_CT_SPTK); break; 2249121404Smarcel case 1: asm_cmpltr_add(i, ASM_CC_MWH, ASM_CT_NONE); break; 2250121404Smarcel case 2: asm_cmpltr_add(i, ASM_CC_MWH, ASM_CT_DPTK); break; 2251121404Smarcel case 3: return (0); 2252121404Smarcel } 2253121404Smarcel if (FIELD(bits, 23, 1)) /* ih */ 2254121404Smarcel asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_IMP); 2255121404Smarcel else 2256121404Smarcel asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_NONE); 2257121404Smarcel operand(i, 1, ASM_OPER_BREG, bits, 6, 3); 2258121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2259121404Smarcel disp(i, 3, bits, FRAG(24,9), 0); 2260121404Smarcel break; 2261121404Smarcel case ASM_FMT_I22: 2262121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2263121404Smarcel operand(i, 2, ASM_OPER_BREG, bits, 13, 3); 2264121404Smarcel break; 2265121404Smarcel case ASM_FMT_I23: 2266121404Smarcel op_type(i, 1, ASM_OPER_PR); 2267121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2268121404Smarcel u_immf(i, 3, bits, FRAG(6,7), FRAG(24,8), FRAG(36,1), 0); 2269121404Smarcel i->i_oper[3].o_value <<= 1; 2270121404Smarcel break; 2271121404Smarcel case ASM_FMT_I24: 2272121404Smarcel op_type(i, 1, ASM_OPER_PR_ROT); 2273121404Smarcel s_immf(i, 2, bits, FRAG(6,27), FRAG(36,1), 0); 2274121404Smarcel break; 2275121404Smarcel case ASM_FMT_I25: 2276121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2277121404Smarcel op_type(i, 2, ot); 2278121404Smarcel break; 2279121404Smarcel case ASM_FMT_I26: 2280121404Smarcel operand(i, 1, ASM_OPER_AREG, bits, 20, 7); 2281121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2282121404Smarcel break; 2283121404Smarcel case ASM_FMT_I27: 2284121404Smarcel operand(i, 1, ASM_OPER_AREG, bits, 20, 7); 2285121404Smarcel s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0); 2286121404Smarcel break; 2287121404Smarcel case ASM_FMT_I28: 2288121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2289121404Smarcel operand(i, 2, ASM_OPER_AREG, bits, 20, 7); 2290121404Smarcel break; 2291121404Smarcel case ASM_FMT_I29: 2292121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2293121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2294121404Smarcel break; 2295159916Smarcel case ASM_FMT_I30: /* 2 dst */ 2296159916Smarcel operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 2297159916Smarcel operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2298159916Smarcel op_imm(i, 3, 32LL + FIELD(bits, 14, 5)); 2299159916Smarcel i->i_srcidx++; 2300159916Smarcel break; 2301121404Smarcel case ASM_FMT_M1: 2302121404Smarcel asm_hint(i, ASM_CC_LDHINT); 2303121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2304121404Smarcel if (i->i_op == ASM_OP_LD16) { 2305121404Smarcel op_type(i, 2, ASM_OPER_AREG); 2306121404Smarcel op_value(i, 2, AR_CSD); 2307121404Smarcel i->i_srcidx++; 2308121404Smarcel } 2309121404Smarcel operand(i, i->i_srcidx, ASM_OPER_MEM, bits, 20, 7); 2310121404Smarcel break; 2311121404Smarcel case ASM_FMT_M2: 2312121404Smarcel asm_hint(i, ASM_CC_LDHINT); 2313121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2314121404Smarcel operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2315121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 2316121404Smarcel break; 2317121404Smarcel case ASM_FMT_M3: 2318121404Smarcel asm_hint(i, ASM_CC_LDHINT); 2319121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2320121404Smarcel operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2321121404Smarcel s_immf(i, 3, bits, FRAG(13,7), FRAG(27,1), FRAG(36,1), 0); 2322121404Smarcel break; 2323121404Smarcel case ASM_FMT_M4: 2324121404Smarcel asm_hint(i, ASM_CC_STHINT); 2325121404Smarcel operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2326121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2327121404Smarcel if (i->i_op == ASM_OP_ST16) { 2328121404Smarcel op_type(i, 3, ASM_OPER_AREG); 2329121404Smarcel op_value(i, 3, AR_CSD); 2330121404Smarcel } 2331121404Smarcel break; 2332121404Smarcel case ASM_FMT_M5: 2333121404Smarcel asm_hint(i, ASM_CC_STHINT); 2334121404Smarcel operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2335121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2336121404Smarcel s_immf(i, 3, bits, FRAG(6,7), FRAG(27,1), FRAG(36,1), 0); 2337121404Smarcel break; 2338121404Smarcel case ASM_FMT_M6: 2339121404Smarcel asm_hint(i, ASM_CC_LDHINT); 2340121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2341121404Smarcel operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2342121404Smarcel break; 2343121404Smarcel case ASM_FMT_M7: 2344121404Smarcel asm_hint(i, ASM_CC_LDHINT); 2345121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2346121404Smarcel operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2347121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 2348121404Smarcel break; 2349121404Smarcel case ASM_FMT_M8: 2350121404Smarcel asm_hint(i, ASM_CC_LDHINT); 2351121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2352121404Smarcel operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2353121404Smarcel s_immf(i, 3, bits, FRAG(13,7), FRAG(27,1), FRAG(36,1), 0); 2354121404Smarcel break; 2355121404Smarcel case ASM_FMT_M9: 2356121404Smarcel asm_hint(i, ASM_CC_STHINT); 2357121404Smarcel operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2358121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2359121404Smarcel break; 2360121404Smarcel case ASM_FMT_M10: 2361121404Smarcel asm_hint(i, ASM_CC_STHINT); 2362121404Smarcel operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2363121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2364121404Smarcel s_immf(i, 3, bits, FRAG(6,7), FRAG(27,1), FRAG(36,1), 0); 2365121404Smarcel break; 2366121404Smarcel case ASM_FMT_M11: /* 2 dst */ 2367121404Smarcel asm_hint(i, ASM_CC_LDHINT); 2368121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2369121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2370121404Smarcel operand(i, 3, ASM_OPER_MEM, bits, 20, 7); 2371121404Smarcel i->i_srcidx++; 2372121404Smarcel break; 2373121404Smarcel case ASM_FMT_M12: /* 2 dst */ 2374121404Smarcel asm_hint(i, ASM_CC_LDHINT); 2375121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2376121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2377121404Smarcel operand(i, 3, ASM_OPER_MEM, bits, 20, 7); 2378121404Smarcel op_imm(i, 4, 8LL << FIELD(bits, 30, 1)); 2379121404Smarcel i->i_srcidx++; 2380121404Smarcel break; 2381121404Smarcel case ASM_FMT_M13: 2382121404Smarcel asm_hint(i, ASM_CC_LFHINT); 2383121404Smarcel operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2384121404Smarcel break; 2385121404Smarcel case ASM_FMT_M14: /* 0 dst */ 2386121404Smarcel asm_hint(i, ASM_CC_LFHINT); 2387121404Smarcel operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2388121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2389121404Smarcel i->i_srcidx--; 2390121404Smarcel break; 2391121404Smarcel case ASM_FMT_M15: /* 0 dst */ 2392121404Smarcel asm_hint(i, ASM_CC_LFHINT); 2393121404Smarcel operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2394121404Smarcel s_immf(i, 2, bits, FRAG(13,7), FRAG(27,1), FRAG(36,1), 0); 2395121404Smarcel i->i_srcidx--; 2396121404Smarcel break; 2397159909Smarcel case ASM_FMT_M16: 2398121404Smarcel asm_hint(i, ASM_CC_LDHINT); 2399121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2400121404Smarcel operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2401121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 2402121404Smarcel if (i->i_op == ASM_OP_CMP8XCHG16) { 2403121404Smarcel op_type(i, 4, ASM_OPER_AREG); 2404121404Smarcel op_value(i, 4, AR_CSD); 2405159909Smarcel op_type(i, 5, ASM_OPER_AREG); 2406159909Smarcel op_value(i, 5, AR_CCV); 2407159909Smarcel } else { 2408159909Smarcel if (FIELD(bits, 30, 6) < 8) { 2409159909Smarcel op_type(i, 4, ASM_OPER_AREG); 2410159909Smarcel op_value(i, 4, AR_CCV); 2411159909Smarcel } 2412121404Smarcel } 2413121404Smarcel break; 2414121404Smarcel case ASM_FMT_M17: 2415121404Smarcel asm_hint(i, ASM_CC_LDHINT); 2416121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2417121404Smarcel operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2418121404Smarcel switch (FIELD(bits, 13, 2)) { 2419121404Smarcel case 0: op_imm(i, 3, 1LL << 4); break; 2420121404Smarcel case 1: op_imm(i, 3, 1LL << 3); break; 2421121404Smarcel case 2: op_imm(i, 3, 1LL << 2); break; 2422121404Smarcel case 3: op_imm(i, 3, 1LL); break; 2423121404Smarcel } 2424121404Smarcel if (FIELD(bits, 15, 1)) 2425121404Smarcel i->i_oper[3].o_value *= -1LL; 2426121404Smarcel break; 2427121404Smarcel case ASM_FMT_M18: 2428121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2429121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2430121404Smarcel break; 2431121404Smarcel case ASM_FMT_M19: 2432121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2433121404Smarcel operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2434121404Smarcel break; 2435121404Smarcel case ASM_FMT_M20: /* 0 dst */ 2436121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 13, 7); 2437121404Smarcel disp(i, 2, bits, FRAG(6,7), FRAG(20,13), FRAG(36,1), 0); 2438121404Smarcel i->i_srcidx--; 2439121404Smarcel break; 2440121404Smarcel case ASM_FMT_M21: /* 0 dst */ 2441121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 13, 7); 2442121404Smarcel disp(i, 2, bits, FRAG(6,7), FRAG(20,13), FRAG(36,1), 0); 2443121404Smarcel i->i_srcidx--; 2444121404Smarcel break; 2445121404Smarcel case ASM_FMT_M22: /* 0 dst */ 2446121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2447121404Smarcel disp(i, 2, bits, FRAG(13,20), FRAG(36,1), 0); 2448121404Smarcel i->i_srcidx--; 2449121404Smarcel break; 2450121404Smarcel case ASM_FMT_M23: /* 0 dst */ 2451121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2452121404Smarcel disp(i, 2, bits, FRAG(13,20), FRAG(36,1), 0); 2453121404Smarcel i->i_srcidx--; 2454121404Smarcel break; 2455121404Smarcel case ASM_FMT_M24: 2456121404Smarcel /* no operands */ 2457121404Smarcel break; 2458121404Smarcel case ASM_FMT_M25: 2459121404Smarcel if (FIELD(bits, 0, 6) != 0) 2460121404Smarcel return (0); 2461121404Smarcel /* no operands */ 2462121404Smarcel break; 2463121404Smarcel case ASM_FMT_M26: 2464121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2465121404Smarcel break; 2466121404Smarcel case ASM_FMT_M27: 2467121404Smarcel operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2468121404Smarcel break; 2469121404Smarcel case ASM_FMT_M28: 2470121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 20, 7); 2471121404Smarcel break; 2472121404Smarcel case ASM_FMT_M29: 2473121404Smarcel operand(i, 1, ASM_OPER_AREG, bits, 20, 7); 2474121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2475121404Smarcel break; 2476121404Smarcel case ASM_FMT_M30: 2477121404Smarcel operand(i, 1, ASM_OPER_AREG, bits, 20, 7); 2478121404Smarcel s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0); 2479121404Smarcel break; 2480121404Smarcel case ASM_FMT_M31: 2481121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2482121404Smarcel operand(i, 2, ASM_OPER_AREG, bits, 20, 7); 2483121404Smarcel break; 2484121404Smarcel case ASM_FMT_M32: 2485121404Smarcel operand(i, 1, ASM_OPER_CREG, bits, 20, 7); 2486121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2487121404Smarcel break; 2488121404Smarcel case ASM_FMT_M33: 2489121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2490121404Smarcel operand(i, 2, ASM_OPER_CREG, bits, 20, 7); 2491121404Smarcel break; 2492121404Smarcel case ASM_FMT_M34: { 2493121404Smarcel uint64_t loc, out; 2494121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2495121404Smarcel op_type(i, 2, ASM_OPER_AREG); 2496121404Smarcel op_value(i, 2, AR_PFS); 2497121404Smarcel loc = FIELD(bits, 20, 7); 2498121404Smarcel out = FIELD(bits, 13, 7) - loc; 2499121404Smarcel op_imm(i, 3, 0); 2500121404Smarcel op_imm(i, 4, loc); 2501121404Smarcel op_imm(i, 5, out); 2502121404Smarcel op_imm(i, 6, (uint64_t)FIELD(bits, 27, 4) << 3); 2503121404Smarcel break; 2504121404Smarcel } 2505121404Smarcel case ASM_FMT_M35: 2506121404Smarcel if (FIELD(bits, 27, 6) == 0x2D) 2507121404Smarcel op_type(i, 1, ASM_OPER_PSR_L); 2508121404Smarcel else 2509121404Smarcel op_type(i, 1, ASM_OPER_PSR_UM); 2510121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2511121404Smarcel break; 2512121404Smarcel case ASM_FMT_M36: 2513121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2514121404Smarcel if (FIELD(bits, 27, 6) == 0x25) 2515121404Smarcel op_type(i, 2, ASM_OPER_PSR); 2516121404Smarcel else 2517121404Smarcel op_type(i, 2, ASM_OPER_PSR_UM); 2518121404Smarcel break; 2519121404Smarcel case ASM_FMT_M37: 2520121404Smarcel u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2521121404Smarcel break; 2522121404Smarcel case ASM_FMT_M38: 2523121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2524121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2525121404Smarcel operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 2526121404Smarcel break; 2527121404Smarcel case ASM_FMT_M39: 2528121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2529121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2530121404Smarcel u_imm(i, 3, bits, 13, 2); 2531121404Smarcel break; 2532121404Smarcel case ASM_FMT_M40: /* 0 dst */ 2533121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 20, 7); 2534121404Smarcel u_imm(i, 2, bits, 13, 2); 2535121404Smarcel i->i_srcidx--; 2536121404Smarcel break; 2537121404Smarcel case ASM_FMT_M41: 2538121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 13, 7); 2539121404Smarcel break; 2540121404Smarcel case ASM_FMT_M42: 2541121404Smarcel operand(i, 1, ot, bits, 20, 7); 2542121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2543121404Smarcel break; 2544121404Smarcel case ASM_FMT_M43: 2545121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2546121404Smarcel operand(i, 2, ot, bits, 20, 7); 2547121404Smarcel break; 2548121404Smarcel case ASM_FMT_M44: 2549121404Smarcel u_immf(i, 1, bits, FRAG(6,21), FRAG(31,2), FRAG(36,1), 0); 2550121404Smarcel break; 2551121404Smarcel case ASM_FMT_M45: /* 0 dst */ 2552121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 20, 7); 2553121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2554121404Smarcel i->i_srcidx--; 2555121404Smarcel break; 2556121404Smarcel case ASM_FMT_M46: 2557121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2558121404Smarcel operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2559121404Smarcel break; 2560159909Smarcel case ASM_FMT_M47: 2561159909Smarcel operand(i, 1, ASM_OPER_GREG, bits, 20, 7); 2562159909Smarcel break; 2563159909Smarcel case ASM_FMT_M48: 2564159909Smarcel u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2565159909Smarcel break; 2566121404Smarcel case ASM_FMT_X1: 2567121404Smarcel KASSERT(slot == 2, ("foo")); 2568121404Smarcel u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2569121404Smarcel combine(&i->i_oper[1].o_value, 21, b->b_inst[1].i_bits, 41, 0); 2570121404Smarcel break; 2571121404Smarcel case ASM_FMT_X2: 2572121404Smarcel KASSERT(slot == 2, ("foo")); 2573121404Smarcel operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2574121404Smarcel u_immf(i, 2, bits, FRAG(13,7), FRAG(27,9), FRAG(22,5), 2575121404Smarcel FRAG(21,1), 0); 2576121404Smarcel combine(&i->i_oper[2].o_value, 22, b->b_inst[1].i_bits, 41, 0); 2577121404Smarcel combine(&i->i_oper[2].o_value, 63, bits, 1, 36); 2578121404Smarcel break; 2579121404Smarcel case ASM_FMT_X3: 2580121404Smarcel KASSERT(slot == 2, ("foo")); 2581121404Smarcel asm_brhint(i); 2582121404Smarcel u_imm(i, 1, bits, 13, 20); 2583121404Smarcel combine(&i->i_oper[1].o_value, 20, b->b_inst[1].i_bits, 39, 2); 2584121404Smarcel combine(&i->i_oper[1].o_value, 59, bits, 1, 36); 2585121404Smarcel i->i_oper[1].o_value <<= 4; 2586121404Smarcel i->i_oper[1].o_type = ASM_OPER_DISP; 2587121404Smarcel break; 2588121404Smarcel case ASM_FMT_X4: 2589121404Smarcel KASSERT(slot == 2, ("foo")); 2590121404Smarcel asm_brhint(i); 2591121404Smarcel operand(i, 1, ASM_OPER_BREG, bits, 6, 3); 2592121404Smarcel u_imm(i, 2, bits, 13, 20); 2593121404Smarcel combine(&i->i_oper[2].o_value, 20, b->b_inst[1].i_bits, 39, 2); 2594121404Smarcel combine(&i->i_oper[2].o_value, 59, bits, 1, 36); 2595121404Smarcel i->i_oper[2].o_value <<= 4; 2596121404Smarcel i->i_oper[2].o_type = ASM_OPER_DISP; 2597121404Smarcel break; 2598159909Smarcel case ASM_FMT_X5: 2599159909Smarcel KASSERT(slot == 2, ("foo")); 2600159909Smarcel u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2601159909Smarcel combine(&i->i_oper[1].o_value, 21, b->b_inst[1].i_bits, 41, 0); 2602159909Smarcel break; 2603121404Smarcel default: 2604121404Smarcel KASSERT(fmt == ASM_FMT_NONE, ("foo")); 2605121404Smarcel return (0); 2606121404Smarcel } 2607121404Smarcel 2608121404Smarcel return (1); 2609121404Smarcel} 2610