comparison run/a/asm_pmovmskb_01_A.d @ 1290:e3d0dea394ab

partial inline asm review
author thomask
date Wed, 27 Dec 2006 11:59:48 +0000
parents 1b6d9acddb76
children
comparison
equal deleted inserted replaced
1289:ad4d84aba69b 1290:e3d0dea394ab
15 import addon.cpuinfo; 15 import addon.cpuinfo;
16 16
17 int main(){ 17 int main(){
18 haveSSE2!()(); 18 haveSSE2!()();
19 19
20 const ubyte Y = 0b1000_0000; 20 ubyte Y = 0b1000_0000;
21 const ubyte N = 0b0111_1111; 21 ubyte N = 0b0111_1111;
22 22
23 const ubyte[16] A = [Y, N, Y, Y, N, N, Y, Y, Y, N, N, N, Y, N, N, Y]; 23 ubyte[] A = [Y, N, Y, Y, N, N, Y, Y, Y, N, N, N, Y, N, N, Y];
24 ubyte* a = A.ptr;
24 25
25 int b; 26 int b;
26 27
27 asm{ 28 static if(size_t.sizeof == 4){
28 mov EAX, 0x1234_5678; 29 asm{
29 movdqu XMM0, A; 30 mov EAX, 0x1234_5678;
30 pmovmskb EAX, XMM0; 31 mov EAX, a;
31 mov b, EAX; 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");
32 } 46 }
33 47
34 if(b != 0b1011_0011_1000_1001){ 48 if(b != 0b1001_0001_1100_1101){
35 assert(0); 49 assert(0);
36 } 50 }
37 51
38 return 0; 52 return 0;
39 } 53 }