VirtualBox

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

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

DIS: #6249: Some bug fixes and new testcases. Enabled 0F3A instructions which were accidentally disabled. Added support for 0F3A instruction without prefix.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 10.6 KB
Line 
1; $Id: tstDisasm-1A.asm 53155 2014-10-27 16:43:43Z 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 vpmovsxbw ymm0, xmm1
165%endif
166
167 movbe eax, [edi]
168 movbe ebx, [edi + 1000h]
169 movbe ax, [edi]
170 movbe [edi], eax
171
172 crc32 eax, bl
173 crc32 eax, bx
174 crc32 eax, ebx
175 crc32 eax, byte [edi]
176 crc32 eax, word [edi]
177 crc32 eax, dword [edi]
178
179 popcnt ax, bx
180 popcnt eax, ebx
181 popcnt ax, [edi]
182 popcnt eax, [edi]
183 popcnt eax, [edi + 1000h]
184
185 lzcnt ax, bx
186 lzcnt eax, ebx
187 lzcnt ax, [edi]
188 lzcnt eax, [edi]
189 lzcnt eax, [edi + 1000h]
190
191 vmread eax, ebx
192 vmwrite eax, ebx
193
194 movd mm0, [edi]
195 movq mm0, [edi]
196 movq mm0, mm1
197
198 vmovups xmm0, xmm1
199 vmovaps ymm0, ymm1
200 vunpcklps xmm0, xmm1, xmm2
201 vunpcklps ymm0, ymm1, ymm2
202
203 lddqu xmm1, [ds:ebp+edi*8+00f000001h]
204 vlddqu xmm1, [ds:ebp+edi*8+00f000001h]
205 vlddqu ymm1, [ds:ebp+edi*8+00f000001h]
206
207 vpmovsxbw xmm0,qword [0x100]
208 vbroadcastf128 ymm0,oword [0x100]
209
210 palignr mm0, mm1, 1
211 vpinsrb xmm0, xmm1, eax, 1
212 vpinsrb xmm0, xmm1, [100h], 1
213 vinsertps xmm0, xmm1, xmm2, 1
214 vinsertps xmm0, xmm1, [100h], 1
215
216 vblendvps xmm0, xmm1, xmm2, xmm3
217 vblendvps ymm0, ymm1, ymm2, ymm3
218
219ENDPROC TestProc32
220
221
222%ifndef RT_OS_OS2
223BITS 64
224align 16
225BEGINPROC TestProc64
226 mov cr8, rax
227 mov cr8, rbx
228 mov [0xfffe0080], rax
229 mov [0xfffe0080], rbx
230 mov rax, cr8
231 mov rbx, cr8
232 mov rax, [0xfffe0080]
233 mov rbx, [0xfffe0080]
234 divsd xmm1, xmm0
235 ; invept rdi, dqword [rsi]
236 DB 0x66, 0x0F, 0x38, 0x80, 0x3E
237 ; invept rcx, dqword [rdx]
238 DB 0x66, 0x0F, 0x38, 0x80, 0xA
239 ;invvpid rdi, dqword [rsi]
240 DB 0x66, 0x0F, 0x38, 0x81, 0x3E
241 ; invvpid rcx, dqword [rdx]
242 DB 0x66, 0x0F, 0x38, 0x81, 0xA
243 mov rdi, [rsi]
244 mov rcx, [rdx]
245 db 48h
246 db 0c7h
247 db 42h
248 db 18h
249 db 20h
250 db 3eh
251 db 23h
252 db 80h
253 call qword [r8+10h]
254 ; test
255 db 48h
256 db 8bh
257 db 44h
258 db 0ah
259 db 0f8h
260 ;incorrectly assembled by yasm; REX.W should not be added!
261 ;test rax, dword 0cc90cc90h
262 db 8bh
263 db 04h
264 db 8dh
265 db 00h
266 db 00h
267 db 0feh
268 db 0ffh
269 mov qword [rcx+rdx], 0
270 mov dword [rcx+rdx], 0
271 and [r15], rax
272 movzx rcx, sil
273 and sil, 3
274 movzx ecx, ah
275 and ah, 3
276
277 sub rcx, 1234h
278 mov rax, qword [0cc90cc90h]
279 mov rax, qword [00c90cc90h]
280 mov rax, dword 0cc90cc90h
281 mov rax, qword 0ffffcc90cc90h
282
283 movzx rax,byte [edx]
284 movzx rax,word [edx]
285 movzx rax,byte [rdx]
286 lock cmpxchg [rcx], rax
287 lock cmpxchg [rcx], ax
288 lock cmpxchg [r15], dl
289 movzx RSI, word [R8]
290 in al, dx
291 in ax, dx
292 in eax, dx
293 mov rbx, [rcx + rax*4 + 17]
294 mov rbx, [rbp + rax*4 + 4]
295 mov rbx, [rbp + rax*4]
296 mov rbx, [ebp + eax*4]
297 int 80h
298 in al, 60h
299 in ax, dx
300 out 64h, eax
301
302 movss xmm0, xmm14
303 movsd xmm6, xmm1
304
305 movbe eax, [rdi]
306 movbe ax, [rdi]
307 movbe rax, [rdi]
308
309 crc32 eax, bl
310 crc32 eax, bx
311 crc32 eax, ebx
312 crc32 eax, byte [edi]
313 crc32 eax, word [edi]
314 crc32 eax, dword [edi]
315
316 crc32 rax, bl
317 crc32 rax, byte [rdi]
318 crc32 rax, qword [rdi]
319
320%if __YASM_VERSION_ID__ >= 001030000h ; Old yasm doesn't support the instructions below
321
322 adcx eax, ebx
323 adcx rax, rbx
324 adcx r8, r11
325 adcx r8d, edx
326
327 adox eax, ebx
328 adox eax, [edi]
329 adox eax, [edi + 1000h]
330
331 adox rax, rbx
332 adox rax, [rdi]
333 adox rax, [rdi + 1000h]
334 adox rax, [edi + 1000h]
335
336 tzcnt ax, bx
337 tzcnt eax, ebx
338 tzcnt rax, rbx
339 tzcnt ax, [edi]
340 tzcnt eax, [edi]
341 tzcnt eax, [edi + 1000h]
342
343 vpunpcklbw ymm1, ymm2, ymm3
344 vpmovsxbw ymm4,[0x100]
345%endif
346
347 popcnt ax, bx
348 popcnt eax, ebx
349 popcnt rax, rbx
350 popcnt ax, [edi]
351 popcnt eax, [edi]
352 popcnt eax, [edi + 1000h]
353 popcnt rax, [rdi + 1000h]
354
355 lzcnt ax, bx
356 lzcnt eax, ebx
357 lzcnt rax, rbx
358 lzcnt ax, [edi]
359 lzcnt eax, [edi]
360 lzcnt eax, [edi + 1000h]
361 lzcnt eax, [rdi]
362 lzcnt ax, [rdi]
363 lzcnt rax, [rdi]
364 lzcnt r8d, [rdi]
365
366 vmread rax, rbx
367 vmwrite rax, rbx
368
369 getsec
370
371 movd mm0, [rdi]
372 movq mm0, [edi]
373 movq mm0, mm1
374
375 vmovups xmm0, xmm1
376 vmovaps ymm0, ymm1
377 vunpcklps xmm0, xmm1, xmm2
378 vunpcklps ymm0, ymm1, ymm2
379 vunpcklps ymm0, ymm10, ymm2
380
381 vmovups xmm5, xmm9
382
383 vcmpps xmm1, xmm2, xmm3, 12
384
385 lddqu xmm1, [ebp+edi*8+00f000001h]
386 vlddqu xmm1, [rbp+rdi*8+00f000001h]
387 vlddqu ymm1, [rbp+rdi*8+00f000001h]
388
389 vbroadcastf128 ymm0,oword [0x100]
390 vmovlps xmm0, xmm1, [100h]
391
392 vblendvpd xmm0, xmm1, [100h], xmm3
393
394 dpps xmm0, xmm1, 1
395
396 extractps eax, xmm2, 3
397
398 ret
399ENDPROC TestProc64
400%endif ; !OS2
401
Note: See TracBrowser for help on using the repository browser.

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