VirtualBox

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

最後變更 在這個檔案從53164是 53164,由 vboxsync 提交於 10 年 前

DIS: #6249: Added missing 660F38h instructions. Small bug fixes. Unit test updated.

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

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