Home | History | Annotate | Line # | Download | only in disasm
disasm.h revision 1.2.6.1
      1  1.2.6.1   skrll /*	$NetBSD: disasm.h,v 1.2.6.1 2016/10/05 20:55:29 skrll Exp $	*/
      2      1.1  cherry 
      3      1.1  cherry /*-
      4  1.2.6.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.2.6.1   skrll  * $FreeBSD: releng/10.1/sys/ia64/disasm/disasm.h 172689 2007-10-16 02:49:40Z marcel $
     29      1.1  cherry  */
     30      1.1  cherry 
     31      1.1  cherry #ifndef _DISASM_H_
     32      1.1  cherry #define	_DISASM_H_
     33      1.1  cherry 
     34      1.1  cherry #ifndef _DISASM_INT_H_
     35      1.1  cherry #define	ASM_ADDITIONAL_OPCODES		ASM_OP_NUMBER_OF_OPCODES
     36      1.1  cherry #endif
     37      1.1  cherry 
     38      1.1  cherry /* Application registers. */
     39      1.1  cherry #define	AR_K0		0
     40      1.1  cherry #define	AR_K1		1
     41      1.1  cherry #define	AR_K2		2
     42      1.1  cherry #define	AR_K3		3
     43      1.1  cherry #define	AR_K4		4
     44      1.1  cherry #define	AR_K5		5
     45      1.1  cherry #define	AR_K6		6
     46      1.1  cherry #define	AR_K7		7
     47      1.1  cherry #define	AR_RSC		16
     48      1.1  cherry #define	AR_BSP		17
     49      1.1  cherry #define	AR_BSPSTORE	18
     50      1.1  cherry #define	AR_RNAT		19
     51      1.1  cherry #define	AR_FCR		21
     52      1.1  cherry #define	AR_EFLAG	24
     53      1.1  cherry #define	AR_CSD		25
     54      1.1  cherry #define	AR_SSD		26
     55      1.1  cherry #define	AR_CFLG		27
     56      1.1  cherry #define	AR_FSR		28
     57      1.1  cherry #define	AR_FIR		29
     58      1.1  cherry #define	AR_FDR		30
     59      1.1  cherry #define	AR_CCV		32
     60      1.1  cherry #define	AR_UNAT		36
     61      1.1  cherry #define	AR_FPSR		40
     62      1.1  cherry #define	AR_ITC		44
     63      1.1  cherry #define	AR_PFS		64
     64      1.1  cherry #define	AR_LC		65
     65      1.1  cherry #define	AR_EC		66
     66      1.1  cherry 
     67      1.1  cherry /* Control registers. */
     68      1.1  cherry #define	CR_DCR		0
     69      1.1  cherry #define	CR_ITM		1
     70      1.1  cherry #define	CR_IVA		2
     71      1.1  cherry #define	CR_PTA		8
     72      1.1  cherry #define	CR_IPSR		16
     73      1.1  cherry #define	CR_ISR		17
     74      1.1  cherry #define	CR_IIP		19
     75      1.1  cherry #define	CR_IFA		20
     76      1.1  cherry #define	CR_ITIR		21
     77      1.1  cherry #define	CR_IIPA		22
     78      1.1  cherry #define	CR_IFS		23
     79      1.1  cherry #define	CR_IIM		24
     80      1.1  cherry #define	CR_IHA		25
     81      1.1  cherry #define	CR_LID		64
     82      1.1  cherry #define	CR_IVR		65
     83      1.1  cherry #define	CR_TPR		66
     84      1.1  cherry #define	CR_EOI		67
     85      1.1  cherry #define	CR_IRR0		68
     86      1.1  cherry #define	CR_IRR1		69
     87      1.1  cherry #define	CR_IRR2		70
     88      1.1  cherry #define	CR_IRR3		71
     89      1.1  cherry #define	CR_ITV		72
     90      1.1  cherry #define	CR_PMV		73
     91      1.1  cherry #define	CR_CMCV		74
     92      1.1  cherry #define	CR_LRR0		80
     93      1.1  cherry #define	CR_LRR1		81
     94      1.1  cherry 
     95      1.1  cherry enum asm_cmpltr_class {
     96      1.1  cherry 	ASM_CC_NONE,
     97      1.1  cherry 	ASM_CC_ACLR,
     98      1.1  cherry 	ASM_CC_BSW, ASM_CC_BTYPE, ASM_CC_BWH,
     99      1.1  cherry 	ASM_CC_CHK, ASM_CC_CLRRRB, ASM_CC_CREL, ASM_CC_CTYPE,
    100      1.1  cherry 	ASM_CC_DEP, ASM_CC_DH,
    101      1.1  cherry 	ASM_CC_FC, ASM_CC_FCREL, ASM_CC_FCTYPE, ASM_CC_FCVT, ASM_CC_FLDTYPE,
    102      1.1  cherry 	ASM_CC_FMERGE, ASM_CC_FREL, ASM_CC_FSWAP,
    103      1.1  cherry 	ASM_CC_GETF,
    104      1.1  cherry 	ASM_CC_IH, ASM_CC_INVALA, ASM_CC_IPWH, ASM_CC_ITC, ASM_CC_ITR,
    105      1.1  cherry 	ASM_CC_LDHINT, ASM_CC_LDTYPE, ASM_CC_LFETCH, ASM_CC_LFHINT,
    106      1.1  cherry 	ASM_CC_LFTYPE, ASM_CC_LR,
    107      1.1  cherry 	ASM_CC_MF, ASM_CC_MOV, ASM_CC_MWH,
    108      1.1  cherry 	ASM_CC_PAVG, ASM_CC_PC, ASM_CC_PH, ASM_CC_PREL, ASM_CC_PRTYPE,
    109      1.1  cherry 	ASM_CC_PTC, ASM_CC_PTR, ASM_CC_PVEC,
    110      1.1  cherry 	ASM_CC_SAT, ASM_CC_SEM, ASM_CC_SETF, ASM_CC_SF, ASM_CC_SRLZ,
    111      1.1  cherry 	ASM_CC_STHINT, ASM_CC_STTYPE, ASM_CC_SYNC,
    112      1.1  cherry 	ASM_CC_RW,
    113      1.1  cherry 	ASM_CC_TREL, ASM_CC_TRUNC,
    114      1.1  cherry 	ASM_CC_UNIT, ASM_CC_UNPACK, ASM_CC_UNS,
    115  1.2.6.1   skrll 	ASM_CC_VMSW,
    116      1.1  cherry 	ASM_CC_XMA
    117      1.1  cherry };
    118      1.1  cherry 
    119      1.1  cherry enum asm_cmpltr_type {
    120      1.1  cherry 	ASM_CT_NONE,
    121      1.1  cherry 	ASM_CT_COND = ASM_CT_NONE,
    122      1.1  cherry 
    123      1.1  cherry 	ASM_CT_0, ASM_CT_1,
    124      1.1  cherry 	ASM_CT_A, ASM_CT_ACQ, ASM_CT_AND,
    125      1.1  cherry 	ASM_CT_B, ASM_CT_BIAS,
    126      1.1  cherry 	ASM_CT_C_CLR, ASM_CT_C_CLR_ACQ, ASM_CT_C_NC, ASM_CT_CALL,
    127      1.1  cherry 	ASM_CT_CEXIT, ASM_CT_CLOOP, ASM_CT_CLR, ASM_CT_CTOP,
    128      1.1  cherry 	ASM_CT_D, ASM_CT_DC_DC, ASM_CT_DC_NT, ASM_CT_DPNT, ASM_CT_DPTK,
    129      1.1  cherry 	ASM_CT_E, ASM_CT_EQ, ASM_CT_EXCL, ASM_CT_EXIT, ASM_CT_EXP,
    130      1.1  cherry 	ASM_CT_F, ASM_CT_FAULT, ASM_CT_FEW, ASM_CT_FILL, ASM_CT_FX, ASM_CT_FXU,
    131      1.1  cherry 	ASM_CT_G, ASM_CT_GA, ASM_CT_GE, ASM_CT_GT,
    132      1.1  cherry 	ASM_CT_H, ASM_CT_HU,
    133      1.1  cherry 	ASM_CT_I, ASM_CT_IA, ASM_CT_IMP,
    134      1.1  cherry 	ASM_CT_L, ASM_CT_LE, ASM_CT_LOOP, ASM_CT_LR, ASM_CT_LT, ASM_CT_LTU,
    135      1.1  cherry 	ASM_CT_M, ASM_CT_MANY,
    136      1.1  cherry 	ASM_CT_NC, ASM_CT_NE, ASM_CT_NEQ, ASM_CT_NL, ASM_CT_NLE, ASM_CT_NLT,
    137      1.1  cherry 	ASM_CT_NM, ASM_CT_NR, ASM_CT_NS, ASM_CT_NT_DC, ASM_CT_NT_NT,
    138      1.1  cherry 	ASM_CT_NT_TK, ASM_CT_NT1, ASM_CT_NT2, ASM_CT_NTA, ASM_CT_NZ,
    139      1.1  cherry 	ASM_CT_OR, ASM_CT_OR_ANDCM, ASM_CT_ORD,
    140      1.1  cherry 	ASM_CT_PR,
    141      1.1  cherry 	ASM_CT_R, ASM_CT_RAZ, ASM_CT_REL, ASM_CT_RET, ASM_CT_RW,
    142      1.1  cherry 	ASM_CT_S, ASM_CT_S0, ASM_CT_S1, ASM_CT_S2, ASM_CT_S3, ASM_CT_SA,
    143      1.1  cherry 	ASM_CT_SE, ASM_CT_SIG, ASM_CT_SPILL, ASM_CT_SPNT, ASM_CT_SPTK,
    144      1.1  cherry 	ASM_CT_SSS,
    145      1.1  cherry 	ASM_CT_TK_DC, ASM_CT_TK_NT, ASM_CT_TK_TK, ASM_CT_TRUNC,
    146      1.1  cherry 	ASM_CT_U, ASM_CT_UNC, ASM_CT_UNORD, ASM_CT_USS, ASM_CT_UUS, ASM_CT_UUU,
    147      1.1  cherry 	ASM_CT_W, ASM_CT_WEXIT, ASM_CT_WTOP,
    148      1.1  cherry 	ASM_CT_X, ASM_CT_XF,
    149      1.1  cherry 	ASM_CT_Z,
    150      1.1  cherry };
    151      1.1  cherry 
    152      1.1  cherry /* Completer. */
    153      1.1  cherry struct asm_cmpltr {
    154      1.1  cherry 	enum asm_cmpltr_class	c_class;
    155      1.1  cherry 	enum asm_cmpltr_type	c_type;
    156      1.1  cherry };
    157      1.1  cherry 
    158      1.1  cherry /* Operand types. */
    159      1.1  cherry enum asm_oper_type {
    160      1.1  cherry 	ASM_OPER_NONE,
    161      1.1  cherry 	ASM_OPER_AREG,		/* = ar# */
    162      1.1  cherry 	ASM_OPER_BREG,		/* = b# */
    163      1.1  cherry 	ASM_OPER_CPUID,		/* = cpuid[r#] */
    164      1.1  cherry 	ASM_OPER_CREG,		/* = cr# */
    165      1.1  cherry 	ASM_OPER_DBR,		/* = dbr[r#] */
    166      1.1  cherry 	ASM_OPER_DISP,		/* IP relative displacement. */
    167      1.1  cherry 	ASM_OPER_DTR,		/* = dtr[r#] */
    168      1.1  cherry 	ASM_OPER_FREG,		/* = f# */
    169      1.1  cherry 	ASM_OPER_GREG,		/* = r# */
    170      1.1  cherry 	ASM_OPER_IBR,		/* = ibr[r#] */
    171      1.1  cherry 	ASM_OPER_IMM,		/* Immediate */
    172      1.1  cherry 	ASM_OPER_IP,		/* = ip */
    173      1.1  cherry 	ASM_OPER_ITR,		/* = itr[r#] */
    174      1.1  cherry 	ASM_OPER_MEM,		/* = [r#] */
    175      1.1  cherry 	ASM_OPER_MSR,		/* = msr[r#] */
    176      1.1  cherry 	ASM_OPER_PKR,		/* = pkr[r#] */
    177      1.1  cherry 	ASM_OPER_PMC,		/* = pmc[r#] */
    178      1.1  cherry 	ASM_OPER_PMD,		/* = pmd[r#] */
    179      1.1  cherry 	ASM_OPER_PR,		/* = pr */
    180      1.1  cherry 	ASM_OPER_PR_ROT,	/* = pr.rot */
    181      1.1  cherry 	ASM_OPER_PREG,		/* = p# */
    182      1.1  cherry 	ASM_OPER_PSR,		/* = psr */
    183      1.1  cherry 	ASM_OPER_PSR_L,		/* = psr.l */
    184      1.1  cherry 	ASM_OPER_PSR_UM,	/* = psr.um */
    185      1.1  cherry 	ASM_OPER_RR		/* = rr[r#] */
    186      1.1  cherry };
    187      1.1  cherry 
    188      1.1  cherry /* Operand */
    189      1.1  cherry struct asm_oper {
    190      1.1  cherry 	enum asm_oper_type	o_type;
    191      1.1  cherry 	uint64_t		o_value;
    192      1.1  cherry };
    193      1.1  cherry 
    194      1.1  cherry /* Instruction formats. */
    195      1.1  cherry enum asm_fmt {
    196      1.1  cherry 	ASM_FMT_NONE,
    197      1.1  cherry 	ASM_FMT_A = 0x0100,
    198      1.1  cherry 	ASM_FMT_A1,  ASM_FMT_A2,  ASM_FMT_A3,  ASM_FMT_A4,
    199      1.1  cherry 	ASM_FMT_A5,  ASM_FMT_A6,  ASM_FMT_A7,  ASM_FMT_A8,
    200      1.1  cherry 	ASM_FMT_A9,  ASM_FMT_A10,
    201      1.1  cherry 	ASM_FMT_B = 0x0200,
    202      1.1  cherry 	ASM_FMT_B1,  ASM_FMT_B2,  ASM_FMT_B3,  ASM_FMT_B4,
    203      1.1  cherry 	ASM_FMT_B5,  ASM_FMT_B6,  ASM_FMT_B7,  ASM_FMT_B8,
    204      1.1  cherry 	ASM_FMT_B9,
    205      1.1  cherry 	ASM_FMT_F = 0x0300,
    206      1.1  cherry 	ASM_FMT_F1,  ASM_FMT_F2,  ASM_FMT_F3,  ASM_FMT_F4,
    207      1.1  cherry 	ASM_FMT_F5,  ASM_FMT_F6,  ASM_FMT_F7,  ASM_FMT_F8,
    208      1.1  cherry 	ASM_FMT_F9,  ASM_FMT_F10, ASM_FMT_F11, ASM_FMT_F12,
    209  1.2.6.1   skrll 	ASM_FMT_F13, ASM_FMT_F14, ASM_FMT_F15, ASM_FMT_F16,
    210      1.1  cherry 	ASM_FMT_I = 0x0400,
    211      1.1  cherry 	ASM_FMT_I1,  ASM_FMT_I2,  ASM_FMT_I3,  ASM_FMT_I4,
    212      1.1  cherry 	ASM_FMT_I5,  ASM_FMT_I6,  ASM_FMT_I7,  ASM_FMT_I8,
    213      1.1  cherry 	ASM_FMT_I9,  ASM_FMT_I10, ASM_FMT_I11, ASM_FMT_I12,
    214      1.1  cherry 	ASM_FMT_I13, ASM_FMT_I14, ASM_FMT_I15, ASM_FMT_I16,
    215  1.2.6.1   skrll 	ASM_FMT_I17, ASM_FMT_I18, ASM_FMT_I19, ASM_FMT_I20,
    216  1.2.6.1   skrll 	ASM_FMT_I21, ASM_FMT_I22, ASM_FMT_I23, ASM_FMT_I24,
    217  1.2.6.1   skrll 	ASM_FMT_I25, ASM_FMT_I26, ASM_FMT_I27, ASM_FMT_I28,
    218  1.2.6.1   skrll 	ASM_FMT_I29, ASM_FMT_I30,
    219      1.1  cherry 	ASM_FMT_M = 0x0500,
    220      1.1  cherry 	ASM_FMT_M1,  ASM_FMT_M2,  ASM_FMT_M3,  ASM_FMT_M4,
    221      1.1  cherry 	ASM_FMT_M5,  ASM_FMT_M6,  ASM_FMT_M7,  ASM_FMT_M8,
    222      1.1  cherry 	ASM_FMT_M9,  ASM_FMT_M10, ASM_FMT_M11, ASM_FMT_M12,
    223      1.1  cherry 	ASM_FMT_M13, ASM_FMT_M14, ASM_FMT_M15, ASM_FMT_M16,
    224      1.1  cherry 	ASM_FMT_M17, ASM_FMT_M18, ASM_FMT_M19, ASM_FMT_M20,
    225      1.1  cherry 	ASM_FMT_M21, ASM_FMT_M22, ASM_FMT_M23, ASM_FMT_M24,
    226      1.1  cherry 	ASM_FMT_M25, ASM_FMT_M26, ASM_FMT_M27, ASM_FMT_M28,
    227      1.1  cherry 	ASM_FMT_M29, ASM_FMT_M30, ASM_FMT_M31, ASM_FMT_M32,
    228      1.1  cherry 	ASM_FMT_M33, ASM_FMT_M34, ASM_FMT_M35, ASM_FMT_M36,
    229      1.1  cherry 	ASM_FMT_M37, ASM_FMT_M38, ASM_FMT_M39, ASM_FMT_M40,
    230      1.1  cherry 	ASM_FMT_M41, ASM_FMT_M42, ASM_FMT_M43, ASM_FMT_M44,
    231  1.2.6.1   skrll 	ASM_FMT_M45, ASM_FMT_M46, ASM_FMT_M47, ASM_FMT_M48,
    232      1.1  cherry 	ASM_FMT_X = 0x0600,
    233  1.2.6.1   skrll 	ASM_FMT_X1,  ASM_FMT_X2,  ASM_FMT_X3,  ASM_FMT_X4,
    234  1.2.6.1   skrll 	ASM_FMT_X5
    235      1.1  cherry };
    236      1.1  cherry 
    237      1.1  cherry /* Instruction opcodes. */
    238      1.1  cherry enum asm_op {
    239      1.1  cherry 	ASM_OP_NONE,
    240      1.1  cherry 	ASM_OP_ADD, ASM_OP_ADDL, ASM_OP_ADDP4, ASM_OP_ADDS, ASM_OP_ALLOC,
    241      1.1  cherry 	ASM_OP_AND, ASM_OP_ANDCM,
    242      1.1  cherry 	ASM_OP_BR, ASM_OP_BREAK, ASM_OP_BRL, ASM_OP_BRP, ASM_OP_BSW,
    243      1.1  cherry 	ASM_OP_CHK, ASM_OP_CLRRRB, ASM_OP_CMP, ASM_OP_CMP4, ASM_OP_CMP8XCHG16,
    244      1.1  cherry 	ASM_OP_CMPXCHG1, ASM_OP_CMPXCHG2, ASM_OP_CMPXCHG4, ASM_OP_CMPXCHG8,
    245      1.1  cherry 	ASM_OP_COVER, ASM_OP_CZX1, ASM_OP_CZX2,
    246      1.1  cherry 	ASM_OP_DEP,
    247      1.1  cherry 	ASM_OP_EPC, ASM_OP_EXTR,
    248      1.1  cherry 	ASM_OP_FAMAX, ASM_OP_FAMIN, ASM_OP_FAND, ASM_OP_FANDCM, ASM_OP_FC,
    249      1.1  cherry 	ASM_OP_FCHKF, ASM_OP_FCLASS, ASM_OP_FCLRF, ASM_OP_FCMP, ASM_OP_FCVT,
    250      1.1  cherry 	ASM_OP_FETCHADD4, ASM_OP_FETCHADD8, ASM_OP_FLUSHRS, ASM_OP_FMA,
    251      1.1  cherry 	ASM_OP_FMAX, ASM_OP_FMERGE, ASM_OP_FMIN, ASM_OP_FMIX, ASM_OP_FMS,
    252      1.1  cherry 	ASM_OP_FNMA, ASM_OP_FOR, ASM_OP_FPACK, ASM_OP_FPAMAX, ASM_OP_FPAMIN,
    253      1.1  cherry 	ASM_OP_FPCMP, ASM_OP_FPCVT, ASM_OP_FPMA, ASM_OP_FPMAX, ASM_OP_FPMERGE,
    254      1.1  cherry 	ASM_OP_FPMIN, ASM_OP_FPMS, ASM_OP_FPNMA, ASM_OP_FPRCPA,
    255      1.1  cherry 	ASM_OP_FPRSQRTA, ASM_OP_FRCPA, ASM_OP_FRSQRTA, ASM_OP_FSELECT,
    256      1.1  cherry 	ASM_OP_FSETC, ASM_OP_FSWAP, ASM_OP_FSXT, ASM_OP_FWB, ASM_OP_FXOR,
    257      1.1  cherry 	ASM_OP_GETF,
    258  1.2.6.1   skrll 	ASM_OP_HINT,
    259      1.1  cherry 	ASM_OP_INVALA, ASM_OP_ITC, ASM_OP_ITR,
    260      1.1  cherry 	ASM_OP_LD1, ASM_OP_LD16, ASM_OP_LD2, ASM_OP_LD4, ASM_OP_LD8,
    261      1.1  cherry 	ASM_OP_LDF, ASM_OP_LDF8, ASM_OP_LDFD, ASM_OP_LDFE, ASM_OP_LDFP8,
    262      1.1  cherry 	ASM_OP_LDFPD, ASM_OP_LDFPS, ASM_OP_LDFS, ASM_OP_LFETCH, ASM_OP_LOADRS,
    263      1.1  cherry 	ASM_OP_MF, ASM_OP_MIX1, ASM_OP_MIX2, ASM_OP_MIX4, ASM_OP_MOV,
    264      1.1  cherry 	ASM_OP_MOVL, ASM_OP_MUX1, ASM_OP_MUX2,
    265      1.1  cherry 	ASM_OP_NOP,
    266      1.1  cherry 	ASM_OP_OR,
    267      1.1  cherry 	ASM_OP_PACK2, ASM_OP_PACK4, ASM_OP_PADD1, ASM_OP_PADD2, ASM_OP_PADD4,
    268      1.1  cherry 	ASM_OP_PAVG1, ASM_OP_PAVG2, ASM_OP_PAVGSUB1, ASM_OP_PAVGSUB2,
    269      1.1  cherry 	ASM_OP_PCMP1, ASM_OP_PCMP2, ASM_OP_PCMP4, ASM_OP_PMAX1, ASM_OP_PMAX2,
    270      1.1  cherry 	ASM_OP_PMIN1, ASM_OP_PMIN2, ASM_OP_PMPY2, ASM_OP_PMPYSHR2,
    271      1.1  cherry 	ASM_OP_POPCNT, ASM_OP_PROBE, ASM_OP_PSAD1, ASM_OP_PSHL2, ASM_OP_PSHL4,
    272      1.1  cherry 	ASM_OP_PSHLADD2, ASM_OP_PSHR2, ASM_OP_PSHR4, ASM_OP_PSHRADD2,
    273      1.1  cherry 	ASM_OP_PSUB1, ASM_OP_PSUB2, ASM_OP_PSUB4, ASM_OP_PTC, ASM_OP_PTR,
    274      1.1  cherry 	ASM_OP_RFI, ASM_OP_RSM, ASM_OP_RUM,
    275      1.1  cherry 	ASM_OP_SETF, ASM_OP_SHL, ASM_OP_SHLADD, ASM_OP_SHLADDP4, ASM_OP_SHR,
    276      1.1  cherry 	ASM_OP_SHRP, ASM_OP_SRLZ, ASM_OP_SSM, ASM_OP_ST1, ASM_OP_ST16,
    277      1.1  cherry 	ASM_OP_ST2, ASM_OP_ST4, ASM_OP_ST8, ASM_OP_STF, ASM_OP_STF8,
    278      1.1  cherry 	ASM_OP_STFD, ASM_OP_STFE, ASM_OP_STFS, ASM_OP_SUB, ASM_OP_SUM,
    279      1.1  cherry 	ASM_OP_SXT1, ASM_OP_SXT2, ASM_OP_SXT4, ASM_OP_SYNC,
    280  1.2.6.1   skrll 	ASM_OP_TAK, ASM_OP_TBIT, ASM_OP_TF, ASM_OP_THASH, ASM_OP_TNAT,
    281  1.2.6.1   skrll 	ASM_OP_TPA, ASM_OP_TTAG,
    282      1.1  cherry 	ASM_OP_UNPACK1, ASM_OP_UNPACK2, ASM_OP_UNPACK4,
    283  1.2.6.1   skrll 	ASM_OP_VMSW,
    284      1.1  cherry 	ASM_OP_XCHG1, ASM_OP_XCHG2, ASM_OP_XCHG4, ASM_OP_XCHG8, ASM_OP_XMA,
    285      1.1  cherry 	ASM_OP_XOR,
    286      1.1  cherry 	ASM_OP_ZXT1, ASM_OP_ZXT2, ASM_OP_ZXT4,
    287      1.1  cherry 	/* Additional opcodes used only internally. */
    288      1.1  cherry 	ASM_ADDITIONAL_OPCODES
    289      1.1  cherry };
    290      1.1  cherry 
    291      1.1  cherry /* Instruction. */
    292      1.1  cherry struct asm_inst {
    293      1.1  cherry 	uint64_t		i_bits;
    294      1.1  cherry 	struct asm_oper		i_oper[7];
    295      1.1  cherry 	struct asm_cmpltr	i_cmpltr[5];
    296      1.1  cherry 	enum asm_fmt		i_format;
    297      1.1  cherry 	enum asm_op		i_op;
    298      1.1  cherry 	int			i_ncmpltrs;
    299      1.1  cherry 	int			i_srcidx;
    300      1.1  cherry };
    301      1.1  cherry 
    302      1.1  cherry struct asm_bundle {
    303      1.1  cherry 	const char		*b_templ;
    304      1.1  cherry 	struct asm_inst		b_inst[3];
    305      1.1  cherry };
    306      1.1  cherry 
    307      1.1  cherry /* Functional units. */
    308      1.1  cherry enum asm_unit {
    309      1.1  cherry 	ASM_UNIT_NONE,
    310      1.1  cherry 	ASM_UNIT_A = 0x0100,	/* A unit. */
    311      1.1  cherry 	ASM_UNIT_B = 0x0200,	/* B unit. */
    312      1.1  cherry 	ASM_UNIT_F = 0x0300,	/* F unit. */
    313      1.1  cherry 	ASM_UNIT_I = 0x0400,	/* I unit. */
    314      1.1  cherry 	ASM_UNIT_M = 0x0500,	/* M unit. */
    315      1.1  cherry 	ASM_UNIT_X = 0x0600	/* X unit. */
    316      1.1  cherry };
    317      1.1  cherry 
    318      1.1  cherry #ifdef _DISASM_INT_H_
    319      1.1  cherry int asm_extract(enum asm_op, enum asm_fmt, uint64_t, struct asm_bundle *, int);
    320      1.1  cherry #endif
    321      1.1  cherry 
    322      1.1  cherry int asm_decode(uint64_t, struct asm_bundle *);
    323      1.1  cherry 
    324      1.2  martin void asm_completer(const struct asm_cmpltr *, char *, size_t);
    325      1.2  martin void asm_mnemonic(const enum asm_op, char *, size_t);
    326      1.2  martin void asm_operand(const struct asm_oper *, char *, size_t, uint64_t);
    327      1.1  cherry void asm_print_bundle(const struct asm_bundle *, uint64_t);
    328      1.1  cherry void asm_print_inst(const struct asm_bundle *, int, uint64_t);
    329      1.1  cherry 
    330      1.1  cherry #endif /* _DISASM_H_ */
    331