Rev 4478 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4478 | Rev 6467 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ; flat assembler core |
1 | ; flat assembler core |
2 | ; Copyright (c) 1999-2013, Tomasz Grysztar. |
2 | ; Copyright (c) 1999-2016, Tomasz Grysztar. |
3 | ; All rights reserved. |
3 | ; All rights reserved. |
Line -... | Line 4... | ||
- | 4 | ||
- | 5 | avx_single_source_pd_instruction_er_evex: |
|
4 | 6 | or [vex_required],8 |
|
- | 7 | avx_single_source_pd_instruction_er: |
|
- | 8 | or [operand_flags],2+4+8 |
|
- | 9 | jmp avx_pd_instruction |
|
5 | avx_single_source_pd_instruction: |
10 | avx_single_source_pd_instruction_sae_evex: |
- | 11 | or [vex_required],8 |
|
6 | or [vex_required],2 |
12 | or [operand_flags],2+4 |
7 | jmp avx_pd_instruction |
13 | jmp avx_pd_instruction |
8 | avx_pd_instruction_imm8: |
14 | avx_pd_instruction_imm8: |
- | 15 | mov [immediate_size],1 |
|
- | 16 | jmp avx_pd_instruction |
|
- | 17 | avx_pd_instruction_er: |
|
- | 18 | or [operand_flags],8 |
|
- | 19 | avx_pd_instruction_sae: |
|
9 | mov [immediate_size],1 |
20 | or [operand_flags],4 |
10 | avx_pd_instruction: |
21 | avx_pd_instruction: |
- | 22 | mov [opcode_prefix],66h |
|
- | 23 | or [rex_prefix],80h |
|
- | 24 | mov cx,0800h |
|
- | 25 | jmp avx_instruction_with_broadcast |
|
11 | mov [opcode_prefix],66h |
26 | avx_pd_instruction_38_evex: |
- | 27 | or [vex_required],8 |
|
- | 28 | mov [supplemental_code],al |
|
12 | mov [mmx_size],0 |
29 | mov al,38h |
- | 30 | jmp avx_pd_instruction |
|
- | 31 | avx_cvtps2dq_instruction: |
|
- | 32 | mov [opcode_prefix],66h |
|
- | 33 | jmp avx_single_source_ps_instruction_er |
|
- | 34 | avx_cvtudq2ps_instruction: |
|
- | 35 | mov [opcode_prefix],0F2h |
|
- | 36 | avx_single_source_ps_instruction_er_evex: |
|
13 | jmp avx_instruction |
37 | or [vex_required],8 |
- | 38 | avx_single_source_ps_instruction_er: |
|
- | 39 | or [operand_flags],2+4+8 |
|
- | 40 | jmp avx_ps_instruction |
|
- | 41 | avx_single_source_ps_instruction_noevex: |
|
14 | avx_single_source_ps_instruction: |
42 | or [operand_flags],2 |
15 | or [vex_required],2 |
43 | or [vex_required],2 |
16 | jmp avx_ps_instruction |
44 | jmp avx_ps_instruction |
17 | avx_ps_instruction_imm8: |
45 | avx_ps_instruction_imm8: |
- | 46 | mov [immediate_size],1 |
|
- | 47 | jmp avx_ps_instruction |
|
- | 48 | avx_ps_instruction_er: |
|
- | 49 | or [operand_flags],8 |
|
- | 50 | avx_ps_instruction_sae: |
|
18 | mov [immediate_size],1 |
51 | or [operand_flags],4 |
- | 52 | avx_ps_instruction: |
|
- | 53 | mov cx,0400h |
|
- | 54 | jmp avx_instruction_with_broadcast |
|
19 | avx_ps_instruction: |
55 | avx_ps_instruction_66_38_evex: |
- | 56 | or [vex_required],8 |
|
- | 57 | mov [opcode_prefix],66h |
|
- | 58 | mov [supplemental_code],al |
|
20 | mov [mmx_size],0 |
59 | mov al,38h |
- | 60 | jmp avx_ps_instruction |
|
- | 61 | avx_sd_instruction_er: |
|
21 | jmp avx_instruction |
62 | or [operand_flags],8 |
22 | avx_sd_instruction_imm8: |
63 | avx_sd_instruction_sae: |
23 | mov [immediate_size],1 |
64 | or [operand_flags],4 |
24 | avx_sd_instruction: |
65 | avx_sd_instruction: |
25 | mov [opcode_prefix],0F2h |
66 | mov [opcode_prefix],0F2h |
- | 67 | or [rex_prefix],80h |
|
26 | mov [mmx_size],8 |
68 | mov cl,8 |
- | 69 | jmp avx_instruction |
|
- | 70 | avx_ss_instruction_er: |
|
27 | jmp avx_instruction |
71 | or [operand_flags],8 |
28 | avx_ss_instruction_imm8: |
72 | avx_ss_instruction_sae: |
29 | mov [immediate_size],1 |
73 | or [operand_flags],4 |
30 | avx_ss_instruction: |
74 | avx_ss_instruction: |
31 | mov [opcode_prefix],0F3h |
- | |
32 | mov [mmx_size],4 |
- | |
33 | jmp avx_instruction |
- | |
34 | avx_cmp_pd_instruction: |
- | |
35 | mov [opcode_prefix],66h |
- | |
36 | avx_cmp_ps_instruction: |
- | |
37 | mov [mmx_size],0 |
- | |
38 | mov byte [value],al |
75 | mov [opcode_prefix],0F3h |
39 | mov al,0C2h |
- | |
40 | jmp avx_instruction |
- | |
41 | avx_cmp_sd_instruction: |
- | |
42 | mov [opcode_prefix],0F2h |
- | |
43 | mov [mmx_size],8 |
- | |
44 | mov byte [value],al |
- | |
45 | mov al,0C2h |
- | |
46 | jmp avx_instruction |
- | |
47 | avx_cmp_ss_instruction: |
- | |
48 | mov [opcode_prefix],0F3h |
- | |
49 | mov [mmx_size],4 |
- | |
50 | mov byte [value],al |
- | |
51 | mov al,0C2h |
76 | mov cl,4 |
52 | jmp avx_instruction |
77 | jmp avx_instruction |
53 | avx_comiss_instruction: |
78 | avx_ss_instruction_noevex: |
- | 79 | or [vex_required],2 |
|
- | 80 | jmp avx_ss_instruction |
|
- | 81 | avx_single_source_q_instruction_38_evex: |
|
- | 82 | or [operand_flags],2 |
|
- | 83 | avx_q_instruction_38_evex: |
|
- | 84 | or [vex_required],8 |
|
- | 85 | avx_q_instruction_38: |
|
- | 86 | mov [supplemental_code],al |
|
- | 87 | mov al,38h |
|
- | 88 | jmp avx_q_instruction |
|
- | 89 | avx_q_instruction_38_w1_evex: |
|
- | 90 | or [vex_required],8 |
|
- | 91 | avx_q_instruction_38_w1: |
|
- | 92 | or [rex_prefix],8 |
|
- | 93 | jmp avx_q_instruction_38 |
|
- | 94 | avx_q_instruction_3a_imm8_evex: |
|
- | 95 | mov [immediate_size],1 |
|
- | 96 | or [vex_required],8 |
|
- | 97 | mov [supplemental_code],al |
|
- | 98 | mov al,3Ah |
|
- | 99 | jmp avx_q_instruction |
|
- | 100 | avx_q_instruction_evex: |
|
- | 101 | or [vex_required],8 |
|
- | 102 | avx_q_instruction: |
|
- | 103 | or [rex_prefix],80h |
|
- | 104 | mov ch,8 |
|
- | 105 | jmp avx_pi_instruction |
|
- | 106 | avx_single_source_d_instruction_38_evex: |
|
- | 107 | or [vex_required],8 |
|
- | 108 | avx_single_source_d_instruction_38: |
|
- | 109 | or [operand_flags],2 |
|
- | 110 | jmp avx_d_instruction_38 |
|
- | 111 | avx_d_instruction_38_evex: |
|
- | 112 | or [vex_required],8 |
|
- | 113 | avx_d_instruction_38: |
|
- | 114 | mov [supplemental_code],al |
|
- | 115 | mov al,38h |
|
- | 116 | jmp avx_d_instruction |
|
- | 117 | avx_d_instruction_3a_imm8_evex: |
|
- | 118 | mov [immediate_size],1 |
|
- | 119 | or [vex_required],8 |
|
- | 120 | mov [supplemental_code],al |
|
- | 121 | mov al,3Ah |
|
- | 122 | jmp avx_d_instruction |
|
- | 123 | avx_single_source_d_instruction_imm8: |
|
54 | or [vex_required],2 |
124 | or [operand_flags],2 |
55 | mov [mmx_size],4 |
125 | mov [immediate_size],1 |
- | 126 | jmp avx_d_instruction |
|
- | 127 | avx_d_instruction_evex: |
|
56 | jmp avx_instruction |
128 | or [vex_required],8 |
- | 129 | avx_d_instruction: |
|
- | 130 | mov ch,4 |
|
- | 131 | jmp avx_pi_instruction |
|
- | 132 | avx_single_source_bw_instruction_38: |
|
- | 133 | or [operand_flags],2 |
|
- | 134 | avx_bw_instruction_38: |
|
- | 135 | mov [supplemental_code],al |
|
- | 136 | mov al,38h |
|
- | 137 | avx_bw_instruction: |
|
- | 138 | xor ch,ch |
|
- | 139 | avx_pi_instruction: |
|
- | 140 | mov [opcode_prefix],66h |
|
- | 141 | xor cl,cl |
|
- | 142 | jmp avx_instruction_with_broadcast |
|
- | 143 | avx_bw_instruction_38_w1_evex: |
|
- | 144 | or [rex_prefix],8 |
|
- | 145 | avx_bw_instruction_38_evex: |
|
- | 146 | or [vex_required],8 |
|
- | 147 | jmp avx_bw_instruction_38 |
|
- | 148 | avx_pd_instruction_noevex: |
|
57 | avx_comisd_instruction: |
149 | xor cl,cl |
58 | or [vex_required],2 |
150 | or [vex_required],2 |
59 | mov [opcode_prefix],66h |
- | |
60 | mov [mmx_size],8 |
151 | mov [opcode_prefix],66h |
61 | jmp avx_instruction |
152 | jmp avx_instruction |
62 | avx_haddps_instruction: |
- | |
63 | mov [opcode_prefix],0F2h |
- | |
64 | mov [mmx_size],0 |
- | |
65 | jmp avx_instruction |
- | |
66 | avx_movshdup_instruction: |
153 | avx_ps_instruction_noevex: |
67 | or [vex_required],2 |
154 | or [vex_required],2 |
68 | mov [opcode_prefix],0F3h |
155 | mov [opcode_prefix],0F2h |
69 | mov [mmx_size],0 |
156 | xor cl,cl |
70 | jmp avx_instruction |
- | |
71 | avx_128bit_instruction: |
- | |
72 | mov [mmx_size],16 |
- | |
73 | mov [opcode_prefix],66h |
157 | jmp avx_instruction |
- | 158 | avx_instruction: |
|
- | 159 | xor ch,ch |
|
- | 160 | avx_instruction_with_broadcast: |
|
- | 161 | mov [mmx_size],cl |
|
74 | avx_instruction: |
162 | mov [broadcast_size],ch |
75 | mov [base_code],0Fh |
163 | mov [base_code],0Fh |
76 | mov [extended_code],al |
164 | mov [extended_code],al |
77 | avx_common: |
165 | avx_xop_common: |
78 | or [vex_required],1 |
166 | or [vex_required],1 |
79 | lods byte [esi] |
167 | lods byte [esi] |
80 | call get_size_operator |
168 | call get_size_operator |
81 | cmp al,10h |
169 | cmp al,10h |
82 | jne invalid_operand |
170 | jne invalid_operand |
83 | avx_reg: |
171 | avx_reg: |
84 | lods byte [esi] |
172 | lods byte [esi] |
85 | call convert_avx_register |
173 | call convert_avx_register |
- | 174 | mov [postbyte_register],al |
|
86 | mov [postbyte_register],al |
175 | call take_avx512_mask |
87 | avx_vex_reg: |
176 | avx_vex_reg: |
88 | test [vex_required],2 |
177 | test [operand_flags],2 |
89 | jnz avx_vex_reg_ok |
178 | jnz avx_vex_reg_ok |
90 | lods byte [esi] |
179 | lods byte [esi] |
91 | cmp al,',' |
180 | cmp al,',' |
92 | jne invalid_operand |
181 | jne invalid_operand |
93 | call take_avx_register |
182 | call take_avx_register |
94 | mov [vex_register],al |
183 | mov [vex_register],al |
95 | avx_vex_reg_ok: |
184 | avx_vex_reg_ok: |
- | 185 | mov al,[mmx_size] |
|
- | 186 | or al,al |
|
- | 187 | jz avx_regs_size_ok |
|
- | 188 | mov ah,[operand_size] |
|
- | 189 | or ah,ah |
|
- | 190 | jz avx_regs_size_ok |
|
96 | cmp [mmx_size],0 |
191 | cmp al,ah |
- | 192 | je avx_regs_size_ok |
|
97 | je avx_regs_size_ok |
193 | ja invalid_operand_size |
98 | cmp ah,16 |
194 | cmp ah,16 |
99 | jne invalid_operand |
195 | jne invalid_operand_size |
100 | avx_regs_size_ok: |
196 | avx_regs_size_ok: |
101 | lods byte [esi] |
197 | lods byte [esi] |
102 | cmp al,',' |
198 | cmp al,',' |
- | 199 | jne invalid_operand |
|
103 | jne invalid_operand |
200 | avx_regs_rm: |
104 | call take_avx_rm |
201 | call take_avx_rm |
105 | jc avx_regs_reg |
202 | jc avx_regs_reg |
106 | mov al,[extended_code] |
- | |
107 | mov ah,[supplemental_code] |
203 | mov al,[immediate_size] |
108 | cmp al,0C2h |
- | |
109 | je sse_cmp_mem_ok |
- | |
110 | cmp ax,443Ah |
- | |
111 | je sse_cmp_mem_ok |
- | |
112 | mov al,[base_code] |
- | |
113 | and al,11011100b |
- | |
114 | cmp al,11001100b |
- | |
115 | je sse_cmp_mem_ok |
- | |
116 | cmp [immediate_size],1 |
204 | cmp al,1 |
117 | je mmx_imm8 |
205 | je mmx_imm8 |
- | 206 | jb instruction_ready |
|
118 | cmp [immediate_size],0 |
207 | cmp al,-4 |
119 | jge instruction_ready |
208 | je sse_cmp_mem_ok |
120 | cmp byte [esi],',' |
209 | cmp byte [esi],',' |
121 | jne invalid_operand |
210 | jne invalid_operand |
122 | inc esi |
211 | inc esi |
123 | call take_avx_register |
212 | call take_avx_register |
- | 213 | shl al,4 |
|
124 | shl al,4 |
214 | jc invalid_operand |
125 | or byte [value],al |
215 | or byte [value],al |
126 | test al,80h |
216 | test al,80h |
127 | jz avx_regs_mem_reg_store |
217 | jz avx_regs_mem_reg_store |
128 | cmp [code_type],64 |
218 | cmp [code_type],64 |
Line 132... | Line 222... | ||
132 | call store_instruction_with_imm8 |
222 | call store_instruction_with_imm8 |
133 | jmp instruction_assembled |
223 | jmp instruction_assembled |
134 | avx_regs_reg: |
224 | avx_regs_reg: |
135 | mov bl,al |
225 | mov bl,al |
136 | mov al,[extended_code] |
226 | call take_avx512_rounding |
137 | mov ah,[supplemental_code] |
227 | mov al,[immediate_size] |
138 | cmp al,0C2h |
228 | cmp al,1 |
139 | je sse_cmp_nomem_ok |
229 | je mmx_nomem_imm8 |
140 | cmp ax,443Ah |
- | |
141 | je sse_cmp_nomem_ok |
- | |
142 | mov al,[base_code] |
- | |
143 | and al,11011100b |
- | |
144 | cmp al,11001100b |
- | |
145 | je sse_cmp_nomem_ok |
- | |
146 | cmp [immediate_size],1 |
- | |
147 | je mmx_nomem_imm8 |
- | |
148 | cmp [immediate_size],0 |
230 | jb nomem_instruction_ready |
149 | jge nomem_instruction_ready |
231 | cmp al,-4 |
- | 232 | je sse_cmp_nomem_ok |
|
150 | lods byte [esi] |
233 | lods byte [esi] |
151 | cmp al,',' |
234 | cmp al,',' |
152 | jne invalid_operand |
235 | jne invalid_operand |
153 | mov al,bl |
236 | mov al,bl |
154 | shl al,4 |
237 | shl al,4 |
155 | or byte [value],al |
238 | jc invalid_operand |
- | 239 | or byte [value],al |
|
156 | test al,80h |
240 | test al,80h |
157 | jz avx_regs_reg_ |
241 | jz avx_regs_reg_ |
158 | cmp [code_type],64 |
242 | cmp [code_type],64 |
159 | jne invalid_operand |
243 | jne invalid_operand |
160 | avx_regs_reg_: |
244 | avx_regs_reg_: |
Line 167... | Line 251... | ||
167 | call store_instruction_with_imm8 |
251 | call store_instruction_with_imm8 |
168 | jmp instruction_assembled |
252 | jmp instruction_assembled |
169 | avx_regs_reg_reg: |
253 | avx_regs_reg_reg: |
170 | shl al,4 |
254 | shl al,4 |
171 | and byte [value],1111b |
255 | jc invalid_operand |
- | 256 | and byte [value],1111b |
|
172 | or byte [value],al |
257 | or byte [value],al |
173 | call take_imm4_if_needed |
258 | call take_imm4_if_needed |
174 | call store_nomem_instruction |
259 | call store_nomem_instruction |
175 | mov al,byte [value] |
260 | mov al,byte [value] |
176 | stos byte [edi] |
261 | stos byte [edi] |
Line 181... | Line 266... | ||
181 | lods byte [esi] |
266 | lods byte [esi] |
182 | call get_size_operator |
267 | call get_size_operator |
183 | cmp al,'[' |
268 | cmp al,'[' |
184 | je take_avx_mem |
269 | je take_avx_mem |
185 | mov [operand_size],cl |
270 | cmp al,10h |
186 | cmp al,10h |
- | |
187 | jne invalid_operand |
271 | jne invalid_operand |
188 | lods byte [esi] |
272 | mov [operand_size],cl |
- | 273 | lods byte [esi] |
|
189 | call convert_avx_register |
274 | call convert_avx_register |
190 | cmp [mmx_size],0 |
275 | or cl,cl |
- | 276 | jnz avx_reg_ok |
|
- | 277 | or cl,[mmx_size] |
|
191 | je avx_reg_ok |
278 | jz avx_reg_ok |
- | 279 | cmp ah,cl |
|
- | 280 | je avx_reg_ok |
|
192 | cmp ah,16 |
281 | jb invalid_operand_size |
- | 282 | cmp ah,16 |
|
193 | jne invalid_operand |
283 | jne invalid_operand_size |
194 | avx_reg_ok: |
284 | avx_reg_ok: |
195 | stc |
285 | stc |
196 | ret |
286 | ret |
197 | take_avx_mem: |
287 | take_avx_mem: |
198 | push ecx |
288 | push ecx |
199 | call get_address |
289 | call get_address |
200 | pop eax |
290 | cmp byte [esi],'{' |
- | 291 | jne avx_mem_ok |
|
- | 292 | inc esi |
|
- | 293 | lods byte [esi] |
|
- | 294 | cmp al,1Fh |
|
- | 295 | jne invalid_operand |
|
- | 296 | mov al,[esi] |
|
- | 297 | shr al,4 |
|
- | 298 | cmp al,1 |
|
- | 299 | jne invalid_operand |
|
- | 300 | mov al,[mmx_size] |
|
- | 301 | or al,al |
|
- | 302 | jnz avx_mem_broadcast_check |
|
- | 303 | mov eax,[esp] |
|
- | 304 | or al,al |
|
- | 305 | jnz avx_mem_broadcast_check |
|
- | 306 | mov al,[broadcast_size] |
|
- | 307 | mov [mmx_size],al |
|
- | 308 | mov ah,cl |
|
- | 309 | lods byte [esi] |
|
- | 310 | and al,1111b |
|
- | 311 | mov cl,al |
|
- | 312 | mov al,[broadcast_size] |
|
- | 313 | shl al,cl |
|
- | 314 | mov [esp],al |
|
- | 315 | mov cl,ah |
|
- | 316 | jmp avx_mem_broadcast_ok |
|
- | 317 | avx_mem_broadcast_check: |
|
- | 318 | bsf eax,eax |
|
- | 319 | xchg al,[broadcast_size] |
|
- | 320 | mov [mmx_size],al |
|
- | 321 | bsf eax,eax |
|
- | 322 | jz invalid_operand |
|
- | 323 | mov ah,[broadcast_size] |
|
- | 324 | sub ah,al |
|
- | 325 | lods byte [esi] |
|
- | 326 | and al,1111b |
|
- | 327 | cmp al,ah |
|
- | 328 | jne invalid_operand_size |
|
- | 329 | avx_mem_broadcast_ok: |
|
- | 330 | or [vex_required],40h |
|
- | 331 | lods byte [esi] |
|
- | 332 | cmp al,'}' |
|
- | 333 | jne invalid_operand |
|
- | 334 | avx_mem_ok: |
|
- | 335 | pop eax |
|
201 | cmp [mmx_size],0 |
336 | or al,al |
202 | jne avx_smem |
337 | jz avx_mem_size_deciding |
203 | xchg al,[operand_size] |
338 | xchg al,[operand_size] |
204 | or al,al |
339 | cmp [mmx_size],0 |
- | 340 | jne avx_mem_size_enforced |
|
- | 341 | or al,al |
|
205 | jz avx_mem_ok |
342 | jz avx_mem_size_ok |
206 | cmp al,[operand_size] |
343 | cmp al,[operand_size] |
207 | jne operand_sizes_do_not_match |
344 | jne operand_sizes_do_not_match |
208 | avx_mem_ok: |
345 | avx_mem_size_ok: |
209 | clc |
346 | clc |
210 | ret |
347 | ret |
211 | avx_smem: |
348 | avx_mem_size_deciding: |
212 | xchg al,[operand_size] |
349 | mov al,[operand_size] |
213 | or al,al |
350 | cmp [mmx_size],0 |
- | 351 | jne avx_mem_size_enforced |
|
- | 352 | cmp al,16 |
|
- | 353 | je avx_mem_size_ok |
|
- | 354 | cmp al,32 |
|
- | 355 | je avx_mem_size_ok |
|
- | 356 | cmp al,64 |
|
- | 357 | je avx_mem_size_ok |
|
- | 358 | or al,al |
|
- | 359 | jnz invalid_operand_size |
|
- | 360 | call recoverable_unknown_size |
|
- | 361 | avx_mem_size_enforced: |
|
- | 362 | or al,al |
|
214 | jz avx_smem_ok |
363 | jz avx_mem_size_ok |
215 | cmp al,[mmx_size] |
364 | cmp al,[mmx_size] |
216 | jne invalid_operand_size |
365 | je avx_mem_size_ok |
217 | avx_smem_ok: |
366 | jmp invalid_operand_size |
218 | clc |
367 | take_imm4_if_needed: |
219 | ret |
- | |
220 | take_imm4_if_needed: |
- | |
221 | cmp [immediate_size],-3 |
368 | cmp [immediate_size],-3 |
222 | jne imm4_ok |
369 | jne imm4_ok |
223 | push ebx ecx edx |
370 | push ebx ecx edx |
224 | lods byte [esi] |
371 | lods byte [esi] |
225 | cmp al,',' |
372 | cmp al,',' |
Line 233... | Line 380... | ||
233 | or byte [value],al |
380 | or byte [value],al |
234 | pop edx ecx ebx |
381 | pop edx ecx ebx |
235 | imm4_ok: |
382 | imm4_ok: |
236 | ret |
383 | ret |
237 | 384 | take_avx512_mask: |
|
- | 385 | cmp byte [esi],'{' |
|
- | 386 | jne avx512_masking_ok |
|
- | 387 | test [operand_flags],10h |
|
- | 388 | jnz invalid_operand |
|
- | 389 | inc esi |
|
- | 390 | lods byte [esi] |
|
- | 391 | cmp al,14h |
|
- | 392 | jne invalid_operand |
|
- | 393 | lods byte [esi] |
|
- | 394 | mov ah,al |
|
- | 395 | shr ah,4 |
|
- | 396 | cmp ah,5 |
|
- | 397 | jne invalid_operand |
|
- | 398 | or al,al |
|
- | 399 | jz invalid_operand |
|
- | 400 | and al,111b |
|
- | 401 | mov [mask_register],al |
|
- | 402 | or [vex_required],20h |
|
- | 403 | lods byte [esi] |
|
- | 404 | cmp al,'}' |
|
- | 405 | jne invalid_operand |
|
- | 406 | cmp byte [esi],'{' |
|
- | 407 | jne avx512_masking_ok |
|
- | 408 | test [operand_flags],20h |
|
- | 409 | jnz invalid_operand |
|
- | 410 | inc esi |
|
- | 411 | lods byte [esi] |
|
- | 412 | cmp al,1Fh |
|
- | 413 | jne invalid_operand |
|
- | 414 | lods byte [esi] |
|
- | 415 | or al,al |
|
- | 416 | jnz invalid_operand |
|
- | 417 | or [mask_register],80h |
|
- | 418 | lods byte [esi] |
|
- | 419 | cmp al,'}' |
|
- | 420 | jne invalid_operand |
|
- | 421 | avx512_masking_ok: |
|
- | 422 | retn |
|
- | 423 | take_avx512_rounding: |
|
- | 424 | test [operand_flags],4+8 |
|
- | 425 | jz avx512_rounding_done |
|
- | 426 | cmp [mmx_size],0 |
|
- | 427 | jne avx512_rounding_allowed |
|
- | 428 | cmp [operand_size],64 |
|
- | 429 | jne avx512_rounding_done |
|
- | 430 | avx512_rounding_allowed: |
|
- | 431 | cmp byte [esi],',' |
|
- | 432 | jne avx512_rounding_done |
|
- | 433 | cmp byte [esi+1],'{' |
|
- | 434 | jne avx512_rounding_done |
|
- | 435 | add esi,2 |
|
- | 436 | mov [rounding_mode],0 |
|
- | 437 | or [vex_required],40h+80h |
|
- | 438 | test [operand_flags],8 |
|
- | 439 | jz take_sae |
|
- | 440 | lods byte [esi] |
|
- | 441 | cmp al,1Fh |
|
- | 442 | jne invalid_operand |
|
- | 443 | lods byte [esi] |
|
- | 444 | mov ah,al |
|
- | 445 | shr ah,4 |
|
- | 446 | cmp ah,2 |
|
- | 447 | jne invalid_operand |
|
- | 448 | and al,11b |
|
- | 449 | mov [rounding_mode],al |
|
- | 450 | lods byte [esi] |
|
- | 451 | cmp al,'-' |
|
- | 452 | jne invalid_operand |
|
- | 453 | take_sae: |
|
- | 454 | lods byte [esi] |
|
- | 455 | cmp al,1Fh |
|
- | 456 | jne invalid_operand |
|
- | 457 | lods byte [esi] |
|
- | 458 | cmp al,30h |
|
- | 459 | jne invalid_operand |
|
- | 460 | lods byte [esi] |
|
- | 461 | cmp al,'}' |
|
- | 462 | jne invalid_operand |
|
- | 463 | avx512_rounding_done: |
|
- | 464 | retn |
|
- | 465 | ||
Line 238... | Line 466... | ||
238 | avx_single_source_128bit_instruction_38: |
466 | avx_movdqu_instruction: |
- | 467 | mov ah,0F3h |
|
239 | or [vex_required],2 |
468 | jmp avx_movdq_instruction |
240 | avx_128bit_instruction_38: |
469 | avx_movdqa_instruction: |
241 | mov [mmx_size],16 |
470 | mov ah,66h |
242 | jmp avx_instruction_38_setup |
471 | avx_movdq_instruction: |
243 | avx_single_source_instruction_38: |
472 | mov [opcode_prefix],ah |
244 | or [vex_required],2 |
473 | or [vex_required],2 |
245 | avx_instruction_38: |
- | |
246 | mov [mmx_size],0 |
- | |
247 | avx_instruction_38_setup: |
- | |
248 | mov [opcode_prefix],66h |
- | |
249 | mov [supplemental_code],al |
- | |
250 | mov al,38h |
- | |
251 | jmp avx_instruction |
474 | jmp avx_movps_instruction |
252 | avx_instruction_38_w1: |
475 | avx512_movdqu16_instruction: |
253 | or [rex_prefix],8 |
476 | or [rex_prefix],8 |
254 | jmp avx_instruction_38 |
- | |
255 | - | ||
256 | avx_ss_instruction_3a_imm8: |
- | |
257 | mov [mmx_size],4 |
- | |
258 | jmp avx_instruction_3a_imm8_setup |
- | |
259 | avx_sd_instruction_3a_imm8: |
- | |
260 | mov [mmx_size],8 |
- | |
261 | jmp avx_instruction_3a_imm8_setup |
- | |
262 | avx_single_source_128bit_instruction_3a_imm8: |
- | |
263 | or [vex_required],2 |
- | |
264 | avx_128bit_instruction_3a_imm8: |
- | |
265 | mov [mmx_size],16 |
- | |
266 | jmp avx_instruction_3a_imm8_setup |
- | |
267 | avx_triple_source_instruction_3a: |
- | |
268 | mov [mmx_size],0 |
- | |
269 | mov [immediate_size],-1 |
- | |
270 | mov byte [value],0 |
- | |
271 | jmp avx_instruction_3a_setup |
- | |
272 | avx_single_source_instruction_3a_imm8: |
- | |
273 | or [vex_required],2 |
- | |
274 | avx_instruction_3a_imm8: |
- | |
275 | mov [mmx_size],0 |
- | |
276 | avx_instruction_3a_imm8_setup: |
- | |
277 | mov [immediate_size],1 |
- | |
278 | avx_instruction_3a_setup: |
- | |
279 | mov [opcode_prefix],66h |
- | |
280 | mov [supplemental_code],al |
- | |
281 | mov al,3Ah |
- | |
282 | jmp avx_instruction |
- | |
283 | avx_pclmulqdq_instruction: |
477 | avx512_movdqu8_instruction: |
284 | mov byte [value],al |
- | |
285 | mov [mmx_size],16 |
- | |
286 | mov al,44h |
478 | mov ah,0F2h |
287 | jmp avx_instruction_3a_setup |
479 | jmp avx_movdq_instruction_evex |
288 | - | ||
289 | avx_permq_instruction: |
480 | avx512_movdqu64_instruction: |
290 | or [vex_required],2 |
- | |
291 | or [rex_prefix],8 |
481 | or [rex_prefix],8 |
292 | avx_perm2f128_instruction: |
482 | avx512_movdqu32_instruction: |
293 | mov [immediate_size],1 |
- | |
294 | mov ah,3Ah |
483 | mov ah,0F3h |
295 | jmp avx_perm_instruction |
484 | jmp avx_movdq_instruction_evex |
296 | avx_permd_instruction: |
485 | avx512_movdqa64_instruction: |
297 | mov ah,38h |
486 | or [rex_prefix],8 |
298 | avx_perm_instruction: |
487 | avx512_movdqa32_instruction: |
299 | mov [opcode_prefix],66h |
488 | mov ah,66h |
300 | mov [base_code],0Fh |
489 | avx_movdq_instruction_evex: |
301 | mov [extended_code],ah |
490 | mov [opcode_prefix],ah |
302 | mov [supplemental_code],al |
- | |
303 | mov [mmx_size],0 |
- | |
304 | or [vex_required],1 |
491 | or [vex_required],8 |
305 | call take_avx_register |
- | |
306 | cmp ah,32 |
- | |
307 | jne invalid_operand_size |
- | |
308 | mov [postbyte_register],al |
- | |
309 | jmp avx_vex_reg |
- | |
310 | - | ||
311 | avx_movdqu_instruction: |
- | |
312 | mov [opcode_prefix],0F3h |
- | |
313 | jmp avx_movps_instruction |
492 | jmp avx_movps_instruction |
314 | avx_movpd_instruction: |
493 | avx_movpd_instruction: |
315 | mov [opcode_prefix],66h |
494 | mov [opcode_prefix],66h |
- | 495 | or [rex_prefix],80h |
|
316 | avx_movps_instruction: |
496 | avx_movps_instruction: |
317 | mov [mmx_size],0 |
- | |
318 | or [vex_required],2 |
497 | or [operand_flags],2 |
319 | mov [base_code],0Fh |
498 | mov [base_code],0Fh |
320 | mov [extended_code],al |
499 | mov [extended_code],al |
- | 500 | or [vex_required],1 |
|
- | 501 | xor al,al |
|
- | 502 | mov [mmx_size],al |
|
- | 503 | mov [broadcast_size],al |
|
321 | lods byte [esi] |
504 | lods byte [esi] |
322 | call get_size_operator |
505 | call get_size_operator |
323 | cmp al,10h |
506 | cmp al,10h |
324 | je avx_reg |
507 | je avx_reg |
325 | inc [extended_code] |
508 | inc [extended_code] |
Line 329... | Line 512... | ||
329 | avx_mem: |
512 | avx_mem: |
330 | cmp al,'[' |
513 | cmp al,'[' |
331 | jne invalid_operand |
514 | jne invalid_operand |
332 | call get_address |
515 | call get_address |
333 | lods byte [esi] |
516 | or [operand_flags],20h |
- | 517 | call take_avx512_mask |
|
- | 518 | lods byte [esi] |
|
334 | cmp al,',' |
519 | cmp al,',' |
335 | jne invalid_operand |
520 | jne invalid_operand |
336 | call take_avx_register |
521 | call take_avx_register |
337 | mov [postbyte_register],al |
522 | mov [postbyte_register],al |
338 | jmp instruction_ready |
523 | jmp instruction_ready |
339 | avx_movntpd_instruction: |
524 | avx_movntpd_instruction: |
340 | mov [opcode_prefix],66h |
525 | or [rex_prefix],80h |
- | 526 | avx_movntdq_instruction: |
|
- | 527 | mov [opcode_prefix],66h |
|
341 | avx_movntps_instruction: |
528 | avx_movntps_instruction: |
342 | or [vex_required],1 |
529 | mov [base_code],0Fh |
343 | mov [base_code],0Fh |
- | |
344 | mov [extended_code],al |
530 | mov [extended_code],al |
345 | lods byte [esi] |
531 | or [vex_required],1 |
- | 532 | or [operand_flags],10h |
|
- | 533 | mov [mmx_size],0 |
|
- | 534 | lods byte [esi] |
|
346 | call get_size_operator |
535 | call get_size_operator |
347 | jmp avx_mem |
536 | jmp avx_mem |
348 | avx_lddqu_instruction: |
537 | avx_compress_q_instruction: |
349 | mov [opcode_prefix],0F2h |
538 | or [rex_prefix],8 |
350 | mov [mmx_size],0 |
539 | avx_compress_d_instruction: |
- | 540 | or [vex_required],8 |
|
- | 541 | mov [mmx_size],0 |
|
351 | xor cx,cx |
542 | call setup_66_0f_38 |
- | 543 | lods byte [esi] |
|
- | 544 | call get_size_operator |
|
- | 545 | cmp al,10h |
|
- | 546 | jne avx_mem |
|
- | 547 | lods byte [esi] |
|
- | 548 | call convert_avx_register |
|
- | 549 | mov bl,al |
|
352 | avx_load_instruction: |
550 | call take_avx512_mask |
- | 551 | lods byte [esi] |
|
- | 552 | cmp al,',' |
|
- | 553 | jne invalid_operand |
|
- | 554 | call take_avx_register |
|
- | 555 | mov [postbyte_register],al |
|
- | 556 | jmp nomem_instruction_ready |
|
- | 557 | avx_lddqu_instruction: |
|
- | 558 | mov ah,0F2h |
|
- | 559 | or [vex_required],2 |
|
- | 560 | avx_load_instruction: |
|
353 | mov [base_code],0Fh |
561 | mov [opcode_prefix],ah |
- | 562 | mov [base_code],0Fh |
|
354 | mov [extended_code],al |
563 | mov [extended_code],al |
355 | or [vex_required],1 |
564 | mov [mmx_size],0 |
- | 565 | or [vex_required],1 |
|
356 | call take_avx_register |
566 | call take_avx_register |
357 | or cl,cl |
567 | mov [postbyte_register],al |
358 | jz avx_load_reg_ok |
- | |
359 | cmp ah,cl |
- | |
360 | jne invalid_operand |
- | |
361 | avx_load_reg_ok: |
- | |
362 | cmp [mmx_size],0 |
- | |
363 | je avx_load_reg_ |
568 | lods byte [esi] |
364 | xor ah,ah |
- | |
365 | avx_load_reg_: |
- | |
366 | xchg ah,[operand_size] |
- | |
367 | push eax |
- | |
368 | lods byte [esi] |
- | |
369 | cmp al,',' |
569 | cmp al,',' |
370 | jne invalid_operand |
570 | jne invalid_operand |
371 | lods byte [esi] |
571 | lods byte [esi] |
372 | call get_size_operator |
572 | call get_size_operator |
373 | cmp al,10h |
573 | cmp al,'[' |
- | 574 | jne invalid_operand |
|
- | 575 | call get_address |
|
- | 576 | jmp instruction_ready |
|
- | 577 | avx_movntdqa_instruction: |
|
- | 578 | mov [supplemental_code],al |
|
- | 579 | mov al,38h |
|
- | 580 | mov ah,66h |
|
- | 581 | jmp avx_load_instruction |
|
- | 582 | avx_movq_instruction: |
|
- | 583 | or [rex_prefix],8 |
|
- | 584 | mov [mmx_size],8 |
|
- | 585 | jmp avx_mov_instruction |
|
- | 586 | avx_movd_instruction: |
|
- | 587 | mov [mmx_size],4 |
|
- | 588 | avx_mov_instruction: |
|
- | 589 | or [vex_required],1 |
|
- | 590 | mov [opcode_prefix],66h |
|
- | 591 | mov [base_code],0Fh |
|
- | 592 | mov [extended_code],7Eh |
|
- | 593 | lods byte [esi] |
|
- | 594 | call get_size_operator |
|
- | 595 | cmp al,10h |
|
374 | je avx_load_reg_reg |
596 | je avx_movd_reg |
375 | cmp al,'[' |
597 | cmp al,'[' |
376 | jne invalid_operand |
598 | jne invalid_operand |
377 | call get_address |
599 | call get_address |
378 | pop eax |
600 | mov al,[mmx_size] |
379 | xchg ah,[operand_size] |
- | |
380 | mov [postbyte_register],al |
- | |
381 | mov al,[mmx_size] |
- | |
382 | or al,al |
601 | not al |
383 | jz instruction_ready |
602 | and [operand_size],al |
- | 603 | jnz invalid_operand_size |
|
- | 604 | lods byte [esi] |
|
- | 605 | cmp al,',' |
|
- | 606 | jne invalid_operand |
|
384 | or ah,ah |
607 | lods byte [esi] |
- | 608 | call get_size_operator |
|
- | 609 | cmp al,10h |
|
385 | jz instruction_ready |
610 | jne invalid_operand |
386 | cmp al,ah |
611 | lods byte [esi] |
- | 612 | call convert_avx_register |
|
- | 613 | cmp ah,16 |
|
387 | jne invalid_operand_size |
614 | jne invalid_operand_size |
388 | jmp instruction_ready |
615 | mov [postbyte_register],al |
- | 616 | cmp [mmx_size],8 |
|
- | 617 | jne instruction_ready |
|
- | 618 | and [rex_prefix],not 8 |
|
- | 619 | or [rex_prefix],80h |
|
- | 620 | mov [extended_code],0D6h |
|
- | 621 | jmp instruction_ready |
|
389 | avx_load_reg_reg: |
622 | avx_movd_reg: |
390 | lods byte [esi] |
623 | lods byte [esi] |
- | 624 | cmp al,0C0h |
|
- | 625 | jae avx_movd_xmmreg |
|
- | 626 | call convert_register |
|
- | 627 | cmp ah,[mmx_size] |
|
- | 628 | jne invalid_operand_size |
|
- | 629 | mov [operand_size],0 |
|
- | 630 | mov bl,al |
|
- | 631 | lods byte [esi] |
|
- | 632 | cmp al,',' |
|
- | 633 | jne invalid_operand |
|
- | 634 | lods byte [esi] |
|
- | 635 | call get_size_operator |
|
- | 636 | cmp al,10h |
|
- | 637 | jne invalid_operand |
|
- | 638 | lods byte [esi] |
|
391 | call convert_avx_register |
639 | call convert_avx_register |
392 | cmp ch,ah |
640 | cmp ah,16 |
393 | jne invalid_operand |
641 | jne invalid_operand_size |
- | 642 | mov [postbyte_register],al |
|
- | 643 | jmp nomem_instruction_ready |
|
- | 644 | avx_movd_xmmreg: |
|
- | 645 | sub [extended_code],10h |
|
- | 646 | call convert_avx_register |
|
- | 647 | cmp ah,16 |
|
- | 648 | jne invalid_operand_size |
|
- | 649 | mov [postbyte_register],al |
|
- | 650 | mov [operand_size],0 |
|
- | 651 | lods byte [esi] |
|
- | 652 | cmp al,',' |
|
- | 653 | jne invalid_operand |
|
- | 654 | lods byte [esi] |
|
- | 655 | call get_size_operator |
|
- | 656 | cmp al,10h |
|
- | 657 | je avx_movd_xmmreg_reg |
|
- | 658 | cmp al,'[' |
|
- | 659 | jne invalid_operand |
|
394 | mov bl,al |
660 | call get_address |
- | 661 | mov al,[mmx_size] |
|
- | 662 | cmp al,8 |
|
- | 663 | jne avx_movd_xmmreg_mem_ready |
|
- | 664 | call avx_movq_xmmreg_xmmreg_opcode |
|
- | 665 | avx_movd_xmmreg_mem_ready: |
|
- | 666 | not al |
|
- | 667 | test [operand_size],al |
|
- | 668 | jnz invalid_operand_size |
|
- | 669 | jmp instruction_ready |
|
- | 670 | avx_movd_xmmreg_reg: |
|
- | 671 | lods byte [esi] |
|
- | 672 | cmp al,0C0h |
|
- | 673 | jae avx_movq_xmmreg_xmmreg |
|
- | 674 | call convert_register |
|
- | 675 | cmp ah,[mmx_size] |
|
- | 676 | jne invalid_operand_size |
|
- | 677 | mov bl,al |
|
395 | pop eax |
678 | jmp nomem_instruction_ready |
396 | xchg ah,[operand_size] |
- | |
397 | mov [postbyte_register],al |
- | |
398 | jmp nomem_instruction_ready |
- | |
399 | 679 | avx_movq_xmmreg_xmmreg: |
|
400 | avx_movntdqa_instruction: |
- | |
401 | mov [mmx_size],0 |
680 | cmp [mmx_size],8 |
402 | xor cx,cx |
681 | jne invalid_operand |
403 | jmp avx_load_instruction_38 |
- | |
404 | avx_broadcastss_instruction: |
682 | call avx_movq_xmmreg_xmmreg_opcode |
405 | mov [mmx_size],4 |
683 | call convert_avx_register |
406 | xor cl,cl |
684 | cmp ah,16 |
407 | mov ch,16 |
685 | jne invalid_operand_size |
- | 686 | mov bl,al |
|
408 | jmp avx_load_instruction_38 |
687 | jmp nomem_instruction_ready |
409 | avx_broadcastsd_instruction: |
688 | avx_movq_xmmreg_xmmreg_opcode: |
410 | mov [mmx_size],8 |
689 | and [rex_prefix],not 8 |
411 | mov cl,32 |
690 | or [rex_prefix],80h |
412 | mov ch,16 |
691 | add [extended_code],10h |
413 | jmp avx_load_instruction_38 |
692 | mov [opcode_prefix],0F3h |
414 | avx_pbroadcastb_instruction: |
693 | ret |
- | 694 | avx_movddup_instruction: |
|
415 | mov [mmx_size],1 |
695 | or [vex_required],1 |
416 | jmp avx_pbroadcast_instruction |
696 | mov [opcode_prefix],0F2h |
417 | avx_pbroadcastw_instruction: |
697 | mov [base_code],0Fh |
- | 698 | mov [extended_code],al |
|
418 | mov [mmx_size],2 |
699 | or [rex_prefix],80h |
- | 700 | xor al,al |
|
- | 701 | mov [mmx_size],al |
|
419 | jmp avx_pbroadcast_instruction |
702 | mov [broadcast_size],al |
420 | avx_pbroadcastd_instruction: |
703 | lods byte [esi] |
- | 704 | call get_size_operator |
|
421 | mov [mmx_size],4 |
705 | cmp al,10h |
- | 706 | jne invalid_operand |
|
- | 707 | lods byte [esi] |
|
422 | jmp avx_pbroadcast_instruction |
708 | call convert_avx_register |
- | 709 | mov [postbyte_register],al |
|
423 | avx_pbroadcastq_instruction: |
710 | cmp ah,16 |
- | 711 | ja avx_movddup_size_ok |
|
424 | mov [mmx_size],8 |
712 | mov [mmx_size],8 |
425 | avx_pbroadcast_instruction: |
713 | avx_movddup_size_ok: |
426 | xor cl,cl |
- | |
427 | mov ch,16 |
- | |
428 | jmp avx_load_instruction_38 |
- | |
429 | avx_broadcastf128_instruction: |
- | |
430 | mov [mmx_size],16 |
- | |
431 | mov cl,32 |
- | |
432 | xor ch,ch |
- | |
433 | avx_load_instruction_38: |
- | |
434 | mov [opcode_prefix],66h |
714 | call take_avx512_mask |
435 | mov [supplemental_code],al |
715 | jmp avx_vex_reg_ok |
436 | mov al,38h |
- | |
437 | jmp avx_load_instruction |
- | |
438 | avx_movlpd_instruction: |
716 | avx_movlpd_instruction: |
439 | mov [opcode_prefix],66h |
717 | mov [opcode_prefix],66h |
440 | avx_movlps_instruction: |
718 | or [rex_prefix],80h |
- | 719 | avx_movlps_instruction: |
|
441 | mov [base_code],0Fh |
720 | mov [base_code],0Fh |
442 | mov [extended_code],al |
721 | mov [extended_code],al |
443 | mov [mmx_size],8 |
722 | mov [mmx_size],8 |
444 | or [vex_required],1 |
723 | mov [broadcast_size],0 |
- | 724 | or [vex_required],1 |
|
445 | lods byte [esi] |
725 | lods byte [esi] |
446 | call get_size_operator |
726 | call get_size_operator |
447 | cmp al,10h |
727 | cmp al,10h |
448 | jne avx_movlps_mem |
728 | jne avx_movlps_mem |
449 | lods byte [esi] |
729 | lods byte [esi] |
Line 466... | Line 746... | ||
466 | avx_movlps_mem: |
746 | avx_movlps_mem: |
467 | cmp al,'[' |
747 | cmp al,'[' |
468 | jne invalid_operand |
748 | jne invalid_operand |
469 | call get_address |
749 | call get_address |
470 | mov al,[operand_size] |
750 | avx_movlps_mem_: |
- | 751 | mov al,[operand_size] |
|
471 | or al,al |
752 | or al,al |
472 | jz avx_movlps_mem_size_ok |
753 | jz avx_movlps_mem_size_ok |
473 | cmp al,[mmx_size] |
754 | cmp al,[mmx_size] |
474 | jne invalid_operand_size |
755 | jne invalid_operand_size |
475 | mov [operand_size],0 |
756 | mov [operand_size],0 |
Line 501... | Line 782... | ||
501 | jne invalid_operand |
782 | jne invalid_operand |
502 | call take_avx_register |
783 | call take_avx_register |
503 | mov bl,al |
784 | mov bl,al |
504 | jmp nomem_instruction_ready |
785 | jmp nomem_instruction_ready |
505 | avx_maskmov_w1_instruction: |
786 | avx_movsd_instruction: |
506 | or [rex_prefix],8 |
787 | mov al,0F2h |
- | 788 | mov cl,8 |
|
- | 789 | or [rex_prefix],80h |
|
507 | avx_maskmov_instruction: |
790 | jmp avx_movs_instruction |
- | 791 | avx_movss_instruction: |
|
508 | call setup_66_0f_38 |
792 | mov al,0F3h |
509 | mov [mmx_size],0 |
793 | mov cl,4 |
- | 794 | avx_movs_instruction: |
|
- | 795 | mov [opcode_prefix],al |
|
- | 796 | mov [mmx_size],cl |
|
510 | or [vex_required],1 |
797 | or [vex_required],1 |
511 | lods byte [esi] |
798 | mov [base_code],0Fh |
- | 799 | mov [extended_code],10h |
|
- | 800 | lods byte [esi] |
|
512 | call get_size_operator |
801 | call get_size_operator |
513 | cmp al,10h |
802 | cmp al,10h |
514 | jne avx_maskmov_mem |
803 | jne avx_movs_mem |
515 | lods byte [esi] |
804 | lods byte [esi] |
516 | call convert_avx_register |
805 | call convert_avx_register |
517 | mov [postbyte_register],al |
806 | cmp ah,16 |
- | 807 | jne invalid_operand |
|
- | 808 | mov [postbyte_register],al |
|
518 | lods byte [esi] |
809 | call take_avx512_mask |
- | 810 | xor cl,cl |
|
- | 811 | xchg cl,[operand_size] |
|
- | 812 | lods byte [esi] |
|
519 | cmp al,',' |
813 | cmp al,',' |
520 | jne invalid_operand |
814 | jne invalid_operand |
521 | call take_avx_register |
815 | lods byte [esi] |
522 | mov [vex_register],al |
- | |
523 | lods byte [esi] |
- | |
524 | cmp al,',' |
816 | call get_size_operator |
525 | jne invalid_operand |
- | |
526 | call take_avx_rm |
817 | cmp al,10h |
527 | jc invalid_operand |
- | |
528 | jmp instruction_ready |
- | |
529 | avx_maskmov_mem: |
- | |
530 | cmp al,'[' |
- | |
531 | jne invalid_operand |
818 | jne avx_movs_reg_mem |
532 | call get_address |
819 | mov [operand_size],cl |
533 | lods byte [esi] |
820 | lods byte [esi] |
534 | cmp al,',' |
821 | call convert_avx_register |
535 | jne invalid_operand |
- | |
536 | call take_avx_register |
- | |
537 | mov [vex_register],al |
822 | mov [vex_register],al |
538 | lods byte [esi] |
823 | lods byte [esi] |
539 | cmp al,',' |
824 | cmp al,',' |
540 | jne invalid_operand |
825 | jne invalid_operand |
541 | call take_avx_register |
826 | call take_avx_register |
542 | mov [postbyte_register],al |
827 | mov bl,al |
- | 828 | cmp bl,8 |
|
- | 829 | jb nomem_instruction_ready |
|
- | 830 | inc [extended_code] |
|
- | 831 | xchg bl,[postbyte_register] |
|
543 | add [supplemental_code],2 |
832 | jmp nomem_instruction_ready |
- | 833 | avx_movs_reg_mem: |
|
- | 834 | cmp al,'[' |
|
- | 835 | jne invalid_operand |
|
- | 836 | call get_address |
|
- | 837 | mov al,[operand_size] |
|
544 | jmp instruction_ready |
838 | or al,al |
- | 839 | jz avx_movs_reg_mem_ok |
|
- | 840 | cmp al,[mmx_size] |
|
- | 841 | jne invalid_operand_size |
|
- | 842 | avx_movs_reg_mem_ok: |
|
- | 843 | jmp instruction_ready |
|
545 | setup_66_0f_38: |
844 | avx_movs_mem: |
546 | mov [extended_code],38h |
845 | cmp al,'[' |
- | 846 | jne invalid_operand |
|
- | 847 | call get_address |
|
- | 848 | or [operand_flags],20h |
|
- | 849 | call take_avx512_mask |
|
- | 850 | jmp avx_movlps_mem_ |
|
- | 851 | ||
- | 852 | avx_comiss_instruction: |
|
- | 853 | or [operand_flags],2+4+10h |
|
- | 854 | mov cl,4 |
|
- | 855 | jmp avx_instruction |
|
- | 856 | avx_comisd_instruction: |
|
- | 857 | or [operand_flags],2+4+10h |
|
- | 858 | mov [opcode_prefix],66h |
|
- | 859 | or [rex_prefix],80h |
|
- | 860 | mov cl,8 |
|
- | 861 | jmp avx_instruction |
|
- | 862 | avx_movshdup_instruction: |
|
- | 863 | or [operand_flags],2 |
|
- | 864 | mov [opcode_prefix],0F3h |
|
- | 865 | xor cl,cl |
|
- | 866 | jmp avx_instruction |
|
- | 867 | avx_cvtqq2pd_instruction: |
|
- | 868 | mov [opcode_prefix],0F3h |
|
- | 869 | or [vex_required],8 |
|
- | 870 | or [operand_flags],2+4+8 |
|
- | 871 | or [rex_prefix],8 |
|
- | 872 | mov cx,0800h |
|
- | 873 | jmp avx_instruction_with_broadcast |
|
- | 874 | avx_pshuf_w_instruction: |
|
- | 875 | mov [opcode_prefix],al |
|
- | 876 | or [operand_flags],2 |
|
- | 877 | mov [immediate_size],1 |
|
- | 878 | mov al,70h |
|
- | 879 | xor cl,cl |
|
- | 880 | jmp avx_instruction |
|
- | 881 | avx_single_source_128bit_instruction_38_noevex: |
|
- | 882 | or [operand_flags],2 |
|
- | 883 | avx_128bit_instruction_38_noevex: |
|
- | 884 | mov cl,16 |
|
- | 885 | jmp avx_instruction_38_noevex |
|
- | 886 | avx_single_source_instruction_38_noevex: |
|
- | 887 | or [operand_flags],2 |
|
- | 888 | jmp avx_pi_instruction_38_noevex |
|
- | 889 | avx_pi_instruction_38_noevex: |
|
- | 890 | xor cl,cl |
|
- | 891 | avx_instruction_38_noevex: |
|
- | 892 | or [vex_required],2 |
|
- | 893 | avx_instruction_38: |
|
- | 894 | mov [opcode_prefix],66h |
|
547 | mov [supplemental_code],al |
895 | mov [supplemental_code],al |
548 | mov [base_code],0Fh |
896 | mov al,38h |
- | 897 | jmp avx_instruction |
|
- | 898 | avx_ss_instruction_3a_imm8_noevex: |
|
- | 899 | mov cl,4 |
|
- | 900 | jmp avx_instruction_3a_imm8_noevex |
|
- | 901 | avx_sd_instruction_3a_imm8_noevex: |
|
- | 902 | mov cl,8 |
|
- | 903 | jmp avx_instruction_3a_imm8_noevex |
|
- | 904 | avx_single_source_128bit_instruction_3a_imm8_noevex: |
|
- | 905 | or [operand_flags],2 |
|
- | 906 | avx_128bit_instruction_3a_imm8_noevex: |
|
- | 907 | mov cl,16 |
|
- | 908 | jmp avx_instruction_3a_imm8_noevex |
|
- | 909 | avx_triple_source_instruction_3a_noevex: |
|
- | 910 | xor cl,cl |
|
- | 911 | mov [immediate_size],-1 |
|
- | 912 | mov byte [value],0 |
|
549 | mov [opcode_prefix],66h |
913 | jmp avx_instruction_3a_noevex |
- | 914 | avx_single_source_instruction_3a_imm8_noevex: |
|
- | 915 | or [operand_flags],2 |
|
- | 916 | avx_pi_instruction_3a_imm8_noevex: |
|
- | 917 | xor cl,cl |
|
- | 918 | avx_instruction_3a_imm8_noevex: |
|
- | 919 | mov [immediate_size],1 |
|
- | 920 | avx_instruction_3a_noevex: |
|
- | 921 | or [vex_required],2 |
|
- | 922 | avx_instruction_3a: |
|
- | 923 | mov [opcode_prefix],66h |
|
550 | ret |
924 | mov [supplemental_code],al |
- | 925 | mov al,3Ah |
|
- | 926 | jmp avx_instruction |
|
- | 927 | avx_pi_instruction_3a_imm8: |
|
- | 928 | xor cl,cl |
|
551 | avx_movd_instruction: |
929 | mov [immediate_size],1 |
- | 930 | jmp avx_instruction_3a |
|
- | 931 | avx_pclmulqdq_instruction: |
|
552 | or [vex_required],1 |
932 | mov byte [value],al |
- | 933 | mov [immediate_size],-4 |
|
- | 934 | or [vex_required],2 |
|
553 | jmp movd_instruction |
935 | mov cl,16 |
- | 936 | mov al,44h |
|
- | 937 | jmp avx_instruction_3a |
|
554 | avx_movq_instruction: |
938 | |
- | 939 | avx512_single_source_pd_instruction_sae_imm8: |
|
- | 940 | or [operand_flags],2 |
|
- | 941 | avx512_pd_instruction_sae_imm8: |
|
- | 942 | or [rex_prefix],8 |
|
- | 943 | mov cx,0800h |
|
- | 944 | jmp avx512_instruction_sae_imm8 |
|
- | 945 | avx512_single_source_ps_instruction_sae_imm8: |
|
- | 946 | or [operand_flags],2 |
|
- | 947 | avx512_ps_instruction_sae_imm8: |
|
- | 948 | mov cx,0400h |
|
- | 949 | jmp avx512_instruction_sae_imm8 |
|
- | 950 | avx512_sd_instruction_sae_imm8: |
|
- | 951 | or [rex_prefix],8 |
|
- | 952 | mov cx,0008h |
|
- | 953 | jmp avx512_instruction_sae_imm8 |
|
- | 954 | avx512_ss_instruction_sae_imm8: |
|
555 | or [vex_required],1 |
955 | mov cx,0004h |
- | 956 | avx512_instruction_sae_imm8: |
|
- | 957 | or [operand_flags],4 |
|
- | 958 | avx512_instruction_imm8: |
|
- | 959 | or [vex_required],8 |
|
556 | jmp movq_instruction |
960 | mov [opcode_prefix],66h |
- | 961 | mov [immediate_size],1 |
|
- | 962 | mov [supplemental_code],al |
|
- | 963 | mov al,3Ah |
|
- | 964 | jmp avx_instruction_with_broadcast |
|
- | 965 | avx512_pd_instruction_er: |
|
- | 966 | or [operand_flags],4+8 |
|
- | 967 | jmp avx512_pd_instruction |
|
- | 968 | avx512_single_source_pd_instruction_sae: |
|
- | 969 | or [operand_flags],4 |
|
- | 970 | avx512_single_source_pd_instruction: |
|
- | 971 | or [operand_flags],2 |
|
- | 972 | avx512_pd_instruction: |
|
- | 973 | or [rex_prefix],8 |
|
- | 974 | mov cx,0800h |
|
- | 975 | jmp avx512_instruction |
|
- | 976 | avx512_ps_instruction_er: |
|
- | 977 | or [operand_flags],4+8 |
|
- | 978 | jmp avx512_ps_instruction |
|
- | 979 | avx512_single_source_ps_instruction_sae: |
|
- | 980 | or [operand_flags],4 |
|
- | 981 | avx512_single_source_ps_instruction: |
|
- | 982 | or [operand_flags],2 |
|
- | 983 | avx512_ps_instruction: |
|
- | 984 | mov cx,0400h |
|
- | 985 | jmp avx512_instruction |
|
557 | avx_movddup_instruction: |
986 | avx512_sd_instruction_er: |
- | 987 | or [operand_flags],8 |
|
- | 988 | avx512_sd_instruction_sae: |
|
- | 989 | or [operand_flags],4 |
|
- | 990 | avx512_sd_instruction: |
|
558 | or [vex_required],1 |
991 | or [rex_prefix],8 |
- | 992 | mov cx,0008h |
|
- | 993 | jmp avx512_instruction |
|
- | 994 | avx512_ss_instruction_er: |
|
- | 995 | or [operand_flags],8 |
|
- | 996 | avx512_ss_instruction_sae: |
|
- | 997 | or [operand_flags],4 |
|
- | 998 | avx512_ss_instruction: |
|
- | 999 | mov cx,0004h |
|
- | 1000 | avx512_instruction: |
|
- | 1001 | or [vex_required],8 |
|
559 | mov [opcode_prefix],0F2h |
1002 | mov [opcode_prefix],66h |
- | 1003 | mov [supplemental_code],al |
|
- | 1004 | mov al,38h |
|
- | 1005 | jmp avx_instruction_with_broadcast |
|
- | 1006 | avx512_exp2pd_instruction: |
|
- | 1007 | or [rex_prefix],8 |
|
- | 1008 | or [operand_flags],2+4 |
|
- | 1009 | mov cx,0840h |
|
- | 1010 | jmp avx512_instruction |
|
- | 1011 | avx512_exp2ps_instruction: |
|
- | 1012 | or [operand_flags],2+4 |
|
- | 1013 | mov cx,0440h |
|
- | 1014 | jmp avx512_instruction |
|
- | 1015 | ||
- | 1016 | fma_instruction_pd: |
|
- | 1017 | or [rex_prefix],8 |
|
- | 1018 | mov cx,0800h |
|
- | 1019 | jmp fma_instruction |
|
- | 1020 | fma_instruction_ps: |
|
- | 1021 | mov cx,0400h |
|
- | 1022 | jmp fma_instruction |
|
- | 1023 | fma_instruction_sd: |
|
- | 1024 | or [rex_prefix],8 |
|
- | 1025 | mov cx,0008h |
|
- | 1026 | jmp fma_instruction |
|
- | 1027 | fma_instruction_ss: |
|
- | 1028 | mov cx,0004h |
|
- | 1029 | fma_instruction: |
|
- | 1030 | or [operand_flags],4+8 |
|
- | 1031 | mov [opcode_prefix],66h |
|
- | 1032 | mov [supplemental_code],al |
|
- | 1033 | mov al,38h |
|
- | 1034 | jmp avx_instruction_with_broadcast |
|
- | 1035 | ||
- | 1036 | fma4_instruction_p: |
|
- | 1037 | xor cl,cl |
|
- | 1038 | jmp fma4_instruction |
|
- | 1039 | fma4_instruction_sd: |
|
- | 1040 | mov cl,8 |
|
- | 1041 | jmp fma4_instruction |
|
- | 1042 | fma4_instruction_ss: |
|
- | 1043 | mov cl,4 |
|
- | 1044 | fma4_instruction: |
|
- | 1045 | mov [immediate_size],-2 |
|
- | 1046 | mov byte [value],0 |
|
- | 1047 | jmp avx_instruction_3a_noevex |
|
- | 1048 | ||
- | 1049 | avx_cmp_pd_instruction: |
|
- | 1050 | mov [opcode_prefix],66h |
|
- | 1051 | or [rex_prefix],80h |
|
- | 1052 | mov cx,0800h |
|
- | 1053 | jmp avx_cmp_instruction |
|
- | 1054 | avx_cmp_ps_instruction: |
|
- | 1055 | mov cx,0400h |
|
- | 1056 | jmp avx_cmp_instruction |
|
- | 1057 | avx_cmp_sd_instruction: |
|
- | 1058 | mov [opcode_prefix],0F2h |
|
560 | mov [base_code],0Fh |
1059 | or [rex_prefix],80h |
- | 1060 | mov cx,0008h |
|
- | 1061 | jmp avx_cmp_instruction |
|
- | 1062 | avx_cmp_ss_instruction: |
|
- | 1063 | mov [opcode_prefix],0F3h |
|
- | 1064 | mov cx,0004h |
|
- | 1065 | avx_cmp_instruction: |
|
- | 1066 | mov byte [value],al |
|
- | 1067 | mov [immediate_size],-4 |
|
- | 1068 | or [operand_flags],4+20h |
|
- | 1069 | mov al,0C2h |
|
- | 1070 | jmp avx_cmp_common |
|
- | 1071 | avx_cmpeqq_instruction: |
|
- | 1072 | or [rex_prefix],80h |
|
- | 1073 | mov ch,8 |
|
- | 1074 | mov [supplemental_code],al |
|
- | 1075 | mov al,38h |
|
- | 1076 | jmp avx_cmp_pi_instruction |
|
- | 1077 | avx_cmpeqd_instruction: |
|
- | 1078 | mov ch,4 |
|
- | 1079 | jmp avx_cmp_pi_instruction |
|
- | 1080 | avx_cmpeqb_instruction: |
|
- | 1081 | xor ch,ch |
|
- | 1082 | jmp avx_cmp_pi_instruction |
|
- | 1083 | avx512_cmp_uq_instruction: |
|
- | 1084 | or [rex_prefix],8 |
|
- | 1085 | mov ch,8 |
|
- | 1086 | mov ah,1Eh |
|
- | 1087 | jmp avx_cmp_pi_instruction_evex |
|
- | 1088 | avx512_cmp_ud_instruction: |
|
- | 1089 | mov ch,4 |
|
- | 1090 | mov ah,1Eh |
|
- | 1091 | jmp avx_cmp_pi_instruction_evex |
|
- | 1092 | avx512_cmp_q_instruction: |
|
- | 1093 | or [rex_prefix],8 |
|
- | 1094 | mov ch,8 |
|
- | 1095 | mov ah,1Fh |
|
- | 1096 | jmp avx_cmp_pi_instruction_evex |
|
- | 1097 | avx512_cmp_d_instruction: |
|
- | 1098 | mov ch,4 |
|
- | 1099 | mov ah,1Fh |
|
- | 1100 | jmp avx_cmp_pi_instruction_evex |
|
- | 1101 | avx512_cmp_uw_instruction: |
|
- | 1102 | or [rex_prefix],8 |
|
- | 1103 | avx512_cmp_ub_instruction: |
|
- | 1104 | xor ch,ch |
|
- | 1105 | mov ah,3Eh |
|
- | 1106 | jmp avx_cmp_pi_instruction_evex |
|
- | 1107 | avx512_cmp_w_instruction: |
|
- | 1108 | or [rex_prefix],8 |
|
- | 1109 | avx512_cmp_b_instruction: |
|
- | 1110 | xor ch,ch |
|
- | 1111 | mov ah,3Fh |
|
- | 1112 | avx_cmp_pi_instruction_evex: |
|
- | 1113 | mov byte [value],al |
|
- | 1114 | mov [immediate_size],-4 |
|
- | 1115 | mov [supplemental_code],ah |
|
- | 1116 | mov al,3Ah |
|
- | 1117 | or [vex_required],8 |
|
- | 1118 | avx_cmp_pi_instruction: |
|
- | 1119 | xor cl,cl |
|
- | 1120 | or [operand_flags],20h |
|
- | 1121 | mov [opcode_prefix],66h |
|
- | 1122 | avx_cmp_common: |
|
- | 1123 | mov [mmx_size],cl |
|
- | 1124 | mov [broadcast_size],ch |
|
561 | mov [extended_code],al |
1125 | mov [extended_code],al |
562 | lods byte [esi] |
1126 | mov [base_code],0Fh |
- | 1127 | lods byte [esi] |
|
563 | call get_size_operator |
1128 | call get_size_operator |
564 | cmp al,10h |
1129 | cmp al,14h |
- | 1130 | je avx_maskreg |
|
- | 1131 | cmp al,10h |
|
565 | jne invalid_operand |
1132 | jne invalid_operand |
566 | lods byte [esi] |
1133 | or [vex_required],2 |
- | 1134 | jmp avx_reg |
|
- | 1135 | avx_maskreg: |
|
- | 1136 | cmp [operand_size],0 |
|
- | 1137 | jne invalid_operand_size |
|
- | 1138 | or [vex_required],8 |
|
- | 1139 | lods byte [esi] |
|
567 | call convert_avx_register |
1140 | call convert_mask_register |
568 | mov [postbyte_register],al |
1141 | mov [postbyte_register],al |
569 | mov [mmx_size],0 |
1142 | call take_avx512_mask |
- | 1143 | jmp avx_vex_reg |
|
- | 1144 | avx512_fpclasspd_instruction: |
|
- | 1145 | or [rex_prefix],8 |
|
- | 1146 | mov cx,0800h |
|
- | 1147 | jmp avx_fpclass_instruction |
|
- | 1148 | avx512_fpclassps_instruction: |
|
- | 1149 | mov cx,0400h |
|
- | 1150 | jmp avx_fpclass_instruction |
|
- | 1151 | avx512_fpclasssd_instruction: |
|
- | 1152 | or [rex_prefix],8 |
|
- | 1153 | mov cx,0008h |
|
- | 1154 | jmp avx_fpclass_instruction |
|
- | 1155 | avx512_fpclassss_instruction: |
|
- | 1156 | mov cx,0004h |
|
- | 1157 | avx_fpclass_instruction: |
|
- | 1158 | mov [broadcast_size],ch |
|
- | 1159 | mov [mmx_size],cl |
|
570 | cmp ah,32 |
1160 | or [operand_flags],2 |
- | 1161 | call setup_66_0f_3a |
|
- | 1162 | mov [immediate_size],1 |
|
- | 1163 | lods byte [esi] |
|
- | 1164 | cmp al,14h |
|
571 | je avx_regs_size_ok |
1165 | je avx_maskreg |
572 | mov [mmx_size],8 |
1166 | jmp invalid_operand |
- | 1167 | avx512_ptestnmd_instruction: |
|
- | 1168 | mov ch,4 |
|
- | 1169 | jmp avx512_ptestnm_instruction |
|
- | 1170 | avx512_ptestnmq_instruction: |
|
- | 1171 | or [rex_prefix],8 |
|
- | 1172 | mov ch,8 |
|
- | 1173 | jmp avx512_ptestnm_instruction |
|
- | 1174 | avx512_ptestnmw_instruction: |
|
- | 1175 | or [rex_prefix],8 |
|
- | 1176 | avx512_ptestnmb_instruction: |
|
- | 1177 | xor ch,ch |
|
- | 1178 | avx512_ptestnm_instruction: |
|
- | 1179 | mov ah,0F3h |
|
- | 1180 | jmp avx512_ptest_instruction |
|
- | 1181 | avx512_ptestmd_instruction: |
|
- | 1182 | mov ch,4 |
|
- | 1183 | jmp avx512_ptestm_instruction |
|
- | 1184 | avx512_ptestmq_instruction: |
|
- | 1185 | or [rex_prefix],8 |
|
- | 1186 | mov ch,8 |
|
- | 1187 | jmp avx512_ptestm_instruction |
|
- | 1188 | avx512_ptestmw_instruction: |
|
- | 1189 | or [rex_prefix],8 |
|
- | 1190 | avx512_ptestmb_instruction: |
|
- | 1191 | xor ch,ch |
|
- | 1192 | avx512_ptestm_instruction: |
|
- | 1193 | mov ah,66h |
|
- | 1194 | avx512_ptest_instruction: |
|
- | 1195 | xor cl,cl |
|
- | 1196 | mov [opcode_prefix],ah |
|
- | 1197 | mov [supplemental_code],al |
|
- | 1198 | mov al,38h |
|
- | 1199 | or [vex_required],8 |
|
573 | jmp avx_regs_size_ok |
1200 | jmp avx_cmp_common |
574 | avx_movmskpd_instruction: |
1201 | |
- | 1202 | mask_shift_instruction_q: |
|
- | 1203 | or [rex_prefix],8 |
|
- | 1204 | mask_shift_instruction_d: |
|
575 | mov [opcode_prefix],66h |
1205 | or [operand_flags],2 |
- | 1206 | or [immediate_size],1 |
|
- | 1207 | mov [opcode_prefix],66h |
|
576 | avx_movmskps_instruction: |
1208 | mov [supplemental_code],al |
- | 1209 | mov al,3Ah |
|
- | 1210 | jmp mask_instruction |
|
577 | mov [base_code],0Fh |
1211 | mask_instruction_single_source_b: |
- | 1212 | mov [opcode_prefix],66h |
|
- | 1213 | jmp mask_instruction_single_source_w |
|
- | 1214 | mask_instruction_single_source_d: |
|
- | 1215 | mov [opcode_prefix],66h |
|
- | 1216 | mask_instruction_single_source_q: |
|
- | 1217 | or [rex_prefix],8 |
|
- | 1218 | mask_instruction_single_source_w: |
|
- | 1219 | or [operand_flags],2 |
|
- | 1220 | jmp mask_instruction |
|
- | 1221 | mask_instruction_b: |
|
- | 1222 | mov [opcode_prefix],66h |
|
- | 1223 | jmp mask_instruction_w |
|
- | 1224 | mask_instruction_d: |
|
- | 1225 | mov [opcode_prefix],66h |
|
578 | mov [extended_code],50h |
1226 | mask_instruction_q: |
- | 1227 | or [rex_prefix],8 |
|
- | 1228 | mask_instruction_w: |
|
- | 1229 | mov [operand_size],32 |
|
579 | or [vex_required],1 |
1230 | mask_instruction: |
- | 1231 | or [vex_required],1 |
|
580 | lods byte [esi] |
1232 | mov [base_code],0Fh |
581 | call get_size_operator |
- | |
582 | cmp al,10h |
1233 | mov [extended_code],al |
583 | jne invalid_operand |
- | |
584 | lods byte [esi] |
1234 | call take_mask_register |
585 | call convert_register |
- | |
586 | mov [postbyte_register],al |
1235 | mov [postbyte_register],al |
587 | cmp ah,4 |
1236 | test [operand_flags],2 |
588 | je avx_movmskps_reg_ok |
1237 | jnz mask_instruction_nds_ok |
589 | cmp ah,8 |
1238 | lods byte [esi] |
590 | jne invalid_operand_size |
- | |
591 | cmp [code_type],64 |
1239 | cmp al,',' |
592 | jne invalid_operand |
1240 | jne invalid_operand |
593 | avx_movmskps_reg_ok: |
1241 | call take_mask_register |
594 | mov [operand_size],0 |
1242 | mov [vex_register],al |
595 | lods byte [esi] |
1243 | mask_instruction_nds_ok: |
- | 1244 | lods byte [esi] |
|
596 | cmp al,',' |
1245 | cmp al,',' |
597 | jne invalid_operand |
1246 | jne invalid_operand |
598 | call take_avx_register |
1247 | call take_mask_register |
599 | mov bl,al |
1248 | mov bl,al |
600 | jmp nomem_instruction_ready |
1249 | cmp [immediate_size],0 |
- | 1250 | jne mmx_nomem_imm8 |
|
- | 1251 | jmp nomem_instruction_ready |
|
601 | avx_movsd_instruction: |
1252 | take_mask_register: |
602 | mov [opcode_prefix],0F2h |
1253 | lods byte [esi] |
603 | mov [mmx_size],8 |
1254 | cmp al,14h |
604 | jmp avx_movs_instruction |
1255 | jne invalid_operand |
605 | avx_movss_instruction: |
1256 | lods byte [esi] |
606 | mov [opcode_prefix],0F3h |
1257 | convert_mask_register: |
607 | mov [mmx_size],4 |
1258 | mov ah,al |
608 | avx_movs_instruction: |
1259 | shr ah,4 |
- | 1260 | cmp ah,5 |
|
- | 1261 | jne invalid_operand |
|
- | 1262 | and al,1111b |
|
- | 1263 | ret |
|
- | 1264 | kmov_instruction: |
|
609 | or [vex_required],1 |
1265 | mov [mmx_size],al |
- | 1266 | or [vex_required],1 |
|
610 | mov [base_code],0Fh |
1267 | mov [base_code],0Fh |
611 | mov [extended_code],10h |
1268 | mov [extended_code],90h |
612 | lods byte [esi] |
1269 | lods byte [esi] |
613 | call get_size_operator |
1270 | cmp al,14h |
- | 1271 | je kmov_maskreg |
|
614 | cmp al,10h |
1272 | cmp al,10h |
615 | jne avx_movlps_mem |
1273 | je kmov_reg |
616 | lods byte [esi] |
1274 | call get_size_operator |
- | 1275 | inc [extended_code] |
|
- | 1276 | cmp al,'[' |
|
- | 1277 | jne invalid_argument |
|
- | 1278 | call get_address |
|
- | 1279 | lods byte [esi] |
|
617 | call convert_xmm_register |
1280 | cmp al,',' |
- | 1281 | jne invalid_operand |
|
- | 1282 | call take_mask_register |
|
- | 1283 | mov [postbyte_register],al |
|
- | 1284 | kmov_with_mem: |
|
- | 1285 | mov ah,[mmx_size] |
|
- | 1286 | mov al,[operand_size] |
|
- | 1287 | or al,al |
|
- | 1288 | jz kmov_mem_size_ok |
|
- | 1289 | cmp al,ah |
|
- | 1290 | jne invalid_operand_size |
|
- | 1291 | kmov_mem_size_ok: |
|
- | 1292 | call setup_kmov_prefix |
|
- | 1293 | jmp instruction_ready |
|
- | 1294 | setup_kmov_prefix: |
|
- | 1295 | cmp ah,4 |
|
- | 1296 | jb kmov_w_ok |
|
- | 1297 | or [rex_prefix],8 |
|
- | 1298 | kmov_w_ok: |
|
- | 1299 | test ah,1 or 4 |
|
- | 1300 | jz kmov_prefix_ok |
|
- | 1301 | mov [opcode_prefix],66h |
|
- | 1302 | kmov_prefix_ok: |
|
- | 1303 | ret |
|
- | 1304 | kmov_maskreg: |
|
- | 1305 | lods byte [esi] |
|
- | 1306 | call convert_mask_register |
|
618 | mov [postbyte_register],al |
1307 | mov [postbyte_register],al |
619 | xor cl,cl |
1308 | lods byte [esi] |
620 | xchg cl,[operand_size] |
- | |
621 | lods byte [esi] |
- | |
622 | cmp al,',' |
1309 | cmp al,',' |
623 | jne invalid_operand |
1310 | jne invalid_operand |
624 | lods byte [esi] |
1311 | lods byte [esi] |
625 | call get_size_operator |
1312 | cmp al,14h |
- | 1313 | je kmov_maskreg_maskreg |
|
626 | cmp al,10h |
1314 | cmp al,10h |
627 | jne avx_movs_reg_mem |
1315 | je kmov_maskreg_reg |
628 | mov [operand_size],cl |
1316 | call get_size_operator |
- | 1317 | cmp al,'[' |
|
- | 1318 | jne invalid_argument |
|
629 | lods byte [esi] |
1319 | call get_address |
- | 1320 | jmp kmov_with_mem |
|
- | 1321 | kmov_maskreg_maskreg: |
|
- | 1322 | lods byte [esi] |
|
630 | call convert_avx_register |
1323 | call convert_mask_register |
631 | mov [vex_register],al |
1324 | mov bl,al |
- | 1325 | mov ah,[mmx_size] |
|
- | 1326 | call setup_kmov_prefix |
|
- | 1327 | jmp nomem_instruction_ready |
|
- | 1328 | kmov_maskreg_reg: |
|
- | 1329 | add [extended_code],2 |
|
- | 1330 | lods byte [esi] |
|
- | 1331 | call convert_register |
|
- | 1332 | kmov_with_reg: |
|
- | 1333 | mov bl,al |
|
- | 1334 | mov al,[mmx_size] |
|
- | 1335 | mov ah,4 |
|
- | 1336 | cmp al,ah |
|
- | 1337 | jbe kmov_reg_size_check |
|
- | 1338 | mov ah,al |
|
- | 1339 | kmov_reg_size_check: |
|
- | 1340 | cmp ah,[operand_size] |
|
- | 1341 | jne invalid_operand_size |
|
- | 1342 | cmp al,8 |
|
- | 1343 | je kmov_f2_w1 |
|
- | 1344 | cmp al,2 |
|
- | 1345 | ja kmov_f2 |
|
- | 1346 | je nomem_instruction_ready |
|
- | 1347 | mov [opcode_prefix],66h |
|
- | 1348 | jmp nomem_instruction_ready |
|
- | 1349 | kmov_f2_w1: |
|
- | 1350 | or [rex_prefix],8 |
|
- | 1351 | kmov_f2: |
|
- | 1352 | mov [opcode_prefix],0F2h |
|
- | 1353 | jmp nomem_instruction_ready |
|
- | 1354 | kmov_reg: |
|
- | 1355 | add [extended_code],3 |
|
- | 1356 | lods byte [esi] |
|
- | 1357 | call convert_register |
|
- | 1358 | mov [postbyte_register],al |
|
632 | lods byte [esi] |
1359 | lods byte [esi] |
633 | cmp al,',' |
1360 | cmp al,',' |
634 | jne invalid_operand |
1361 | jne invalid_operand |
635 | call take_avx_register |
1362 | call take_mask_register |
- | 1363 | jmp kmov_with_reg |
|
- | 1364 | avx512_pmov_m2_instruction_w1: |
|
- | 1365 | or [rex_prefix],8 |
|
- | 1366 | avx512_pmov_m2_instruction: |
|
- | 1367 | or [vex_required],8 |
|
- | 1368 | call setup_f3_0f_38 |
|
- | 1369 | call take_avx_register |
|
636 | mov bl,al |
1370 | mov [postbyte_register],al |
- | 1371 | lods byte [esi] |
|
- | 1372 | cmp al,',' |
|
- | 1373 | jne invalid_operand |
|
- | 1374 | call take_mask_register |
|
- | 1375 | mov bl,al |
|
637 | cmp bl,8 |
1376 | jmp nomem_instruction_ready |
638 | jb nomem_instruction_ready |
- | |
639 | inc [extended_code] |
- | |
640 | xchg bl,[postbyte_register] |
- | |
641 | jmp nomem_instruction_ready |
- | |
642 | avx_movs_reg_mem: |
1377 | avx512_pmov_2m_instruction_w1: |
- | 1378 | or [rex_prefix],8 |
|
- | 1379 | avx512_pmov_2m_instruction: |
|
- | 1380 | or [vex_required],8 |
|
- | 1381 | call setup_f3_0f_38 |
|
- | 1382 | call take_mask_register |
|
643 | cmp al,'[' |
1383 | mov [postbyte_register],al |
- | 1384 | lods byte [esi] |
|
- | 1385 | cmp al,',' |
|
644 | jne invalid_operand |
1386 | jne invalid_operand |
645 | call get_address |
1387 | call take_avx_register |
646 | mov al,[operand_size] |
1388 | mov bl,al |
647 | or al,al |
- | |
648 | jz avx_movs_reg_mem_ok |
1389 | jmp nomem_instruction_ready |
649 | cmp al,[mmx_size] |
1390 | setup_f3_0f_38: |
650 | jne invalid_operand_size |
1391 | mov [extended_code],38h |
651 | avx_movs_reg_mem_ok: |
1392 | mov [supplemental_code],al |
652 | jmp instruction_ready |
1393 | mov [base_code],0Fh |
653 | 1394 | mov [opcode_prefix],0F3h |
|
654 | avx_cvtdq2pd_instruction: |
- | |
655 | mov [opcode_prefix],0F3h |
- | |
656 | avx_cvtps2pd_instruction: |
1395 | ret |
- | 1396 | ||
- | 1397 | vzeroall_instruction: |
|
- | 1398 | mov [operand_size],32 |
|
- | 1399 | vzeroupper_instruction: |
|
657 | mov [base_code],0Fh |
1400 | mov [base_code],0Fh |
658 | mov [extended_code],al |
1401 | mov [extended_code],al |
659 | or [vex_required],1 |
1402 | and [displacement_compression],0 |
- | 1403 | call store_vex_instruction_code |
|
- | 1404 | jmp instruction_assembled |
|
- | 1405 | vldmxcsr_instruction: |
|
- | 1406 | or [vex_required],2 |
|
- | 1407 | jmp fxsave_instruction |
|
- | 1408 | ||
- | 1409 | avx_perm2f128_instruction: |
|
- | 1410 | or [vex_required],2 |
|
- | 1411 | xor ch,ch |
|
- | 1412 | avx_instruction_imm8_without_128bit: |
|
- | 1413 | mov [immediate_size],1 |
|
- | 1414 | mov ah,3Ah |
|
- | 1415 | jmp avx_instruction_without_128bit |
|
- | 1416 | avx512_shuf_q_instruction: |
|
- | 1417 | or [rex_prefix],8 |
|
- | 1418 | or [vex_required],8 |
|
- | 1419 | mov ch,8 |
|
- | 1420 | jmp avx_instruction_imm8_without_128bit |
|
- | 1421 | avx512_shuf_d_instruction: |
|
- | 1422 | or [vex_required],8 |
|
- | 1423 | mov ch,4 |
|
- | 1424 | jmp avx_instruction_imm8_without_128bit |
|
- | 1425 | avx_permd_instruction: |
|
- | 1426 | mov ah,38h |
|
- | 1427 | mov ch,4 |
|
- | 1428 | avx_instruction_without_128bit: |
|
- | 1429 | xor cl,cl |
|
- | 1430 | call setup_avx_66_supplemental |
|
- | 1431 | call take_avx_register |
|
- | 1432 | cmp ah,32 |
|
- | 1433 | jb invalid_operand_size |
|
- | 1434 | mov [postbyte_register],al |
|
- | 1435 | call take_avx512_mask |
|
- | 1436 | jmp avx_vex_reg |
|
- | 1437 | setup_avx_66_supplemental: |
|
- | 1438 | mov [opcode_prefix],66h |
|
- | 1439 | mov [broadcast_size],ch |
|
- | 1440 | mov [mmx_size],cl |
|
- | 1441 | mov [base_code],0Fh |
|
- | 1442 | mov [extended_code],ah |
|
- | 1443 | mov [supplemental_code],al |
|
- | 1444 | or [vex_required],1 |
|
660 | call take_avx_register |
1445 | ret |
- | 1446 | avx_permq_instruction: |
|
- | 1447 | or [rex_prefix],8 |
|
- | 1448 | mov ch,8 |
|
- | 1449 | jmp avx_permil_instruction |
|
- | 1450 | avx_permilpd_instruction: |
|
- | 1451 | or [rex_prefix],80h |
|
- | 1452 | mov ch,8 |
|
- | 1453 | jmp avx_permil_instruction |
|
- | 1454 | avx_permilps_instruction: |
|
- | 1455 | mov ch,4 |
|
- | 1456 | avx_permil_instruction: |
|
- | 1457 | or [operand_flags],2 |
|
- | 1458 | xor cl,cl |
|
- | 1459 | mov ah,3Ah |
|
- | 1460 | call setup_avx_66_supplemental |
|
- | 1461 | call take_avx_register |
|
661 | mov [postbyte_register],al |
1462 | cmp [supplemental_code],4 |
- | 1463 | jae avx_permil_size_ok |
|
- | 1464 | cmp ah,32 |
|
- | 1465 | jb invalid_operand_size |
|
- | 1466 | avx_permil_size_ok: |
|
- | 1467 | mov [postbyte_register],al |
|
662 | lods byte [esi] |
1468 | call take_avx512_mask |
- | 1469 | lods byte [esi] |
|
- | 1470 | cmp al,',' |
|
- | 1471 | jne invalid_operand |
|
- | 1472 | call take_avx_rm |
|
- | 1473 | jnc mmx_imm8 |
|
- | 1474 | mov bl,al |
|
- | 1475 | cmp byte [esi],',' |
|
- | 1476 | jne invalid_operand |
|
- | 1477 | mov al,[esi+1] |
|
- | 1478 | cmp al,11h |
|
- | 1479 | jne avx_permil_rm_or_imm8 |
|
- | 1480 | mov al,[esi+3] |
|
- | 1481 | avx_permil_rm_or_imm8: |
|
- | 1482 | cmp al,'(' |
|
- | 1483 | je mmx_nomem_imm8 |
|
- | 1484 | mov [vex_register],bl |
|
- | 1485 | inc esi |
|
- | 1486 | mov [extended_code],38h |
|
- | 1487 | mov al,[supplemental_code] |
|
- | 1488 | cmp al,4 |
|
- | 1489 | jb avx_permq_rm |
|
- | 1490 | add [supplemental_code],8 |
|
- | 1491 | jmp avx_regs_rm |
|
- | 1492 | avx_permq_rm: |
|
- | 1493 | or [vex_required],8 |
|
- | 1494 | shl al,5 |
|
- | 1495 | neg al |
|
- | 1496 | add al,36h |
|
- | 1497 | mov [supplemental_code],al |
|
- | 1498 | jmp avx_regs_rm |
|
- | 1499 | vpermil_2pd_instruction: |
|
- | 1500 | mov [immediate_size],-2 |
|
- | 1501 | mov byte [value],al |
|
- | 1502 | mov al,49h |
|
- | 1503 | jmp vpermil2_instruction_setup |
|
- | 1504 | vpermil_2ps_instruction: |
|
- | 1505 | mov [immediate_size],-2 |
|
- | 1506 | mov byte [value],al |
|
- | 1507 | mov al,48h |
|
- | 1508 | jmp vpermil2_instruction_setup |
|
- | 1509 | vpermil2_instruction: |
|
- | 1510 | mov [immediate_size],-3 |
|
- | 1511 | mov byte [value],0 |
|
- | 1512 | vpermil2_instruction_setup: |
|
- | 1513 | or [vex_required],2 |
|
- | 1514 | mov [base_code],0Fh |
|
- | 1515 | mov [supplemental_code],al |
|
- | 1516 | mov al,3Ah |
|
- | 1517 | xor cl,cl |
|
- | 1518 | jmp avx_instruction |
|
- | 1519 | ||
- | 1520 | avx_shift_q_instruction_evex: |
|
- | 1521 | or [vex_required],8 |
|
- | 1522 | avx_shift_q_instruction: |
|
- | 1523 | or [rex_prefix],80h |
|
- | 1524 | mov cl,8 |
|
- | 1525 | jmp avx_shift_instruction |
|
- | 1526 | avx_shift_d_instruction: |
|
- | 1527 | mov cl,4 |
|
- | 1528 | jmp avx_shift_instruction |
|
- | 1529 | avx_shift_bw_instruction: |
|
- | 1530 | xor cl,cl |
|
- | 1531 | avx_shift_instruction: |
|
- | 1532 | mov [broadcast_size],cl |
|
- | 1533 | mov [mmx_size],0 |
|
- | 1534 | mov [opcode_prefix],66h |
|
- | 1535 | mov [base_code],0Fh |
|
- | 1536 | mov [extended_code],al |
|
- | 1537 | or [vex_required],1 |
|
- | 1538 | call take_avx_register |
|
- | 1539 | mov [postbyte_register],al |
|
- | 1540 | call take_avx512_mask |
|
- | 1541 | lods byte [esi] |
|
663 | cmp al,',' |
1542 | cmp al,',' |
664 | jne invalid_operand |
1543 | jne invalid_operand |
665 | xor cl,cl |
1544 | xor cl,cl |
666 | xchg cl,[operand_size] |
1545 | xchg cl,[operand_size] |
667 | lods byte [esi] |
1546 | lods byte [esi] |
668 | call get_size_operator |
1547 | call get_size_operator |
669 | cmp al,10h |
1548 | cmp al,'[' |
- | 1549 | je avx_shift_reg_mem |
|
- | 1550 | mov [operand_size],cl |
|
- | 1551 | cmp al,10h |
|
670 | jne avx_cvtdq2pd_reg_mem |
1552 | jne invalid_operand |
- | 1553 | lods byte [esi] |
|
- | 1554 | call convert_avx_register |
|
- | 1555 | mov [vex_register],al |
|
- | 1556 | lods byte [esi] |
|
- | 1557 | cmp al,',' |
|
- | 1558 | jne invalid_operand |
|
- | 1559 | push esi |
|
- | 1560 | xor cl,cl |
|
- | 1561 | xchg cl,[operand_size] |
|
- | 1562 | lods byte [esi] |
|
- | 1563 | call get_size_operator |
|
- | 1564 | cmp al,10h |
|
- | 1565 | je avx_shift_reg_reg_reg |
|
- | 1566 | pop esi |
|
- | 1567 | cmp al,'[' |
|
- | 1568 | je avx_shift_reg_reg_mem |
|
671 | lods byte [esi] |
1569 | xchg cl,[operand_size] |
- | 1570 | test cl,not 1 |
|
- | 1571 | jnz invalid_operand_size |
|
- | 1572 | dec esi |
|
- | 1573 | call convert_avx_shift_opcode |
|
- | 1574 | mov bl,al |
|
- | 1575 | jmp mmx_nomem_imm8 |
|
- | 1576 | convert_avx_shift_opcode: |
|
- | 1577 | mov al,[extended_code] |
|
- | 1578 | mov ah,al |
|
- | 1579 | and ah,1111b |
|
- | 1580 | add ah,70h |
|
- | 1581 | mov [extended_code],ah |
|
- | 1582 | shr al,4 |
|
- | 1583 | sub al,0Ch |
|
- | 1584 | shl al,1 |
|
- | 1585 | xchg al,[postbyte_register] |
|
- | 1586 | xchg al,[vex_register] |
|
- | 1587 | ret |
|
- | 1588 | avx_shift_reg_reg_reg: |
|
- | 1589 | pop eax |
|
- | 1590 | lods byte [esi] |
|
672 | call convert_xmm_register |
1591 | call convert_xmm_register |
673 | mov bl,al |
1592 | xchg cl,[operand_size] |
- | 1593 | mov bl,al |
|
674 | mov [operand_size],cl |
1594 | jmp nomem_instruction_ready |
675 | jmp nomem_instruction_ready |
- | |
676 | avx_cvtdq2pd_reg_mem: |
1595 | avx_shift_reg_reg_mem: |
677 | cmp al,'[' |
1596 | mov [mmx_size],16 |
- | 1597 | push ecx |
|
678 | jne invalid_operand |
1598 | lods byte [esi] |
679 | mov [mmx_size],cl |
1599 | call get_size_operator |
680 | call get_address |
1600 | call get_address |
681 | mov al,[mmx_size] |
1601 | pop eax |
682 | mov ah,al |
- | |
683 | xchg al,[operand_size] |
1602 | xchg al,[operand_size] |
684 | or al,al |
1603 | test al,al |
685 | jz instruction_ready |
1604 | jz instruction_ready |
686 | shl al,1 |
1605 | cmp al,16 |
687 | cmp al,ah |
- | |
688 | jne invalid_operand_size |
1606 | jne invalid_operand_size |
689 | jmp instruction_ready |
1607 | jmp instruction_ready |
690 | avx_cvtpd2dq_instruction: |
1608 | avx_shift_reg_mem: |
691 | mov [opcode_prefix],0F2h |
1609 | or [vex_required],8 |
692 | jmp avx_cvtpd_instruction |
1610 | call take_avx_mem |
- | 1611 | call convert_avx_shift_opcode |
|
693 | avx_cvtpd2ps_instruction: |
1612 | jmp mmx_imm8 |
- | 1613 | avx_shift_dq_instruction: |
|
694 | mov [opcode_prefix],66h |
1614 | mov [postbyte_register],al |
- | 1615 | mov [opcode_prefix],66h |
|
695 | avx_cvtpd_instruction: |
1616 | mov [base_code],0Fh |
696 | mov [base_code],0Fh |
- | |
697 | mov [extended_code],al |
1617 | mov [extended_code],73h |
698 | or [vex_required],1 |
1618 | or [vex_required],1 |
699 | call take_avx_register |
1619 | mov [mmx_size],0 |
- | 1620 | call take_avx_register |
|
700 | mov [postbyte_register],al |
1621 | mov [vex_register],al |
701 | cmp ah,16 |
1622 | lods byte [esi] |
- | 1623 | cmp al,',' |
|
- | 1624 | jne invalid_operand |
|
- | 1625 | lods byte [esi] |
|
- | 1626 | call get_size_operator |
|
- | 1627 | cmp al,'[' |
|
- | 1628 | je avx_shift_dq_reg_mem |
|
- | 1629 | cmp al,10h |
|
702 | jne invalid_operand |
1630 | jne invalid_operand |
703 | lods byte [esi] |
1631 | lods byte [esi] |
704 | cmp al,',' |
1632 | call convert_avx_register |
- | 1633 | mov bl,al |
|
- | 1634 | jmp mmx_nomem_imm8 |
|
- | 1635 | avx_shift_dq_reg_mem: |
|
- | 1636 | or [vex_required],8 |
|
- | 1637 | call get_address |
|
- | 1638 | jmp mmx_imm8 |
|
- | 1639 | avx512_rotate_q_instruction: |
|
- | 1640 | mov cl,8 |
|
- | 1641 | or [rex_prefix],cl |
|
- | 1642 | jmp avx512_rotate_instruction |
|
- | 1643 | avx512_rotate_d_instruction: |
|
- | 1644 | mov cl,4 |
|
- | 1645 | avx512_rotate_instruction: |
|
- | 1646 | mov [broadcast_size],cl |
|
- | 1647 | mov [postbyte_register],al |
|
- | 1648 | mov [opcode_prefix],66h |
|
- | 1649 | mov [base_code],0Fh |
|
- | 1650 | mov [extended_code],72h |
|
- | 1651 | or [vex_required],8 |
|
- | 1652 | mov [mmx_size],0 |
|
- | 1653 | mov [immediate_size],1 |
|
- | 1654 | call take_avx_register |
|
- | 1655 | mov [vex_register],al |
|
- | 1656 | call take_avx512_mask |
|
- | 1657 | jmp avx_vex_reg_ok |
|
- | 1658 | ||
- | 1659 | avx_pmovsxbq_instruction: |
|
- | 1660 | mov cl,2 |
|
- | 1661 | jmp avx_pmovsx_instruction |
|
- | 1662 | avx_pmovsxbd_instruction: |
|
- | 1663 | mov cl,4 |
|
- | 1664 | jmp avx_pmovsx_instruction |
|
- | 1665 | avx_pmovsxbw_instruction: |
|
- | 1666 | mov cl,8 |
|
- | 1667 | avx_pmovsx_instruction: |
|
- | 1668 | mov [mmx_size],cl |
|
- | 1669 | or [vex_required],1 |
|
- | 1670 | call setup_66_0f_38 |
|
- | 1671 | call take_avx_register |
|
- | 1672 | mov [postbyte_register],al |
|
- | 1673 | call take_avx512_mask |
|
- | 1674 | lods byte [esi] |
|
- | 1675 | cmp al,',' |
|
705 | jne invalid_operand |
1676 | jne invalid_operand |
706 | mov [operand_size],0 |
1677 | xor al,al |
- | 1678 | xchg al,[operand_size] |
|
707 | lods byte [esi] |
1679 | bsf ecx,eax |
- | 1680 | sub cl,4 |
|
- | 1681 | shl [mmx_size],cl |
|
- | 1682 | push eax |
|
- | 1683 | lods byte [esi] |
|
708 | call get_size_operator |
1684 | call get_size_operator |
709 | cmp al,10h |
1685 | cmp al,10h |
710 | jne avx_cvtpd2dq_reg_mem |
1686 | je avx_pmovsx_reg_reg |
711 | lods byte [esi] |
1687 | cmp al,'[' |
- | 1688 | jne invalid_operand |
|
- | 1689 | call get_address |
|
- | 1690 | pop eax |
|
- | 1691 | xchg al,[operand_size] |
|
- | 1692 | or al,al |
|
- | 1693 | jz instruction_ready |
|
- | 1694 | cmp al,[mmx_size] |
|
- | 1695 | jne invalid_operand_size |
|
- | 1696 | jmp instruction_ready |
|
- | 1697 | avx_pmovsx_reg_reg: |
|
- | 1698 | lods byte [esi] |
|
712 | call convert_avx_register |
1699 | call convert_avx_register |
713 | mov bl,al |
1700 | mov bl,al |
714 | jmp nomem_instruction_ready |
1701 | cmp ah,[mmx_size] |
- | 1702 | je avx_pmovsx_xmmreg_reg_size_ok |
|
- | 1703 | jb invalid_operand_size |
|
- | 1704 | cmp ah,16 |
|
- | 1705 | jne invalid_operand_size |
|
- | 1706 | avx_pmovsx_xmmreg_reg_size_ok: |
|
- | 1707 | pop eax |
|
- | 1708 | mov [operand_size],al |
|
- | 1709 | jmp nomem_instruction_ready |
|
715 | avx_cvtpd2dq_reg_mem: |
1710 | avx512_pmovqb_instruction: |
- | 1711 | mov cl,2 |
|
- | 1712 | jmp avx512_pmov_instruction |
|
- | 1713 | avx512_pmovdb_instruction: |
|
- | 1714 | mov cl,4 |
|
- | 1715 | jmp avx512_pmov_instruction |
|
- | 1716 | avx512_pmovwb_instruction: |
|
- | 1717 | mov cl,8 |
|
- | 1718 | avx512_pmov_instruction: |
|
716 | cmp al,'[' |
1719 | mov [mmx_size],cl |
- | 1720 | or [vex_required],8 |
|
- | 1721 | mov [extended_code],38h |
|
- | 1722 | mov [supplemental_code],al |
|
- | 1723 | mov [base_code],0Fh |
|
- | 1724 | mov [opcode_prefix],0F3h |
|
- | 1725 | lods byte [esi] |
|
- | 1726 | call get_size_operator |
|
- | 1727 | cmp al,10h |
|
- | 1728 | je avx512_pmov_reg |
|
- | 1729 | cmp al,'[' |
|
717 | jne invalid_operand |
1730 | jne invalid_operand |
718 | call get_address |
1731 | call get_address |
719 | mov al,[operand_size] |
1732 | or [operand_flags],20h |
720 | or al,al |
1733 | call avx512_pmov_common |
- | 1734 | or al,al |
|
721 | jz operand_size_not_specified |
1735 | jz instruction_ready |
722 | cmp al,16 |
- | |
723 | je instruction_ready |
- | |
724 | cmp al,32 |
1736 | cmp al,[mmx_size] |
725 | jne invalid_operand_size |
1737 | jne invalid_operand_size |
726 | jmp instruction_ready |
1738 | jmp instruction_ready |
727 | avx_cvttps2dq_instruction: |
1739 | avx512_pmov_common: |
- | 1740 | call take_avx512_mask |
|
- | 1741 | xor al,al |
|
- | 1742 | xchg al,[operand_size] |
|
- | 1743 | push eax |
|
- | 1744 | lods byte [esi] |
|
- | 1745 | cmp al,',' |
|
- | 1746 | jne invalid_operand |
|
- | 1747 | call take_avx_register |
|
- | 1748 | mov [postbyte_register],al |
|
- | 1749 | mov al,ah |
|
- | 1750 | mov ah,cl |
|
- | 1751 | bsf ecx,eax |
|
- | 1752 | sub cl,4 |
|
- | 1753 | shl [mmx_size],cl |
|
- | 1754 | mov cl,ah |
|
- | 1755 | pop eax |
|
- | 1756 | ret |
|
- | 1757 | avx512_pmov_reg: |
|
- | 1758 | lods byte [esi] |
|
- | 1759 | call convert_avx_register |
|
- | 1760 | mov bl,al |
|
- | 1761 | call avx512_pmov_common |
|
- | 1762 | cmp al,[mmx_size] |
|
- | 1763 | je nomem_instruction_ready |
|
- | 1764 | jb invalid_operand_size |
|
- | 1765 | cmp al,16 |
|
- | 1766 | jne invalid_operand_size |
|
- | 1767 | jmp nomem_instruction_ready |
|
- | 1768 | ||
- | 1769 | avx_broadcast_128_instruction_noevex: |
|
728 | or [vex_required],2 |
1770 | or [vex_required],2 |
729 | mov [opcode_prefix],0F3h |
1771 | mov cl,10h |
- | 1772 | jmp avx_broadcast_instruction |
|
- | 1773 | avx512_broadcast_32x2_instruction: |
|
- | 1774 | mov cl,08h |
|
730 | mov [mmx_size],0 |
1775 | jmp avx_broadcast_instruction_evex |
- | 1776 | avx512_broadcast_32x4_instruction: |
|
- | 1777 | mov cl,10h |
|
731 | jmp avx_instruction |
1778 | jmp avx_broadcast_instruction_evex |
732 | avx_cvtsd2si_instruction: |
1779 | avx512_broadcast_32x8_instruction: |
733 | or [vex_required],1 |
1780 | mov cl,20h |
- | 1781 | jmp avx_broadcast_instruction_evex |
|
- | 1782 | avx512_broadcast_64x2_instruction: |
|
- | 1783 | mov cl,10h |
|
- | 1784 | jmp avx_broadcast_instruction_w1_evex |
|
- | 1785 | avx512_broadcast_64x4_instruction: |
|
- | 1786 | mov cl,20h |
|
- | 1787 | avx_broadcast_instruction_w1_evex: |
|
- | 1788 | or [rex_prefix],8 |
|
- | 1789 | avx_broadcast_instruction_evex: |
|
- | 1790 | or [vex_required],8 |
|
734 | jmp cvtsd2si_instruction |
1791 | jmp avx_broadcast_instruction |
- | 1792 | avx_broadcastss_instruction: |
|
- | 1793 | mov cl,4 |
|
- | 1794 | jmp avx_broadcast_instruction |
|
735 | avx_cvtss2si_instruction: |
1795 | avx_broadcastsd_instruction: |
736 | or [vex_required],1 |
1796 | or [rex_prefix],80h |
737 | jmp cvtss2si_instruction |
1797 | mov cl,8 |
- | 1798 | jmp avx_broadcast_instruction |
|
738 | avx_cvtsi2ss_instruction: |
1799 | avx_pbroadcastb_instruction: |
739 | mov [opcode_prefix],0F3h |
1800 | mov cl,1 |
- | 1801 | jmp avx_broadcast_pi_instruction |
|
740 | jmp avx_cvtsi_instruction |
1802 | avx_pbroadcastw_instruction: |
- | 1803 | mov cl,2 |
|
- | 1804 | jmp avx_broadcast_pi_instruction |
|
741 | avx_cvtsi2sd_instruction: |
1805 | avx_pbroadcastd_instruction: |
742 | mov [opcode_prefix],0F2h |
1806 | mov cl,4 |
- | 1807 | jmp avx_broadcast_pi_instruction |
|
- | 1808 | avx_pbroadcastq_instruction: |
|
- | 1809 | mov cl,8 |
|
- | 1810 | or [rex_prefix],80h |
|
743 | avx_cvtsi_instruction: |
1811 | avx_broadcast_pi_instruction: |
- | 1812 | or [operand_flags],40h |
|
- | 1813 | avx_broadcast_instruction: |
|
744 | mov [base_code],0Fh |
1814 | mov [opcode_prefix],66h |
- | 1815 | mov [supplemental_code],al |
|
- | 1816 | mov al,38h |
|
- | 1817 | mov [mmx_size],cl |
|
- | 1818 | mov [base_code],0Fh |
|
745 | mov [extended_code],al |
1819 | mov [extended_code],al |
746 | or [vex_required],1 |
1820 | or [vex_required],1 |
747 | call take_avx_register |
1821 | call take_avx_register |
748 | cmp ah,16 |
1822 | cmp ah,[mmx_size] |
- | 1823 | je invalid_operand_size |
|
- | 1824 | test [operand_flags],40h |
|
- | 1825 | jnz avx_broadcast_destination_size_ok |
|
- | 1826 | cmp [mmx_size],4 |
|
- | 1827 | je avx_broadcast_destination_size_ok |
|
- | 1828 | cmp [supplemental_code],59h |
|
- | 1829 | je avx_broadcast_destination_size_ok |
|
- | 1830 | cmp ah,16 |
|
749 | jne invalid_operand_size |
1831 | je invalid_operand_size |
750 | mov [postbyte_register],al |
1832 | avx_broadcast_destination_size_ok: |
- | 1833 | xor ah,ah |
|
- | 1834 | xchg ah,[operand_size] |
|
751 | lods byte [esi] |
1835 | push eax |
- | 1836 | call take_avx512_mask |
|
- | 1837 | lods byte [esi] |
|
752 | cmp al,',' |
1838 | cmp al,',' |
753 | jne invalid_operand |
1839 | jne invalid_operand |
754 | call take_avx_register |
1840 | lods byte [esi] |
- | 1841 | call get_size_operator |
|
- | 1842 | cmp al,10h |
|
- | 1843 | je avx_broadcast_reg_reg |
|
- | 1844 | cmp al,'[' |
|
- | 1845 | jne invalid_operand |
|
- | 1846 | call get_address |
|
- | 1847 | pop eax |
|
- | 1848 | xchg ah,[operand_size] |
|
- | 1849 | mov [postbyte_register],al |
|
- | 1850 | mov al,[broadcast_size] |
|
- | 1851 | mov al,[mmx_size] |
|
- | 1852 | cmp al,ah |
|
- | 1853 | je instruction_ready |
|
- | 1854 | or al,al |
|
- | 1855 | jz instruction_ready |
|
- | 1856 | or ah,ah |
|
- | 1857 | jz instruction_ready |
|
- | 1858 | jmp invalid_operand_size |
|
- | 1859 | avx_broadcast_reg_reg: |
|
- | 1860 | lods byte [esi] |
|
- | 1861 | test [operand_flags],40h |
|
- | 1862 | jz avx_broadcast_reg_avx_reg |
|
- | 1863 | cmp al,60h |
|
- | 1864 | jb avx_broadcast_reg_general_reg |
|
- | 1865 | cmp al,80h |
|
- | 1866 | jb avx_broadcast_reg_avx_reg |
|
- | 1867 | cmp al,0C0h |
|
- | 1868 | jb avx_broadcast_reg_general_reg |
|
- | 1869 | avx_broadcast_reg_avx_reg: |
|
- | 1870 | call convert_avx_register |
|
755 | mov [vex_register],al |
1871 | mov bl,al |
- | 1872 | mov al,[mmx_size] |
|
- | 1873 | or al,al |
|
- | 1874 | jz avx_broadcast_reg_avx_reg_size_ok |
|
- | 1875 | cmp ah,16 |
|
- | 1876 | jne invalid_operand_size |
|
- | 1877 | cmp al,ah |
|
- | 1878 | jae invalid_operand |
|
- | 1879 | avx_broadcast_reg_avx_reg_size_ok: |
|
- | 1880 | pop eax |
|
- | 1881 | xchg ah,[operand_size] |
|
- | 1882 | mov [postbyte_register],al |
|
756 | jmp cvtsi_xmmreg |
1883 | test [vex_required],2 |
- | 1884 | jnz invalid_operand |
|
757 | 1885 | jmp nomem_instruction_ready |
|
- | 1886 | avx_broadcast_reg_general_reg: |
|
- | 1887 | call convert_register |
|
- | 1888 | mov bl,al |
|
- | 1889 | mov al,[mmx_size] |
|
- | 1890 | or al,al |
|
- | 1891 | jz avx_broadcast_reg_general_reg_size_ok |
|
- | 1892 | cmp al,ah |
|
- | 1893 | jne invalid_operand_size |
|
- | 1894 | avx_broadcast_reg_general_reg_size_ok: |
|
- | 1895 | cmp al,4 |
|
- | 1896 | jb avx_broadcast_reg_general_reg_ready |
|
- | 1897 | cmp al,8 |
|
- | 1898 | mov al,3 |
|
- | 1899 | jne avx_broadcast_reg_general_reg_ready |
|
- | 1900 | or [rex_prefix],8 |
|
- | 1901 | avx_broadcast_reg_general_reg_ready: |
|
- | 1902 | add al,7Ah-1 |
|
- | 1903 | mov [supplemental_code],al |
|
- | 1904 | or [vex_required],8 |
|
- | 1905 | pop eax |
|
- | 1906 | xchg ah,[operand_size] |
|
- | 1907 | mov [postbyte_register],al |
|
- | 1908 | jmp nomem_instruction_ready |
|
- | 1909 | ||
Line -... | Line 1910... | ||
- | 1910 | avx512_extract_64x4_instruction: |
|
- | 1911 | or [rex_prefix],8 |
|
- | 1912 | avx512_extract_32x8_instruction: |
|
- | 1913 | or [vex_required],8 |
|
- | 1914 | mov cl,32 |
|
- | 1915 | jmp avx_extractf_instruction |
|
- | 1916 | avx512_extract_64x2_instruction: |
|
- | 1917 | or [rex_prefix],8 |
|
- | 1918 | avx512_extract_32x4_instruction: |
|
- | 1919 | or [vex_required],8 |
|
- | 1920 | mov cl,16 |
|
- | 1921 | jmp avx_extractf_instruction |
|
758 | avx_extractf128_instruction: |
1922 | avx_extractf128_instruction: |
759 | or [vex_required],1 |
1923 | or [vex_required],2 |
- | 1924 | mov cl,16 |
|
- | 1925 | avx_extractf_instruction: |
|
- | 1926 | mov [mmx_size],cl |
|
760 | call setup_66_0f_3a |
1927 | call setup_66_0f_3a |
761 | lods byte [esi] |
1928 | lods byte [esi] |
762 | call get_size_operator |
1929 | call get_size_operator |
763 | cmp al,10h |
1930 | cmp al,10h |
764 | je avx_extractf128_reg |
1931 | je avx_extractf_reg |
765 | cmp al,'[' |
1932 | cmp al,'[' |
766 | jne invalid_operand |
1933 | jne invalid_operand |
767 | call get_address |
1934 | call get_address |
768 | xor al,al |
1935 | xor al,al |
769 | xchg al,[operand_size] |
1936 | xchg al,[operand_size] |
770 | or al,al |
1937 | or al,al |
771 | jz avx_extractf128_mem_size_ok |
1938 | jz avx_extractf_mem_size_ok |
772 | cmp al,16 |
1939 | cmp al,[mmx_size] |
773 | jne invalid_operand_size |
1940 | jne invalid_operand_size |
774 | avx_extractf128_mem_size_ok: |
1941 | avx_extractf_mem_size_ok: |
- | 1942 | call take_avx512_mask |
|
775 | lods byte [esi] |
1943 | lods byte [esi] |
776 | cmp al,',' |
1944 | cmp al,',' |
777 | jne invalid_operand |
1945 | jne invalid_operand |
778 | call take_avx_register |
1946 | call take_avx_register |
779 | cmp ah,32 |
1947 | cmp ah,[mmx_size] |
780 | jne invalid_operand_size |
1948 | jbe invalid_operand_size |
781 | mov [postbyte_register],al |
1949 | mov [postbyte_register],al |
782 | jmp mmx_imm8 |
1950 | jmp mmx_imm8 |
783 | avx_extractf128_reg: |
1951 | avx_extractf_reg: |
784 | lods byte [esi] |
1952 | lods byte [esi] |
785 | call convert_xmm_register |
1953 | call convert_avx_register |
- | 1954 | cmp ah,[mmx_size] |
|
786 | mov [operand_size],0 |
1955 | jne invalid_operand_size |
787 | push eax |
1956 | push eax |
- | 1957 | call take_avx512_mask |
|
- | 1958 | mov [operand_size],0 |
|
788 | lods byte [esi] |
1959 | lods byte [esi] |
789 | cmp al,',' |
1960 | cmp al,',' |
790 | jne invalid_operand |
1961 | jne invalid_operand |
791 | call take_avx_register |
1962 | call take_avx_register |
792 | cmp ah,32 |
1963 | cmp ah,[mmx_size] |
793 | jne invalid_operand_size |
1964 | jbe invalid_operand_size |
794 | mov [postbyte_register],al |
1965 | mov [postbyte_register],al |
795 | pop ebx |
1966 | pop ebx |
796 | jmp mmx_nomem_imm8 |
1967 | jmp mmx_nomem_imm8 |
797 | setup_66_0f_3a: |
1968 | avx512_insert_64x4_instruction: |
798 | mov [extended_code],3Ah |
1969 | or [rex_prefix],8 |
- | 1970 | avx512_insert_32x8_instruction: |
|
799 | mov [supplemental_code],al |
1971 | or [vex_required],8 |
800 | mov [base_code],0Fh |
1972 | mov cl,32 |
- | 1973 | jmp avx_insertf_instruction |
|
- | 1974 | avx512_insert_64x2_instruction: |
|
801 | mov [opcode_prefix],66h |
1975 | or [rex_prefix],8 |
- | 1976 | avx512_insert_32x4_instruction: |
|
- | 1977 | or [vex_required],8 |
|
802 | ret |
1978 | mov cl,16 |
- | 1979 | jmp avx_insertf_instruction |
|
803 | avx_insertf128_instruction: |
1980 | avx_insertf128_instruction: |
804 | or [vex_required],1 |
1981 | or [vex_required],2 |
- | 1982 | mov cl,16 |
|
- | 1983 | avx_insertf_instruction: |
|
- | 1984 | mov [mmx_size],cl |
|
- | 1985 | mov [broadcast_size],0 |
|
805 | call setup_66_0f_3a |
1986 | call setup_66_0f_3a |
806 | call take_avx_register |
1987 | call take_avx_register |
807 | cmp ah,32 |
1988 | cmp ah,[mmx_size] |
808 | jne invalid_operand |
1989 | jbe invalid_operand |
809 | mov [postbyte_register],al |
1990 | mov [postbyte_register],al |
- | 1991 | call take_avx512_mask |
|
810 | lods byte [esi] |
1992 | lods byte [esi] |
811 | cmp al,',' |
1993 | cmp al,',' |
812 | jne invalid_operand |
1994 | jne invalid_operand |
813 | call take_avx_register |
1995 | call take_avx_register |
814 | mov [vex_register],al |
1996 | mov [vex_register],al |
815 | mov [operand_size],0 |
1997 | mov al,[mmx_size] |
816 | mov [mmx_size],16 |
1998 | xchg al,[operand_size] |
- | 1999 | push eax |
|
817 | lods byte [esi] |
2000 | lods byte [esi] |
818 | cmp al,',' |
2001 | cmp al,',' |
819 | jne invalid_operand |
2002 | jne invalid_operand |
- | 2003 | lods byte [esi] |
|
- | 2004 | call get_size_operator |
|
- | 2005 | cmp al,10h |
|
- | 2006 | je avx_insertf_reg_reg_reg |
|
- | 2007 | cmp al,'[' |
|
- | 2008 | jne invalid_operand |
|
820 | call take_avx_rm |
2009 | call get_address |
- | 2010 | pop eax |
|
821 | mov [operand_size],32 |
2011 | mov [operand_size],al |
822 | jnc mmx_imm8 |
2012 | jmp mmx_imm8 |
- | 2013 | avx_insertf_reg_reg_reg: |
|
- | 2014 | lods byte [esi] |
|
- | 2015 | call convert_avx_register |
|
823 | mov bl,al |
2016 | mov bl,al |
- | 2017 | pop eax |
|
- | 2018 | mov [operand_size],al |
|
824 | jmp mmx_nomem_imm8 |
2019 | jmp mmx_nomem_imm8 |
825 | avx_extractps_instruction: |
2020 | avx_extract_b_instruction: |
- | 2021 | mov cl,1 |
|
- | 2022 | jmp avx_extract_instruction |
|
- | 2023 | avx_extract_w_instruction: |
|
- | 2024 | mov cl,2 |
|
- | 2025 | jmp avx_extract_instruction |
|
- | 2026 | avx_extract_q_instruction: |
|
826 | or [vex_required],1 |
2027 | or [rex_prefix],8 |
- | 2028 | mov cl,8 |
|
827 | jmp extractps_instruction |
2029 | jmp avx_extract_instruction |
828 | avx_insertps_instruction: |
2030 | avx_extract_d_instruction: |
- | 2031 | mov cl,4 |
|
- | 2032 | avx_extract_instruction: |
|
- | 2033 | mov [mmx_size],cl |
|
- | 2034 | call setup_66_0f_3a |
|
829 | or [vex_required],1 |
2035 | or [vex_required],1 |
- | 2036 | lods byte [esi] |
|
- | 2037 | call get_size_operator |
|
- | 2038 | cmp al,10h |
|
- | 2039 | je avx_extractps_reg |
|
- | 2040 | cmp al,'[' |
|
- | 2041 | jne invalid_operand |
|
- | 2042 | call get_address |
|
- | 2043 | mov al,[mmx_size] |
|
- | 2044 | not al |
|
- | 2045 | and [operand_size],al |
|
- | 2046 | jnz invalid_operand_size |
|
- | 2047 | lods byte [esi] |
|
- | 2048 | cmp al,',' |
|
- | 2049 | jne invalid_operand |
|
- | 2050 | lods byte [esi] |
|
- | 2051 | call get_size_operator |
|
- | 2052 | cmp al,10h |
|
- | 2053 | jne invalid_operand |
|
- | 2054 | lods byte [esi] |
|
830 | call take_avx_register |
2055 | call convert_avx_register |
831 | cmp ah,16 |
2056 | cmp ah,16 |
832 | jne invalid_operand_size |
2057 | jne invalid_operand_size |
833 | mov [postbyte_register],al |
2058 | mov [postbyte_register],al |
- | 2059 | jmp mmx_imm8 |
|
- | 2060 | avx_extractps_reg: |
|
- | 2061 | lods byte [esi] |
|
- | 2062 | call convert_register |
|
- | 2063 | mov bl,al |
|
- | 2064 | mov al,[mmx_size] |
|
- | 2065 | cmp ah,al |
|
- | 2066 | jb invalid_operand_size |
|
- | 2067 | cmp ah,4 |
|
- | 2068 | je avx_extractps_reg_size_ok |
|
- | 2069 | cmp ah,8 |
|
- | 2070 | jne invalid_operand_size |
|
- | 2071 | cmp [code_type],64 |
|
- | 2072 | jne invalid_operand |
|
- | 2073 | cmp al,4 |
|
- | 2074 | jae avx_extractps_reg_size_ok |
|
- | 2075 | or [rex_prefix],8 |
|
- | 2076 | avx_extractps_reg_size_ok: |
|
- | 2077 | mov [operand_size],0 |
|
834 | lods byte [esi] |
2078 | lods byte [esi] |
835 | cmp al,',' |
2079 | cmp al,',' |
836 | jne invalid_operand |
2080 | jne invalid_operand |
- | 2081 | lods byte [esi] |
|
837 | call take_avx_register |
2082 | call get_size_operator |
- | 2083 | cmp al,10h |
|
838 | mov [vex_register],al |
2084 | jne invalid_operand |
- | 2085 | lods byte [esi] |
|
839 | jmp insertps_xmmreg |
2086 | call convert_avx_register |
- | 2087 | cmp ah,16 |
|
840 | avx_pextrb_instruction: |
2088 | jne invalid_operand_size |
841 | or [vex_required],1 |
2089 | mov [postbyte_register],al |
842 | jmp pextrb_instruction |
2090 | cmp [supplemental_code],15h |
843 | avx_pextrw_instruction: |
2091 | jne mmx_nomem_imm8 |
844 | or [vex_required],1 |
2092 | mov [extended_code],0C5h |
- | 2093 | xchg bl,[postbyte_register] |
|
845 | jmp pextrw_instruction |
2094 | jmp mmx_nomem_imm8 |
846 | avx_pextrd_instruction: |
2095 | avx_insertps_instruction: |
847 | or [vex_required],1 |
2096 | mov [immediate_size],1 |
848 | jmp pextrd_instruction |
2097 | or [operand_flags],10h |
849 | avx_pextrq_instruction: |
2098 | mov [opcode_prefix],66h |
850 | or [vex_required],1 |
2099 | mov [supplemental_code],al |
- | 2100 | mov al,3Ah |
|
- | 2101 | mov cl,4 |
|
851 | jmp pextrq_instruction |
2102 | jmp avx_instruction |
852 | avx_pinsrb_instruction: |
2103 | avx_pinsrb_instruction: |
853 | mov [mmx_size],1 |
2104 | mov cl,1 |
854 | or [vex_required],1 |
- | |
855 | jmp avx_pinsr_instruction_3a |
2105 | jmp avx_pinsr_instruction_3a |
856 | avx_pinsrw_instruction: |
2106 | avx_pinsrw_instruction: |
857 | mov [mmx_size],2 |
2107 | mov cl,2 |
858 | or [vex_required],1 |
- | |
859 | jmp avx_pinsr_instruction |
2108 | jmp avx_pinsr_instruction |
860 | avx_pinsrd_instruction: |
2109 | avx_pinsrd_instruction: |
861 | mov [mmx_size],4 |
2110 | mov cl,4 |
862 | or [vex_required],1 |
- | |
863 | jmp avx_pinsr_instruction_3a |
2111 | jmp avx_pinsr_instruction_3a |
864 | avx_pinsrq_instruction: |
2112 | avx_pinsrq_instruction: |
865 | mov [mmx_size],8 |
2113 | mov cl,8 |
866 | or [vex_required],1 |
2114 | or [rex_prefix],8 |
867 | call operand_64bit |
- | |
868 | avx_pinsr_instruction_3a: |
2115 | avx_pinsr_instruction_3a: |
869 | mov [supplemental_code],al |
2116 | mov [supplemental_code],al |
870 | mov al,3Ah |
2117 | mov al,3Ah |
871 | avx_pinsr_instruction: |
2118 | avx_pinsr_instruction: |
872 | mov [opcode_prefix],66h |
2119 | mov [opcode_prefix],66h |
873 | mov [base_code],0Fh |
2120 | mov [base_code],0Fh |
874 | mov [extended_code],al |
2121 | mov [extended_code],al |
- | 2122 | mov [mmx_size],cl |
|
- | 2123 | or [vex_required],1 |
|
875 | call take_avx_register |
2124 | call take_avx_register |
876 | cmp ah,16 |
2125 | cmp ah,16 |
877 | jne invalid_operand_size |
2126 | jne invalid_operand_size |
878 | mov [postbyte_register],al |
2127 | mov [postbyte_register],al |
879 | lods byte [esi] |
2128 | lods byte [esi] |
880 | cmp al,',' |
2129 | cmp al,',' |
881 | jne invalid_operand |
2130 | jne invalid_operand |
882 | call take_avx_register |
2131 | call take_avx_register |
883 | mov [vex_register],al |
2132 | mov [vex_register],al |
884 | jmp pinsr_xmmreg |
2133 | jmp pinsr_xmmreg |
- | 2134 | ||
885 | avx_maskmovdqu_instruction: |
2135 | avx_cvtudq2pd_instruction: |
886 | or [vex_required],1 |
2136 | or [vex_required],8 |
- | 2137 | avx_cvtdq2pd_instruction: |
|
- | 2138 | mov [opcode_prefix],0F3h |
|
- | 2139 | mov cl,4 |
|
887 | jmp maskmovdqu_instruction |
2140 | jmp avx_cvt_d_instruction |
- | 2141 | avx_cvtps2qq_instruction: |
|
- | 2142 | or [operand_flags],8 |
|
888 | avx_pmovmskb_instruction: |
2143 | avx_cvttps2qq_instruction: |
- | 2144 | or [operand_flags],4 |
|
889 | or [vex_required],1 |
2145 | or [vex_required],8 |
890 | mov [opcode_prefix],66h |
2146 | mov [opcode_prefix],66h |
- | 2147 | mov cl,4 |
|
- | 2148 | jmp avx_cvt_d_instruction |
|
- | 2149 | avx_cvtps2pd_instruction: |
|
- | 2150 | or [operand_flags],4 |
|
- | 2151 | mov cl,4 |
|
- | 2152 | avx_cvt_d_instruction: |
|
891 | mov [base_code],0Fh |
2153 | mov [base_code],0Fh |
892 | mov [extended_code],al |
2154 | mov [extended_code],al |
- | 2155 | or [vex_required],1 |
|
- | 2156 | mov [broadcast_size],cl |
|
- | 2157 | call take_avx_register |
|
- | 2158 | mov [postbyte_register],al |
|
- | 2159 | call take_avx512_mask |
|
- | 2160 | lods byte [esi] |
|
- | 2161 | cmp al,',' |
|
- | 2162 | jne invalid_operand |
|
- | 2163 | xor ecx,ecx |
|
- | 2164 | xchg cl,[operand_size] |
|
- | 2165 | mov al,cl |
|
- | 2166 | shr al,1 |
|
- | 2167 | mov [mmx_size],al |
|
893 | lods byte [esi] |
2168 | lods byte [esi] |
894 | call get_size_operator |
2169 | call get_size_operator |
- | 2170 | cmp al,'[' |
|
- | 2171 | je avx_cvt_d_reg_mem |
|
895 | cmp al,10h |
2172 | cmp al,10h |
896 | jne invalid_operand |
2173 | jne invalid_operand |
897 | lods byte [esi] |
- | |
898 | call convert_register |
- | |
899 | cmp ah,4 |
- | |
900 | je avx_pmovmskb_reg_size_ok |
- | |
901 | cmp [code_type],64 |
- | |
902 | jne invalid_operand_size |
- | |
903 | cmp ah,8 |
- | |
904 | jnz invalid_operand_size |
- | |
905 | avx_pmovmskb_reg_size_ok: |
- | |
906 | mov [postbyte_register],al |
- | |
907 | mov [operand_size],0 |
2174 | mov [operand_size],0 |
908 | lods byte [esi] |
2175 | lods byte [esi] |
- | 2176 | call convert_avx_register |
|
- | 2177 | cmp ah,[mmx_size] |
|
- | 2178 | je avx_cvt_d_reg_reg_size_ok |
|
- | 2179 | jb invalid_operand_size |
|
909 | cmp al,',' |
2180 | cmp ah,16 |
910 | jne invalid_operand |
2181 | jne invalid_operand_size |
911 | call take_avx_register |
2182 | avx_cvt_d_reg_reg_size_ok: |
912 | mov bl,al |
2183 | mov bl,al |
- | 2184 | mov [operand_size],cl |
|
- | 2185 | call take_avx512_rounding |
|
913 | jmp nomem_instruction_ready |
2186 | jmp nomem_instruction_ready |
- | 2187 | avx_cvt_d_reg_mem: |
|
- | 2188 | call take_avx_mem |
|
- | 2189 | jmp instruction_ready |
|
- | 2190 | avx_cvtpd2dq_instruction: |
|
- | 2191 | or [operand_flags],4+8 |
|
- | 2192 | mov [opcode_prefix],0F2h |
|
- | 2193 | jmp avx_cvt_q_instruction |
|
- | 2194 | avx_cvtuqq2ps_instruction: |
|
- | 2195 | mov [opcode_prefix],0F2h |
|
914 | avx_pshufd_instruction: |
2196 | avx_cvtpd2udq_instruction: |
- | 2197 | or [operand_flags],8 |
|
- | 2198 | avx_cvttpd2udq_instruction: |
|
- | 2199 | or [operand_flags],4 |
|
915 | or [vex_required],1 |
2200 | or [vex_required],8 |
- | 2201 | jmp avx_cvt_q_instruction |
|
- | 2202 | avx_cvtpd2ps_instruction: |
|
- | 2203 | or [operand_flags],8 |
|
- | 2204 | avx_cvttpd2dq_instruction: |
|
916 | mov [mmx_size],0 |
2205 | or [operand_flags],4 |
917 | mov [opcode_prefix],al |
2206 | mov [opcode_prefix],66h |
- | 2207 | avx_cvt_q_instruction: |
|
- | 2208 | mov [broadcast_size],8 |
|
918 | mov [base_code],0Fh |
2209 | mov [base_code],0Fh |
919 | mov [extended_code],70h |
2210 | mov [extended_code],al |
- | 2211 | or [vex_required],1 |
|
- | 2212 | or [rex_prefix],80h |
|
920 | call take_avx_register |
2213 | call take_avx_register |
921 | mov [postbyte_register],al |
2214 | mov [postbyte_register],al |
- | 2215 | push eax |
|
- | 2216 | call take_avx512_mask |
|
922 | lods byte [esi] |
2217 | lods byte [esi] |
923 | cmp al,',' |
2218 | cmp al,',' |
924 | jne invalid_operand |
2219 | jne invalid_operand |
- | 2220 | xor al,al |
|
- | 2221 | mov [operand_size],al |
|
- | 2222 | mov [mmx_size],al |
|
925 | call take_avx_rm |
2223 | call take_avx_rm |
926 | jnc mmx_imm8 |
2224 | jnc avx_cvt_q_reg_mem |
927 | mov bl,al |
2225 | mov bl,al |
- | 2226 | pop eax |
|
- | 2227 | call avx_cvt_q_check_size |
|
- | 2228 | call take_avx512_rounding |
|
928 | jmp mmx_nomem_imm8 |
2229 | jmp nomem_instruction_ready |
- | 2230 | avx_cvt_q_reg_mem: |
|
929 | 2231 | pop eax |
|
- | 2232 | call avx_cvt_q_check_size |
|
930 | avx_pmovsxbw_instruction: |
2233 | jmp instruction_ready |
- | 2234 | avx_cvt_q_check_size: |
|
931 | mov [mmx_size],8 |
2235 | mov al,[operand_size] |
- | 2236 | or al,al |
|
- | 2237 | jz avx_cvt_q_size_not_specified |
|
- | 2238 | shr al,1 |
|
- | 2239 | cmp al,ah |
|
932 | jmp avx_pmovsx_instruction |
2240 | je avx_cvt_q_size_ok |
933 | avx_pmovsxbd_instruction: |
2241 | ja invalid_operand_size |
- | 2242 | cmp ah,16 |
|
934 | mov [mmx_size],4 |
2243 | jne invalid_operand_size |
935 | jmp avx_pmovsx_instruction |
2244 | avx_cvt_q_size_ok: |
- | 2245 | ret |
|
936 | avx_pmovsxbq_instruction: |
2246 | avx_cvt_q_size_not_specified: |
937 | mov [mmx_size],2 |
2247 | cmp ah,64 shr 1 |
938 | jmp avx_pmovsx_instruction |
2248 | jne recoverable_unknown_size |
- | 2249 | mov [operand_size],64 |
|
- | 2250 | ret |
|
939 | avx_pmovsxwd_instruction: |
2251 | avx_cvttps2udq_instruction: |
940 | mov [mmx_size],8 |
2252 | or [vex_required],8 |
- | 2253 | or [operand_flags],2+4 |
|
- | 2254 | mov cx,0400h |
|
941 | jmp avx_pmovsx_instruction |
2255 | jmp avx_instruction_with_broadcast |
942 | avx_pmovsxwq_instruction: |
2256 | avx_cvttps2dq_instruction: |
- | 2257 | mov [opcode_prefix],0F3h |
|
- | 2258 | or [operand_flags],2+4 |
|
943 | mov [mmx_size],4 |
2259 | mov cx,0400h |
944 | jmp avx_pmovsx_instruction |
2260 | jmp avx_instruction_with_broadcast |
945 | avx_pmovsxdq_instruction: |
2261 | avx_cvtph2ps_instruction: |
- | 2262 | mov [opcode_prefix],66h |
|
946 | mov [mmx_size],8 |
2263 | mov [supplemental_code],al |
- | 2264 | or [operand_flags],4 |
|
- | 2265 | mov al,38h |
|
- | 2266 | xor cl,cl |
|
947 | avx_pmovsx_instruction: |
2267 | jmp avx_cvt_d_instruction |
- | 2268 | avx_cvtps2ph_instruction: |
|
- | 2269 | call setup_66_0f_3a |
|
948 | or [vex_required],1 |
2270 | or [vex_required],1 |
- | 2271 | or [operand_flags],4 |
|
- | 2272 | lods byte [esi] |
|
- | 2273 | call get_size_operator |
|
- | 2274 | cmp al,10h |
|
- | 2275 | je vcvtps2ph_reg |
|
- | 2276 | cmp al,'[' |
|
- | 2277 | jne invalid_operand |
|
949 | call setup_66_0f_38 |
2278 | call get_address |
- | 2279 | call take_avx512_mask |
|
- | 2280 | lods byte [esi] |
|
- | 2281 | cmp al,',' |
|
- | 2282 | jne invalid_operand |
|
- | 2283 | shl [operand_size],1 |
|
950 | call take_avx_register |
2284 | call take_avx_register |
951 | mov [postbyte_register],al |
2285 | mov [postbyte_register],al |
- | 2286 | shr ah,1 |
|
- | 2287 | mov [mmx_size],ah |
|
- | 2288 | jmp mmx_imm8 |
|
- | 2289 | vcvtps2ph_reg: |
|
- | 2290 | lods byte [esi] |
|
- | 2291 | call convert_avx_register |
|
- | 2292 | mov bl,al |
|
- | 2293 | call take_avx512_mask |
|
- | 2294 | xor cl,cl |
|
- | 2295 | xchg cl,[operand_size] |
|
- | 2296 | shl cl,1 |
|
952 | lods byte [esi] |
2297 | lods byte [esi] |
953 | cmp al,',' |
2298 | cmp al,',' |
954 | jne invalid_operand |
2299 | jne invalid_operand |
- | 2300 | call take_avx_register |
|
- | 2301 | mov [postbyte_register],al |
|
955 | xor al,al |
2302 | or cl,cl |
- | 2303 | jz vcvtps2ph_reg_size_ok |
|
- | 2304 | cmp cl,ah |
|
- | 2305 | je vcvtps2ph_reg_size_ok |
|
956 | xchg al,[operand_size] |
2306 | jb invalid_operand_size |
957 | push eax |
2307 | cmp ah,16 |
- | 2308 | jne invalid_operand_size |
|
- | 2309 | vcvtps2ph_reg_size_ok: |
|
- | 2310 | call take_avx512_rounding |
|
- | 2311 | jmp mmx_nomem_imm8 |
|
- | 2312 | ||
- | 2313 | avx_cvtsd2usi_instruction: |
|
- | 2314 | or [operand_flags],8 |
|
- | 2315 | avx_cvttsd2usi_instruction: |
|
- | 2316 | or [vex_required],8 |
|
- | 2317 | jmp avx_cvttsd2si_instruction |
|
- | 2318 | avx_cvtsd2si_instruction: |
|
- | 2319 | or [operand_flags],8 |
|
- | 2320 | avx_cvttsd2si_instruction: |
|
- | 2321 | mov ah,0F2h |
|
- | 2322 | mov cl,8 |
|
- | 2323 | jmp avx_cvt_2si_instruction |
|
- | 2324 | avx_cvtss2usi_instruction: |
|
- | 2325 | or [operand_flags],8 |
|
- | 2326 | avx_cvttss2usi_instruction: |
|
- | 2327 | or [vex_required],8 |
|
- | 2328 | jmp avx_cvttss2si_instruction |
|
- | 2329 | avx_cvtss2si_instruction: |
|
- | 2330 | or [operand_flags],8 |
|
- | 2331 | avx_cvttss2si_instruction: |
|
- | 2332 | mov ah,0F3h |
|
- | 2333 | mov cl,4 |
|
- | 2334 | avx_cvt_2si_instruction: |
|
- | 2335 | or [operand_flags],2+4 |
|
- | 2336 | mov [mmx_size],cl |
|
- | 2337 | mov [broadcast_size],0 |
|
- | 2338 | mov [opcode_prefix],ah |
|
- | 2339 | mov [base_code],0Fh |
|
- | 2340 | mov [extended_code],al |
|
- | 2341 | or [vex_required],1 |
|
958 | lods byte [esi] |
2342 | lods byte [esi] |
959 | call get_size_operator |
2343 | call get_size_operator |
960 | cmp al,10h |
2344 | cmp al,10h |
961 | je avx_pmovsx_xmmreg_reg |
- | |
962 | cmp al,'[' |
- | |
963 | jne invalid_operand |
2345 | jne invalid_operand |
964 | call get_address |
2346 | lods byte [esi] |
965 | pop eax |
- | |
966 | cmp al,32 |
- | |
967 | jb avx_pmovsx_size_check |
2347 | call convert_register |
968 | shl [mmx_size],1 |
2348 | mov [postbyte_register],al |
969 | avx_pmovsx_size_check: |
- | |
970 | xchg al,[operand_size] |
2349 | mov [operand_size],0 |
971 | test al,al |
2350 | cmp ah,4 |
972 | jz instruction_ready |
2351 | je avx_cvt_2si_reg |
973 | cmp al,[mmx_size] |
2352 | cmp ah,8 |
974 | jne invalid_operand_size |
2353 | jne invalid_operand_size |
975 | jmp instruction_ready |
2354 | call operand_64bit |
976 | avx_pmovsx_xmmreg_reg: |
2355 | avx_cvt_2si_reg: |
977 | lods byte [esi] |
2356 | lods byte [esi] |
- | 2357 | cmp al,',' |
|
- | 2358 | jne invalid_operand |
|
978 | call convert_xmm_register |
2359 | call take_avx_rm |
- | 2360 | jnc instruction_ready |
|
979 | mov bl,al |
2361 | mov bl,al |
980 | pop eax |
- | |
981 | mov [operand_size],al |
2362 | call take_avx512_rounding |
982 | jmp nomem_instruction_ready |
2363 | jmp nomem_instruction_ready |
- | 2364 | avx_cvtusi2sd_instruction: |
|
- | 2365 | or [vex_required],8 |
|
983 | avx_permil_instruction: |
2366 | avx_cvtsi2sd_instruction: |
- | 2367 | mov ah,0F2h |
|
- | 2368 | mov cl,8 |
|
- | 2369 | jmp avx_cvtsi_instruction |
|
- | 2370 | avx_cvtusi2ss_instruction: |
|
- | 2371 | or [vex_required],8 |
|
- | 2372 | avx_cvtsi2ss_instruction: |
|
- | 2373 | mov ah,0F3h |
|
- | 2374 | mov cl,4 |
|
- | 2375 | avx_cvtsi_instruction: |
|
- | 2376 | or [operand_flags],2+4+8 |
|
- | 2377 | mov [mmx_size],cl |
|
- | 2378 | mov [opcode_prefix],ah |
|
- | 2379 | mov [base_code],0Fh |
|
984 | call setup_66_0f_3a |
2380 | mov [extended_code],al |
985 | or [vex_required],1 |
2381 | or [vex_required],1 |
986 | call take_avx_register |
2382 | call take_avx_register |
- | 2383 | cmp ah,16 |
|
- | 2384 | jne invalid_operand_size |
|
987 | mov [postbyte_register],al |
2385 | mov [postbyte_register],al |
988 | lods byte [esi] |
2386 | lods byte [esi] |
989 | cmp al,',' |
2387 | cmp al,',' |
990 | jne invalid_operand |
2388 | jne invalid_operand |
- | 2389 | call take_avx_register |
|
- | 2390 | mov [vex_register],al |
|
- | 2391 | lods byte [esi] |
|
- | 2392 | cmp al,',' |
|
- | 2393 | jne invalid_operand |
|
- | 2394 | mov [operand_size],0 |
|
991 | lods byte [esi] |
2395 | lods byte [esi] |
992 | call get_size_operator |
2396 | call get_size_operator |
993 | cmp al,'[' |
2397 | cmp al,'[' |
994 | je avx_permil_reg_mem |
2398 | je avx_cvtsi_reg_reg_mem |
995 | cmp al,10h |
2399 | cmp al,10h |
996 | jne invalid_operand |
2400 | jne invalid_operand |
997 | lods byte [esi] |
2401 | lods byte [esi] |
- | 2402 | call convert_register |
|
- | 2403 | mov bl,al |
|
- | 2404 | cmp ah,4 |
|
- | 2405 | je avx_cvtsi_reg_reg_reg32 |
|
- | 2406 | cmp ah,8 |
|
- | 2407 | jne invalid_operand_size |
|
- | 2408 | call operand_64bit |
|
- | 2409 | avx_cvtsi_rounding: |
|
- | 2410 | call take_avx512_rounding |
|
- | 2411 | jmp nomem_instruction_ready |
|
- | 2412 | avx_cvtsi_reg_reg_reg32: |
|
- | 2413 | cmp [mmx_size],8 |
|
- | 2414 | jne avx_cvtsi_rounding |
|
- | 2415 | jmp nomem_instruction_ready |
|
- | 2416 | avx_cvtsi_reg_reg_mem: |
|
- | 2417 | call get_address |
|
- | 2418 | mov al,[operand_size] |
|
- | 2419 | mov [mmx_size],al |
|
- | 2420 | or al,al |
|
- | 2421 | jz single_mem_nosize |
|
- | 2422 | cmp al,4 |
|
- | 2423 | je instruction_ready |
|
- | 2424 | cmp al,8 |
|
- | 2425 | jne invalid_operand_size |
|
- | 2426 | call operand_64bit |
|
- | 2427 | jmp instruction_ready |
|
- | 2428 | ||
- | 2429 | avx_maskmov_w1_instruction: |
|
- | 2430 | or [rex_prefix],8 |
|
- | 2431 | avx_maskmov_instruction: |
|
- | 2432 | call setup_66_0f_38 |
|
- | 2433 | mov [mmx_size],0 |
|
- | 2434 | or [vex_required],2 |
|
- | 2435 | lods byte [esi] |
|
- | 2436 | call get_size_operator |
|
- | 2437 | cmp al,10h |
|
- | 2438 | jne avx_maskmov_mem |
|
- | 2439 | lods byte [esi] |
|
998 | call convert_avx_register |
2440 | call convert_avx_register |
- | 2441 | mov [postbyte_register],al |
|
- | 2442 | lods byte [esi] |
|
- | 2443 | cmp al,',' |
|
- | 2444 | jne invalid_operand |
|
- | 2445 | call take_avx_register |
|
999 | mov [vex_register],al |
2446 | mov [vex_register],al |
1000 | lods byte [esi] |
2447 | lods byte [esi] |
1001 | cmp al,',' |
2448 | cmp al,',' |
1002 | jne invalid_operand |
2449 | jne invalid_operand |
1003 | push esi |
- | |
1004 | xor cl,cl |
- | |
1005 | xchg cl,[operand_size] |
- | |
1006 | lods byte [esi] |
2450 | lods byte [esi] |
1007 | call get_size_operator |
- | |
1008 | xchg cl,[operand_size] |
- | |
1009 | pop esi |
- | |
1010 | cmp al,'[' |
2451 | cmp al,'[' |
1011 | je avx_permil_reg_reg_mem |
- | |
1012 | cmp al,10h |
- | |
1013 | jne avx_permil_reg_reg_imm8 |
- | |
1014 | call take_avx_register |
- | |
1015 | mov bl,al |
- | |
1016 | mov [extended_code],38h |
- | |
1017 | add [supplemental_code],8 |
- | |
1018 | jmp nomem_instruction_ready |
- | |
1019 | avx_permil_reg_reg_mem: |
- | |
1020 | lods byte [esi] |
- | |
1021 | call get_size_operator |
2452 | jne invalid_operand |
1022 | call get_address |
2453 | call get_address |
1023 | mov [extended_code],38h |
- | |
1024 | add [supplemental_code],8 |
- | |
1025 | jmp instruction_ready |
2454 | jmp instruction_ready |
1026 | avx_permil_reg_reg_imm8: |
2455 | avx_maskmov_mem: |
1027 | dec esi |
- | |
1028 | xor bl,bl |
2456 | cmp al,'[' |
1029 | xchg bl,[vex_register] |
- | |
1030 | jmp mmx_nomem_imm8 |
2457 | jne invalid_operand |
1031 | avx_permil_reg_mem: |
- | |
1032 | call get_address |
2458 | call get_address |
1033 | jmp mmx_imm8 |
- | |
1034 | avx_bit_shift_instruction: |
- | |
1035 | mov [opcode_prefix],66h |
- | |
1036 | mov [base_code],0Fh |
- | |
1037 | mov [extended_code],al |
- | |
1038 | or [vex_required],1 |
- | |
1039 | call take_avx_register |
- | |
1040 | mov [postbyte_register],al |
- | |
1041 | lods byte [esi] |
2459 | lods byte [esi] |
1042 | cmp al,',' |
2460 | cmp al,',' |
1043 | jne invalid_operand |
2461 | jne invalid_operand |
1044 | call take_avx_register |
2462 | call take_avx_register |
1045 | mov [vex_register],al |
2463 | mov [vex_register],al |
1046 | lods byte [esi] |
2464 | lods byte [esi] |
1047 | cmp al,',' |
2465 | cmp al,',' |
1048 | jne invalid_operand |
2466 | jne invalid_operand |
- | 2467 | call take_avx_register |
|
- | 2468 | mov [postbyte_register],al |
|
- | 2469 | add [supplemental_code],2 |
|
1049 | push esi |
2470 | jmp instruction_ready |
- | 2471 | avx_movmskpd_instruction: |
|
- | 2472 | mov [opcode_prefix],66h |
|
- | 2473 | avx_movmskps_instruction: |
|
1050 | xor cl,cl |
2474 | mov [base_code],0Fh |
1051 | xchg cl,[operand_size] |
2475 | mov [extended_code],50h |
- | 2476 | or [vex_required],2 |
|
1052 | lods byte [esi] |
2477 | lods byte [esi] |
1053 | call get_size_operator |
2478 | call get_size_operator |
1054 | cmp al,10h |
2479 | cmp al,10h |
1055 | je avx_bit_shift_regs_reg |
2480 | jne invalid_operand |
1056 | pop esi |
2481 | lods byte [esi] |
- | 2482 | call convert_register |
|
- | 2483 | mov [postbyte_register],al |
|
1057 | cmp al,'[' |
2484 | cmp ah,4 |
1058 | je avx_bit_shift_regs_mem |
2485 | je avx_movmskps_reg_ok |
- | 2486 | cmp ah,8 |
|
1059 | xchg cl,[operand_size] |
2487 | jne invalid_operand_size |
1060 | dec esi |
2488 | cmp [code_type],64 |
- | 2489 | jne invalid_operand |
|
- | 2490 | avx_movmskps_reg_ok: |
|
1061 | mov bl,[extended_code] |
2491 | mov [operand_size],0 |
- | 2492 | lods byte [esi] |
|
1062 | mov al,bl |
2493 | cmp al,',' |
- | 2494 | jne invalid_operand |
|
- | 2495 | call take_avx_register |
|
1063 | shr bl,4 |
2496 | mov bl,al |
- | 2497 | jmp nomem_instruction_ready |
|
- | 2498 | avx_maskmovdqu_instruction: |
|
- | 2499 | or [vex_required],2 |
|
- | 2500 | jmp maskmovdqu_instruction |
|
- | 2501 | avx_pmovmskb_instruction: |
|
1064 | and al,1111b |
2502 | or [vex_required],2 |
- | 2503 | mov [opcode_prefix],66h |
|
1065 | add al,70h |
2504 | mov [base_code],0Fh |
1066 | mov [extended_code],al |
2505 | mov [extended_code],al |
1067 | sub bl,0Ch |
- | |
1068 | shl bl,1 |
- | |
1069 | xchg bl,[postbyte_register] |
- | |
1070 | xchg bl,[vex_register] |
- | |
1071 | jmp mmx_nomem_imm8 |
- | |
1072 | avx_bit_shift_regs_reg: |
- | |
1073 | pop eax |
- | |
1074 | lods byte [esi] |
2506 | lods byte [esi] |
- | 2507 | call get_size_operator |
|
- | 2508 | cmp al,10h |
|
- | 2509 | jne invalid_operand |
|
- | 2510 | lods byte [esi] |
|
1075 | call convert_xmm_register |
2511 | call convert_register |
- | 2512 | cmp ah,4 |
|
- | 2513 | je avx_pmovmskb_reg_size_ok |
|
- | 2514 | cmp [code_type],64 |
|
- | 2515 | jne invalid_operand_size |
|
- | 2516 | cmp ah,8 |
|
- | 2517 | jnz invalid_operand_size |
|
- | 2518 | avx_pmovmskb_reg_size_ok: |
|
- | 2519 | mov [postbyte_register],al |
|
1076 | xchg cl,[operand_size] |
2520 | mov [operand_size],0 |
- | 2521 | lods byte [esi] |
|
- | 2522 | cmp al,',' |
|
- | 2523 | jne invalid_operand |
|
- | 2524 | call take_avx_register |
|
1077 | mov bl,al |
2525 | mov bl,al |
1078 | jmp nomem_instruction_ready |
2526 | jmp nomem_instruction_ready |
- | 2527 | ||
- | 2528 | gather_pd_instruction: |
|
- | 2529 | or [rex_prefix],8 |
|
- | 2530 | gather_ps_instruction: |
|
- | 2531 | call setup_66_0f_38 |
|
- | 2532 | or [vex_required],4 |
|
- | 2533 | or [operand_flags],20h |
|
1079 | avx_bit_shift_regs_mem: |
2534 | call take_avx_register |
- | 2535 | mov [postbyte_register],al |
|
- | 2536 | call take_avx512_mask |
|
- | 2537 | lods byte [esi] |
|
- | 2538 | cmp al,',' |
|
- | 2539 | jne invalid_operand |
|
- | 2540 | xor cl,cl |
|
- | 2541 | xchg cl,[operand_size] |
|
1080 | push ecx |
2542 | push ecx |
1081 | lods byte [esi] |
2543 | lods byte [esi] |
1082 | call get_size_operator |
2544 | call get_size_operator |
- | 2545 | cmp al,'[' |
|
- | 2546 | jne invalid_argument |
|
1083 | call get_address |
2547 | call get_address |
1084 | pop eax |
2548 | pop eax |
1085 | xchg al,[operand_size] |
2549 | xchg al,[operand_size] |
- | 2550 | gather_mem_size_check: |
|
- | 2551 | mov ah,4 |
|
- | 2552 | test [rex_prefix],8 |
|
- | 2553 | jz gather_elements_size_ok |
|
- | 2554 | add ah,ah |
|
- | 2555 | gather_elements_size_ok: |
|
- | 2556 | mov [mmx_size],ah |
|
1086 | test al,al |
2557 | test al,al |
1087 | jz instruction_ready |
2558 | jz gather_mem_size_ok |
1088 | cmp al,16 |
2559 | cmp al,ah |
1089 | jne invalid_operand_size |
2560 | jne invalid_operand_size |
- | 2561 | gather_mem_size_ok: |
|
1090 | jmp instruction_ready |
2562 | cmp byte [esi],',' |
1091 | avx_pslldq_instruction: |
2563 | je gather_reg_mem_reg |
1092 | mov [postbyte_register],al |
2564 | test [vex_required],20h |
- | 2565 | jz invalid_operand |
|
1093 | mov [opcode_prefix],66h |
2566 | mov ah,[operand_size] |
1094 | mov [base_code],0Fh |
2567 | mov al,80h |
1095 | mov [extended_code],73h |
2568 | jmp gather_arguments_ok |
- | 2569 | gather_reg_mem_reg: |
|
1096 | or [vex_required],1 |
2570 | or [vex_required],2 |
- | 2571 | inc esi |
|
1097 | call take_avx_register |
2572 | call take_avx_register |
- | 2573 | gather_arguments_ok: |
|
1098 | mov [vex_register],al |
2574 | mov [vex_register],al |
1099 | lods byte [esi] |
2575 | cmp al,[postbyte_register] |
- | 2576 | je disallowed_combination_of_registers |
|
1100 | cmp al,',' |
2577 | mov al,bl |
1101 | jne invalid_operand |
2578 | and al,11111b |
- | 2579 | cmp al,[postbyte_register] |
|
- | 2580 | je disallowed_combination_of_registers |
|
1102 | call take_avx_register |
2581 | cmp al,[vex_register] |
- | 2582 | je disallowed_combination_of_registers |
|
1103 | mov bl,al |
2583 | mov al,bl |
- | 2584 | shr al,5 |
|
- | 2585 | cmp al,0Ch shr 1 |
|
1104 | jmp mmx_nomem_imm8 |
2586 | je gather_vr128 |
- | 2587 | mov ah,32 |
|
- | 2588 | cmp al,6 shr 1 |
|
- | 2589 | jne gather_regular |
|
1105 | 2590 | add ah,ah |
|
1106 | vzeroall_instruction: |
2591 | gather_regular: |
1107 | mov [operand_size],32 |
2592 | mov al,[rex_prefix] |
- | 2593 | shr al,3 |
|
1108 | vzeroupper_instruction: |
2594 | xor al,[supplemental_code] |
- | 2595 | test al,1 |
|
1109 | mov [base_code],0Fh |
2596 | jz gather_uniform |
1110 | mov [extended_code],al |
2597 | test [supplemental_code],1 |
1111 | or [vex_required],1 |
2598 | jz gather_double |
- | 2599 | mov al,ah |
|
- | 2600 | xchg al,[operand_size] |
|
- | 2601 | add al,al |
|
- | 2602 | cmp al,ah |
|
1112 | call store_instruction_code |
2603 | jne invalid_operand_size |
1113 | jmp instruction_assembled |
2604 | jmp instruction_ready |
- | 2605 | gather_double: |
|
- | 2606 | add ah,ah |
|
1114 | vldmxcsr_instruction: |
2607 | gather_uniform: |
1115 | or [vex_required],1 |
2608 | cmp ah,[operand_size] |
- | 2609 | jne invalid_operand_size |
|
1116 | jmp fxsave_instruction |
2610 | jmp instruction_ready |
- | 2611 | gather_vr128: |
|
- | 2612 | cmp ah,16 |
|
1117 | vcvtph2ps_instruction: |
2613 | je instruction_ready |
- | 2614 | cmp ah,32 |
|
1118 | mov [opcode_prefix],66h |
2615 | jne invalid_operand_size |
1119 | mov [supplemental_code],al |
2616 | test [supplemental_code],1 |
- | 2617 | jnz invalid_operand_size |
|
1120 | mov al,38h |
2618 | test [rex_prefix],8 |
- | 2619 | jz invalid_operand_size |
|
- | 2620 | jmp instruction_ready |
|
1121 | jmp avx_cvtps2pd_instruction |
2621 | scatter_pd_instruction: |
- | 2622 | or [rex_prefix],8 |
|
1122 | vcvtps2ph_instruction: |
2623 | scatter_ps_instruction: |
1123 | call setup_66_0f_3a |
2624 | call setup_66_0f_38 |
1124 | or [vex_required],1 |
2625 | or [vex_required],4+8 |
- | 2626 | or [operand_flags],20h |
|
1125 | lods byte [esi] |
2627 | lods byte [esi] |
1126 | call get_size_operator |
2628 | call get_size_operator |
1127 | cmp al,10h |
- | |
1128 | je vcvtps2ph_reg |
- | |
1129 | cmp al,'[' |
2629 | cmp al,'[' |
1130 | jne invalid_operand |
2630 | jne invalid_argument |
1131 | call get_address |
2631 | call get_address |
- | 2632 | call take_avx512_mask |
|
1132 | lods byte [esi] |
2633 | lods byte [esi] |
1133 | cmp al,',' |
2634 | cmp al,',' |
1134 | jne invalid_operand |
2635 | jne invalid_operand |
- | 2636 | xor al,al |
|
1135 | shl [operand_size],1 |
2637 | xchg al,[operand_size] |
- | 2638 | push eax |
|
1136 | call take_avx_register |
2639 | call take_avx_register |
1137 | mov [postbyte_register],al |
2640 | mov [postbyte_register],al |
1138 | jmp mmx_imm8 |
2641 | pop eax |
- | 2642 | jmp gather_mem_size_check |
|
- | 2643 | gatherpf_qpd_instruction: |
|
- | 2644 | mov ah,0C7h |
|
- | 2645 | jmp gatherpf_pd_instruction |
|
- | 2646 | gatherpf_dpd_instruction: |
|
- | 2647 | mov ah,0C6h |
|
1139 | vcvtps2ph_reg: |
2648 | gatherpf_pd_instruction: |
1140 | lods byte [esi] |
2649 | or [rex_prefix],8 |
- | 2650 | mov cl,8 |
|
- | 2651 | jmp gatherpf_instruction |
|
- | 2652 | gatherpf_qps_instruction: |
|
- | 2653 | mov ah,0C7h |
|
- | 2654 | jmp gatherpf_ps_instruction |
|
- | 2655 | gatherpf_dps_instruction: |
|
- | 2656 | mov ah,0C6h |
|
- | 2657 | gatherpf_ps_instruction: |
|
- | 2658 | mov cl,4 |
|
- | 2659 | gatherpf_instruction: |
|
- | 2660 | mov [mmx_size],cl |
|
1141 | call convert_xmm_register |
2661 | mov [postbyte_register],al |
1142 | mov bl,al |
2662 | mov al,ah |
- | 2663 | call setup_66_0f_38 |
|
- | 2664 | or [vex_required],4+8 |
|
1143 | mov [operand_size],0 |
2665 | or [operand_flags],20h |
1144 | lods byte [esi] |
2666 | lods byte [esi] |
- | 2667 | call get_size_operator |
|
1145 | cmp al,',' |
2668 | cmp al,'[' |
- | 2669 | jne invalid_argument |
|
- | 2670 | call get_address |
|
- | 2671 | call take_avx512_mask |
|
- | 2672 | mov ah,[mmx_size] |
|
- | 2673 | mov al,[operand_size] |
|
- | 2674 | or al,al |
|
- | 2675 | jz gatherpf_mem_size_ok |
|
- | 2676 | cmp al,ah |
|
- | 2677 | jne invalid_operand_size |
|
- | 2678 | gatherpf_mem_size_ok: |
|
- | 2679 | mov [operand_size],64 |
|
- | 2680 | mov al,6 shr 1 |
|
- | 2681 | cmp ah,4 |
|
- | 2682 | je gatherpf_check_vsib |
|
- | 2683 | cmp [supplemental_code],0C6h |
|
- | 2684 | jne gatherpf_check_vsib |
|
- | 2685 | mov al,0Eh shr 1 |
|
- | 2686 | gatherpf_check_vsib: |
|
- | 2687 | mov ah,bl |
|
- | 2688 | shr ah,5 |
|
- | 2689 | cmp al,ah |
|
1146 | jne invalid_operand |
2690 | jne invalid_operand |
1147 | call take_avx_register |
- | |
1148 | mov [postbyte_register],al |
- | |
1149 | jmp mmx_nomem_imm8 |
2691 | jmp instruction_ready |
Line 1150... | Line 2692... | ||
1150 | 2692 | ||
1151 | bmi_instruction: |
2693 | bmi_instruction: |
1152 | mov [base_code],0Fh |
2694 | mov [base_code],0Fh |
1153 | mov [extended_code],38h |
2695 | mov [extended_code],38h |
1154 | mov [supplemental_code],0F3h |
2696 | mov [supplemental_code],0F3h |
1155 | mov [postbyte_register],al |
2697 | mov [postbyte_register],al |
1156 | bmi_reg: |
2698 | bmi_reg: |
1157 | or [vex_required],1 |
2699 | or [vex_required],2 |
1158 | lods byte [esi] |
2700 | lods byte [esi] |
1159 | call get_size_operator |
2701 | call get_size_operator |
1160 | cmp al,10h |
2702 | cmp al,10h |
1161 | jne invalid_operand |
2703 | jne invalid_operand |
Line 1199... | Line 2741... | ||
1199 | andn_instruction: |
2741 | andn_instruction: |
1200 | mov [base_code],0Fh |
2742 | mov [base_code],0Fh |
1201 | mov [extended_code],38h |
2743 | mov [extended_code],38h |
1202 | mov [supplemental_code],al |
2744 | mov [supplemental_code],al |
1203 | or [vex_required],1 |
2745 | or [vex_required],2 |
1204 | lods byte [esi] |
2746 | lods byte [esi] |
1205 | call get_size_operator |
2747 | call get_size_operator |
1206 | cmp al,10h |
2748 | cmp al,10h |
1207 | jne invalid_operand |
2749 | jne invalid_operand |
1208 | lods byte [esi] |
2750 | lods byte [esi] |
1209 | call convert_register |
2751 | call convert_register |
Line 1223... | Line 2765... | ||
1223 | bzhi_instruction: |
2765 | bzhi_instruction: |
1224 | mov [base_code],0Fh |
2766 | mov [base_code],0Fh |
1225 | mov [extended_code],38h |
2767 | mov [extended_code],38h |
1226 | mov [supplemental_code],al |
2768 | mov [supplemental_code],al |
1227 | or [vex_required],1 |
2769 | or [vex_required],2 |
1228 | call get_reg_mem |
2770 | call get_reg_mem |
1229 | jc bzhi_reg_reg |
2771 | jc bzhi_reg_reg |
1230 | call get_vex_source_register |
2772 | call get_vex_source_register |
1231 | jc invalid_operand |
2773 | jc invalid_operand |
1232 | call operand_32or64 |
2774 | call operand_32or64 |
1233 | jmp instruction_ready |
2775 | jmp instruction_ready |
Line 1255... | Line 2797... | ||
1255 | bextr_instruction: |
2797 | bextr_instruction: |
1256 | mov [base_code],0Fh |
2798 | mov [base_code],0Fh |
1257 | mov [extended_code],38h |
2799 | mov [extended_code],38h |
1258 | mov [supplemental_code],al |
2800 | mov [supplemental_code],al |
1259 | or [vex_required],1 |
2801 | or [vex_required],2 |
1260 | call get_reg_mem |
2802 | call get_reg_mem |
1261 | jc bextr_reg_reg |
2803 | jc bextr_reg_reg |
1262 | call get_vex_source_register |
2804 | call get_vex_source_register |
1263 | jc bextr_reg_mem_imm32 |
2805 | jc bextr_reg_mem_imm32 |
1264 | call operand_32or64 |
2806 | call operand_32or64 |
1265 | jmp instruction_ready |
2807 | jmp instruction_ready |
Line 1298... | Line 2840... | ||
1298 | mov [opcode_prefix],0F2h |
2840 | mov [opcode_prefix],0F2h |
1299 | mov [base_code],0Fh |
2841 | mov [base_code],0Fh |
1300 | mov [extended_code],3Ah |
2842 | mov [extended_code],3Ah |
1301 | mov [supplemental_code],al |
2843 | mov [supplemental_code],al |
1302 | or [vex_required],1 |
2844 | or [vex_required],2 |
1303 | call get_reg_mem |
2845 | call get_reg_mem |
1304 | jc rorx_reg_reg |
2846 | jc rorx_reg_reg |
1305 | call operand_32or64 |
2847 | call operand_32or64 |
1306 | jmp mmx_imm8 |
2848 | jmp mmx_imm8 |
1307 | rorx_reg_reg: |
2849 | rorx_reg_reg: |
1308 | call operand_32or64 |
2850 | call operand_32or64 |
1309 | jmp mmx_nomem_imm8 |
2851 | jmp mmx_nomem_imm8 |
1310 | 2852 | ||
Line 1311... | Line 2853... | ||
1311 | fma_instruction_pd: |
2853 | tbm_instruction: |
1312 | or [rex_prefix],8 |
2854 | mov [xop_opcode_map],9 |
1313 | fma_instruction_ps: |
- | |
1314 | mov [mmx_size],0 |
2855 | mov ah,al |
1315 | jmp avx_instruction_38_setup |
- | |
1316 | fma_instruction_sd: |
2856 | shr ah,4 |
1317 | or [rex_prefix],8 |
2857 | and al,111b |
1318 | mov [mmx_size],8 |
2858 | mov [base_code],ah |
1319 | jmp avx_instruction_38_setup |
2859 | mov [postbyte_register],al |
1320 | fma_instruction_ss: |
- | |
1321 | mov [mmx_size],4 |
2860 | jmp bmi_reg |
1322 | jmp avx_instruction_38_setup |
- | |
Line 1323... | Line 2861... | ||
1323 | 2861 | ||
- | 2862 | llwpcb_instruction: |
|
- | 2863 | or [vex_required],2 |
|
1324 | fma4_instruction_p: |
2864 | mov [xop_opcode_map],9 |
- | 2865 | mov [base_code],12h |
|
- | 2866 | mov [postbyte_register],al |
|
- | 2867 | lods byte [esi] |
|
- | 2868 | call get_size_operator |
|
- | 2869 | cmp al,10h |
|
- | 2870 | jne invalid_operand |
|
- | 2871 | lods byte [esi] |
|
- | 2872 | call convert_register |
|
- | 2873 | mov bl,al |
|
1325 | mov [mmx_size],0 |
2874 | call operand_32or64 |
1326 | jmp fma4_instruction_setup |
2875 | jmp nomem_instruction_ready |
1327 | fma4_instruction_sd: |
2876 | lwpins_instruction: |
1328 | mov [mmx_size],8 |
2877 | or [vex_required],2 |
1329 | jmp fma4_instruction_setup |
2878 | mov [xop_opcode_map],0Ah |
1330 | fma4_instruction_ss: |
2879 | mov [base_code],12h |
- | 2880 | mov [vex_register],al |
|
- | 2881 | lods byte [esi] |
|
- | 2882 | call get_size_operator |
|
- | 2883 | cmp al,10h |
|
- | 2884 | jne invalid_operand |
|
- | 2885 | lods byte [esi] |
|
- | 2886 | call convert_register |
|
- | 2887 | mov [postbyte_register],al |
|
- | 2888 | lods byte [esi] |
|
- | 2889 | cmp al,',' |
|
- | 2890 | jne invalid_operand |
|
- | 2891 | xor cl,cl |
|
- | 2892 | xchg cl,[operand_size] |
|
- | 2893 | lods byte [esi] |
|
- | 2894 | call get_size_operator |
|
- | 2895 | cmp al,10h |
|
- | 2896 | je lwpins_reg_reg |
|
- | 2897 | cmp al,'[' |
|
- | 2898 | jne invalid_argument |
|
- | 2899 | push ecx |
|
- | 2900 | call get_address |
|
- | 2901 | pop eax |
|
- | 2902 | xchg al,[operand_size] |
|
- | 2903 | test al,al |
|
- | 2904 | jz lwpins_reg_mem_size_ok |
|
- | 2905 | cmp al,4 |
|
1331 | mov [mmx_size],4 |
2906 | jne invalid_operand_size |
- | 2907 | lwpins_reg_mem_size_ok: |
|
- | 2908 | call prepare_lwpins |
|
- | 2909 | jmp store_instruction_with_imm32 |
|
- | 2910 | lwpins_reg_reg: |
|
- | 2911 | lods byte [esi] |
|
- | 2912 | call convert_register |
|
- | 2913 | cmp ah,4 |
|
1332 | fma4_instruction_setup: |
2914 | jne invalid_operand_size |
1333 | mov [immediate_size],-2 |
2915 | mov [operand_size],cl |
- | 2916 | mov bl,al |
|
1334 | mov byte [value],0 |
2917 | call prepare_lwpins |
- | 2918 | jmp store_nomem_instruction_with_imm32 |
|
- | 2919 | prepare_lwpins: |
|
- | 2920 | lods byte [esi] |
|
- | 2921 | cmp al,',' |
|
- | 2922 | jne invalid_operand |
|
- | 2923 | lods byte [esi] |
|
- | 2924 | call get_imm32 |
|
- | 2925 | call operand_32or64 |
|
- | 2926 | mov al,[vex_register] |
|
- | 2927 | xchg al,[postbyte_register] |
|
- | 2928 | mov [vex_register],al |
|
Line 1335... | Line 2929... | ||
1335 | jmp avx_instruction_3a_setup |
2929 | ret |
1336 | 2930 | ||
1337 | xop_single_source_sd_instruction: |
2931 | xop_single_source_sd_instruction: |
1338 | or [vex_required],2 |
2932 | or [operand_flags],2 |
1339 | mov [mmx_size],8 |
2933 | mov [mmx_size],8 |
1340 | jmp xop_instruction_9 |
2934 | jmp xop_instruction_9 |
1341 | xop_single_source_ss_instruction: |
2935 | xop_single_source_ss_instruction: |
1342 | or [vex_required],2 |
2936 | or [operand_flags],2 |
1343 | mov [mmx_size],4 |
2937 | mov [mmx_size],4 |
1344 | jmp xop_instruction_9 |
2938 | jmp xop_instruction_9 |
1345 | xop_single_source_instruction: |
2939 | xop_single_source_instruction: |
1346 | or [vex_required],2 |
2940 | or [operand_flags],2 |
1347 | mov [mmx_size],0 |
2941 | mov [mmx_size],0 |
1348 | xop_instruction_9: |
2942 | xop_instruction_9: |
1349 | mov [base_code],al |
2943 | mov [base_code],al |
1350 | mov [xop_opcode_map],9 |
2944 | mov [xop_opcode_map],9 |
1351 | jmp avx_common |
2945 | jmp avx_xop_common |
1352 | xop_single_source_128bit_instruction: |
2946 | xop_single_source_128bit_instruction: |
1353 | or [vex_required],2 |
2947 | or [operand_flags],2 |
1354 | mov [mmx_size],16 |
2948 | mov [mmx_size],16 |
1355 | jmp xop_instruction_9 |
2949 | jmp xop_instruction_9 |
1356 | xop_triple_source_128bit_instruction: |
2950 | xop_triple_source_128bit_instruction: |
Line 1364... | Line 2958... | ||
1364 | mov [mmx_size],16 |
2958 | mov [mmx_size],16 |
1365 | xop_instruction_8: |
2959 | xop_instruction_8: |
1366 | mov [base_code],al |
2960 | mov [base_code],al |
1367 | mov [xop_opcode_map],8 |
2961 | mov [xop_opcode_map],8 |
1368 | jmp avx_common |
2962 | jmp avx_xop_common |
1369 | xop_pcom_b_instruction: |
2963 | xop_pcom_b_instruction: |
1370 | mov ah,0CCh |
2964 | mov ah,0CCh |
1371 | jmp xop_pcom_instruction |
2965 | jmp xop_pcom_instruction |
1372 | xop_pcom_d_instruction: |
2966 | xop_pcom_d_instruction: |
1373 | mov ah,0CEh |
2967 | mov ah,0CEh |
1374 | jmp xop_pcom_instruction |
2968 | jmp xop_pcom_instruction |
Line 1390... | Line 2984... | ||
1390 | xop_pcom_uw_instruction: |
2984 | xop_pcom_uw_instruction: |
1391 | mov ah,0EDh |
2985 | mov ah,0EDh |
1392 | xop_pcom_instruction: |
2986 | xop_pcom_instruction: |
1393 | mov byte [value],al |
2987 | mov byte [value],al |
1394 | mov [mmx_size],16 |
2988 | mov [immediate_size],-4 |
- | 2989 | mov [mmx_size],16 |
|
1395 | mov [base_code],ah |
2990 | mov [base_code],ah |
1396 | mov [xop_opcode_map],8 |
2991 | mov [xop_opcode_map],8 |
1397 | jmp avx_common |
2992 | jmp avx_xop_common |
1398 | vpcmov_instruction: |
2993 | vpcmov_instruction: |
1399 | or [vex_required],1 |
2994 | or [vex_required],2 |
1400 | mov [immediate_size],-2 |
2995 | mov [immediate_size],-2 |
1401 | mov byte [value],0 |
2996 | mov byte [value],0 |
1402 | mov [mmx_size],0 |
2997 | mov [mmx_size],0 |
1403 | mov [base_code],al |
2998 | mov [base_code],al |
1404 | mov [xop_opcode_map],8 |
2999 | mov [xop_opcode_map],8 |
1405 | jmp avx_common |
3000 | jmp avx_xop_common |
1406 | xop_shift_instruction: |
3001 | xop_shift_instruction: |
1407 | mov [base_code],al |
3002 | mov [base_code],al |
1408 | or [vex_required],1 |
3003 | or [vex_required],2 |
1409 | mov [xop_opcode_map],9 |
3004 | mov [xop_opcode_map],9 |
1410 | call take_avx_register |
3005 | call take_avx_register |
1411 | cmp ah,16 |
3006 | cmp ah,16 |
1412 | jne invalid_operand |
3007 | jne invalid_operand |
1413 | mov [postbyte_register],al |
3008 | mov [postbyte_register],al |
1414 | lods byte [esi] |
3009 | lods byte [esi] |
Line 1480... | Line 3075... | ||
1480 | mov [xop_opcode_map],8 |
3075 | mov [xop_opcode_map],8 |
1481 | dec esi |
3076 | dec esi |
1482 | jmp mmx_imm8 |
3077 | jmp mmx_imm8 |
1483 | 3078 | ||
Line 1484... | Line -... | ||
1484 | vpermil_2pd_instruction: |
- | |
1485 | mov [immediate_size],-2 |
- | |
1486 | mov byte [value],al |
- | |
1487 | mov al,49h |
- | |
1488 | jmp vpermil2_instruction_setup |
- | |
1489 | vpermil_2ps_instruction: |
- | |
1490 | mov [immediate_size],-2 |
- | |
1491 | mov byte [value],al |
- | |
1492 | mov al,48h |
- | |
1493 | jmp vpermil2_instruction_setup |
- | |
1494 | vpermil2_instruction: |
- | |
1495 | mov [immediate_size],-3 |
- | |
1496 | mov byte [value],0 |
- | |
1497 | vpermil2_instruction_setup: |
- | |
1498 | mov [base_code],0Fh |
- | |
1499 | mov [supplemental_code],al |
- | |
1500 | mov al,3Ah |
- | |
1501 | mov [mmx_size],0 |
3079 | set_evex_mode: |
1502 | jmp avx_instruction |
- | |
1503 | - | ||
1504 | tbm_instruction: |
- | |
1505 | mov [xop_opcode_map],9 |
- | |
1506 | mov ah,al |
- | |
1507 | shr ah,4 |
- | |
1508 | and al,111b |
- | |
1509 | mov [base_code],ah |
3080 | mov [evex_mode],al |
1510 | mov [postbyte_register],al |
- | |
1511 | jmp bmi_reg |
- | |
1512 | - | ||
1513 | llwpcb_instruction: |
- | |
1514 | or [vex_required],1 |
- | |
1515 | mov [xop_opcode_map],9 |
- | |
1516 | mov [base_code],12h |
- | |
1517 | mov [postbyte_register],al |
- | |
1518 | lods byte [esi] |
- | |
1519 | call get_size_operator |
- | |
1520 | cmp al,10h |
- | |
1521 | jne invalid_operand |
- | |
1522 | lods byte [esi] |
- | |
1523 | call convert_register |
- | |
1524 | mov bl,al |
- | |
1525 | call operand_32or64 |
- | |
1526 | jmp nomem_instruction_ready |
- | |
1527 | lwpins_instruction: |
- | |
1528 | or [vex_required],1 |
- | |
1529 | mov [xop_opcode_map],0Ah |
- | |
1530 | mov [base_code],12h |
- | |
1531 | mov [vex_register],al |
- | |
1532 | lods byte [esi] |
- | |
1533 | call get_size_operator |
- | |
1534 | cmp al,10h |
- | |
1535 | jne invalid_operand |
- | |
1536 | lods byte [esi] |
- | |
1537 | call convert_register |
- | |
1538 | mov [postbyte_register],al |
- | |
1539 | lods byte [esi] |
- | |
1540 | cmp al,',' |
- | |
1541 | jne invalid_operand |
- | |
1542 | xor cl,cl |
- | |
1543 | xchg cl,[operand_size] |
- | |
1544 | lods byte [esi] |
- | |
1545 | call get_size_operator |
- | |
1546 | cmp al,10h |
- | |
1547 | je lwpins_reg_reg |
- | |
1548 | cmp al,'[' |
- | |
1549 | jne invalid_argument |
- | |
1550 | push ecx |
- | |
1551 | call get_address |
- | |
1552 | pop eax |
- | |
1553 | xchg al,[operand_size] |
- | |
1554 | test al,al |
- | |
1555 | jz lwpins_reg_mem_size_ok |
- | |
1556 | cmp al,4 |
- | |
1557 | jne invalid_operand_size |
- | |
1558 | lwpins_reg_mem_size_ok: |
- | |
1559 | call prepare_lwpins |
- | |
1560 | jmp store_instruction_with_imm32 |
- | |
1561 | lwpins_reg_reg: |
- | |
1562 | lods byte [esi] |
- | |
1563 | call convert_register |
- | |
1564 | cmp ah,4 |
- | |
1565 | jne invalid_operand_size |
- | |
1566 | mov [operand_size],cl |
- | |
1567 | mov bl,al |
- | |
1568 | call prepare_lwpins |
- | |
1569 | jmp store_nomem_instruction_with_imm32 |
- | |
1570 | prepare_lwpins: |
- | |
1571 | lods byte [esi] |
- | |
1572 | cmp al,',' |
- | |
1573 | jne invalid_operand |
- | |
1574 | lods byte [esi] |
- | |
1575 | call get_imm32 |
- | |
1576 | call operand_32or64 |
- | |
1577 | mov al,[vex_register] |
- | |
1578 | xchg al,[postbyte_register] |
- | |
1579 | mov [vex_register],al |
- | |
1580 | ret |
- | |
1581 | - | ||
1582 | gather_instruction_pd: |
- | |
1583 | or [rex_prefix],8 |
- | |
1584 | gather_instruction_ps: |
- | |
1585 | call setup_66_0f_38 |
- | |
1586 | or [vex_required],4 |
- | |
1587 | call take_avx_register |
- | |
1588 | mov [postbyte_register],al |
- | |
1589 | lods byte [esi] |
- | |
1590 | cmp al,',' |
- | |
1591 | jne invalid_operand |
- | |
1592 | xor cl,cl |
- | |
1593 | xchg cl,[operand_size] |
- | |
1594 | push ecx |
- | |
1595 | lods byte [esi] |
- | |
1596 | call get_size_operator |
- | |
1597 | cmp al,'[' |
- | |
1598 | jne invalid_argument |
- | |
1599 | call get_address |
- | |
1600 | pop eax |
- | |
1601 | xchg al,[operand_size] |
- | |
1602 | test al,al |
- | |
1603 | jz gather_elements_size_ok |
- | |
1604 | test [rex_prefix],8 |
- | |
1605 | jnz gather_elements_64bit |
- | |
1606 | cmp al,4 |
- | |
1607 | jne invalid_operand_size |
- | |
1608 | jmp gather_elements_size_ok |
- | |
1609 | gather_elements_64bit: |
- | |
1610 | cmp al,8 |
- | |
1611 | jne invalid_operand_size |
- | |
1612 | gather_elements_size_ok: |
- | |
1613 | lods byte [esi] |
- | |
1614 | cmp al,',' |
- | |
1615 | jne invalid_operand |
- | |
1616 | call take_avx_register |
- | |
1617 | mov [vex_register],al |
- | |
1618 | cmp al,[postbyte_register] |
- | |
1619 | je disallowed_combination_of_registers |
- | |
1620 | mov al,bl |
- | |
1621 | and al,1111b |
- | |
1622 | cmp al,[postbyte_register] |
- | |
1623 | je disallowed_combination_of_registers |
- | |
1624 | cmp al,[vex_register] |
- | |
1625 | je disallowed_combination_of_registers |
- | |
1626 | mov al,bl |
- | |
1627 | shr al,4 |
- | |
1628 | cmp al,0Ch |
- | |
1629 | je gather_vr_128bit |
- | |
1630 | mov al,[rex_prefix] |
- | |
1631 | shr al,3 |
- | |
1632 | xor al,[supplemental_code] |
- | |
1633 | test al,1 |
- | |
1634 | jz gather_256bit |
- | |
1635 | test [supplemental_code],1 |
- | |
1636 | jz invalid_operand_size |
- | |
1637 | mov al,32 |
- | |
1638 | xchg al,[operand_size] |
- | |
1639 | cmp al,16 |
- | |
1640 | jne invalid_operand_size |
- | |
1641 | jmp instruction_ready |
- | |
1642 | gather_256bit: |
- | |
1643 | cmp ah,32 |
- | |
1644 | jne invalid_operand_size |
- | |
1645 | jmp instruction_ready |
- | |
1646 | gather_vr_128bit: |
- | |
1647 | cmp ah,16 |
- | |
1648 | je instruction_ready |
- | |
1649 | test [supplemental_code],1 |
- | |
1650 | jnz invalid_operand_size |
- | |
1651 | test [rex_prefix],8 |
- | |
1652 | jz invalid_operand_size |
- | |
1653 | jmp instruction_ready |
3081 | jmp instruction_assembled |
Line 1654... | Line 3082... | ||
1654 | 3082 | ||
1655 | take_avx_register: |
3083 | take_avx_register: |
1656 | lods byte [esi] |
3084 | lods byte [esi] |
1657 | call get_size_operator |
3085 | call get_size_operator |
1658 | cmp al,10h |
3086 | cmp al,10h |
1659 | jne invalid_operand |
3087 | jne invalid_operand |
1660 | lods byte [esi] |
3088 | lods byte [esi] |
1661 | convert_avx_register: |
3089 | convert_avx_register: |
1662 | mov ah,al |
3090 | mov ah,al |
1663 | and al,0Fh |
3091 | and al,1Fh |
1664 | and ah,0F0h |
3092 | and ah,0E0h |
1665 | sub ah,0B0h |
3093 | sub ah,60h |
- | 3094 | jb invalid_operand |
|
1666 | jbe invalid_operand |
3095 | jz avx512_register_size |
1667 | cmp ah,32 |
3096 | sub ah,60h |
- | 3097 | jb invalid_operand |
|
- | 3098 | jnz avx_register_size_ok |
|
- | 3099 | mov ah,16 |
|
- | 3100 | jmp avx_register_size_ok |
|
- | 3101 | avx512_register_size: |
|
- | 3102 | mov ah,64 |
|
1668 | ja invalid_operand |
3103 | avx_register_size_ok: |
1669 | cmp al,8 |
3104 | cmp al,8 |
1670 | jb match_register_size |
3105 | jb match_register_size |
1671 | cmp [code_type],64 |
3106 | cmp [code_type],64 |
1672 | jne invalid_operand |
3107 | jne invalid_operand |
1673 | jmp match_register_size |
3108 | jmp match_register_size |
- | 3109 | store_vex_instruction_code: |
|
- | 3110 | test [rex_prefix],10h |
|
- | 3111 | jnz invalid_operand |
|
- | 3112 | test [vex_required],0F8h |
|
- | 3113 | jnz store_evex_instruction_code |
|
- | 3114 | test [vex_register],10000b |
|
- | 3115 | jnz store_evex_instruction_code |
|
- | 3116 | cmp [operand_size],64 |
|
1674 | store_vex_instruction_code: |
3117 | je store_evex_instruction_code |
1675 | mov al,[base_code] |
3118 | mov al,[base_code] |
1676 | cmp al,0Fh |
3119 | cmp al,0Fh |
- | 3120 | jne store_xop_instruction_code |
|
- | 3121 | test [vex_required],2 |
|
- | 3122 | jnz prepare_vex |
|
- | 3123 | cmp [evex_mode],0 |
|
- | 3124 | je prepare_vex |
|
- | 3125 | cmp [displacement_compression],1 |
|
- | 3126 | jne prepare_vex |
|
- | 3127 | cmp edx,80h |
|
- | 3128 | jb prepare_vex |
|
- | 3129 | cmp edx,-80h |
|
- | 3130 | jae prepare_vex |
|
- | 3131 | mov al,bl |
|
- | 3132 | or al,bh |
|
- | 3133 | shr al,4 |
|
- | 3134 | cmp al,2 |
|
- | 3135 | je prepare_vex |
|
- | 3136 | call compress_displacement |
|
- | 3137 | cmp [displacement_compression],2 |
|
- | 3138 | ja prepare_evex |
|
- | 3139 | jb prepare_vex |
|
- | 3140 | dec [displacement_compression] |
|
- | 3141 | mov edx,[uncompressed_displacement] |
|
1677 | jne store_xop_instruction_code |
3142 | prepare_vex: |
1678 | mov ah,[extended_code] |
3143 | mov ah,[extended_code] |
1679 | cmp ah,38h |
3144 | cmp ah,38h |
1680 | je store_vex_0f38_instruction_code |
3145 | je store_vex_0f38_instruction_code |
1681 | cmp ah,3Ah |
3146 | cmp ah,3Ah |
Line 1697... | Line 3162... | ||
1697 | add edi,3 |
3162 | add edi,3 |
1698 | ret |
3163 | ret |
1699 | get_vex_lpp_bits: |
3164 | get_vex_lpp_bits: |
1700 | cmp [operand_size],32 |
3165 | cmp [operand_size],32 |
1701 | jne vex_l_bit_ok |
3166 | jne get_vex_pp_bits |
1702 | or al,100b |
3167 | or al,100b |
1703 | vex_l_bit_ok: |
3168 | get_vex_pp_bits: |
1704 | mov ah,[opcode_prefix] |
3169 | mov ah,[opcode_prefix] |
1705 | cmp ah,66h |
3170 | cmp ah,66h |
1706 | je vex_66 |
3171 | je vex_66 |
1707 | cmp ah,0F3h |
3172 | cmp ah,0F3h |
1708 | je vex_f3 |
3173 | je vex_f3 |
1709 | cmp ah,0F2h |
3174 | cmp ah,0F2h |
Line 1783... | Line 3248... | ||
1783 | call get_vex_lpp_bits |
3248 | call get_vex_lpp_bits |
1784 | mov [edi+2],al |
3249 | mov [edi+2],al |
1785 | add edi,4 |
3250 | add edi,4 |
1786 | ret |
3251 | ret |
1787 | 3252 | store_evex_instruction_code: |
|
- | 3253 | test [vex_required],2 |
|
- | 3254 | jnz invalid_operand |
|
- | 3255 | cmp [base_code],0Fh |
|
- | 3256 | jne invalid_operand |
|
- | 3257 | cmp [displacement_compression],1 |
|
- | 3258 | jne prepare_evex |
|
- | 3259 | call compress_displacement |
|
- | 3260 | prepare_evex: |
|
- | 3261 | mov ah,[extended_code] |
|
- | 3262 | cmp ah,38h |
|
- | 3263 | je store_evex_0f38_instruction_code |
|
- | 3264 | cmp ah,3Ah |
|
- | 3265 | je store_evex_0f3a_instruction_code |
|
- | 3266 | mov al,11110001b |
|
- | 3267 | make_evex: |
|
- | 3268 | mov [edi+4],ah |
|
- | 3269 | mov byte [edi],62h |
|
- | 3270 | mov ah,[rex_prefix] |
|
- | 3271 | shl ah,5 |
|
- | 3272 | xor al,ah |
|
- | 3273 | mov ah,[vex_required] |
|
- | 3274 | and ah,10h |
|
- | 3275 | xor al,ah |
|
- | 3276 | mov [edi+1],al |
|
- | 3277 | call check_vex |
|
- | 3278 | mov al,[vex_register] |
|
- | 3279 | not al |
|
- | 3280 | and al,1111b |
|
- | 3281 | shl al,3 |
|
- | 3282 | mov ah,[rex_prefix] |
|
- | 3283 | shl ah,4 |
|
- | 3284 | or ah,[rex_prefix] |
|
- | 3285 | and ah,80h |
|
- | 3286 | or al,ah |
|
- | 3287 | or al,100b |
|
- | 3288 | call get_vex_pp_bits |
|
- | 3289 | mov [edi+2],al |
|
- | 3290 | mov al,[vex_register] |
|
- | 3291 | not al |
|
- | 3292 | shr al,1 |
|
- | 3293 | and al,1000b |
|
- | 3294 | test [vex_required],80h |
|
- | 3295 | jne evex_rounding |
|
- | 3296 | mov ah,[operand_size] |
|
- | 3297 | cmp ah,16 |
|
- | 3298 | jbe evex_l_ok |
|
- | 3299 | or al,ah |
|
- | 3300 | jmp evex_l_ok |
|
- | 3301 | evex_rounding: |
|
- | 3302 | mov ah,[rounding_mode] |
|
- | 3303 | shl ah,5 |
|
- | 3304 | or al,ah |
|
- | 3305 | evex_l_ok: |
|
- | 3306 | test [vex_required],20h |
|
- | 3307 | jz evex_zaaa_ok |
|
- | 3308 | or al,[mask_register] |
|
- | 3309 | evex_zaaa_ok: |
|
- | 3310 | test [vex_required],40h |
|
- | 3311 | jz evex_b_ok |
|
- | 3312 | or al,10h |
|
- | 3313 | evex_b_ok: |
|
- | 3314 | mov [edi+3],al |
|
- | 3315 | add edi,5 |
|
- | 3316 | ret |
|
- | 3317 | store_evex_0f38_instruction_code: |
|
- | 3318 | mov al,11110010b |
|
- | 3319 | mov ah,[supplemental_code] |
|
- | 3320 | jmp make_evex |
|
- | 3321 | store_evex_0f3a_instruction_code: |
|
- | 3322 | mov al,11110011b |
|
- | 3323 | mov ah,[supplemental_code] |
|
- | 3324 | jmp make_evex |
|
- | 3325 | compress_displacement: |
|
- | 3326 | mov ebp,ecx |
|
- | 3327 | mov [uncompressed_displacement],edx |
|
- | 3328 | or edx,edx |
|
- | 3329 | jz displacement_compressed |
|
- | 3330 | xor ecx,ecx |
|
- | 3331 | mov cl,[mmx_size] |
|
- | 3332 | test cl,cl |
|
- | 3333 | jnz calculate_displacement_scale |
|
- | 3334 | mov cl,[operand_size] |
|
- | 3335 | calculate_displacement_scale: |
|
- | 3336 | bsf ecx,ecx |
|
- | 3337 | jz displacement_compression_ok |
|
- | 3338 | xor eax,eax |
|
- | 3339 | shrd eax,edx,cl |
|
- | 3340 | jnz displacement_not_compressed |
|
- | 3341 | sar edx,cl |
|
- | 3342 | cmp edx,80h |
|
- | 3343 | jb displacement_compressed |
|
- | 3344 | cmp edx,-80h |
|
- | 3345 | jnb displacement_compressed |
|
- | 3346 | shl edx,cl |
|
- | 3347 | displacement_not_compressed: |
|
- | 3348 | inc [displacement_compression] |
|
- | 3349 | jmp displacement_compression_ok |
|
- | 3350 | displacement_compressed: |
|
- | 3351 | add [displacement_compression],2 |
|
- | 3352 | displacement_compression_ok: |
|
- | 3353 | mov ecx,ebp |
|
- | 3354 | ret |
|
- | 3355 |