Mercurial > projects > dstress
annotate 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 |
rev | line source |
---|---|
978 | 1 // $HeadURL$ |
2 // $Date$ | |
3 // $Author$ | |
4 | |
979 | 5 // @author@ <thomas-dloop@kuehne.cn> |
6 // @date@ 2006-04-28 | |
1319
81222734adf3
sed'ed replacement of new:...http.d.puremagic.co... with http://d.puremagic.com/issues/show_bug.cgi?...
thomask
parents:
1085
diff
changeset
|
7 // @uri@ http://d.puremagic.com/issues/show_bug.cgi?id=118 |
979 | 8 |
978 | 9 module dstress.run.a.asm_movhlps_01_A; |
10 | |
1002 | 11 version(D_InlineAsm_X86){ |
12 version = runTest; | |
13 }else version(D_InlineAsm_X86_64){ | |
14 version = runTest; | |
15 } | |
16 | |
17 version(runTest){ | |
18 import addon.cpuinfo; | |
19 | |
20 int main(){ | |
21 haveSSE!()(); | |
22 | |
1329 | 23 float* a = (new float[4]).ptr; |
1084 | 24 a[0] = 3.0f; |
25 a[1] = 4.0f; | |
26 a[2] = 5.0f; | |
27 a[3] = 6.0f; | |
28 | |
1329 | 29 float* b = (new float[4]).ptr; |
30 b[0] = 10.0f; | |
31 b[1] = 20.0f; | |
32 b[2] = 30.0f; | |
33 b[3] = 40.0f; | |
34 | |
35 float* c = (new float[4]).ptr; | |
1084 | 36 |
1329 | 37 static if(size_t.sizeof == 4){ |
38 asm{ | |
39 mov EAX, a; | |
40 movups XMM0, [EAX]; | |
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"); | |
978 | 59 } |
60 | |
1084 | 61 if(c[0] != a[0]){ |
978 | 62 assert(0); |
63 } | |
64 | |
1084 | 65 if(c[1] != a[1]){ |
979 | 66 assert(0); |
67 } | |
1044 | 68 |
1084 | 69 if(c[2] != b[0]){ |
979 | 70 assert(0); |
71 } | |
72 | |
1084 | 73 if(c[3] != b[1]){ |
978 | 74 assert(0); |
75 } | |
1044 | 76 |
978 | 77 return 0; |
78 } | |
1002 | 79 }else{ |
80 pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); | |
81 static assert(0); | |
978 | 82 } |