comparison run/a/asm_pshuflw_01_A.d @ 1329:1c8652b3795a

inline asm review
author thomask
date Fri, 12 Jan 2007 23:07:17 +0000
parents 03c97933de98
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 const short[8] A = [9, 9, 9, 9, 9, 9, 9, 9]; 19 short[] A = [9, 9, 9, 9, 9, 9, 9, 9];
20 const short[8] B = [1, 2, 3, 4, 5, 6, 7, 8]; 20 short* a = A.ptr;
21 21
22 short[8] c; 22 short[] B = [1, 2, 3, 4, 5, 6, 7, 8];
23 short* b = B.ptr;
23 24
24 asm{ 25 short* c = (new short[8]).ptr;
25 movdqu XMM0, A; 26
26 movdqu XMM1, B; 27 static if(size_t.sizeof == 4){
27 psuhflw XMM0, XMM1, 0b11_10_01_00; 28 asm{
28 movdqu, XMM0; 29 mov EAX, a;
30 movdqu XMM0, [EAX];
31 mov EAX, b;
32 movdqu XMM1, [EAX];
33 pshuflw XMM0, XMM1, 0b11_01_10_00;
34 mov EAX, c;
35 movdqu [EAX], XMM0;
36 }
37 }else static if(size_t.sizeof == 8){
38 asm{
39 mov RAX, a;
40 movdqu XMM0, [RAX];
41 mov RAX, b;
42 movdqu XMM1, [RAX];
43 pshuflw XMM0, XMM1, 0b11_01_10_00;
44 mov RAX, c;
45 movdqu [RAX], XMM0;
46 }
47 }else{
48 static assert(0, "unhandled pointer size");
29 } 49 }
30 50
31 if(c[0] != 1){ 51 if(c[0] != 1){
32 assert(0); 52 assert(0);
33 } 53 }
34 if(c[1] != 2){ 54 if(c[1] != 3){
35 assert(0); 55 assert(0);
36 } 56 }
37 if(c[2] != 3){ 57 if(c[2] != 2){
38 assert(0); 58 assert(0);
39 } 59 }
40 if(c[3] != 4){ 60 if(c[3] != 4){
41 assert(0); 61 assert(0);
42 } 62 }
43 if(c[4] != 8){ 63 if(c[4] != 5){
44 assert(0); 64 assert(0);
45 } 65 }
46 if(c[5] != 7){ 66 if(c[5] != 6){
47 assert(0); 67 assert(0);
48 } 68 }
49 if(c[6] != 6){ 69 if(c[6] != 7){
50 assert(0); 70 assert(0);
51 } 71 }
52 if(c[7] != 5){ 72 if(c[7] != 8){
53 assert(0); 73 assert(0);
54 } 74 }
55 75
56 return 0; 76 return 0;
57 } 77 }