comparison tests/mini/asm8.d @ 949:b2d27ddf8f45

changes to get the naked asm stuff working for x64
author wilsonk@ubuntu
date Tue, 10 Feb 2009 08:02:25 -0700
parents 03d7c4aac654
children 7e669954db7d
comparison
equal deleted inserted replaced
948:780530d1cad3 949:b2d27ddf8f45
1 int foo() 1 int foo()
2 { 2 {
3 version(X86) 3 version(X86)
4 asm { mov EAX, 42; } 4 {
5 asm { mov EAX, 42; }
6 }
7 else version (X86_64)
8 {
9 asm { mov EAX, 42; }
10 }
5 else static assert(0, "todo"); 11 else static assert(0, "todo");
6 } 12 }
7 13
8 ulong bar() 14 ulong bar()
9 { 15 {
10 version(X86) 16 version(X86)
11 asm { mov EDX, 0xAA; mov EAX, 0xFF; } 17 {
18 asm { mov EDX, 0xAA; mov EAX, 0xFF; }
19 }
20 else version (X86_64)
21 {
22 asm { movq RAX, 0xFF; }
23 }
12 else static assert(0, "todo"); 24 else static assert(0, "todo");
13 } 25 }
14 26
15 float onef() 27 float onef()
16 { 28 {
17 version(X86) 29 version(X86)
18 asm { fld1; } 30 {
31 asm { fld1; }
32 }
33 else version (X86_64)
34 {
35 asm { fld1; }
36 }
19 else static assert(0, "todo"); 37 else static assert(0, "todo");
20 } 38 }
21 39
22 double oned() 40 double oned()
23 { 41 {
24 version(X86) 42 version(X86)
25 asm { fld1; } 43 {
44 asm { fld1; }
45 }
46 else version (X86_64)
47 {
48 asm { fld1; }
49 }
26 else static assert(0, "todo"); 50 else static assert(0, "todo");
27 } 51 }
28 52
29 real oner() 53 real oner()
30 { 54 {
31 version(X86) 55 version(X86)
32 asm { fld1; } 56 {
33 else static assert(0, "todo"); 57 asm { fld1; }
34 } 58 }
59 else version (X86_64)
60 {
61 asm { fld1; }
62 }
63 else static assert(0, "todo");
64 }
65
35 66
36 real two = 2.0; 67 real two = 2.0;
37 68
38 creal cr() 69 creal cr()
39 { 70 {
40 version(X86) 71 version(X86)
41 asm { fld1; fld two; } 72 {
73 asm { fld1; fld two; }
74 }
75 else version (X86_64)
76 {
77 asm { fld1; fld two; }
78 }
42 else static assert(0, "todo"); 79 else static assert(0, "todo");
43 } 80 }
44 81
45 creal cr2() 82 creal cr2()
46 { 83 {
47 version(X86) 84 version(X86)
85 {
86 asm
87 {
88 naked;
89 fld1;
90 fld two;
91 ret;
92 }
93 }
94 else version (X86_64)
95 {
48 asm 96 asm
49 { 97 {
50 naked; 98 naked;
51 fld1; 99 fld1;
52 fld two; 100 fld two;
53 ret; 101 ret;
102 }
54 } 103 }
55 else static assert(0, "todo"); 104 else static assert(0, "todo");
56 } 105 }
57 106
58 void* vp() 107 void* vp()
59 { 108 {
60 version(X86) 109 version(X86)
61 asm { mov EAX, 0x80; } 110 {
111 asm { mov EAX, 0x80; }
112 }
113 else version (X86_64)
114 {
115 asm { movq RAX, 0x80; }
116 }
62 else static assert(0, "todo"); 117 else static assert(0, "todo");
63 } 118 }
64 119
65 int[int] gaa; 120 int[int] gaa;
66 121
67 int[int] aa() 122 int[int] aa()
68 { 123 {
69 version(X86) 124 version(X86)
70 asm { mov EAX, gaa; } 125 {
126 asm { mov EAX, gaa; }
127 }
128 else version (X86_64)
129 {
130 asm { movq RAX, gaa; }
131 }
71 else static assert(0, "todo"); 132 else static assert(0, "todo");
72 } 133 }
73 134
74 Object gobj; 135 Object gobj;
75 136
76 Object ob() 137 Object ob()
77 { 138 {
78 version(X86) 139 version(X86)
79 asm { mov EAX, gobj; } 140 {
141 asm { mov EAX, gobj; }
142 }
143 else version (X86_64)
144 {
145 asm { movq RAX, gobj; }
146 }
80 else static assert(0, "todo"); 147 else static assert(0, "todo");
81 } 148 }
82 149
83 char[] ghello = "hello world"; 150 char[] ghello = "hello world";
84 151
85 char[] str() 152 char[] str()
86 { 153 {
87 version(X86) 154 version(X86)
88 asm { lea ECX, ghello; mov EAX, [ECX]; mov EDX, [ECX+4]; } 155 {
156 asm { lea ECX, ghello; mov EAX, [ECX]; mov EDX, [ECX+4]; }
157 }
158 else version (X86_64)
159 {
160 asm { movq RAX, [ghello]; movq RDX, [ghello]+8; }
161 }
89 else static assert(0, "todo"); 162 else static assert(0, "todo");
90 } 163 }
91 164
92 char[] delegate() dg() 165 char[] delegate() dg()
93 { 166 {
94 version(X86) 167 version(X86)
95 asm { mov EAX, gobj; lea EDX, Object.toString; } 168 {
169 asm { mov EAX, gobj; lea EDX, Object.toString; }
170 }
171 else version (X86_64)
172 {
173 asm { movq RAX, [gobj]; leaq RDX, Object.toString; }
174 }
96 else static assert(0, "todo"); 175 else static assert(0, "todo");
97 } 176 }
98 177
99 void main() 178 void main()
100 { 179 {
101 gaa[4] = 5; 180 gaa[4] = 5;
102 gobj = new Object; 181 gobj = new Object;
103 auto adg = &gobj.toString; 182 auto adg = &gobj.toString;
104 183
105 assert(foo() == 42); 184 assert(foo() == 42);
106 assert(bar() == 0x000000AA000000FF); 185 version(X86)
186 {
187 assert(bar() == 0x000000AA000000FF);
188 }
189 else version (X86_64)
190 {
191 assert(bar() == 0x00000000000000FF);
192 }
107 assert(onef() == 1); 193 assert(onef() == 1);
108 assert(oned() == 1); 194 assert(oned() == 1);
109 assert(oner() == 1); 195 assert(oner() == 1);
110 assert(cr() == 1+2i); 196 assert(cr() == 1+2i);
111 assert(cr2() == 1+2i); 197 assert(cr2() == 1+2i);