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-- |
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 |
*/ |