1 /* $NetBSD: disasm_extract.c,v 1.1 2006/04/07 14:21:18 cherry Exp $ */ 2 3 /*- 4 * Copyright (c) 2000-2003 Marcel Moolenaar 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #include <sys/cdefs.h> 30 /* __FBSDID("$FreeBSD: src/sys/ia64/disasm/disasm_extract.c,v 1.2 2005/01/06 22:18:22 imp Exp $"); */ 31 32 #include <sys/param.h> 33 #include <sys/systm.h> 34 35 #include <machine/stdarg.h> 36 37 #include <ia64/disasm/disasm_int.h> 38 #include <ia64/disasm/disasm.h> 39 40 #define FRAG(o,l) ((int)((o << 8) | (l & 0xff))) 41 #define FRAG_OFS(f) (f >> 8) 42 #define FRAG_LEN(f) (f & 0xff) 43 44 /* 45 * Support functions. 46 */ 47 static void 48 asm_cmpltr_add(struct asm_inst *i, enum asm_cmpltr_class c, 49 enum asm_cmpltr_type t) 50 { 51 52 i->i_cmpltr[i->i_ncmpltrs].c_class = c; 53 i->i_cmpltr[i->i_ncmpltrs].c_type = t; 54 i->i_ncmpltrs++; 55 KASSERT(i->i_ncmpltrs < 6); 56 } 57 58 static void 59 asm_hint(struct asm_inst *i, enum asm_cmpltr_class c) 60 { 61 62 switch (FIELD(i->i_bits, 28, 2)) { /* hint */ 63 case 0: 64 asm_cmpltr_add(i, c, ASM_CT_NONE); 65 break; 66 case 1: 67 asm_cmpltr_add(i, c, ASM_CT_NT1); 68 break; 69 case 2: 70 asm_cmpltr_add(i, c, ASM_CT_NT2); 71 break; 72 case 3: 73 asm_cmpltr_add(i, c, ASM_CT_NTA); 74 break; 75 } 76 } 77 78 static void 79 asm_sf(struct asm_inst *i) 80 { 81 82 switch (FIELD(i->i_bits, 34, 2)) { 83 case 0: 84 asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S0); 85 break; 86 case 1: 87 asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S1); 88 break; 89 case 2: 90 asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S2); 91 break; 92 case 3: 93 asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S3); 94 break; 95 } 96 } 97 98 static void 99 asm_brhint(struct asm_inst *i) 100 { 101 uint64_t bits = i->i_bits; 102 103 switch (FIELD(bits, 33, 2)) { /* bwh */ 104 case 0: 105 asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_SPTK); 106 break; 107 case 1: 108 asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_SPNT); 109 break; 110 case 2: 111 asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_DPTK); 112 break; 113 case 3: 114 asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_DPNT); 115 break; 116 } 117 118 if (FIELD(bits, 12, 1)) /* ph */ 119 asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_MANY); 120 else 121 asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_FEW); 122 123 if (FIELD(bits, 35, 1)) /* dh */ 124 asm_cmpltr_add(i, ASM_CC_DH, ASM_CT_CLR); 125 else 126 asm_cmpltr_add(i, ASM_CC_DH, ASM_CT_NONE); 127 } 128 129 static void 130 asm_brphint(struct asm_inst *i) 131 { 132 uint64_t bits = i->i_bits; 133 134 switch (FIELD(bits, 3, 2)) { /* ipwh, indwh */ 135 case 0: 136 asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_SPTK); 137 break; 138 case 1: 139 asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_LOOP); 140 break; 141 case 2: 142 asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_DPTK); 143 break; 144 case 3: 145 asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_EXIT); 146 break; 147 } 148 149 if (FIELD(bits, 5, 1)) /* ph */ 150 asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_MANY); 151 else 152 asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_FEW); 153 154 switch (FIELD(bits, 0, 3)) { /* pvec */ 155 case 0: 156 asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_DC_DC); 157 break; 158 case 1: 159 asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_DC_NT); 160 break; 161 case 2: 162 asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_TK_DC); 163 break; 164 case 3: 165 asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_TK_TK); 166 break; 167 case 4: 168 asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_TK_NT); 169 break; 170 case 5: 171 asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_NT_DC); 172 break; 173 case 6: 174 asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_NT_TK); 175 break; 176 case 7: 177 asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_NT_NT); 178 break; 179 } 180 181 if (FIELD(bits, 35, 1)) /* ih */ 182 asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_IMP); 183 else 184 asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_NONE); 185 } 186 187 static enum asm_oper_type 188 asm_normalize(struct asm_inst *i, enum asm_op op) 189 { 190 enum asm_oper_type ot = ASM_OPER_NONE; 191 192 switch (op) { 193 case ASM_OP_BR_CALL: 194 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CALL); 195 op = ASM_OP_BR; 196 break; 197 case ASM_OP_BR_CEXIT: 198 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CEXIT); 199 op = ASM_OP_BR; 200 break; 201 case ASM_OP_BR_CLOOP: 202 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CLOOP); 203 op = ASM_OP_BR; 204 break; 205 case ASM_OP_BR_COND: 206 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_COND); 207 op = ASM_OP_BR; 208 break; 209 case ASM_OP_BR_CTOP: 210 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CTOP); 211 op = ASM_OP_BR; 212 break; 213 case ASM_OP_BR_IA: 214 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_IA); 215 op = ASM_OP_BR; 216 break; 217 case ASM_OP_BR_RET: 218 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_RET); 219 op = ASM_OP_BR; 220 break; 221 case ASM_OP_BR_WEXIT: 222 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_WEXIT); 223 op = ASM_OP_BR; 224 break; 225 case ASM_OP_BR_WTOP: 226 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_WTOP); 227 op = ASM_OP_BR; 228 break; 229 case ASM_OP_BREAK_B: 230 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_B); 231 op = ASM_OP_BREAK; 232 break; 233 case ASM_OP_BREAK_F: 234 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_F); 235 op = ASM_OP_BREAK; 236 break; 237 case ASM_OP_BREAK_I: 238 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I); 239 op = ASM_OP_BREAK; 240 break; 241 case ASM_OP_BREAK_M: 242 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M); 243 op = ASM_OP_BREAK; 244 break; 245 case ASM_OP_BREAK_X: 246 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_X); 247 op = ASM_OP_BREAK; 248 break; 249 case ASM_OP_BRL_COND: 250 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_COND); 251 op = ASM_OP_BRL; 252 break; 253 case ASM_OP_BRL_CALL: 254 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CALL); 255 op = ASM_OP_BRL; 256 break; 257 case ASM_OP_BRP_: 258 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_NONE); 259 op = ASM_OP_BRP; 260 break; 261 case ASM_OP_BRP_RET: 262 asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_RET); 263 op = ASM_OP_BRP; 264 break; 265 case ASM_OP_BSW_0: 266 asm_cmpltr_add(i, ASM_CC_BSW, ASM_CT_0); 267 op = ASM_OP_BSW; 268 break; 269 case ASM_OP_BSW_1: 270 asm_cmpltr_add(i, ASM_CC_BSW, ASM_CT_1); 271 op = ASM_OP_BSW; 272 break; 273 case ASM_OP_CHK_A_CLR: 274 asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_A); 275 asm_cmpltr_add(i, ASM_CC_ACLR, ASM_CT_CLR); 276 op = ASM_OP_CHK; 277 break; 278 case ASM_OP_CHK_A_NC: 279 asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_A); 280 asm_cmpltr_add(i, ASM_CC_ACLR, ASM_CT_NC); 281 op = ASM_OP_CHK; 282 break; 283 case ASM_OP_CHK_S: 284 asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_S); 285 op = ASM_OP_CHK; 286 break; 287 case ASM_OP_CHK_S_I: 288 asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_S); 289 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I); 290 op = ASM_OP_CHK; 291 break; 292 case ASM_OP_CHK_S_M: 293 asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_S); 294 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M); 295 op = ASM_OP_CHK; 296 break; 297 case ASM_OP_CLRRRB_: 298 asm_cmpltr_add(i, ASM_CC_CLRRRB, ASM_CT_NONE); 299 op = ASM_OP_CLRRRB; 300 break; 301 case ASM_OP_CLRRRB_PR: 302 asm_cmpltr_add(i, ASM_CC_CLRRRB, ASM_CT_PR); 303 op = ASM_OP_CLRRRB; 304 break; 305 case ASM_OP_CMP_EQ: 306 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 307 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 308 op = ASM_OP_CMP; 309 break; 310 case ASM_OP_CMP_EQ_AND: 311 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 312 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 313 op = ASM_OP_CMP; 314 break; 315 case ASM_OP_CMP_EQ_OR: 316 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 317 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 318 op = ASM_OP_CMP; 319 break; 320 case ASM_OP_CMP_EQ_OR_ANDCM: 321 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 322 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 323 op = ASM_OP_CMP; 324 break; 325 case ASM_OP_CMP_EQ_UNC: 326 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 327 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 328 op = ASM_OP_CMP; 329 break; 330 case ASM_OP_CMP_GE_AND: 331 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 332 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 333 op = ASM_OP_CMP; 334 break; 335 case ASM_OP_CMP_GE_OR: 336 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 337 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 338 op = ASM_OP_CMP; 339 break; 340 case ASM_OP_CMP_GE_OR_ANDCM: 341 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 342 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 343 op = ASM_OP_CMP; 344 break; 345 case ASM_OP_CMP_GT_AND: 346 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 347 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 348 op = ASM_OP_CMP; 349 break; 350 case ASM_OP_CMP_GT_OR: 351 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 352 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 353 op = ASM_OP_CMP; 354 break; 355 case ASM_OP_CMP_GT_OR_ANDCM: 356 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 357 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 358 op = ASM_OP_CMP; 359 break; 360 case ASM_OP_CMP_LE_AND: 361 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 362 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 363 op = ASM_OP_CMP; 364 break; 365 case ASM_OP_CMP_LE_OR: 366 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 367 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 368 op = ASM_OP_CMP; 369 break; 370 case ASM_OP_CMP_LE_OR_ANDCM: 371 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 372 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 373 op = ASM_OP_CMP; 374 break; 375 case ASM_OP_CMP_LT: 376 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 377 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 378 op = ASM_OP_CMP; 379 break; 380 case ASM_OP_CMP_LT_AND: 381 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 382 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 383 op = ASM_OP_CMP; 384 break; 385 case ASM_OP_CMP_LT_OR: 386 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 387 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 388 op = ASM_OP_CMP; 389 break; 390 case ASM_OP_CMP_LT_OR_ANDCM: 391 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 392 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 393 op = ASM_OP_CMP; 394 break; 395 case ASM_OP_CMP_LT_UNC: 396 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 397 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 398 op = ASM_OP_CMP; 399 break; 400 case ASM_OP_CMP_LTU: 401 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU); 402 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 403 op = ASM_OP_CMP; 404 break; 405 case ASM_OP_CMP_LTU_UNC: 406 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU); 407 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 408 op = ASM_OP_CMP; 409 break; 410 case ASM_OP_CMP_NE_AND: 411 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 412 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 413 op = ASM_OP_CMP; 414 break; 415 case ASM_OP_CMP_NE_OR: 416 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 417 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 418 op = ASM_OP_CMP; 419 break; 420 case ASM_OP_CMP_NE_OR_ANDCM: 421 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 422 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 423 op = ASM_OP_CMP; 424 break; 425 case ASM_OP_CMP4_EQ: 426 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 427 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 428 op = ASM_OP_CMP4; 429 break; 430 case ASM_OP_CMP4_EQ_AND: 431 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 432 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 433 op = ASM_OP_CMP4; 434 break; 435 case ASM_OP_CMP4_EQ_OR: 436 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 437 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 438 op = ASM_OP_CMP4; 439 break; 440 case ASM_OP_CMP4_EQ_OR_ANDCM: 441 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 442 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 443 op = ASM_OP_CMP4; 444 break; 445 case ASM_OP_CMP4_EQ_UNC: 446 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ); 447 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 448 op = ASM_OP_CMP4; 449 break; 450 case ASM_OP_CMP4_GE_AND: 451 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 452 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 453 op = ASM_OP_CMP4; 454 break; 455 case ASM_OP_CMP4_GE_OR: 456 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 457 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 458 op = ASM_OP_CMP4; 459 break; 460 case ASM_OP_CMP4_GE_OR_ANDCM: 461 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE); 462 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 463 op = ASM_OP_CMP4; 464 break; 465 case ASM_OP_CMP4_GT_AND: 466 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 467 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 468 op = ASM_OP_CMP4; 469 break; 470 case ASM_OP_CMP4_GT_OR: 471 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 472 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 473 op = ASM_OP_CMP4; 474 break; 475 case ASM_OP_CMP4_GT_OR_ANDCM: 476 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT); 477 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 478 op = ASM_OP_CMP4; 479 break; 480 case ASM_OP_CMP4_LE_AND: 481 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 482 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 483 op = ASM_OP_CMP4; 484 break; 485 case ASM_OP_CMP4_LE_OR: 486 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 487 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 488 op = ASM_OP_CMP4; 489 break; 490 case ASM_OP_CMP4_LE_OR_ANDCM: 491 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE); 492 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 493 op = ASM_OP_CMP4; 494 break; 495 case ASM_OP_CMP4_LT: 496 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 497 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 498 op = ASM_OP_CMP4; 499 break; 500 case ASM_OP_CMP4_LT_AND: 501 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 502 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 503 op = ASM_OP_CMP4; 504 break; 505 case ASM_OP_CMP4_LT_OR: 506 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 507 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 508 op = ASM_OP_CMP4; 509 break; 510 case ASM_OP_CMP4_LT_OR_ANDCM: 511 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 512 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 513 op = ASM_OP_CMP4; 514 break; 515 case ASM_OP_CMP4_LT_UNC: 516 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT); 517 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 518 op = ASM_OP_CMP4; 519 break; 520 case ASM_OP_CMP4_LTU: 521 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU); 522 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 523 op = ASM_OP_CMP4; 524 break; 525 case ASM_OP_CMP4_LTU_UNC: 526 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU); 527 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 528 op = ASM_OP_CMP4; 529 break; 530 case ASM_OP_CMP4_NE_AND: 531 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 532 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 533 op = ASM_OP_CMP4; 534 break; 535 case ASM_OP_CMP4_NE_OR: 536 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 537 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 538 op = ASM_OP_CMP4; 539 break; 540 case ASM_OP_CMP4_NE_OR_ANDCM: 541 asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE); 542 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 543 op = ASM_OP_CMP4; 544 break; 545 case ASM_OP_CMP8XCHG16_ACQ: 546 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 547 op = ASM_OP_CMP8XCHG16; 548 break; 549 case ASM_OP_CMP8XCHG16_REL: 550 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 551 op = ASM_OP_CMP8XCHG16; 552 break; 553 case ASM_OP_CMPXCHG1_ACQ: 554 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 555 op = ASM_OP_CMPXCHG1; 556 break; 557 case ASM_OP_CMPXCHG1_REL: 558 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 559 op = ASM_OP_CMPXCHG1; 560 break; 561 case ASM_OP_CMPXCHG2_ACQ: 562 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 563 op = ASM_OP_CMPXCHG2; 564 break; 565 case ASM_OP_CMPXCHG2_REL: 566 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 567 op = ASM_OP_CMPXCHG2; 568 break; 569 case ASM_OP_CMPXCHG4_ACQ: 570 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 571 op = ASM_OP_CMPXCHG4; 572 break; 573 case ASM_OP_CMPXCHG4_REL: 574 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 575 op = ASM_OP_CMPXCHG4; 576 break; 577 case ASM_OP_CMPXCHG8_ACQ: 578 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 579 op = ASM_OP_CMPXCHG8; 580 break; 581 case ASM_OP_CMPXCHG8_REL: 582 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 583 op = ASM_OP_CMPXCHG8; 584 break; 585 case ASM_OP_CZX1_L: 586 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 587 op = ASM_OP_CZX1; 588 break; 589 case ASM_OP_CZX1_R: 590 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 591 op = ASM_OP_CZX1; 592 break; 593 case ASM_OP_CZX2_L: 594 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 595 op = ASM_OP_CZX2; 596 break; 597 case ASM_OP_CZX2_R: 598 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 599 op = ASM_OP_CZX2; 600 break; 601 case ASM_OP_DEP_: 602 asm_cmpltr_add(i, ASM_CC_DEP, ASM_CT_NONE); 603 op = ASM_OP_DEP; 604 break; 605 case ASM_OP_DEP_Z: 606 asm_cmpltr_add(i, ASM_CC_DEP, ASM_CT_Z); 607 op = ASM_OP_DEP; 608 break; 609 case ASM_OP_FC_: 610 asm_cmpltr_add(i, ASM_CC_FC, ASM_CT_NONE); 611 op = ASM_OP_FC; 612 break; 613 case ASM_OP_FC_I: 614 asm_cmpltr_add(i, ASM_CC_FC, ASM_CT_I); 615 op = ASM_OP_FC; 616 break; 617 case ASM_OP_FCLASS_M: 618 asm_cmpltr_add(i, ASM_CC_FCREL, ASM_CT_M); 619 op = ASM_OP_FCLASS; 620 break; 621 case ASM_OP_FCVT_FX: 622 asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX); 623 asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE); 624 op = ASM_OP_FCVT; 625 break; 626 case ASM_OP_FCVT_FX_TRUNC: 627 asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX); 628 asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC); 629 op = ASM_OP_FCVT; 630 break; 631 case ASM_OP_FCVT_FXU: 632 asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU); 633 asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE); 634 op = ASM_OP_FCVT; 635 break; 636 case ASM_OP_FCVT_FXU_TRUNC: 637 asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU); 638 asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC); 639 op = ASM_OP_FCVT; 640 break; 641 case ASM_OP_FCVT_XF: 642 asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_XF); 643 asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE); 644 op = ASM_OP_FCVT; 645 break; 646 case ASM_OP_FETCHADD4_ACQ: 647 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 648 op = ASM_OP_FETCHADD4; 649 break; 650 case ASM_OP_FETCHADD4_REL: 651 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 652 op = ASM_OP_FETCHADD4; 653 break; 654 case ASM_OP_FETCHADD8_ACQ: 655 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ); 656 op = ASM_OP_FETCHADD8; 657 break; 658 case ASM_OP_FETCHADD8_REL: 659 asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL); 660 op = ASM_OP_FETCHADD8; 661 break; 662 case ASM_OP_FMA_: 663 asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_NONE); 664 op = ASM_OP_FMA; 665 break; 666 case ASM_OP_FMA_D: 667 asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_D); 668 op = ASM_OP_FMA; 669 break; 670 case ASM_OP_FMA_S: 671 asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_S); 672 op = ASM_OP_FMA; 673 break; 674 case ASM_OP_FMERGE_NS: 675 asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_NS); 676 op = ASM_OP_FMERGE; 677 break; 678 case ASM_OP_FMERGE_S: 679 asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_S); 680 op = ASM_OP_FMERGE; 681 break; 682 case ASM_OP_FMERGE_SE: 683 asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_SE); 684 op = ASM_OP_FMERGE; 685 break; 686 case ASM_OP_FMIX_L: 687 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 688 op = ASM_OP_FMIX; 689 break; 690 case ASM_OP_FMIX_LR: 691 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_LR); 692 op = ASM_OP_FMIX; 693 break; 694 case ASM_OP_FMIX_R: 695 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 696 op = ASM_OP_FMIX; 697 break; 698 case ASM_OP_FMS_: 699 asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_NONE); 700 op = ASM_OP_FMS; 701 break; 702 case ASM_OP_FMS_D: 703 asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_D); 704 op = ASM_OP_FMS; 705 break; 706 case ASM_OP_FMS_S: 707 asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_S); 708 op = ASM_OP_FMS; 709 break; 710 case ASM_OP_FNMA_: 711 asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_NONE); 712 op = ASM_OP_FNMA; 713 break; 714 case ASM_OP_FNMA_D: 715 asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_D); 716 op = ASM_OP_FNMA; 717 break; 718 case ASM_OP_FNMA_S: 719 asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_S); 720 op = ASM_OP_FNMA; 721 break; 722 case ASM_OP_FPCMP_EQ: 723 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_EQ); 724 op = ASM_OP_FPCMP; 725 break; 726 case ASM_OP_FPCMP_LE: 727 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LE); 728 op = ASM_OP_FPCMP; 729 break; 730 case ASM_OP_FPCMP_LT: 731 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LT); 732 op = ASM_OP_FPCMP; 733 break; 734 case ASM_OP_FPCMP_NEQ: 735 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_NEQ); 736 op = ASM_OP_FPCMP; 737 break; 738 case ASM_OP_FPCMP_NLE: 739 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_NLE); 740 op = ASM_OP_FPCMP; 741 break; 742 case ASM_OP_FPCMP_NLT: 743 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_NLT); 744 op = ASM_OP_FPCMP; 745 break; 746 case ASM_OP_FPCMP_ORD: 747 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_ORD); 748 op = ASM_OP_FPCMP; 749 break; 750 case ASM_OP_FPCMP_UNORD: 751 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_UNORD); 752 op = ASM_OP_FPCMP; 753 break; 754 case ASM_OP_FPCVT_FX: 755 asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX); 756 asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE); 757 op = ASM_OP_FPCVT; 758 break; 759 case ASM_OP_FPCVT_FX_TRUNC: 760 asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX); 761 asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC); 762 op = ASM_OP_FPCVT; 763 break; 764 case ASM_OP_FPCVT_FXU: 765 asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU); 766 asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE); 767 op = ASM_OP_FPCVT; 768 break; 769 case ASM_OP_FPCVT_FXU_TRUNC: 770 asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU); 771 asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC); 772 op = ASM_OP_FPCVT; 773 break; 774 case ASM_OP_FPMERGE_NS: 775 asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_NS); 776 op = ASM_OP_FPMERGE; 777 break; 778 case ASM_OP_FPMERGE_S: 779 asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_S); 780 op = ASM_OP_FPMERGE; 781 break; 782 case ASM_OP_FPMERGE_SE: 783 asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_SE); 784 op = ASM_OP_FPMERGE; 785 break; 786 case ASM_OP_FSWAP_: 787 asm_cmpltr_add(i, ASM_CC_FSWAP, ASM_CT_NONE); 788 op = ASM_OP_FSWAP; 789 break; 790 case ASM_OP_FSWAP_NL: 791 asm_cmpltr_add(i, ASM_CC_FSWAP, ASM_CT_NL); 792 op = ASM_OP_FSWAP; 793 break; 794 case ASM_OP_FSWAP_NR: 795 asm_cmpltr_add(i, ASM_CC_FSWAP, ASM_CT_NR); 796 op = ASM_OP_FSWAP; 797 break; 798 case ASM_OP_FSXT_L: 799 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 800 op = ASM_OP_FSXT; 801 break; 802 case ASM_OP_FSXT_R: 803 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 804 op = ASM_OP_FSXT; 805 break; 806 case ASM_OP_GETF_D: 807 asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_D); 808 op = ASM_OP_GETF; 809 break; 810 case ASM_OP_GETF_EXP: 811 asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_EXP); 812 op = ASM_OP_GETF; 813 break; 814 case ASM_OP_GETF_S: 815 asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_S); 816 op = ASM_OP_GETF; 817 break; 818 case ASM_OP_GETF_SIG: 819 asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_SIG); 820 op = ASM_OP_GETF; 821 break; 822 case ASM_OP_INVALA_: 823 asm_cmpltr_add(i, ASM_CC_INVALA, ASM_CT_NONE); 824 op = ASM_OP_INVALA; 825 break; 826 case ASM_OP_INVALA_E: 827 asm_cmpltr_add(i, ASM_CC_INVALA, ASM_CT_E); 828 op = ASM_OP_INVALA; 829 break; 830 case ASM_OP_ITC_D: 831 asm_cmpltr_add(i, ASM_CC_ITC, ASM_CT_D); 832 op = ASM_OP_ITC; 833 break; 834 case ASM_OP_ITC_I: 835 asm_cmpltr_add(i, ASM_CC_ITC, ASM_CT_I); 836 op = ASM_OP_ITC; 837 break; 838 case ASM_OP_ITR_D: 839 asm_cmpltr_add(i, ASM_CC_ITR, ASM_CT_D); 840 ot = ASM_OPER_DTR; 841 op = ASM_OP_ITR; 842 break; 843 case ASM_OP_ITR_I: 844 asm_cmpltr_add(i, ASM_CC_ITR, ASM_CT_I); 845 ot = ASM_OPER_ITR; 846 op = ASM_OP_ITR; 847 break; 848 case ASM_OP_LD1_: 849 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE); 850 op = ASM_OP_LD1; 851 break; 852 case ASM_OP_LD1_A: 853 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A); 854 op = ASM_OP_LD1; 855 break; 856 case ASM_OP_LD1_ACQ: 857 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ); 858 op = ASM_OP_LD1; 859 break; 860 case ASM_OP_LD1_BIAS: 861 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS); 862 op = ASM_OP_LD1; 863 break; 864 case ASM_OP_LD1_C_CLR: 865 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR); 866 op = ASM_OP_LD1; 867 break; 868 case ASM_OP_LD1_C_CLR_ACQ: 869 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ); 870 op = ASM_OP_LD1; 871 break; 872 case ASM_OP_LD1_C_NC: 873 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC); 874 op = ASM_OP_LD1; 875 break; 876 case ASM_OP_LD1_S: 877 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S); 878 op = ASM_OP_LD1; 879 break; 880 case ASM_OP_LD1_SA: 881 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA); 882 op = ASM_OP_LD1; 883 break; 884 case ASM_OP_LD16_: 885 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE); 886 op = ASM_OP_LD16; 887 break; 888 case ASM_OP_LD16_ACQ: 889 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ); 890 op = ASM_OP_LD16; 891 break; 892 case ASM_OP_LD2_: 893 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE); 894 op = ASM_OP_LD2; 895 break; 896 case ASM_OP_LD2_A: 897 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A); 898 op = ASM_OP_LD2; 899 break; 900 case ASM_OP_LD2_ACQ: 901 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ); 902 op = ASM_OP_LD2; 903 break; 904 case ASM_OP_LD2_BIAS: 905 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS); 906 op = ASM_OP_LD2; 907 break; 908 case ASM_OP_LD2_C_CLR: 909 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR); 910 op = ASM_OP_LD2; 911 break; 912 case ASM_OP_LD2_C_CLR_ACQ: 913 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ); 914 op = ASM_OP_LD2; 915 break; 916 case ASM_OP_LD2_C_NC: 917 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC); 918 op = ASM_OP_LD2; 919 break; 920 case ASM_OP_LD2_S: 921 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S); 922 op = ASM_OP_LD2; 923 break; 924 case ASM_OP_LD2_SA: 925 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA); 926 op = ASM_OP_LD2; 927 break; 928 case ASM_OP_LD4_: 929 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE); 930 op = ASM_OP_LD4; 931 break; 932 case ASM_OP_LD4_A: 933 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A); 934 op = ASM_OP_LD4; 935 break; 936 case ASM_OP_LD4_ACQ: 937 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ); 938 op = ASM_OP_LD4; 939 break; 940 case ASM_OP_LD4_BIAS: 941 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS); 942 op = ASM_OP_LD4; 943 break; 944 case ASM_OP_LD4_C_CLR: 945 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR); 946 op = ASM_OP_LD4; 947 break; 948 case ASM_OP_LD4_C_CLR_ACQ: 949 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ); 950 op = ASM_OP_LD4; 951 break; 952 case ASM_OP_LD4_C_NC: 953 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC); 954 op = ASM_OP_LD4; 955 break; 956 case ASM_OP_LD4_S: 957 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S); 958 op = ASM_OP_LD4; 959 break; 960 case ASM_OP_LD4_SA: 961 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA); 962 op = ASM_OP_LD4; 963 break; 964 case ASM_OP_LD8_: 965 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE); 966 op = ASM_OP_LD8; 967 break; 968 case ASM_OP_LD8_A: 969 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A); 970 op = ASM_OP_LD8; 971 break; 972 case ASM_OP_LD8_ACQ: 973 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ); 974 op = ASM_OP_LD8; 975 break; 976 case ASM_OP_LD8_BIAS: 977 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS); 978 op = ASM_OP_LD8; 979 break; 980 case ASM_OP_LD8_C_CLR: 981 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR); 982 op = ASM_OP_LD8; 983 break; 984 case ASM_OP_LD8_C_CLR_ACQ: 985 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ); 986 op = ASM_OP_LD8; 987 break; 988 case ASM_OP_LD8_C_NC: 989 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC); 990 op = ASM_OP_LD8; 991 break; 992 case ASM_OP_LD8_FILL: 993 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_FILL); 994 op = ASM_OP_LD8; 995 break; 996 case ASM_OP_LD8_S: 997 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S); 998 op = ASM_OP_LD8; 999 break; 1000 case ASM_OP_LD8_SA: 1001 asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA); 1002 op = ASM_OP_LD8; 1003 break; 1004 case ASM_OP_LDF_FILL: 1005 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_FILL); 1006 op = ASM_OP_LDF; 1007 break; 1008 case ASM_OP_LDF8_: 1009 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1010 op = ASM_OP_LDF8; 1011 break; 1012 case ASM_OP_LDF8_A: 1013 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1014 op = ASM_OP_LDF8; 1015 break; 1016 case ASM_OP_LDF8_C_CLR: 1017 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1018 op = ASM_OP_LDF8; 1019 break; 1020 case ASM_OP_LDF8_C_NC: 1021 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1022 op = ASM_OP_LDF8; 1023 break; 1024 case ASM_OP_LDF8_S: 1025 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1026 op = ASM_OP_LDF8; 1027 break; 1028 case ASM_OP_LDF8_SA: 1029 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1030 op = ASM_OP_LDF8; 1031 break; 1032 case ASM_OP_LDFD_: 1033 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1034 op = ASM_OP_LDFD; 1035 break; 1036 case ASM_OP_LDFD_A: 1037 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1038 op = ASM_OP_LDFD; 1039 break; 1040 case ASM_OP_LDFD_C_CLR: 1041 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1042 op = ASM_OP_LDFD; 1043 break; 1044 case ASM_OP_LDFD_C_NC: 1045 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1046 op = ASM_OP_LDFD; 1047 break; 1048 case ASM_OP_LDFD_S: 1049 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1050 op = ASM_OP_LDFD; 1051 break; 1052 case ASM_OP_LDFD_SA: 1053 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1054 op = ASM_OP_LDFD; 1055 break; 1056 case ASM_OP_LDFE_: 1057 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1058 op = ASM_OP_LDFE; 1059 break; 1060 case ASM_OP_LDFE_A: 1061 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1062 op = ASM_OP_LDFE; 1063 break; 1064 case ASM_OP_LDFE_C_CLR: 1065 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1066 op = ASM_OP_LDFE; 1067 break; 1068 case ASM_OP_LDFE_C_NC: 1069 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1070 op = ASM_OP_LDFE; 1071 break; 1072 case ASM_OP_LDFE_S: 1073 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1074 op = ASM_OP_LDFE; 1075 break; 1076 case ASM_OP_LDFE_SA: 1077 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1078 op = ASM_OP_LDFE; 1079 break; 1080 case ASM_OP_LDFP8_: 1081 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1082 op = ASM_OP_LDFP8; 1083 break; 1084 case ASM_OP_LDFP8_A: 1085 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1086 op = ASM_OP_LDFP8; 1087 break; 1088 case ASM_OP_LDFP8_C_CLR: 1089 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1090 op = ASM_OP_LDFP8; 1091 break; 1092 case ASM_OP_LDFP8_C_NC: 1093 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1094 op = ASM_OP_LDFP8; 1095 break; 1096 case ASM_OP_LDFP8_S: 1097 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1098 op = ASM_OP_LDFP8; 1099 break; 1100 case ASM_OP_LDFP8_SA: 1101 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1102 op = ASM_OP_LDFP8; 1103 break; 1104 case ASM_OP_LDFPD_: 1105 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1106 op = ASM_OP_LDFPD; 1107 break; 1108 case ASM_OP_LDFPD_A: 1109 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1110 op = ASM_OP_LDFPD; 1111 break; 1112 case ASM_OP_LDFPD_C_CLR: 1113 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1114 op = ASM_OP_LDFPD; 1115 break; 1116 case ASM_OP_LDFPD_C_NC: 1117 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1118 op = ASM_OP_LDFPD; 1119 break; 1120 case ASM_OP_LDFPD_S: 1121 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1122 op = ASM_OP_LDFPD; 1123 break; 1124 case ASM_OP_LDFPD_SA: 1125 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1126 op = ASM_OP_LDFPD; 1127 break; 1128 case ASM_OP_LDFPS_: 1129 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1130 op = ASM_OP_LDFPS; 1131 break; 1132 case ASM_OP_LDFPS_A: 1133 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1134 op = ASM_OP_LDFPS; 1135 break; 1136 case ASM_OP_LDFPS_C_CLR: 1137 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1138 op = ASM_OP_LDFPS; 1139 break; 1140 case ASM_OP_LDFPS_C_NC: 1141 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1142 op = ASM_OP_LDFPS; 1143 break; 1144 case ASM_OP_LDFPS_S: 1145 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1146 op = ASM_OP_LDFPS; 1147 break; 1148 case ASM_OP_LDFPS_SA: 1149 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1150 op = ASM_OP_LDFPS; 1151 break; 1152 case ASM_OP_LDFS_: 1153 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE); 1154 op = ASM_OP_LDFS; 1155 break; 1156 case ASM_OP_LDFS_A: 1157 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A); 1158 op = ASM_OP_LDFS; 1159 break; 1160 case ASM_OP_LDFS_C_CLR: 1161 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR); 1162 op = ASM_OP_LDFS; 1163 break; 1164 case ASM_OP_LDFS_C_NC: 1165 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC); 1166 op = ASM_OP_LDFS; 1167 break; 1168 case ASM_OP_LDFS_S: 1169 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S); 1170 op = ASM_OP_LDFS; 1171 break; 1172 case ASM_OP_LDFS_SA: 1173 asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA); 1174 op = ASM_OP_LDFS; 1175 break; 1176 case ASM_OP_LFETCH_: 1177 asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_NONE); 1178 asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_NONE); 1179 op = ASM_OP_LFETCH; 1180 break; 1181 case ASM_OP_LFETCH_EXCL: 1182 asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_NONE); 1183 asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_EXCL); 1184 op = ASM_OP_LFETCH; 1185 break; 1186 case ASM_OP_LFETCH_FAULT: 1187 asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_FAULT); 1188 asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_NONE); 1189 op = ASM_OP_LFETCH; 1190 break; 1191 case ASM_OP_LFETCH_FAULT_EXCL: 1192 asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_FAULT); 1193 asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_EXCL); 1194 op = ASM_OP_LFETCH; 1195 break; 1196 case ASM_OP_MF_: 1197 asm_cmpltr_add(i, ASM_CC_MF, ASM_CT_NONE); 1198 op = ASM_OP_MF; 1199 break; 1200 case ASM_OP_MF_A: 1201 asm_cmpltr_add(i, ASM_CC_MF, ASM_CT_A); 1202 op = ASM_OP_MF; 1203 break; 1204 case ASM_OP_MIX1_L: 1205 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 1206 op = ASM_OP_MIX1; 1207 break; 1208 case ASM_OP_MIX1_R: 1209 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 1210 op = ASM_OP_MIX1; 1211 break; 1212 case ASM_OP_MIX2_L: 1213 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 1214 op = ASM_OP_MIX2; 1215 break; 1216 case ASM_OP_MIX2_R: 1217 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 1218 op = ASM_OP_MIX2; 1219 break; 1220 case ASM_OP_MIX4_L: 1221 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 1222 op = ASM_OP_MIX4; 1223 break; 1224 case ASM_OP_MIX4_R: 1225 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 1226 op = ASM_OP_MIX4; 1227 break; 1228 case ASM_OP_MOV_: 1229 asm_cmpltr_add(i, ASM_CC_MOV, ASM_CT_NONE); 1230 op = ASM_OP_MOV; 1231 break; 1232 case ASM_OP_MOV_I: 1233 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I); 1234 op = ASM_OP_MOV; 1235 break; 1236 case ASM_OP_MOV_M: 1237 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M); 1238 op = ASM_OP_MOV; 1239 break; 1240 case ASM_OP_MOV_RET: 1241 asm_cmpltr_add(i, ASM_CC_MOV, ASM_CT_RET); 1242 op = ASM_OP_MOV; 1243 break; 1244 case ASM_OP_MOV_CPUID: 1245 ot = ASM_OPER_CPUID; 1246 op = ASM_OP_MOV; 1247 break; 1248 case ASM_OP_MOV_DBR: 1249 ot = ASM_OPER_DBR; 1250 op = ASM_OP_MOV; 1251 break; 1252 case ASM_OP_MOV_IBR: 1253 ot = ASM_OPER_IBR; 1254 op = ASM_OP_MOV; 1255 break; 1256 case ASM_OP_MOV_IP: 1257 ot = ASM_OPER_IP; 1258 op = ASM_OP_MOV; 1259 break; 1260 case ASM_OP_MOV_MSR: 1261 ot = ASM_OPER_MSR; 1262 op = ASM_OP_MOV; 1263 break; 1264 case ASM_OP_MOV_PKR: 1265 ot = ASM_OPER_PKR; 1266 op = ASM_OP_MOV; 1267 break; 1268 case ASM_OP_MOV_PMC: 1269 ot = ASM_OPER_PMC; 1270 op = ASM_OP_MOV; 1271 break; 1272 case ASM_OP_MOV_PMD: 1273 ot = ASM_OPER_PMD; 1274 op = ASM_OP_MOV; 1275 break; 1276 case ASM_OP_MOV_PR: 1277 ot = ASM_OPER_PR; 1278 op = ASM_OP_MOV; 1279 break; 1280 case ASM_OP_MOV_PSR: 1281 ot = ASM_OPER_PSR; 1282 op = ASM_OP_MOV; 1283 break; 1284 case ASM_OP_MOV_PSR_L: 1285 ot = ASM_OPER_PSR_L; 1286 op = ASM_OP_MOV; 1287 break; 1288 case ASM_OP_MOV_PSR_UM: 1289 ot = ASM_OPER_PSR_UM; 1290 op = ASM_OP_MOV; 1291 break; 1292 case ASM_OP_MOV_RR: 1293 ot = ASM_OPER_RR; 1294 op = ASM_OP_MOV; 1295 break; 1296 case ASM_OP_NOP_B: 1297 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_B); 1298 op = ASM_OP_NOP; 1299 break; 1300 case ASM_OP_NOP_F: 1301 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_F); 1302 op = ASM_OP_NOP; 1303 break; 1304 case ASM_OP_NOP_I: 1305 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I); 1306 op = ASM_OP_NOP; 1307 break; 1308 case ASM_OP_NOP_M: 1309 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M); 1310 op = ASM_OP_NOP; 1311 break; 1312 case ASM_OP_NOP_X: 1313 asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_X); 1314 op = ASM_OP_NOP; 1315 break; 1316 case ASM_OP_PACK2_SSS: 1317 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1318 op = ASM_OP_PACK2; 1319 break; 1320 case ASM_OP_PACK2_USS: 1321 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_USS); 1322 op = ASM_OP_PACK2; 1323 break; 1324 case ASM_OP_PACK4_SSS: 1325 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1326 op = ASM_OP_PACK4; 1327 break; 1328 case ASM_OP_PADD1_: 1329 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE); 1330 op = ASM_OP_PADD1; 1331 break; 1332 case ASM_OP_PADD1_SSS: 1333 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1334 op = ASM_OP_PADD1; 1335 break; 1336 case ASM_OP_PADD1_UUS: 1337 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS); 1338 op = ASM_OP_PADD1; 1339 break; 1340 case ASM_OP_PADD1_UUU: 1341 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU); 1342 op = ASM_OP_PADD1; 1343 break; 1344 case ASM_OP_PADD2_: 1345 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE); 1346 op = ASM_OP_PADD2; 1347 break; 1348 case ASM_OP_PADD2_SSS: 1349 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1350 op = ASM_OP_PADD2; 1351 break; 1352 case ASM_OP_PADD2_UUS: 1353 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS); 1354 op = ASM_OP_PADD2; 1355 break; 1356 case ASM_OP_PADD2_UUU: 1357 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU); 1358 op = ASM_OP_PADD2; 1359 break; 1360 case ASM_OP_PAVG1_: 1361 asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_NONE); 1362 op = ASM_OP_PAVG1; 1363 break; 1364 case ASM_OP_PAVG1_RAZ: 1365 asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_RAZ); 1366 op = ASM_OP_PAVG1; 1367 break; 1368 case ASM_OP_PAVG2_: 1369 asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_NONE); 1370 op = ASM_OP_PAVG2; 1371 break; 1372 case ASM_OP_PAVG2_RAZ: 1373 asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_RAZ); 1374 op = ASM_OP_PAVG2; 1375 break; 1376 case ASM_OP_PCMP1_EQ: 1377 asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_EQ); 1378 op = ASM_OP_PCMP1; 1379 break; 1380 case ASM_OP_PCMP1_GT: 1381 asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_GT); 1382 op = ASM_OP_PCMP1; 1383 break; 1384 case ASM_OP_PCMP2_EQ: 1385 asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_EQ); 1386 op = ASM_OP_PCMP2; 1387 break; 1388 case ASM_OP_PCMP2_GT: 1389 asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_GT); 1390 op = ASM_OP_PCMP2; 1391 break; 1392 case ASM_OP_PCMP4_EQ: 1393 asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_EQ); 1394 op = ASM_OP_PCMP4; 1395 break; 1396 case ASM_OP_PCMP4_GT: 1397 asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_GT); 1398 op = ASM_OP_PCMP4; 1399 break; 1400 case ASM_OP_PMAX1_U: 1401 asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1402 op = ASM_OP_PMAX1; 1403 break; 1404 case ASM_OP_PMIN1_U: 1405 asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1406 op = ASM_OP_PMIN1; 1407 break; 1408 case ASM_OP_PMPY2_L: 1409 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L); 1410 op = ASM_OP_PMPY2; 1411 break; 1412 case ASM_OP_PMPY2_R: 1413 asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R); 1414 op = ASM_OP_PMPY2; 1415 break; 1416 case ASM_OP_PMPYSHR2_: 1417 asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE); 1418 op = ASM_OP_PMPYSHR2; 1419 break; 1420 case ASM_OP_PMPYSHR2_U: 1421 asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1422 op = ASM_OP_PMPYSHR2; 1423 break; 1424 case ASM_OP_PROBE_R: 1425 asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_R); 1426 asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_NONE); 1427 op = ASM_OP_PROBE; 1428 break; 1429 case ASM_OP_PROBE_R_FAULT: 1430 asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_R); 1431 asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_FAULT); 1432 op = ASM_OP_PROBE; 1433 break; 1434 case ASM_OP_PROBE_RW_FAULT: 1435 asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_RW); 1436 asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_FAULT); 1437 op = ASM_OP_PROBE; 1438 break; 1439 case ASM_OP_PROBE_W: 1440 asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_W); 1441 asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_NONE); 1442 op = ASM_OP_PROBE; 1443 break; 1444 case ASM_OP_PROBE_W_FAULT: 1445 asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_W); 1446 asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_FAULT); 1447 op = ASM_OP_PROBE; 1448 break; 1449 case ASM_OP_PSHR2_: 1450 asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE); 1451 op = ASM_OP_PSHR2; 1452 break; 1453 case ASM_OP_PSHR2_U: 1454 asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1455 op = ASM_OP_PSHR2; 1456 break; 1457 case ASM_OP_PSHR4_: 1458 asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE); 1459 op = ASM_OP_PSHR4; 1460 break; 1461 case ASM_OP_PSHR4_U: 1462 asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1463 op = ASM_OP_PSHR4; 1464 break; 1465 case ASM_OP_PSUB1_: 1466 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE); 1467 op = ASM_OP_PSUB1; 1468 break; 1469 case ASM_OP_PSUB1_SSS: 1470 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1471 op = ASM_OP_PSUB1; 1472 break; 1473 case ASM_OP_PSUB1_UUS: 1474 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS); 1475 op = ASM_OP_PSUB1; 1476 break; 1477 case ASM_OP_PSUB1_UUU: 1478 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU); 1479 op = ASM_OP_PSUB1; 1480 break; 1481 case ASM_OP_PSUB2_: 1482 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE); 1483 op = ASM_OP_PSUB2; 1484 break; 1485 case ASM_OP_PSUB2_SSS: 1486 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS); 1487 op = ASM_OP_PSUB2; 1488 break; 1489 case ASM_OP_PSUB2_UUS: 1490 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS); 1491 op = ASM_OP_PSUB2; 1492 break; 1493 case ASM_OP_PSUB2_UUU: 1494 asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU); 1495 op = ASM_OP_PSUB2; 1496 break; 1497 case ASM_OP_PTC_E: 1498 asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_E); 1499 op = ASM_OP_PTC; 1500 break; 1501 case ASM_OP_PTC_G: 1502 asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_G); 1503 op = ASM_OP_PTC; 1504 break; 1505 case ASM_OP_PTC_GA: 1506 asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_GA); 1507 op = ASM_OP_PTC; 1508 break; 1509 case ASM_OP_PTC_L: 1510 asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_L); 1511 op = ASM_OP_PTC; 1512 break; 1513 case ASM_OP_PTR_D: 1514 asm_cmpltr_add(i, ASM_CC_PTR, ASM_CT_D); 1515 op = ASM_OP_PTR; 1516 break; 1517 case ASM_OP_PTR_I: 1518 asm_cmpltr_add(i, ASM_CC_PTR, ASM_CT_I); 1519 op = ASM_OP_PTR; 1520 break; 1521 case ASM_OP_SETF_D: 1522 asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_D); 1523 op = ASM_OP_SETF; 1524 break; 1525 case ASM_OP_SETF_EXP: 1526 asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_EXP); 1527 op = ASM_OP_SETF; 1528 break; 1529 case ASM_OP_SETF_S: 1530 asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_S); 1531 op = ASM_OP_SETF; 1532 break; 1533 case ASM_OP_SETF_SIG: 1534 asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_SIG); 1535 op = ASM_OP_SETF; 1536 break; 1537 case ASM_OP_SHR_: 1538 asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE); 1539 op = ASM_OP_SHR; 1540 break; 1541 case ASM_OP_SHR_U: 1542 asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U); 1543 op = ASM_OP_SHR; 1544 break; 1545 case ASM_OP_SRLZ_D: 1546 asm_cmpltr_add(i, ASM_CC_SRLZ, ASM_CT_D); 1547 op = ASM_OP_SRLZ; 1548 break; 1549 case ASM_OP_SRLZ_I: 1550 asm_cmpltr_add(i, ASM_CC_SRLZ, ASM_CT_I); 1551 op = ASM_OP_SRLZ; 1552 break; 1553 case ASM_OP_ST1_: 1554 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE); 1555 op = ASM_OP_ST1; 1556 break; 1557 case ASM_OP_ST1_REL: 1558 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL); 1559 op = ASM_OP_ST1; 1560 break; 1561 case ASM_OP_ST16_: 1562 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE); 1563 op = ASM_OP_ST16; 1564 break; 1565 case ASM_OP_ST16_REL: 1566 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL); 1567 op = ASM_OP_ST16; 1568 break; 1569 case ASM_OP_ST2_: 1570 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE); 1571 op = ASM_OP_ST2; 1572 break; 1573 case ASM_OP_ST2_REL: 1574 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL); 1575 op = ASM_OP_ST2; 1576 break; 1577 case ASM_OP_ST4_: 1578 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE); 1579 op = ASM_OP_ST4; 1580 break; 1581 case ASM_OP_ST4_REL: 1582 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL); 1583 op = ASM_OP_ST4; 1584 break; 1585 case ASM_OP_ST8_: 1586 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE); 1587 op = ASM_OP_ST8; 1588 break; 1589 case ASM_OP_ST8_REL: 1590 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL); 1591 op = ASM_OP_ST8; 1592 break; 1593 case ASM_OP_ST8_SPILL: 1594 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_SPILL); 1595 op = ASM_OP_ST8; 1596 break; 1597 case ASM_OP_STF_SPILL: 1598 asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_SPILL); 1599 op = ASM_OP_STF; 1600 break; 1601 case ASM_OP_SYNC_I: 1602 asm_cmpltr_add(i, ASM_CC_SYNC, ASM_CT_I); 1603 op = ASM_OP_SYNC; 1604 break; 1605 case ASM_OP_TBIT_NZ_AND: 1606 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1607 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 1608 op = ASM_OP_TBIT; 1609 break; 1610 case ASM_OP_TBIT_NZ_OR: 1611 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1612 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 1613 op = ASM_OP_TBIT; 1614 break; 1615 case ASM_OP_TBIT_NZ_OR_ANDCM: 1616 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1617 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 1618 op = ASM_OP_TBIT; 1619 break; 1620 case ASM_OP_TBIT_Z: 1621 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1622 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 1623 op = ASM_OP_TBIT; 1624 break; 1625 case ASM_OP_TBIT_Z_AND: 1626 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1627 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 1628 op = ASM_OP_TBIT; 1629 break; 1630 case ASM_OP_TBIT_Z_OR: 1631 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1632 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 1633 op = ASM_OP_TBIT; 1634 break; 1635 case ASM_OP_TBIT_Z_OR_ANDCM: 1636 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1637 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 1638 op = ASM_OP_TBIT; 1639 break; 1640 case ASM_OP_TBIT_Z_UNC: 1641 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1642 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 1643 op = ASM_OP_TBIT; 1644 break; 1645 case ASM_OP_TNAT_NZ_AND: 1646 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1647 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 1648 op = ASM_OP_TNAT; 1649 break; 1650 case ASM_OP_TNAT_NZ_OR: 1651 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1652 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 1653 op = ASM_OP_TNAT; 1654 break; 1655 case ASM_OP_TNAT_NZ_OR_ANDCM: 1656 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ); 1657 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 1658 op = ASM_OP_TNAT; 1659 break; 1660 case ASM_OP_TNAT_Z: 1661 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1662 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE); 1663 op = ASM_OP_TNAT; 1664 break; 1665 case ASM_OP_TNAT_Z_AND: 1666 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1667 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND); 1668 op = ASM_OP_TNAT; 1669 break; 1670 case ASM_OP_TNAT_Z_OR: 1671 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1672 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR); 1673 op = ASM_OP_TNAT; 1674 break; 1675 case ASM_OP_TNAT_Z_OR_ANDCM: 1676 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1677 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM); 1678 op = ASM_OP_TNAT; 1679 break; 1680 case ASM_OP_TNAT_Z_UNC: 1681 asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z); 1682 asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC); 1683 op = ASM_OP_TNAT; 1684 break; 1685 case ASM_OP_UNPACK1_H: 1686 asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_H); 1687 op = ASM_OP_UNPACK1; 1688 break; 1689 case ASM_OP_UNPACK1_L: 1690 asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_L); 1691 op = ASM_OP_UNPACK1; 1692 break; 1693 case ASM_OP_UNPACK2_H: 1694 asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_H); 1695 op = ASM_OP_UNPACK2; 1696 break; 1697 case ASM_OP_UNPACK2_L: 1698 asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_L); 1699 op = ASM_OP_UNPACK2; 1700 break; 1701 case ASM_OP_UNPACK4_H: 1702 asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_H); 1703 op = ASM_OP_UNPACK4; 1704 break; 1705 case ASM_OP_UNPACK4_L: 1706 asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_L); 1707 op = ASM_OP_UNPACK4; 1708 break; 1709 case ASM_OP_XMA_H: 1710 asm_cmpltr_add(i, ASM_CC_XMA, ASM_CT_H); 1711 op = ASM_OP_XMA; 1712 break; 1713 case ASM_OP_XMA_HU: 1714 asm_cmpltr_add(i, ASM_CC_XMA, ASM_CT_HU); 1715 op = ASM_OP_XMA; 1716 break; 1717 case ASM_OP_XMA_L: 1718 asm_cmpltr_add(i, ASM_CC_XMA, ASM_CT_L); 1719 op = ASM_OP_XMA; 1720 break; 1721 default: 1722 KASSERT(op < ASM_OP_NUMBER_OF_OPCODES); 1723 break; 1724 } 1725 i->i_op = op; 1726 return (ot); 1727 } 1728 1729 static __inline void 1730 op_imm(struct asm_inst *i, int op, uint64_t val) 1731 { 1732 i->i_oper[op].o_type = ASM_OPER_IMM; 1733 i->i_oper[op].o_value = val; 1734 } 1735 1736 static __inline void 1737 op_type(struct asm_inst *i, int op, enum asm_oper_type ot) 1738 { 1739 i->i_oper[op].o_type = ot; 1740 } 1741 1742 static __inline void 1743 op_value(struct asm_inst *i, int op, uint64_t val) 1744 { 1745 i->i_oper[op].o_value = val; 1746 } 1747 1748 static __inline void 1749 operand(struct asm_inst *i, int op, enum asm_oper_type ot, uint64_t bits, 1750 int o, int l) 1751 { 1752 i->i_oper[op].o_type = ot; 1753 i->i_oper[op].o_value = FIELD(bits, o, l); 1754 } 1755 1756 static uint64_t 1757 imm(uint64_t bits, int sign, int o, int l) 1758 { 1759 uint64_t val = FIELD(bits, o, l); 1760 1761 if (sign && (val & (1LL << (l - 1))) != 0) 1762 val |= -1LL << l; 1763 return (val); 1764 } 1765 1766 static void 1767 s_imm(struct asm_inst *i, int op, uint64_t bits, int o, int l) 1768 { 1769 i->i_oper[op].o_type = ASM_OPER_IMM; 1770 i->i_oper[op].o_value = imm(bits, 1, o, l); 1771 } 1772 1773 static void 1774 u_imm(struct asm_inst *i, int op, uint64_t bits, int o, int l) 1775 { 1776 i->i_oper[op].o_type = ASM_OPER_IMM; 1777 i->i_oper[op].o_value = imm(bits, 0, o, l); 1778 } 1779 1780 static uint64_t 1781 vimm(uint64_t bits, int sign, va_list ap) 1782 { 1783 uint64_t val = 0; 1784 int len = 0; 1785 int frag; 1786 1787 while ((frag = va_arg(ap, int)) != 0) { 1788 val |= (uint64_t)FIELD(bits, FRAG_OFS(frag), FRAG_LEN(frag)) 1789 << len; 1790 len += FRAG_LEN(frag); 1791 } 1792 if (sign && (val & (1LL << (len - 1))) != 0) 1793 val |= -1LL << len; 1794 return (val); 1795 } 1796 1797 static void 1798 s_immf(struct asm_inst *i, int op, uint64_t bits, ...) 1799 { 1800 va_list ap; 1801 va_start(ap, bits); 1802 i->i_oper[op].o_type = ASM_OPER_IMM; 1803 i->i_oper[op].o_value = vimm(bits, 1, ap); 1804 va_end(ap); 1805 } 1806 1807 static void 1808 u_immf(struct asm_inst *i, int op, uint64_t bits, ...) 1809 { 1810 va_list ap; 1811 va_start(ap, bits); 1812 i->i_oper[op].o_type = ASM_OPER_IMM; 1813 i->i_oper[op].o_value = vimm(bits, 0, ap); 1814 va_end(ap); 1815 } 1816 1817 static void 1818 disp(struct asm_inst *i, int op, uint64_t bits, ...) 1819 { 1820 va_list ap; 1821 va_start(ap, bits); 1822 i->i_oper[op].o_type = ASM_OPER_DISP; 1823 i->i_oper[op].o_value = vimm(bits, 1, ap) << 4; 1824 va_end(ap); 1825 } 1826 1827 static __inline void 1828 combine(uint64_t *dst, int dl, uint64_t src, int sl, int so) 1829 { 1830 *dst = (*dst & ((1LL << dl) - 1LL)) | 1831 ((uint64_t)_FLD64(src, so, sl) << dl); 1832 } 1833 1834 int 1835 asm_extract(enum asm_op op, enum asm_fmt fmt, uint64_t bits, 1836 struct asm_bundle *b, int slot) 1837 { 1838 struct asm_inst *i = b->b_inst + slot; 1839 enum asm_oper_type ot; 1840 1841 KASSERT(op != ASM_OP_NONE); 1842 i->i_bits = bits; 1843 i->i_format = fmt; 1844 i->i_srcidx = 2; 1845 1846 ot = asm_normalize(i, op); 1847 1848 if (fmt != ASM_FMT_B6 && fmt != ASM_FMT_B7) 1849 operand(i, 0, ASM_OPER_PREG, bits, 0, 6); 1850 1851 switch (fmt) { 1852 case ASM_FMT_A1: 1853 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1854 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 1855 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 1856 if ((op == ASM_OP_ADD && FIELD(bits, 27, 2) == 1) || 1857 (op == ASM_OP_SUB && FIELD(bits, 27, 2) == 0)) 1858 op_imm(i, 4, 1LL); 1859 break; 1860 case ASM_FMT_A2: 1861 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1862 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 1863 op_imm(i, 3, 1LL + FIELD(bits, 27, 2)); 1864 operand(i, 4, ASM_OPER_GREG, bits, 20, 7); 1865 break; 1866 case ASM_FMT_A3: 1867 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1868 s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0); 1869 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 1870 break; 1871 case ASM_FMT_A4: 1872 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1873 s_immf(i, 2, bits, FRAG(13,7), FRAG(27,6), FRAG(36,1), 0); 1874 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 1875 break; 1876 case ASM_FMT_A5: 1877 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1878 s_immf(i, 2, bits, FRAG(13,7), FRAG(27,9), FRAG(22,5), 1879 FRAG(36,1), 0); 1880 operand(i, 3, ASM_OPER_GREG, bits, 20, 2); 1881 break; 1882 case ASM_FMT_A6: /* 2 dst */ 1883 operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 1884 operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 1885 operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 1886 operand(i, 4, ASM_OPER_GREG, bits, 20, 7); 1887 i->i_srcidx++; 1888 break; 1889 case ASM_FMT_A7: /* 2 dst */ 1890 if (FIELD(bits, 13, 7) != 0) 1891 return (0); 1892 operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 1893 operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 1894 operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 1895 operand(i, 4, ASM_OPER_GREG, bits, 20, 7); 1896 i->i_srcidx++; 1897 break; 1898 case ASM_FMT_A8: /* 2 dst */ 1899 operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 1900 operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 1901 s_immf(i, 3, bits, FRAG(13,7), FRAG(36,1), 0); 1902 operand(i, 4, ASM_OPER_GREG, bits, 20, 7); 1903 i->i_srcidx++; 1904 break; 1905 case ASM_FMT_A9: 1906 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1907 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 1908 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 1909 break; 1910 case ASM_FMT_A10: 1911 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 1912 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 1913 op_imm(i, 3, 1LL + FIELD(bits, 27, 2)); 1914 operand(i, 4, ASM_OPER_GREG, bits, 20, 7); 1915 break; 1916 case ASM_FMT_B1: /* 0 dst */ 1917 asm_brhint(i); 1918 disp(i, 1, bits, FRAG(13,20), FRAG(36,1), 0); 1919 break; 1920 case ASM_FMT_B2: /* 0 dst */ 1921 if (FIELD(bits, 0, 6) != 0) 1922 return (0); 1923 asm_brhint(i); 1924 disp(i, 1, bits, FRAG(13,20), FRAG(36,1), 0); 1925 break; 1926 case ASM_FMT_B3: 1927 asm_brhint(i); 1928 operand(i, 1, ASM_OPER_BREG, bits, 6, 3); 1929 disp(i, 2, bits, FRAG(13,20), FRAG(36,1), 0); 1930 break; 1931 case ASM_FMT_B4: /* 0 dst */ 1932 asm_brhint(i); 1933 operand(i, 1, ASM_OPER_BREG, bits, 13, 3); 1934 break; 1935 case ASM_FMT_B5: 1936 #if 0 1937 if (FIELD(bits, 32, 1) == 0) 1938 return (0); 1939 #endif 1940 asm_brhint(i); 1941 operand(i, 1, ASM_OPER_BREG, bits, 6, 3); 1942 operand(i, 2, ASM_OPER_BREG, bits, 13, 3); 1943 break; 1944 case ASM_FMT_B6: /* 0 dst */ 1945 asm_brphint(i); 1946 disp(i, 1, bits, FRAG(13,20), FRAG(36,1), 0); 1947 disp(i, 2, bits, FRAG(6,7), FRAG(33,2), 0); 1948 i->i_srcidx--; 1949 break; 1950 case ASM_FMT_B7: /* 0 dst */ 1951 asm_brphint(i); 1952 operand(i, 1, ASM_OPER_BREG, bits, 13, 3); 1953 disp(i, 2, bits, FRAG(6,7), FRAG(33,2), 0); 1954 i->i_srcidx--; 1955 break; 1956 case ASM_FMT_B8: 1957 /* no operands */ 1958 break; 1959 case ASM_FMT_B9: /* 0 dst */ 1960 u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 1961 break; 1962 case ASM_FMT_F1: 1963 asm_sf(i); 1964 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 1965 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 1966 operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 1967 operand(i, 4, ASM_OPER_FREG, bits, 27, 7); 1968 break; 1969 case ASM_FMT_F2: 1970 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 1971 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 1972 operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 1973 operand(i, 4, ASM_OPER_FREG, bits, 27, 7); 1974 break; 1975 case ASM_FMT_F3: 1976 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 1977 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 1978 operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 1979 operand(i, 4, ASM_OPER_FREG, bits, 27, 7); 1980 break; 1981 case ASM_FMT_F4: /* 2 dst */ 1982 if (FIELD(bits, 33, 1)) { /* ra */ 1983 if (FIELD(bits, 36, 1)) /* rb */ 1984 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_UNORD); 1985 else 1986 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LE); 1987 } else { 1988 if (FIELD(bits, 36, 1)) /* rb */ 1989 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LT); 1990 else 1991 asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_EQ); 1992 } 1993 if (FIELD(bits, 12, 1)) /* ta */ 1994 asm_cmpltr_add(i, ASM_CC_FCTYPE, ASM_CT_UNC); 1995 else 1996 asm_cmpltr_add(i, ASM_CC_FCTYPE, ASM_CT_NONE); 1997 asm_sf(i); 1998 operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 1999 operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2000 operand(i, 3, ASM_OPER_FREG, bits, 13, 7); 2001 operand(i, 4, ASM_OPER_FREG, bits, 20, 7); 2002 i->i_srcidx++; 2003 break; 2004 case ASM_FMT_F5: /* 2 dst */ 2005 operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 2006 operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2007 operand(i, 3, ASM_OPER_FREG, bits, 13, 7); 2008 u_immf(i, 4, bits, FRAG(33,2), FRAG(20,7), 0); 2009 i->i_srcidx++; 2010 break; 2011 case ASM_FMT_F6: /* 2 dst */ 2012 asm_sf(i); 2013 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2014 operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2015 operand(i, 3, ASM_OPER_FREG, bits, 13, 7); 2016 operand(i, 4, ASM_OPER_FREG, bits, 20, 7); 2017 i->i_srcidx++; 2018 break; 2019 case ASM_FMT_F7: /* 2 dst */ 2020 asm_sf(i); 2021 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2022 operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2023 operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 2024 i->i_srcidx++; 2025 break; 2026 case ASM_FMT_F8: 2027 asm_sf(i); 2028 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2029 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2030 operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 2031 break; 2032 case ASM_FMT_F9: 2033 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2034 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2035 operand(i, 3, ASM_OPER_FREG, bits, 20, 7); 2036 break; 2037 case ASM_FMT_F10: 2038 asm_sf(i); 2039 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2040 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2041 break; 2042 case ASM_FMT_F11: 2043 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2044 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2045 break; 2046 case ASM_FMT_F12: /* 0 dst */ 2047 asm_sf(i); 2048 u_imm(i, 1, bits, 13, 7); 2049 u_imm(i, 2, bits, 20, 7); 2050 i->i_srcidx--; 2051 break; 2052 case ASM_FMT_F13: 2053 asm_sf(i); 2054 /* no operands */ 2055 break; 2056 case ASM_FMT_F14: /* 0 dst */ 2057 asm_sf(i); 2058 disp(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2059 break; 2060 case ASM_FMT_F15: /* 0 dst */ 2061 u_imm(i, 1, bits, 6, 20); 2062 break; 2063 case ASM_FMT_I1: 2064 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2065 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2066 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2067 switch (FIELD(bits, 30, 2)) { 2068 case 0: op_imm(i, 4, 0LL); break; 2069 case 1: op_imm(i, 4, 7LL); break; 2070 case 2: op_imm(i, 4, 15LL); break; 2071 case 3: op_imm(i, 4, 16LL); break; 2072 } 2073 break; 2074 case ASM_FMT_I2: 2075 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2076 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2077 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2078 break; 2079 case ASM_FMT_I3: 2080 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2081 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2082 u_imm(i, 3, bits, 20, 4); 2083 break; 2084 case ASM_FMT_I4: 2085 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2086 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2087 u_imm(i, 3, bits, 20, 8); 2088 break; 2089 case ASM_FMT_I5: 2090 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2091 operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2092 operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 2093 break; 2094 case ASM_FMT_I6: 2095 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2096 operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2097 u_imm(i, 3, bits, 14, 5); 2098 break; 2099 case ASM_FMT_I7: 2100 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2101 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2102 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2103 break; 2104 case ASM_FMT_I8: 2105 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2106 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2107 op_imm(i, 3, 31LL - FIELD(bits, 20, 5)); 2108 break; 2109 case ASM_FMT_I9: 2110 if (FIELD(bits, 13, 7) != 0) 2111 return (0); 2112 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2113 operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2114 break; 2115 case ASM_FMT_I10: 2116 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2117 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2118 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2119 u_imm(i, 4, bits, 27, 6); 2120 break; 2121 case ASM_FMT_I11: 2122 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2123 operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2124 u_imm(i, 3, bits, 14, 6); 2125 op_imm(i, 4, 1LL + FIELD(bits, 27, 6)); 2126 break; 2127 case ASM_FMT_I12: 2128 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2129 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2130 op_imm(i, 3, 63LL - FIELD(bits, 20, 6)); 2131 op_imm(i, 4, 1LL + FIELD(bits, 27, 6)); 2132 break; 2133 case ASM_FMT_I13: 2134 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2135 s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0); 2136 op_imm(i, 3, 63LL - FIELD(bits, 20, 6)); 2137 op_imm(i, 4, 1LL + FIELD(bits, 27, 6)); 2138 break; 2139 case ASM_FMT_I14: 2140 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2141 s_imm(i, 2, bits, 36, 1); 2142 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2143 op_imm(i, 4, 63LL - FIELD(bits, 14, 6)); 2144 op_imm(i, 5, 1LL + FIELD(bits, 27, 6)); 2145 break; 2146 case ASM_FMT_I15: 2147 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2148 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2149 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2150 op_imm(i, 4, 63LL - FIELD(bits, 31, 6)); 2151 op_imm(i, 5, 1LL + FIELD(bits, 27, 4)); 2152 break; 2153 case ASM_FMT_I16: /* 2 dst */ 2154 operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 2155 operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2156 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2157 u_imm(i, 4, bits, 14, 6); 2158 i->i_srcidx++; 2159 break; 2160 case ASM_FMT_I17: /* 2 dst */ 2161 operand(i, 1, ASM_OPER_PREG, bits, 6, 6); 2162 operand(i, 2, ASM_OPER_PREG, bits, 27, 6); 2163 operand(i, 3, ASM_OPER_GREG, bits, 20, 7); 2164 i->i_srcidx++; 2165 break; 2166 case ASM_FMT_I19: 2167 u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2168 break; 2169 case ASM_FMT_I20: /* 0 dst */ 2170 operand(i, 1, ASM_OPER_GREG, bits, 13, 7); 2171 disp(i, 2, bits, FRAG(6,7), FRAG(20,13), FRAG(36,1), 0); 2172 i->i_srcidx--; 2173 break; 2174 case ASM_FMT_I21: 2175 switch (FIELD(bits, 20, 2)) { /* wh */ 2176 case 0: asm_cmpltr_add(i, ASM_CC_MWH, ASM_CT_SPTK); break; 2177 case 1: asm_cmpltr_add(i, ASM_CC_MWH, ASM_CT_NONE); break; 2178 case 2: asm_cmpltr_add(i, ASM_CC_MWH, ASM_CT_DPTK); break; 2179 case 3: return (0); 2180 } 2181 if (FIELD(bits, 23, 1)) /* ih */ 2182 asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_IMP); 2183 else 2184 asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_NONE); 2185 operand(i, 1, ASM_OPER_BREG, bits, 6, 3); 2186 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2187 disp(i, 3, bits, FRAG(24,9), 0); 2188 break; 2189 case ASM_FMT_I22: 2190 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2191 operand(i, 2, ASM_OPER_BREG, bits, 13, 3); 2192 break; 2193 case ASM_FMT_I23: 2194 op_type(i, 1, ASM_OPER_PR); 2195 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2196 u_immf(i, 3, bits, FRAG(6,7), FRAG(24,8), FRAG(36,1), 0); 2197 i->i_oper[3].o_value <<= 1; 2198 break; 2199 case ASM_FMT_I24: 2200 op_type(i, 1, ASM_OPER_PR_ROT); 2201 s_immf(i, 2, bits, FRAG(6,27), FRAG(36,1), 0); 2202 break; 2203 case ASM_FMT_I25: 2204 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2205 op_type(i, 2, ot); 2206 break; 2207 case ASM_FMT_I26: 2208 operand(i, 1, ASM_OPER_AREG, bits, 20, 7); 2209 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2210 break; 2211 case ASM_FMT_I27: 2212 operand(i, 1, ASM_OPER_AREG, bits, 20, 7); 2213 s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0); 2214 break; 2215 case ASM_FMT_I28: 2216 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2217 operand(i, 2, ASM_OPER_AREG, bits, 20, 7); 2218 break; 2219 case ASM_FMT_I29: 2220 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2221 operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2222 break; 2223 case ASM_FMT_M1: 2224 asm_hint(i, ASM_CC_LDHINT); 2225 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2226 if (i->i_op == ASM_OP_LD16) { 2227 op_type(i, 2, ASM_OPER_AREG); 2228 op_value(i, 2, AR_CSD); 2229 i->i_srcidx++; 2230 } 2231 operand(i, i->i_srcidx, ASM_OPER_MEM, bits, 20, 7); 2232 break; 2233 case ASM_FMT_M2: 2234 asm_hint(i, ASM_CC_LDHINT); 2235 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2236 operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2237 operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 2238 break; 2239 case ASM_FMT_M3: 2240 asm_hint(i, ASM_CC_LDHINT); 2241 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2242 operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2243 s_immf(i, 3, bits, FRAG(13,7), FRAG(27,1), FRAG(36,1), 0); 2244 break; 2245 case ASM_FMT_M4: 2246 asm_hint(i, ASM_CC_STHINT); 2247 operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2248 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2249 if (i->i_op == ASM_OP_ST16) { 2250 op_type(i, 3, ASM_OPER_AREG); 2251 op_value(i, 3, AR_CSD); 2252 } 2253 break; 2254 case ASM_FMT_M5: 2255 asm_hint(i, ASM_CC_STHINT); 2256 operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2257 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2258 s_immf(i, 3, bits, FRAG(6,7), FRAG(27,1), FRAG(36,1), 0); 2259 break; 2260 case ASM_FMT_M6: 2261 asm_hint(i, ASM_CC_LDHINT); 2262 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2263 operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2264 break; 2265 case ASM_FMT_M7: 2266 asm_hint(i, ASM_CC_LDHINT); 2267 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2268 operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2269 operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 2270 break; 2271 case ASM_FMT_M8: 2272 asm_hint(i, ASM_CC_LDHINT); 2273 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2274 operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2275 s_immf(i, 3, bits, FRAG(13,7), FRAG(27,1), FRAG(36,1), 0); 2276 break; 2277 case ASM_FMT_M9: 2278 asm_hint(i, ASM_CC_STHINT); 2279 operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2280 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2281 break; 2282 case ASM_FMT_M10: 2283 asm_hint(i, ASM_CC_STHINT); 2284 operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2285 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2286 s_immf(i, 3, bits, FRAG(6,7), FRAG(27,1), FRAG(36,1), 0); 2287 break; 2288 case ASM_FMT_M11: /* 2 dst */ 2289 asm_hint(i, ASM_CC_LDHINT); 2290 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2291 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2292 operand(i, 3, ASM_OPER_MEM, bits, 20, 7); 2293 i->i_srcidx++; 2294 break; 2295 case ASM_FMT_M12: /* 2 dst */ 2296 asm_hint(i, ASM_CC_LDHINT); 2297 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2298 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2299 operand(i, 3, ASM_OPER_MEM, bits, 20, 7); 2300 op_imm(i, 4, 8LL << FIELD(bits, 30, 1)); 2301 i->i_srcidx++; 2302 break; 2303 case ASM_FMT_M13: 2304 asm_hint(i, ASM_CC_LFHINT); 2305 operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2306 break; 2307 case ASM_FMT_M14: /* 0 dst */ 2308 asm_hint(i, ASM_CC_LFHINT); 2309 operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2310 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2311 i->i_srcidx--; 2312 break; 2313 case ASM_FMT_M15: /* 0 dst */ 2314 asm_hint(i, ASM_CC_LFHINT); 2315 operand(i, 1, ASM_OPER_MEM, bits, 20, 7); 2316 s_immf(i, 2, bits, FRAG(13,7), FRAG(27,1), FRAG(36,1), 0); 2317 i->i_srcidx--; 2318 break; 2319 case ASM_FMT_M16: { 2320 int oper; 2321 asm_hint(i, ASM_CC_LDHINT); 2322 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2323 operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2324 operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 2325 if (i->i_op == ASM_OP_CMP8XCHG16) { 2326 op_type(i, 4, ASM_OPER_AREG); 2327 op_value(i, 4, AR_CSD); 2328 oper = 5; 2329 } else 2330 oper = 4; 2331 if (FIELD(bits, 30, 6) < 8) { 2332 op_type(i, oper, ASM_OPER_AREG); 2333 op_value(i, oper, AR_CCV); 2334 } 2335 break; 2336 } 2337 case ASM_FMT_M17: 2338 asm_hint(i, ASM_CC_LDHINT); 2339 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2340 operand(i, 2, ASM_OPER_MEM, bits, 20, 7); 2341 switch (FIELD(bits, 13, 2)) { 2342 case 0: op_imm(i, 3, 1LL << 4); break; 2343 case 1: op_imm(i, 3, 1LL << 3); break; 2344 case 2: op_imm(i, 3, 1LL << 2); break; 2345 case 3: op_imm(i, 3, 1LL); break; 2346 } 2347 if (FIELD(bits, 15, 1)) 2348 i->i_oper[3].o_value *= -1LL; 2349 break; 2350 case ASM_FMT_M18: 2351 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2352 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2353 break; 2354 case ASM_FMT_M19: 2355 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2356 operand(i, 2, ASM_OPER_FREG, bits, 13, 7); 2357 break; 2358 case ASM_FMT_M20: /* 0 dst */ 2359 operand(i, 1, ASM_OPER_GREG, bits, 13, 7); 2360 disp(i, 2, bits, FRAG(6,7), FRAG(20,13), FRAG(36,1), 0); 2361 i->i_srcidx--; 2362 break; 2363 case ASM_FMT_M21: /* 0 dst */ 2364 operand(i, 1, ASM_OPER_FREG, bits, 13, 7); 2365 disp(i, 2, bits, FRAG(6,7), FRAG(20,13), FRAG(36,1), 0); 2366 i->i_srcidx--; 2367 break; 2368 case ASM_FMT_M22: /* 0 dst */ 2369 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2370 disp(i, 2, bits, FRAG(13,20), FRAG(36,1), 0); 2371 i->i_srcidx--; 2372 break; 2373 case ASM_FMT_M23: /* 0 dst */ 2374 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2375 disp(i, 2, bits, FRAG(13,20), FRAG(36,1), 0); 2376 i->i_srcidx--; 2377 break; 2378 case ASM_FMT_M24: 2379 /* no operands */ 2380 break; 2381 case ASM_FMT_M25: 2382 if (FIELD(bits, 0, 6) != 0) 2383 return (0); 2384 /* no operands */ 2385 break; 2386 case ASM_FMT_M26: 2387 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2388 break; 2389 case ASM_FMT_M27: 2390 operand(i, 1, ASM_OPER_FREG, bits, 6, 7); 2391 break; 2392 case ASM_FMT_M28: 2393 operand(i, 1, ASM_OPER_GREG, bits, 20, 7); 2394 break; 2395 case ASM_FMT_M29: 2396 operand(i, 1, ASM_OPER_AREG, bits, 20, 7); 2397 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2398 break; 2399 case ASM_FMT_M30: 2400 operand(i, 1, ASM_OPER_AREG, bits, 20, 7); 2401 s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0); 2402 break; 2403 case ASM_FMT_M31: 2404 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2405 operand(i, 2, ASM_OPER_AREG, bits, 20, 7); 2406 break; 2407 case ASM_FMT_M32: 2408 operand(i, 1, ASM_OPER_CREG, bits, 20, 7); 2409 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2410 break; 2411 case ASM_FMT_M33: 2412 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2413 operand(i, 2, ASM_OPER_CREG, bits, 20, 7); 2414 break; 2415 case ASM_FMT_M34: { 2416 uint64_t loc, out; 2417 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2418 op_type(i, 2, ASM_OPER_AREG); 2419 op_value(i, 2, AR_PFS); 2420 loc = FIELD(bits, 20, 7); 2421 out = FIELD(bits, 13, 7) - loc; 2422 op_imm(i, 3, 0); 2423 op_imm(i, 4, loc); 2424 op_imm(i, 5, out); 2425 op_imm(i, 6, (uint64_t)FIELD(bits, 27, 4) << 3); 2426 break; 2427 } 2428 case ASM_FMT_M35: 2429 if (FIELD(bits, 27, 6) == 0x2D) 2430 op_type(i, 1, ASM_OPER_PSR_L); 2431 else 2432 op_type(i, 1, ASM_OPER_PSR_UM); 2433 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2434 break; 2435 case ASM_FMT_M36: 2436 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2437 if (FIELD(bits, 27, 6) == 0x25) 2438 op_type(i, 2, ASM_OPER_PSR); 2439 else 2440 op_type(i, 2, ASM_OPER_PSR_UM); 2441 break; 2442 case ASM_FMT_M37: 2443 u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2444 break; 2445 case ASM_FMT_M38: 2446 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2447 operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2448 operand(i, 3, ASM_OPER_GREG, bits, 13, 7); 2449 break; 2450 case ASM_FMT_M39: 2451 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2452 operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2453 u_imm(i, 3, bits, 13, 2); 2454 break; 2455 case ASM_FMT_M40: /* 0 dst */ 2456 operand(i, 1, ASM_OPER_GREG, bits, 20, 7); 2457 u_imm(i, 2, bits, 13, 2); 2458 i->i_srcidx--; 2459 break; 2460 case ASM_FMT_M41: 2461 operand(i, 1, ASM_OPER_GREG, bits, 13, 7); 2462 break; 2463 case ASM_FMT_M42: 2464 operand(i, 1, ot, bits, 20, 7); 2465 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2466 break; 2467 case ASM_FMT_M43: 2468 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2469 operand(i, 2, ot, bits, 20, 7); 2470 break; 2471 case ASM_FMT_M44: 2472 u_immf(i, 1, bits, FRAG(6,21), FRAG(31,2), FRAG(36,1), 0); 2473 break; 2474 case ASM_FMT_M45: /* 0 dst */ 2475 operand(i, 1, ASM_OPER_GREG, bits, 20, 7); 2476 operand(i, 2, ASM_OPER_GREG, bits, 13, 7); 2477 i->i_srcidx--; 2478 break; 2479 case ASM_FMT_M46: 2480 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2481 operand(i, 2, ASM_OPER_GREG, bits, 20, 7); 2482 break; 2483 case ASM_FMT_X1: 2484 KASSERT(slot == 2); 2485 u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0); 2486 combine(&i->i_oper[1].o_value, 21, b->b_inst[1].i_bits, 41, 0); 2487 break; 2488 case ASM_FMT_X2: 2489 KASSERT(slot == 2); 2490 operand(i, 1, ASM_OPER_GREG, bits, 6, 7); 2491 u_immf(i, 2, bits, FRAG(13,7), FRAG(27,9), FRAG(22,5), 2492 FRAG(21,1), 0); 2493 combine(&i->i_oper[2].o_value, 22, b->b_inst[1].i_bits, 41, 0); 2494 combine(&i->i_oper[2].o_value, 63, bits, 1, 36); 2495 break; 2496 case ASM_FMT_X3: 2497 KASSERT(slot == 2); 2498 asm_brhint(i); 2499 u_imm(i, 1, bits, 13, 20); 2500 combine(&i->i_oper[1].o_value, 20, b->b_inst[1].i_bits, 39, 2); 2501 combine(&i->i_oper[1].o_value, 59, bits, 1, 36); 2502 i->i_oper[1].o_value <<= 4; 2503 i->i_oper[1].o_type = ASM_OPER_DISP; 2504 break; 2505 case ASM_FMT_X4: 2506 KASSERT(slot == 2); 2507 asm_brhint(i); 2508 operand(i, 1, ASM_OPER_BREG, bits, 6, 3); 2509 u_imm(i, 2, bits, 13, 20); 2510 combine(&i->i_oper[2].o_value, 20, b->b_inst[1].i_bits, 39, 2); 2511 combine(&i->i_oper[2].o_value, 59, bits, 1, 36); 2512 i->i_oper[2].o_value <<= 4; 2513 i->i_oper[2].o_type = ASM_OPER_DISP; 2514 break; 2515 default: 2516 KASSERT(fmt == ASM_FMT_NONE); 2517 return (0); 2518 } 2519 2520 return (1); 2521 } 2522