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 {