OLD | NEW |
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
2 // All Rights Reserved. | 2 // All Rights Reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions | 5 // modification, are permitted provided that the following conditions |
6 // are met: | 6 // are met: |
7 // | 7 // |
8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
10 // | 10 // |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 | 82 |
83 const char* IntelDoubleRegister::AllocationIndexToString(int index) { | 83 const char* IntelDoubleRegister::AllocationIndexToString(int index) { |
84 if (CpuFeatures::IsSupported(SSE2)) { | 84 if (CpuFeatures::IsSupported(SSE2)) { |
85 return XMMRegister::AllocationIndexToString(index); | 85 return XMMRegister::AllocationIndexToString(index); |
86 } else { | 86 } else { |
87 return X87Register::AllocationIndexToString(index); | 87 return X87Register::AllocationIndexToString(index); |
88 } | 88 } |
89 } | 89 } |
90 | 90 |
91 | 91 |
92 // The Probe method needs executable memory, so it uses Heap::CreateCode. | |
93 // Allocation failure is silent and leads to safe default. | |
94 void CpuFeatures::Probe() { | 92 void CpuFeatures::Probe() { |
95 ASSERT(!initialized_); | 93 ASSERT(!initialized_); |
96 ASSERT(supported_ == 0); | 94 ASSERT(supported_ == 0); |
97 #ifdef DEBUG | 95 #ifdef DEBUG |
98 initialized_ = true; | 96 initialized_ = true; |
99 #endif | 97 #endif |
100 if (Serializer::enabled()) { | 98 if (Serializer::enabled()) { |
101 supported_ |= OS::CpuFeaturesImpliedByPlatform(); | 99 supported_ |= OS::CpuFeaturesImpliedByPlatform(); |
102 return; // No features if we might serialize. | 100 return; // No features if we might serialize. |
103 } | 101 } |
(...skipping 1958 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2062 void Assembler::xorpd(XMMRegister dst, XMMRegister src) { | 2060 void Assembler::xorpd(XMMRegister dst, XMMRegister src) { |
2063 ASSERT(IsEnabled(SSE2)); | 2061 ASSERT(IsEnabled(SSE2)); |
2064 EnsureSpace ensure_space(this); | 2062 EnsureSpace ensure_space(this); |
2065 EMIT(0x66); | 2063 EMIT(0x66); |
2066 EMIT(0x0F); | 2064 EMIT(0x0F); |
2067 EMIT(0x57); | 2065 EMIT(0x57); |
2068 emit_sse_operand(dst, src); | 2066 emit_sse_operand(dst, src); |
2069 } | 2067 } |
2070 | 2068 |
2071 | 2069 |
2072 void Assembler::andps(XMMRegister dst, XMMRegister src) { | 2070 void Assembler::andps(XMMRegister dst, const Operand& src) { |
| 2071 ASSERT(IsEnabled(SSE2)); |
2073 EnsureSpace ensure_space(this); | 2072 EnsureSpace ensure_space(this); |
2074 EMIT(0x0F); | 2073 EMIT(0x0F); |
2075 EMIT(0x54); | 2074 EMIT(0x54); |
2076 emit_sse_operand(dst, src); | 2075 emit_sse_operand(dst, src); |
2077 } | 2076 } |
2078 | 2077 |
2079 | 2078 |
2080 void Assembler::orps(XMMRegister dst, XMMRegister src) { | 2079 void Assembler::orps(XMMRegister dst, const Operand& src) { |
| 2080 ASSERT(IsEnabled(SSE2)); |
2081 EnsureSpace ensure_space(this); | 2081 EnsureSpace ensure_space(this); |
2082 EMIT(0x0F); | 2082 EMIT(0x0F); |
2083 EMIT(0x56); | 2083 EMIT(0x56); |
2084 emit_sse_operand(dst, src); | 2084 emit_sse_operand(dst, src); |
2085 } | 2085 } |
2086 | 2086 |
2087 | 2087 |
2088 void Assembler::xorps(XMMRegister dst, XMMRegister src) { | 2088 void Assembler::xorps(XMMRegister dst, const Operand& src) { |
| 2089 ASSERT(IsEnabled(SSE2)); |
2089 EnsureSpace ensure_space(this); | 2090 EnsureSpace ensure_space(this); |
2090 EMIT(0x0F); | 2091 EMIT(0x0F); |
2091 EMIT(0x57); | 2092 EMIT(0x57); |
2092 emit_sse_operand(dst, src); | 2093 emit_sse_operand(dst, src); |
2093 } | 2094 } |
2094 | 2095 |
2095 | 2096 |
| 2097 void Assembler::addps(XMMRegister dst, const Operand& src) { |
| 2098 ASSERT(IsEnabled(SSE2)); |
| 2099 EnsureSpace ensure_space(this); |
| 2100 EMIT(0x0F); |
| 2101 EMIT(0x58); |
| 2102 emit_sse_operand(dst, src); |
| 2103 } |
| 2104 |
| 2105 |
| 2106 void Assembler::subps(XMMRegister dst, const Operand& src) { |
| 2107 ASSERT(IsEnabled(SSE2)); |
| 2108 EnsureSpace ensure_space(this); |
| 2109 EMIT(0x0F); |
| 2110 EMIT(0x5C); |
| 2111 emit_sse_operand(dst, src); |
| 2112 } |
| 2113 |
| 2114 |
| 2115 void Assembler::mulps(XMMRegister dst, const Operand& src) { |
| 2116 ASSERT(IsEnabled(SSE2)); |
| 2117 EnsureSpace ensure_space(this); |
| 2118 EMIT(0x0F); |
| 2119 EMIT(0x59); |
| 2120 emit_sse_operand(dst, src); |
| 2121 } |
| 2122 |
| 2123 |
| 2124 void Assembler::divps(XMMRegister dst, const Operand& src) { |
| 2125 ASSERT(IsEnabled(SSE2)); |
| 2126 EnsureSpace ensure_space(this); |
| 2127 EMIT(0x0F); |
| 2128 EMIT(0x5E); |
| 2129 emit_sse_operand(dst, src); |
| 2130 } |
| 2131 |
| 2132 |
2096 void Assembler::sqrtsd(XMMRegister dst, XMMRegister src) { | 2133 void Assembler::sqrtsd(XMMRegister dst, XMMRegister src) { |
2097 ASSERT(IsEnabled(SSE2)); | 2134 ASSERT(IsEnabled(SSE2)); |
2098 EnsureSpace ensure_space(this); | 2135 EnsureSpace ensure_space(this); |
2099 EMIT(0xF2); | 2136 EMIT(0xF2); |
2100 EMIT(0x0F); | 2137 EMIT(0x0F); |
2101 EMIT(0x51); | 2138 EMIT(0x51); |
2102 emit_sse_operand(dst, src); | 2139 emit_sse_operand(dst, src); |
2103 } | 2140 } |
2104 | 2141 |
2105 | 2142 |
2106 void Assembler::andpd(XMMRegister dst, XMMRegister src) { | 2143 void Assembler::andpd(XMMRegister dst, XMMRegister src) { |
2107 ASSERT(IsEnabled(SSE2)); | 2144 ASSERT(IsEnabled(SSE2)); |
2108 EnsureSpace ensure_space(this); | 2145 EnsureSpace ensure_space(this); |
2109 EMIT(0x66); | 2146 EMIT(0x66); |
2110 EMIT(0x0F); | 2147 EMIT(0x0F); |
2111 EMIT(0x54); | 2148 EMIT(0x54); |
2112 emit_sse_operand(dst, src); | 2149 emit_sse_operand(dst, src); |
2113 } | 2150 } |
2114 | 2151 |
2115 | 2152 |
2116 void Assembler::orpd(XMMRegister dst, XMMRegister src) { | 2153 void Assembler::orpd(XMMRegister dst, XMMRegister src) { |
2117 ASSERT(IsEnabled(SSE2)); | 2154 ASSERT(IsEnabled(SSE2)); |
2118 EnsureSpace ensure_space(this); | 2155 EnsureSpace ensure_space(this); |
2119 EMIT(0x66); | 2156 EMIT(0x66); |
2120 EMIT(0x0F); | 2157 EMIT(0x0F); |
2121 EMIT(0x56); | 2158 EMIT(0x56); |
2122 emit_sse_operand(dst, src); | 2159 emit_sse_operand(dst, src); |
2123 } | 2160 } |
2124 | 2161 |
2125 | |
2126 void Assembler::ucomisd(XMMRegister dst, XMMRegister src) { | |
2127 ASSERT(IsEnabled(SSE2)); | |
2128 EnsureSpace ensure_space(this); | |
2129 EMIT(0x66); | |
2130 EMIT(0x0F); | |
2131 EMIT(0x2E); | |
2132 emit_sse_operand(dst, src); | |
2133 } | |
2134 | |
2135 | 2162 |
2136 void Assembler::ucomisd(XMMRegister dst, const Operand& src) { | 2163 void Assembler::ucomisd(XMMRegister dst, const Operand& src) { |
2137 ASSERT(IsEnabled(SSE2)); | 2164 ASSERT(IsEnabled(SSE2)); |
2138 EnsureSpace ensure_space(this); | 2165 EnsureSpace ensure_space(this); |
2139 EMIT(0x66); | 2166 EMIT(0x66); |
2140 EMIT(0x0F); | 2167 EMIT(0x0F); |
2141 EMIT(0x2E); | 2168 EMIT(0x2E); |
2142 emit_sse_operand(dst, src); | 2169 emit_sse_operand(dst, src); |
2143 } | 2170 } |
2144 | 2171 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2198 | 2225 |
2199 void Assembler::movaps(XMMRegister dst, XMMRegister src) { | 2226 void Assembler::movaps(XMMRegister dst, XMMRegister src) { |
2200 ASSERT(IsEnabled(SSE2)); | 2227 ASSERT(IsEnabled(SSE2)); |
2201 EnsureSpace ensure_space(this); | 2228 EnsureSpace ensure_space(this); |
2202 EMIT(0x0F); | 2229 EMIT(0x0F); |
2203 EMIT(0x28); | 2230 EMIT(0x28); |
2204 emit_sse_operand(dst, src); | 2231 emit_sse_operand(dst, src); |
2205 } | 2232 } |
2206 | 2233 |
2207 | 2234 |
| 2235 void Assembler::shufps(XMMRegister dst, XMMRegister src, byte imm8) { |
| 2236 ASSERT(IsEnabled(SSE2)); |
| 2237 ASSERT(is_uint8(imm8)); |
| 2238 EnsureSpace ensure_space(this); |
| 2239 EMIT(0x0F); |
| 2240 EMIT(0xC6); |
| 2241 emit_sse_operand(dst, src); |
| 2242 EMIT(imm8); |
| 2243 } |
| 2244 |
| 2245 |
2208 void Assembler::movdqa(const Operand& dst, XMMRegister src) { | 2246 void Assembler::movdqa(const Operand& dst, XMMRegister src) { |
2209 ASSERT(IsEnabled(SSE2)); | 2247 ASSERT(IsEnabled(SSE2)); |
2210 EnsureSpace ensure_space(this); | 2248 EnsureSpace ensure_space(this); |
2211 EMIT(0x66); | 2249 EMIT(0x66); |
2212 EMIT(0x0F); | 2250 EMIT(0x0F); |
2213 EMIT(0x7F); | 2251 EMIT(0x7F); |
2214 emit_sse_operand(src, dst); | 2252 emit_sse_operand(src, dst); |
2215 } | 2253 } |
2216 | 2254 |
2217 | 2255 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2290 void Assembler::movsd(XMMRegister dst, const Operand& src) { | 2328 void Assembler::movsd(XMMRegister dst, const Operand& src) { |
2291 ASSERT(IsEnabled(SSE2)); | 2329 ASSERT(IsEnabled(SSE2)); |
2292 EnsureSpace ensure_space(this); | 2330 EnsureSpace ensure_space(this); |
2293 EMIT(0xF2); // double | 2331 EMIT(0xF2); // double |
2294 EMIT(0x0F); | 2332 EMIT(0x0F); |
2295 EMIT(0x10); // load | 2333 EMIT(0x10); // load |
2296 emit_sse_operand(dst, src); | 2334 emit_sse_operand(dst, src); |
2297 } | 2335 } |
2298 | 2336 |
2299 | 2337 |
2300 void Assembler::movsd(XMMRegister dst, XMMRegister src) { | |
2301 ASSERT(IsEnabled(SSE2)); | |
2302 EnsureSpace ensure_space(this); | |
2303 EMIT(0xF2); | |
2304 EMIT(0x0F); | |
2305 EMIT(0x10); | |
2306 emit_sse_operand(dst, src); | |
2307 } | |
2308 | |
2309 | |
2310 void Assembler::movss(const Operand& dst, XMMRegister src ) { | 2338 void Assembler::movss(const Operand& dst, XMMRegister src ) { |
2311 ASSERT(IsEnabled(SSE2)); | 2339 ASSERT(IsEnabled(SSE2)); |
2312 EnsureSpace ensure_space(this); | 2340 EnsureSpace ensure_space(this); |
2313 EMIT(0xF3); // float | 2341 EMIT(0xF3); // float |
2314 EMIT(0x0F); | 2342 EMIT(0x0F); |
2315 EMIT(0x11); // store | 2343 EMIT(0x11); // store |
2316 emit_sse_operand(src, dst); | 2344 emit_sse_operand(src, dst); |
2317 } | 2345 } |
2318 | 2346 |
2319 | 2347 |
2320 void Assembler::movss(XMMRegister dst, const Operand& src) { | 2348 void Assembler::movss(XMMRegister dst, const Operand& src) { |
2321 ASSERT(IsEnabled(SSE2)); | 2349 ASSERT(IsEnabled(SSE2)); |
2322 EnsureSpace ensure_space(this); | 2350 EnsureSpace ensure_space(this); |
2323 EMIT(0xF3); // float | 2351 EMIT(0xF3); // float |
2324 EMIT(0x0F); | 2352 EMIT(0x0F); |
2325 EMIT(0x10); // load | 2353 EMIT(0x10); // load |
2326 emit_sse_operand(dst, src); | 2354 emit_sse_operand(dst, src); |
2327 } | 2355 } |
2328 | 2356 |
2329 | 2357 |
2330 void Assembler::movss(XMMRegister dst, XMMRegister src) { | |
2331 ASSERT(IsEnabled(SSE2)); | |
2332 EnsureSpace ensure_space(this); | |
2333 EMIT(0xF3); | |
2334 EMIT(0x0F); | |
2335 EMIT(0x10); | |
2336 emit_sse_operand(dst, src); | |
2337 } | |
2338 | |
2339 | |
2340 void Assembler::movd(XMMRegister dst, const Operand& src) { | 2358 void Assembler::movd(XMMRegister dst, const Operand& src) { |
2341 ASSERT(IsEnabled(SSE2)); | 2359 ASSERT(IsEnabled(SSE2)); |
2342 EnsureSpace ensure_space(this); | 2360 EnsureSpace ensure_space(this); |
2343 EMIT(0x66); | 2361 EMIT(0x66); |
2344 EMIT(0x0F); | 2362 EMIT(0x0F); |
2345 EMIT(0x6E); | 2363 EMIT(0x6E); |
2346 emit_sse_operand(dst, src); | 2364 emit_sse_operand(dst, src); |
2347 } | 2365 } |
2348 | 2366 |
2349 | 2367 |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2707 fprintf(coverage_log, "%s\n", file_line); | 2725 fprintf(coverage_log, "%s\n", file_line); |
2708 fflush(coverage_log); | 2726 fflush(coverage_log); |
2709 } | 2727 } |
2710 } | 2728 } |
2711 | 2729 |
2712 #endif | 2730 #endif |
2713 | 2731 |
2714 } } // namespace v8::internal | 2732 } } // namespace v8::internal |
2715 | 2733 |
2716 #endif // V8_TARGET_ARCH_IA32 | 2734 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |