Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / native_client / src / trusted / validator / x86 / decoder / ncopcode_opcode_flags.enum
1 # Define set of possible instruction opcode flags that can apply
2 # to an instruction. These flags fully define how to parse an
3 # x86 instruction. Used by the decoder defined
4 # in native_client/src/trusted/validator/x86/decoder.
5
6 # Note: The following sufficies are used:
7 #    b - 8 bits.
8 #    w - 16 bits.
9 #    v - 32 bits.
10 #    o - 64 bits.
11
12 # Indicates the use of a rex pefix that affects the operand size or
13 # instruction semantics. Intel's Notation is REX.W. Only applies if
14 # decoder is running in 64-bit mode.
15 OpcodeUsesRexW
16
17 # Indicates that opcode has REX prefix and REX.R is set.
18 OpcodeHasRexR
19
20 # Defines instruction that uses opcode value 0-7 in the ModRm reg field
21 # as an operand. Intel's notation is /digit. Note: This data will be
22 # stored in the first operand, using a ModRmOpcode operand kind.
23 OpcodeInModRm
24
25 # Defines a special 3DNOW 0F0F format instruction, which is used
26 # to parse all 3DNOW OFOF instructions, including the operands,
27 # and the trailing opcode in the immediate byte following the instruction.
28 Opcode0F0F
29
30 # Defines instruction that uses opcode value 0-7 in the ModRm r/m field
31 # as an operand (in addition to the ModRm reg field). Note: These
32 # instructions also require the ModRm mod field to be 0x3. See
33 # section A.2.5 in the Intel manual (see ncdecode_tablegen.c for reference).
34 OpcodeInModRmRm
35
36 # Defines an OpcodeInModRm, where the value of ModRm must also be less
37 # than 0xC0 (see x87 instructions for examples of this).
38 # NOTE: When this flag is set, so is OpcodeInModRm.
39 # NOTE: Also automatically added when an M_Operand is specified, so that
40 # none of the mod=0x3 registers are allowed.
41 OpcodeLtC0InModRm
42
43 # Defines requirement during instruction matching that the ModRm mod field
44 # must be 0x3.
45 ModRmModIs0x3
46
47 # Defines requirement during instruction matching that the ModRm mod field
48 # must not be 0x3.
49 ModRmModIsnt0x3
50
51 # Defines requirement that the S_Operand value (modrm reg field) can only be
52 # 0..5.
53 ModRmRegSOperand
54
55 # Defines instruction that the ModR/M byte contains a register operand and
56 # an r/m operand. Intel's notation is /r.
57 OpcodeUsesModRm
58
59 # Defines the size of the immediate value that must follow the opcode.
60 # Intel's notation is ib, iw, id, and io.
61 OpcodeHasImmed
62 OpcodeHasImmed_b
63 OpcodeHasImmed_w
64 OpcodeHasImmed_v
65 OpcodeHasImmed_p  # 6 bytes.
66 OpcodeHasImmed_o
67 OpcodeHasImmed_z  # if effective size 2 bytes, 2 bytes. Otherwise 4 bytes.
68
69 # Define the size of the second immediate value that must follow the first
70 # immediate opcode (if more than one immediate value).
71 OpcodeHasImmed2_b
72 OpcodeHasImmed2_w
73 OpcodeHasImmed2_v
74
75 # Define the size of the immediate value that must follow the opcode, but
76 # uses the address size instead of the operand size.
77 OpcodeHasImmed_Addr
78
79 # Defines a register code, from 0 through 7, added to the hexadecimal byte
80 # associated with the instruction, based on the operand size.
81 # Intel's notation is +rb. See Intel manual, table 3-1 for details.
82 # Note: to compute value 0-7, see first operand, which should be OperandBase.
83 OpcodePlusR
84
85 # Defines a number used in floating-point instructions when one of the
86 # operands is ST(i) from the FPU register stack. The number i (which can
87 # range from 0 to 7) is added to the hexidecimal byte given at the left
88 # of the plus sign to form a single opcode byte. Intel's notation is +i.
89 # Note: to compute value 0-7, see first operand, which sould be OperandBase.
90 OpcodePlusI
91
92 # Defines that in 64-bit mode, REX prefix should appear if using a 64-bit
93 # only register. Only applicable if running in 64-bit mode.
94 OpcodeRex
95
96 # Indicates the REX prefix does not affect the legacy instruction in 64-bit
97 # mode. Intel's notation is N.P.
98 OpcodeLegacy
99
100 # Defines that the opcode can be prefixed with a lock prefix.
101 OpcodeLockable
102
103 # Defines that the opcode can be prefixed with a REP prefix.
104 OpcodeAllowsRep
105
106 # Defines that the opcode can be prefixed with a REPNE prefix.
107 OpcodeAllowsRepne
108
109 # Defines that the opcode can be prefixed with a DATA16 prefix.
110 OpcodeAllowsData16
111
112 # Defines that prefix 66 can't be used to define operand size.
113 # That is, only 32 or 64 bit values are allowed.
114 # Used for special cases where operand size is defined as "d/q".
115 # Also used to mark instructions with 66 prefix.
116 SizeIgnoresData16
117
118 # Defines the expected size of the operand. Can be repeated.
119 # The (possibly repeated) flags define the set possible operand
120 # sizes that are allowed by the opcode.
121 OperandSize_b
122 OperandSize_w
123 OperandSize_v
124 OperandSize_o
125
126 # Defines the expected size of addresses. Can be repeated.
127 # The (possibly repeated) flags define the set of possible
128 # address sizes that are allowed by the opcode.
129 AddressSize_w
130 AddressSize_v
131 AddressSize_o
132
133 # The instruction is not allowed by the Native Client Validator.
134 NaClIllegal
135
136 # Operand size defaults to size 64 in 64-bit mode.
137 OperandSizeDefaultIs64
138
139 # Operand size must be 64 in 64-bit mode.
140 OperandSizeForce64
141
142 # The instruction requires that the CPUID sets bit 29 (long mode).
143 LongMode
144
145 # Ignore multiple 66 prefices when counting the number of prefices allowed
146 # in NACL.
147 IgnorePrefixDATA16
148
149 #
150 #--------------------------------------------------------------
151 #
152 # Note: instructions below this point are used elsewhere within native
153 # client, and do not effect the x86 instruction decoder.
154
155
156 # Opcode only applies if running in 32-bit mode.
157 # Used by the table generator to decide if the instruction
158 # should be included in the set of generated tables.
159 Opcode32Only
160
161 # Opcode only applies if running in 64-bit mode.
162 # Used by the table generator to decide if the instruction
163 # should be included in the set of generated tables.
164 Opcode64Only
165
166 # Mark instruction as (unconditional) jump. Used by the x86-64
167 # validator to quickly categorize unconditional jumps.
168 JumpInstruction
169
170 # Mark instruction as conditional jump. Used by the x86-64
171 # validator to quickly categorize unconditional jumps.
172 ConditionalJump
173
174 # Mark instruction as allowing branch hints 2e and 3e.
175 BranchHints
176
177 # Mark the instruction as partial. This communicates to the print routines
178 # that the matched instruction is NOT a valid x86 instruction. Hence, it should
179 # use different print rules to better communicate what was partially matched.
180 PartialInstruction