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

inline asm review
author thomask
date Fri, 12 Jan 2007 23:07:17 +0000
parents 81222734adf3
children
comparison
equal deleted inserted replaced
1328:288d15cd3b95 1329:1c8652b3795a
18 import addon.cpuinfo; 18 import addon.cpuinfo;
19 19
20 int main(){ 20 int main(){
21 haveSSE!()(); 21 haveSSE!()();
22 22
23 float[] a = new float[4]; 23 float* a = (new float[4]).ptr;
24 a[0] = 3.0f; 24 a[0] = 3.0f;
25 a[1] = 4.0f; 25 a[1] = 4.0f;
26 a[2] = 5.0f; 26 a[2] = 5.0f;
27 a[3] = 6.0f; 27 a[3] = 6.0f;
28 28
29 float[] b = new float[4]; 29 float* b = (new float[4]).ptr;
30 a[0] = 10.0f; 30 b[0] = 10.0f;
31 a[1] = 20.0f; 31 b[1] = 20.0f;
32 a[2] = 30.0f; 32 b[2] = 30.0f;
33 a[3] = 40.0f; 33 b[3] = 40.0f;
34 34
35 float[] c = new float[4]; 35 float* c = (new float[4]).ptr;
36 36
37 asm{ 37 static if(size_t.sizeof == 4){
38 movups XMM0, a; 38 asm{
39 movups XMM1, b; 39 mov EAX, a;
40 movlhps XMM0, XMM1; 40 movups XMM0, [EAX];
41 movups c, XMM0; 41 mov EAX, b;
42 movups XMM1, [EAX];
43 movlhps XMM0, XMM1;
44 mov EAX, c;
45 movups [EAX], XMM0;
46 }
47 }else static if(size_t.sizeof == 8){
48 asm{
49 mov RAX, a;
50 movups XMM0, [RAX];
51 mov RAX, b;
52 movups XMM1, [RAX];
53 movlhps XMM0, XMM1;
54 mov RAX, c;
55 movups [RAX], XMM0;
56 }
57 }else{
58 static assert(0, "unhandled pointer size");
42 } 59 }
43 60
44 if(c[0] != a[0]){ 61 if(c[0] != a[0]){
45 assert(0); 62 assert(0);
46 } 63 }