VirtualBox

source: vbox/trunk/src/VBox/Disassembler/testcase/tstDisasm-1A.asm@ 53094

Last change on this file since 53094 was 53094, checked in by vboxsync, 10 years ago

DIS: #6251: AVX / VEX instructions support (two byte instructions only) and some fixes to the other tables.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 10.0 KB
Line 
1; $Id: tstDisasm-1A.asm 53094 2014-10-20 16:04:09Z vboxsync $
2;; @file
3; VBox disassembler: Assembler test routines
4;
5
6;
7; Copyright (C) 2006-2012 Oracle Corporation
8;
9; This file is part of VirtualBox Open Source Edition (OSE), as
10; available from http://www.virtualbox.org. This file is free software;
11; you can redistribute it and/or modify it under the terms of the GNU
12; General Public License (GPL) as published by the Free Software
13; Foundation, in version 2 as it comes in the "COPYING" file of the
14; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16;
17
18;*******************************************************************************
19;* Header Files *
20;*******************************************************************************
21%include "iprt/asmdefs.mac"
22;%include "VBox/vmm/vm.mac"
23;%include "VBox/err.mac"
24;%include "VBox/vmm/stam.mac"
25;%include "iprt/x86.mac"
26
27BITS 32
28
29%if __YASM_VERSION_ID__ >= 001020001h ; v1.2.0.1 and greater, make sure to exclude v1.2.0.0.
30 %define pmulhrwa pmulhrw
31%endif
32
33
34BEGINCODE
35
36align 16
37BEGINPROC TestProc32
38 xor eax, eax
39 mov al, 4
40 lea edx, [4]
41 mov edx, 4
42 mov eax, 4
43 shl eax, 4
44 shl edx, 4
45 shr edx, 4
46 mov eax, edx
47 mov eax, ecx
48 mov edx, eax
49 mov ecx, eax
50 DB 0xF0, 0x0F, 0x22, 0xC0
51 DB 0xF0, 0x0F, 0x20, 0xC0
52 smsw word [edx+16]
53 ; invept eax, dqword [ecx]
54 DB 0x66, 0x0F, 0x38, 0x80, 0x1
55 ; invept eax, dqword [ecx]
56 DB 0x66, 0x0F, 0x38, 0x81, 0x1
57 mov eax, dword [ecx]
58 mov word [edi], 0123ah
59 movzx eax,byte [edx]
60 movzx eax,word [edx]
61 mov dword [es:ebx + 1234h], 0789h
62 mov word [fs:ebx + ecx], 0654h
63 mov byte [esi + eax*4], 054h
64 mov bl, byte [ds:ebp + 1234h]
65 mov al, [cs:1234h + ecx*8]
66 mov al, [cs:1234h]
67 mov ax, [cs:1234h]
68 mov eax, [cs:1234h]
69 lock cmpxchg [ecx], eax
70 lock cmpxchg [ecx], ax
71 lock cmpxchg [ecx], dl
72 movzx ESI,word [EAX]
73 in al, dx
74 in ax, dx
75 in eax, dx
76 mov ebx, [ecx + eax*4 + 17]
77 mov ebx, [ebp + eax*4 + 4]
78 mov ebx, [ebp + eax*4]
79 int 80h
80 in al, 60h
81 in ax, dx
82 out 64h, eax
83
84 movss xmm0, xmm1
85 movss xmm3, [eax]
86 movss [eax], xmm4
87 movsd xmm6, xmm1
88
89 pause
90 nop
91
92 ; 3Dnow!
93 pavgusb mm1, mm0
94 pf2id mm5, mm4
95 pf2iw mm6, mm3
96 pfacc mm7, mm2
97 pfadd mm5, mm4
98 pfcmpeq mm6, mm3
99 pfcmpge mm2, mm7
100 pfcmpgt mm4, mm5
101 pfmax mm3, mm6
102 pfmin mm1, mm0
103 pfmul mm5, mm4
104 pmulhrwa mm3, mm6
105 pfnacc mm4, mm5
106 pfpnacc mm3, mm6
107 pfrcp mm0, mm1
108 pfrcpit1 mm2, mm7
109 pfrcpit2 mm4, mm5
110 pfrsqrt mm7, mm2
111 pfrsqit1 mm1, mm0
112 pfsub mm6, mm3
113 pfsubr mm0, mm1
114 pi2fd mm7, mm2
115 pi2fw mm0, mm1
116 pswapd mm2, mm7
117
118 pavgusb mm1, qword [es:eax+000000010h]
119 pf2id mm5, qword [ds:esi+000101010h]
120 pf2iw mm6, qword [fs:esi+000101010h]
121 pfacc mm7, qword [gs:esi+000101010h]
122 pfadd mm5, qword [ esi+000101010h]
123 pfcmpeq mm6, qword [ edi*8+000101010h]
124 pfcmpge mm2, qword [es:esi+000100010h]
125 pfcmpgt mm4, qword [es:esi+000101010h]
126 pfmax mm3, qword [es:esi+000101010h]
127 pfmin mm1, qword [es:esi+000101010h]
128 pfmul mm5, qword [es:esi+000101000h]
129 pmulhrwa mm3, qword [es:eax+0ffffffffh]
130 pfnacc mm4, qword [es:ebx+000101010h]
131 pfpnacc mm3, qword [es:edx+000102900h]
132 pfrcp mm0, qword [es:ecx+000101020h]
133 pfrcpit1 mm2, qword [es:ebp+000101510h]
134 pfrcpit2 mm4, qword [es:esp+000101310h]
135 pfrsqrt mm7, qword [es:esi+0f0106010h]
136 pfrsqit1 mm1, qword [es:edi+0001f1010h]
137 pfsub mm6, qword [es:esi*2]
138 pfsubr mm0, qword [es:esi*3]
139 pi2fd mm7, qword [es:esi*4]
140 pi2fw mm0, qword [es:esi*5]
141 pswapd mm2, qword [es:esi*8]
142
143 pmulhrwa mm0, qword [ds:ebp+edi*8+00f000001h]
144
145 ; MMX
146 psubusb mm1, mm3
147 cvtpi2pd xmm0, mm3
148 paddd mm1, mm3
149 paddd xmm1, xmm3
150
151%if __YASM_VERSION_ID__ >= 001030000h ; Old yasm doesn't support the instructions below
152 adcx eax, ebx
153 adcx eax, [edi]
154
155 adox eax, ebx
156 adox eax, [edi]
157 adox eax, [edi + 1000h]
158
159 tzcnt ax, bx
160 tzcnt eax, ebx
161 tzcnt ax, [edi]
162 tzcnt eax, [edi]
163 tzcnt eax, [edi + 1000h]
164%endif
165
166 movbe eax, [edi]
167 movbe ebx, [edi + 1000h]
168 movbe ax, [edi]
169 movbe [edi], eax
170
171 crc32 eax, bl
172 crc32 eax, bx
173 crc32 eax, ebx
174 crc32 eax, byte [edi]
175 crc32 eax, word [edi]
176 crc32 eax, dword [edi]
177
178 popcnt ax, bx
179 popcnt eax, ebx
180 popcnt ax, [edi]
181 popcnt eax, [edi]
182 popcnt eax, [edi + 1000h]
183
184 lzcnt ax, bx
185 lzcnt eax, ebx
186 lzcnt ax, [edi]
187 lzcnt eax, [edi]
188 lzcnt eax, [edi + 1000h]
189
190 vmread eax, ebx
191 vmwrite eax, ebx
192
193 movd mm0, [edi]
194 movq mm0, [edi]
195 movq mm0, mm1
196
197 vmovups xmm0, xmm1
198 vmovaps ymm0, ymm1
199 vunpcklps xmm0, xmm1, xmm2
200 vunpcklps ymm0, ymm1, ymm2
201
202 lddqu xmm1, [ds:ebp+edi*8+00f000001h]
203 vlddqu xmm1, [ds:ebp+edi*8+00f000001h]
204 vlddqu ymm1, [ds:ebp+edi*8+00f000001h]
205
206ENDPROC TestProc32
207
208
209%ifndef RT_OS_OS2
210BITS 64
211align 16
212BEGINPROC TestProc64
213 mov cr8, rax
214 mov cr8, rbx
215 mov [0xfffe0080], rax
216 mov [0xfffe0080], rbx
217 mov rax, cr8
218 mov rbx, cr8
219 mov rax, [0xfffe0080]
220 mov rbx, [0xfffe0080]
221 divsd xmm1, xmm0
222 ; invept rdi, dqword [rsi]
223 DB 0x66, 0x0F, 0x38, 0x80, 0x3E
224 ; invept rcx, dqword [rdx]
225 DB 0x66, 0x0F, 0x38, 0x80, 0xA
226 ;invvpid rdi, dqword [rsi]
227 DB 0x66, 0x0F, 0x38, 0x81, 0x3E
228 ; invvpid rcx, dqword [rdx]
229 DB 0x66, 0x0F, 0x38, 0x81, 0xA
230 mov rdi, [rsi]
231 mov rcx, [rdx]
232 db 48h
233 db 0c7h
234 db 42h
235 db 18h
236 db 20h
237 db 3eh
238 db 23h
239 db 80h
240 call qword [r8+10h]
241 ; test
242 db 48h
243 db 8bh
244 db 44h
245 db 0ah
246 db 0f8h
247 ;incorrectly assembled by yasm; REX.W should not be added!
248 ;test rax, dword 0cc90cc90h
249 db 8bh
250 db 04h
251 db 8dh
252 db 00h
253 db 00h
254 db 0feh
255 db 0ffh
256 mov qword [rcx+rdx], 0
257 mov dword [rcx+rdx], 0
258 and [r15], rax
259 movzx rcx, sil
260 and sil, 3
261 movzx ecx, ah
262 and ah, 3
263
264 sub rcx, 1234h
265 mov rax, qword [0cc90cc90h]
266 mov rax, qword [00c90cc90h]
267 mov rax, dword 0cc90cc90h
268 mov rax, qword 0ffffcc90cc90h
269
270 movzx rax,byte [edx]
271 movzx rax,word [edx]
272 movzx rax,byte [rdx]
273 lock cmpxchg [rcx], rax
274 lock cmpxchg [rcx], ax
275 lock cmpxchg [r15], dl
276 movzx RSI, word [R8]
277 in al, dx
278 in ax, dx
279 in eax, dx
280 mov rbx, [rcx + rax*4 + 17]
281 mov rbx, [rbp + rax*4 + 4]
282 mov rbx, [rbp + rax*4]
283 mov rbx, [ebp + eax*4]
284 int 80h
285 in al, 60h
286 in ax, dx
287 out 64h, eax
288
289 movss xmm0, xmm14
290 movsd xmm6, xmm1
291
292 movbe eax, [rdi]
293 movbe ax, [rdi]
294 movbe rax, [rdi]
295
296 crc32 eax, bl
297 crc32 eax, bx
298 crc32 eax, ebx
299 crc32 eax, byte [edi]
300 crc32 eax, word [edi]
301 crc32 eax, dword [edi]
302
303 crc32 rax, bl
304 crc32 rax, byte [rdi]
305 crc32 rax, qword [rdi]
306
307%if __YASM_VERSION_ID__ >= 001030000h ; Old yasm doesn't support the instructions below
308
309 adcx eax, ebx
310 adcx rax, rbx
311 adcx r8, r11
312 adcx r8d, edx
313
314 adox eax, ebx
315 adox eax, [edi]
316 adox eax, [edi + 1000h]
317
318 adox rax, rbx
319 adox rax, [rdi]
320 adox rax, [rdi + 1000h]
321 adox rax, [edi + 1000h]
322
323 tzcnt ax, bx
324 tzcnt eax, ebx
325 tzcnt rax, rbx
326 tzcnt ax, [edi]
327 tzcnt eax, [edi]
328 tzcnt eax, [edi + 1000h]
329
330 vpunpcklbw ymm1, ymm2, ymm3
331%endif
332
333 popcnt ax, bx
334 popcnt eax, ebx
335 popcnt rax, rbx
336 popcnt ax, [edi]
337 popcnt eax, [edi]
338 popcnt eax, [edi + 1000h]
339 popcnt rax, [rdi + 1000h]
340
341 lzcnt ax, bx
342 lzcnt eax, ebx
343 lzcnt rax, rbx
344 lzcnt ax, [edi]
345 lzcnt eax, [edi]
346 lzcnt eax, [edi + 1000h]
347 lzcnt eax, [rdi]
348 lzcnt ax, [rdi]
349 lzcnt rax, [rdi]
350 lzcnt r8d, [rdi]
351
352 vmread rax, rbx
353 vmwrite rax, rbx
354
355 getsec
356
357 movd mm0, [rdi]
358 movq mm0, [edi]
359 movq mm0, mm1
360
361 vmovups xmm0, xmm1
362 vmovaps ymm0, ymm1
363 vunpcklps xmm0, xmm1, xmm2
364 vunpcklps ymm0, ymm1, ymm2
365 vunpcklps ymm0, ymm10, ymm2
366
367 vmovups xmm5, xmm9
368
369 vcmpps xmm1, xmm2, xmm3, 12
370
371 lddqu xmm1, [ebp+edi*8+00f000001h]
372 vlddqu xmm1, [rbp+rdi*8+00f000001h]
373 vlddqu ymm1, [rbp+rdi*8+00f000001h]
374
375 ret
376ENDPROC TestProc64
377%endif ; !OS2
378
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette