973
|
1 // $HeadURL$
|
|
2 // $Date$
|
|
3 // $Author$
|
|
4
|
|
5 module dstress.run.a.asm_pmovmskb_01_A;
|
|
6
|
1018
|
7
|
|
8 version(D_InlineAsm_X86){
|
|
9 version = runTest;
|
|
10 }else version(D_InlineAsm_X86_64){
|
|
11 version = runTest;
|
|
12 }
|
|
13
|
|
14 version(runTest){
|
|
15 import addon.cpuinfo;
|
|
16
|
|
17 int main(){
|
|
18 haveSSE2!()();
|
|
19
|
1290
|
20 ubyte Y = 0b1000_0000;
|
|
21 ubyte N = 0b0111_1111;
|
1018
|
22
|
1290
|
23 ubyte[] A = [Y, N, Y, Y, N, N, Y, Y, Y, N, N, N, Y, N, N, Y];
|
|
24 ubyte* a = A.ptr;
|
1018
|
25
|
|
26 int b;
|
|
27
|
1290
|
28 static if(size_t.sizeof == 4){
|
|
29 asm{
|
|
30 mov EAX, 0x1234_5678;
|
|
31 mov EAX, a;
|
|
32 movdqu XMM0, [EAX];
|
|
33 pmovmskb EAX, XMM0;
|
|
34 mov b, EAX;
|
|
35 }
|
|
36 }else static if(size_t.sizeof == 8){
|
|
37 asm{
|
|
38 mov EAX, 0x1234_5678;
|
|
39 mov RAX, a;
|
|
40 movdqu XMM0, [RAX];
|
|
41 pmovmskb EAX, XMM0;
|
|
42 mov b, EAX;
|
|
43 }
|
|
44 }else{
|
|
45 static assert(0, "unhandled pointer size");
|
973
|
46 }
|
|
47
|
1290
|
48 if(b != 0b1001_0001_1100_1101){
|
973
|
49 assert(0);
|
|
50 }
|
|
51
|
|
52 return 0;
|
|
53 }
|
1018
|
54 }else{
|
|
55 pragma(msg, "DSTRESS{XFAIL}: No inline ASM support");
|
|
56 static assert(0);
|
973
|
57 }
|