Mercurial > projects > dstress
comparison run/a/asm_paddb_01_A.d @ 1285:229e630d4b1a
partuial inline asm review
author | thomask |
---|---|
date | Tue, 26 Dec 2006 14:21:37 +0000 |
parents | 9dcac8d4e97f |
children |
comparison
equal
deleted
inserted
replaced
1284:96e7be832c35 | 1285:229e630d4b1a |
---|---|
14 import addon.cpuinfo; | 14 import addon.cpuinfo; |
15 | 15 |
16 int main(){ | 16 int main(){ |
17 haveSSE2!()(); | 17 haveSSE2!()(); |
18 | 18 |
19 byte[] a = new byte[16]; | 19 byte* a = (new byte[16]).ptr; |
20 a[0] = 1; | 20 a[0] = 1; |
21 a[1] = 2; | 21 a[1] = 2; |
22 a[2] = 3; | 22 a[2] = 3; |
23 a[3] = 4; | 23 a[3] = 4; |
24 a[4] = 5; | 24 a[4] = 5; |
28 a[8] = 9; | 28 a[8] = 9; |
29 a[9] = 10; | 29 a[9] = 10; |
30 a[10] = 11; | 30 a[10] = 11; |
31 a[11] = 12; | 31 a[11] = 12; |
32 a[12] = 13; | 32 a[12] = 13; |
33 a[13] = 14; | |
33 a[14] = 15; | 34 a[14] = 15; |
34 a[15] = 16; | 35 a[15] = 16; |
35 | 36 |
36 byte[] b = new byte[16]; | 37 byte* b = (new byte[16]).ptr; |
37 b[0] = -8; | 38 b[0] = -8; |
38 b[1] = -7; | 39 b[1] = -7; |
39 b[2] = -6; | 40 b[2] = -6; |
40 b[3] = -5; | 41 b[3] = -5; |
41 b[4] = -4; | 42 b[4] = -4; |
49 b[12] = 4; | 50 b[12] = 4; |
50 b[13] = 5; | 51 b[13] = 5; |
51 b[14] = 6; | 52 b[14] = 6; |
52 b[15] = 7; | 53 b[15] = 7; |
53 | 54 |
54 byte[] c = new byte[16]; | 55 byte* c = (new byte[16]).ptr; |
55 | 56 |
56 asm{ | 57 static if(size_t.sizeof == 4){ |
57 movdqu XMM0, a; | 58 asm{ |
58 movdqu XMM1, b; | 59 mov EAX, a; |
59 paddb XMM0, XMM1; | 60 movdqu XMM0, [EAX]; |
60 movdqu c, XMM0; | 61 mov EAX, b; |
62 movdqu XMM1, [EAX]; | |
63 paddb XMM0, XMM1; | |
64 mov EAX, c; | |
65 movdqu [EAX], XMM0; | |
66 } | |
67 }else static if(size_t.sizeof == 8){ | |
68 asm{ | |
69 mov RAX, a; | |
70 movdqu XMM0, [RAX]; | |
71 mov RAX, b; | |
72 movdqu XMM1, [RAX]; | |
73 paddb XMM0, XMM1; | |
74 mov RAX, c; | |
75 movdqu [RAX], XMM0; | |
76 } | |
77 }else{ | |
78 static assert(0, "unhandled pointer size"); | |
61 } | 79 } |
62 | 80 |
63 if(c[0] != -7){ | 81 if(c[0] != -7){ |
64 assert(0); | 82 assert(0); |
65 } | 83 } |