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