Mercurial > projects > dstress
comparison run/a/asm_pxor_02_A.d @ 1329:1c8652b3795a
inline asm review
author | thomask |
---|---|
date | Fri, 12 Jan 2007 23:07:17 +0000 |
parents | a929acac9127 |
children |
comparison
equal
deleted
inserted
replaced
1328:288d15cd3b95 | 1329:1c8652b3795a |
---|---|
14 import addon.cpuinfo; | 14 import addon.cpuinfo; |
15 | 15 |
16 int main(){ | 16 int main(){ |
17 haveSSE2!()(); | 17 haveSSE2!()(); |
18 | 18 |
19 ushort[8] a = new ushort[8]; | 19 ushort* a = (new ushort[8]).ptr; |
20 a[0] = 0x1200; | 20 a[0] = 0x1200; |
21 a[1] = 0x0120; | 21 a[1] = 0x0120; |
22 a[2] = 0x0012; | 22 a[2] = 0x0012; |
23 a[3] = 0x2001; | 23 a[3] = 0x2001; |
24 a[4] = 0x0008; | 24 a[4] = 0x0008; |
25 a[5] = 0xFFFF; | 25 a[5] = 0xFFFF; |
26 a[6] = 0x0000; | 26 a[6] = 0x0000; |
27 a[7] = 0x1111; | 27 a[7] = 0x1111; |
28 | 28 |
29 ushort[] b = new ushort[8]; | 29 ushort* b = (new ushort[8]).ptr; |
30 b[0] = 0x2100; | 30 b[0] = 0x2100; |
31 b[1] = 0x2100; | 31 b[1] = 0x2100; |
32 b[2] = 0x2100; | 32 b[2] = 0x2100; |
33 b[3] = 0x2100; | 33 b[3] = 0x2100; |
34 b[4] = 0x2100; | 34 b[4] = 0x2100; |
35 b[5] = 0x0F00; | 35 b[5] = 0x0F00; |
36 b[6] = 0x0102; | 36 b[6] = 0x0102; |
37 b[7] = 0x2222; | 37 b[7] = 0x2222; |
38 | 38 |
39 ushort[] c = new ushort[8]; | 39 ushort* c = (new ushort[8]).ptr; |
40 c[0] = 0x3300; | 40 c[0] = 0x3300; |
41 c[1] = 0x2020; | 41 c[1] = 0x2020; |
42 c[2] = 0x2112; | 42 c[2] = 0x2112; |
43 c[3] = 0x0101; | 43 c[3] = 0x0101; |
44 c[4] = 0x2108; | 44 c[4] = 0x2108; |
45 c[5] = 0xF0FF; | 45 c[5] = 0xF0FF; |
46 c[6] = 0x0102; | 46 c[6] = 0x0102; |
47 c[7] = 0x3333; | 47 c[7] = 0x3333; |
48 | 48 |
49 ushort[] d = new ushort[8]; | 49 ushort* d = (new ushort[8]).ptr; |
50 ushort[] e = new ushort[8]; | 50 ushort* e = (new ushort[8]).ptr; |
51 | 51 |
52 asm{ | 52 static if(size_t.sizeof == 4){ |
53 movdqu XMM0, a; | 53 asm{ |
54 movdqu XMM1, b; | 54 mov EAX, a; |
55 pxor XMM1, XMM0; | 55 movdqu XMM0, [EAX]; |
56 movdqu d, XMM0; | 56 mov EAX, b; |
57 movdqu e, XMM1; | 57 movdqu XMM1, [EAX]; |
58 pxor XMM1, XMM0; | |
59 mov EAX, d; | |
60 movdqu [EAX], XMM0; | |
61 mov EAX, e; | |
62 movdqu [EAX], XMM1; | |
63 } | |
64 }else static if(size_t.sizeof == 8){ | |
65 asm{ | |
66 mov RAX, a; | |
67 movdqu XMM0, [RAX]; | |
68 mov RAX, b; | |
69 movdqu XMM1, [RAX]; | |
70 pxor XMM1, XMM0; | |
71 mov RAX, d; | |
72 movdqu [RAX], XMM0; | |
73 mov RAX, e; | |
74 movdqu [RAX], XMM1; | |
75 } | |
76 }else{ | |
77 static assert(0, "unhandled pointer size"); | |
58 } | 78 } |
59 | 79 |
60 | 80 |
61 foreach(size_t i, ushort s; a){ | 81 foreach(size_t i, ushort s; a[0 .. 8]){ |
62 if(s != d[i]){ | 82 if(s != d[i]){ |
63 assert(0); | 83 assert(0); |
64 } | 84 } |
65 } | 85 } |
66 foreach(size_t i, ushort s; c){ | 86 foreach(size_t i, ushort s; c[0 .. 8]){ |
67 if(s != e[i]){ | 87 if(s != e[i]){ |
68 assert(0); | 88 assert(0); |
69 } | 89 } |
70 } | 90 } |
71 | 91 |