Mercurial > projects > ldc
comparison tests/mini/asm8.d @ 964:aa2e3a6c3410
Some changes I missed in my last commit (wound up in wrong patch file)
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Mon, 16 Feb 2009 01:43:14 +0100 |
parents | 7e669954db7d |
children | 926c1d06c7ec |
comparison
equal
deleted
inserted
replaced
962:a415d305477f | 964:aa2e3a6c3410 |
---|---|
116 { | 116 { |
117 asm { fld1; flds two_f; } | 117 asm { fld1; flds two_f; } |
118 } | 118 } |
119 else version (X86_64) | 119 else version (X86_64) |
120 { | 120 { |
121 asm | 121 version(all) { |
122 { | 122 asm |
123 movss XMM1, [two_f]; | 123 { |
124 movss XMM0, [one_f]; | 124 movss XMM0, [one_f]; |
125 movd ECX, XMM1; | 125 movss XMM1, [two_f]; |
126 movd EAX, XMM0; | 126 } |
127 | 127 } else { |
128 // invalid operand size :( | 128 // Code for when LDC becomes ABI-compatible with GCC |
129 //shl RCX, 32; | 129 // regarding cfloat returns. |
130 //or RAX, RCX; | 130 asm { |
131 | 131 movd EAX, [one_f]; |
132 pushq RAX; | 132 movd ECX, [two_f]; |
133 mov [RSP + 4], EAX; | 133 |
134 popq RAX; | 134 // invalid operand size :( |
135 | 135 //shl RCX, 32; |
136 movd XMM0, RAX; | 136 //or RAX, RCX; |
137 | |
138 pushq RAX; | |
139 mov [RSP + 4], EAX; | |
140 popq RAX; | |
141 | |
142 movd XMM0, RAX; | |
143 } | |
137 } | 144 } |
138 } | 145 } |
139 else static assert(0, "todo"); | 146 else static assert(0, "todo"); |
140 } | 147 } |
141 | 148 |
151 ret; | 158 ret; |
152 } | 159 } |
153 } | 160 } |
154 else version (X86_64) | 161 else version (X86_64) |
155 { | 162 { |
156 asm | 163 version(all) { |
157 { | 164 asm |
158 naked; | 165 { |
159 movss XMM1, [two_f]; | 166 naked; |
160 movss XMM0, [one_f]; | 167 movss XMM0, [one_f]; |
161 movd ECX, XMM1; | 168 movss XMM1, [two_f]; |
162 movd EAX, XMM0; | 169 ret; |
163 | 170 } |
164 // invalid operand size :( | 171 } else { |
165 //shl RCX, 32; | 172 // Code for when LDC becomes ABI-compatible with GCC |
166 //or RAX, RCX; | 173 // regarding cfloat returns. |
167 | 174 asm { |
168 pushq RAX; | 175 naked; |
169 mov [RSP + 4], EAX; | 176 mov EAX, [one_f]; |
170 popq RAX; | 177 mov ECX, [two_f]; |
171 | 178 |
172 movd RAX, XMM0; | 179 // invalid operand size :( |
173 ret; | 180 //shl RCX, 32; |
181 //or RAX, RCX; | |
182 | |
183 pushq RAX; | |
184 mov [RSP + 4], EAX; | |
185 popq RAX; | |
186 | |
187 movd RAX, XMM0; | |
188 ret; | |
189 } | |
174 } | 190 } |
175 } | 191 } |
176 else static assert(0, "todo"); | 192 else static assert(0, "todo"); |
177 } | 193 } |
178 | 194 |
181 | 197 |
182 cdouble cd() | 198 cdouble cd() |
183 { | 199 { |
184 version(X86) | 200 version(X86) |
185 { | 201 { |
186 asm { fld1; fld two_d } | 202 asm { fld1; fld two_d; } |
187 } | 203 } |
188 else version (X86_64) | 204 else version (X86_64) |
189 { | 205 { |
190 asm | 206 asm |
191 { | 207 { |