udis86sx/udis86/libudis86/decode.h
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 14 Jun 2016 22:40:22 +0100
changeset 21 7d99b51b4784
parent 0 e4a716697bef
permissions -rw-r--r--
Build files for udis86 regenerated using newer autotools ...in order to support building under MSYS2 environment.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
/* udis86 - libudis86/decode.h
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
 *
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
 * Copyright (c) 2002-2009 Vivek Thampi
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
 * All rights reserved.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
 * 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
 * Redistribution and use in source and binary forms, with or without modification, 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
 * are permitted provided that the following conditions are met:
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
 * 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
 *     * Redistributions of source code must retain the above copyright notice, 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
 *       this list of conditions and the following disclaimer.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
 *     * Redistributions in binary form must reproduce the above copyright notice, 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
 *       this list of conditions and the following disclaimer in the documentation 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
 *       and/or other materials provided with the distribution.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
 * 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
 */
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
#ifndef UD_DECODE_H
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
#define UD_DECODE_H
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
#include "types.h"
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
#include "itab.h"
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
#define MAX_INSN_LENGTH 15
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
/* itab prefix bits */
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
#define P_none          ( 0 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
#define P_cast          ( 1 << 0 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
#define P_CAST(n)       ( ( n >> 0 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
#define P_rexb          ( 1 << 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
#define P_REXB(n)       ( ( n >> 1 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
#define P_inv64         ( 1 << 4 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
#define P_INV64(n)      ( ( n >> 4 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
#define P_rexw          ( 1 << 5 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
#define P_REXW(n)       ( ( n >> 5 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
#define P_def64         ( 1 << 7 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
#define P_DEF64(n)      ( ( n >> 7 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
#define P_rexr          ( 1 << 8 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
#define P_REXR(n)       ( ( n >> 8 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
#define P_oso           ( 1 << 9 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
#define P_OSO(n)        ( ( n >> 9 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
#define P_aso           ( 1 << 10 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
#define P_ASO(n)        ( ( n >> 10 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
#define P_rexx          ( 1 << 11 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
#define P_REXX(n)       ( ( n >> 11 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
#define P_ImpAddr       ( 1 << 12 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
#define P_IMPADDR(n)    ( ( n >> 12 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
#define P_seg           ( 1 << 13 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
#define P_SEG(n)        ( ( n >> 13 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
#define P_str           ( 1 << 14 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
#define P_STR(n)        ( ( n >> 14 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
#define P_strz          ( 1 << 15 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
#define P_STR_ZF(n)     ( ( n >> 15 ) & 1 )
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
/* operand type constants -- order is important! */
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
enum ud_operand_code {
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    OP_NONE,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    OP_A,      OP_E,      OP_M,       OP_G,       
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    OP_I,      OP_F,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    OP_R0,     OP_R1,     OP_R2,      OP_R3,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
    OP_R4,     OP_R5,     OP_R6,      OP_R7,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    OP_AL,     OP_CL,     OP_DL,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
    OP_AX,     OP_CX,     OP_DX,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    OP_eAX,    OP_eCX,    OP_eDX,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    OP_rAX,    OP_rCX,    OP_rDX,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    OP_ES,     OP_CS,     OP_SS,      OP_DS,  
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
    OP_FS,     OP_GS,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    OP_ST0,    OP_ST1,    OP_ST2,     OP_ST3,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    OP_ST4,    OP_ST5,    OP_ST6,     OP_ST7,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
    OP_J,      OP_S,      OP_O,          
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    OP_I1,     OP_I3,     OP_sI,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
    OP_V,      OP_W,      OP_Q,       OP_P, 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    OP_U,      OP_N,      OP_MU,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    OP_R,      OP_C,      OP_D,       
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    OP_MR
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
} UD_ATTR_PACKED;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
/* operand size constants */
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
enum ud_operand_size {
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
    SZ_NA  = 0,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    SZ_Z   = 1,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
    SZ_V   = 2,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
    SZ_RDQ = 7,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
    /* the following values are used as is,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
     * and thus hard-coded. changing them 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
     * will break internals 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
     */
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    SZ_B   = 8,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    SZ_W   = 16,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
    SZ_D   = 32,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    SZ_Q   = 64,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
    SZ_T   = 80,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    SZ_O   = 128,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
    SZ_Y   = 17,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
    /*
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
     * complex size types, that encode sizes for operands
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
     * of type MR (memory or register), for internal use
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
     * only. Id space 256 and above.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
     */
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
    SZ_BD  = (SZ_B << 8) | SZ_D,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
    SZ_BV  = (SZ_B << 8) | SZ_V,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    SZ_WD  = (SZ_W << 8) | SZ_D,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
    SZ_WV  = (SZ_W << 8) | SZ_V,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    SZ_WY  = (SZ_W << 8) | SZ_Y,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
    SZ_DY  = (SZ_D << 8) | SZ_Y,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    SZ_WO  = (SZ_W << 8) | SZ_O,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
    SZ_DO  = (SZ_D << 8) | SZ_O,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
    SZ_QO  = (SZ_Q << 8) | SZ_O,
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
} UD_ATTR_PACKED;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
/* resolve complex size type.
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
 */
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
static inline enum ud_operand_size
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
Mx_mem_size(enum ud_operand_size size)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
{
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
    return (size >> 8) & 0xff;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
}
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
static inline enum ud_operand_size
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
Mx_reg_size(enum ud_operand_size size)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
{
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
    return size & 0xff;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
}
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
/* A single operand of an entry in the instruction table. 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
 * (internal use only)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
 */
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
struct ud_itab_entry_operand 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
{
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
  enum ud_operand_code type;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
  enum ud_operand_size size;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
};
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
/* A single entry in an instruction table. 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
 *(internal use only)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
 */
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
struct ud_itab_entry 
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
{
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
  enum ud_mnemonic_code         mnemonic;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
  struct ud_itab_entry_operand  operand1;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
  struct ud_itab_entry_operand  operand2;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
  struct ud_itab_entry_operand  operand3;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
  uint32_t                      prefix;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
};
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
struct ud_lookup_table_list_entry {
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
    const uint16_t *table;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
    enum ud_table_type type;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
    const char *meta;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
};
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
     
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
static inline int
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
ud_opcode_field_sext(uint8_t primary_opcode)
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
{
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
  return (primary_opcode & 0x02) != 0;
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
}
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
extern struct ud_itab_entry ud_itab[];
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
extern struct ud_lookup_table_list_entry ud_lookup_table_list[];
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
#endif /* UD_DECODE_H */
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
/* vim:cindent
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
 * vim:expandtab
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
 * vim:ts=4
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
 * vim:sw=4
e4a716697bef Added sources of udis86 1.7.2
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
 */