Index: src/ia32/assembler-ia32.cc |
diff --git a/src/ia32/assembler-ia32.cc b/src/ia32/assembler-ia32.cc |
index 123383cf12941a0ee818d4aace6d2d683057dbe9..d9263163fefb97dee052b7009969edc563354d07 100644 |
--- a/src/ia32/assembler-ia32.cc |
+++ b/src/ia32/assembler-ia32.cc |
@@ -52,7 +52,7 @@ namespace internal { |
bool CpuFeatures::initialized_ = false; |
#endif |
uint64_t CpuFeatures::supported_ = 0; |
-uint64_t CpuFeatures::found_by_runtime_probing_ = 0; |
+uint64_t CpuFeatures::found_by_runtime_probing_only_ = 0; |
ExternalReference ExternalReference::cpu_features() { |
@@ -146,7 +146,7 @@ void CpuFeatures::Probe() { |
__ bind(&cpuid); |
__ mov(eax, 1); |
supported_ = (1 << CPUID); |
- { Scope fscope(CPUID); |
+ { CpuFeatureScope fscope(&assm, CPUID); |
__ cpuid(); |
} |
supported_ = 0; |
@@ -169,11 +169,10 @@ void CpuFeatures::Probe() { |
typedef uint64_t (*F0)(); |
F0 probe = FUNCTION_CAST<F0>(reinterpret_cast<Address>(memory->address())); |
- supported_ = probe(); |
- found_by_runtime_probing_ = supported_; |
- uint64_t os_guarantees = OS::CpuFeaturesImpliedByPlatform(); |
- supported_ |= os_guarantees; |
- found_by_runtime_probing_ &= ~os_guarantees; |
+ uint64_t probed_features = probe(); |
+ uint64_t platform_features = OS::CpuFeaturesImpliedByPlatform(); |
+ supported_ = probed_features | platform_features; |
+ found_by_runtime_probing_only_ = probed_features & ~platform_features; |
delete memory; |
} |
@@ -475,7 +474,7 @@ void Assembler::CodeTargetAlign() { |
void Assembler::cpuid() { |
- ASSERT(CpuFeatures::IsEnabled(CPUID)); |
+ ASSERT(IsEnabled(CPUID)); |
EnsureSpace ensure_space(this); |
EMIT(0x0F); |
EMIT(0xA2); |
@@ -697,7 +696,7 @@ void Assembler::movzx_w(Register dst, const Operand& src) { |
void Assembler::cmov(Condition cc, Register dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(CMOV)); |
+ ASSERT(IsEnabled(CMOV)); |
EnsureSpace ensure_space(this); |
// Opcode: 0f 40 + cc /r. |
EMIT(0x0F); |
@@ -1306,7 +1305,7 @@ void Assembler::nop() { |
void Assembler::rdtsc() { |
- ASSERT(CpuFeatures::IsEnabled(RDTSC)); |
+ ASSERT(IsEnabled(RDTSC)); |
EnsureSpace ensure_space(this); |
EMIT(0x0F); |
EMIT(0x31); |
@@ -1660,7 +1659,7 @@ void Assembler::fistp_s(const Operand& adr) { |
void Assembler::fisttp_s(const Operand& adr) { |
- ASSERT(CpuFeatures::IsEnabled(SSE3)); |
+ ASSERT(IsEnabled(SSE3)); |
EnsureSpace ensure_space(this); |
EMIT(0xDB); |
emit_operand(ecx, adr); |
@@ -1668,7 +1667,7 @@ void Assembler::fisttp_s(const Operand& adr) { |
void Assembler::fisttp_d(const Operand& adr) { |
- ASSERT(CpuFeatures::IsEnabled(SSE3)); |
+ ASSERT(IsEnabled(SSE3)); |
EnsureSpace ensure_space(this); |
EMIT(0xDD); |
emit_operand(ecx, adr); |
@@ -1930,7 +1929,7 @@ void Assembler::setcc(Condition cc, Register reg) { |
void Assembler::cvttss2si(Register dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF3); |
EMIT(0x0F); |
@@ -1940,7 +1939,7 @@ void Assembler::cvttss2si(Register dst, const Operand& src) { |
void Assembler::cvttsd2si(Register dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -1950,7 +1949,7 @@ void Assembler::cvttsd2si(Register dst, const Operand& src) { |
void Assembler::cvtsd2si(Register dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -1960,7 +1959,7 @@ void Assembler::cvtsd2si(Register dst, XMMRegister src) { |
void Assembler::cvtsi2sd(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -1970,7 +1969,7 @@ void Assembler::cvtsi2sd(XMMRegister dst, const Operand& src) { |
void Assembler::cvtss2sd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF3); |
EMIT(0x0F); |
@@ -1980,7 +1979,7 @@ void Assembler::cvtss2sd(XMMRegister dst, XMMRegister src) { |
void Assembler::cvtsd2ss(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -1990,7 +1989,7 @@ void Assembler::cvtsd2ss(XMMRegister dst, XMMRegister src) { |
void Assembler::addsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -2000,7 +1999,7 @@ void Assembler::addsd(XMMRegister dst, XMMRegister src) { |
void Assembler::addsd(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -2010,7 +2009,7 @@ void Assembler::addsd(XMMRegister dst, const Operand& src) { |
void Assembler::mulsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -2020,7 +2019,7 @@ void Assembler::mulsd(XMMRegister dst, XMMRegister src) { |
void Assembler::mulsd(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -2030,7 +2029,7 @@ void Assembler::mulsd(XMMRegister dst, const Operand& src) { |
void Assembler::subsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -2040,7 +2039,7 @@ void Assembler::subsd(XMMRegister dst, XMMRegister src) { |
void Assembler::divsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -2050,7 +2049,7 @@ void Assembler::divsd(XMMRegister dst, XMMRegister src) { |
void Assembler::xorpd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2095,7 +2094,7 @@ void Assembler::orpd(XMMRegister dst, XMMRegister src) { |
void Assembler::ucomisd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2105,7 +2104,7 @@ void Assembler::ucomisd(XMMRegister dst, XMMRegister src) { |
void Assembler::ucomisd(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2115,7 +2114,7 @@ void Assembler::ucomisd(XMMRegister dst, const Operand& src) { |
void Assembler::roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode) { |
- ASSERT(CpuFeatures::IsEnabled(SSE4_1)); |
+ ASSERT(IsEnabled(SSE4_1)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2127,7 +2126,7 @@ void Assembler::roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode) { |
} |
void Assembler::movmskpd(Register dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2137,7 +2136,7 @@ void Assembler::movmskpd(Register dst, XMMRegister src) { |
void Assembler::movmskps(Register dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x0F); |
EMIT(0x50); |
@@ -2146,7 +2145,7 @@ void Assembler::movmskps(Register dst, XMMRegister src) { |
void Assembler::pcmpeqd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2156,7 +2155,7 @@ void Assembler::pcmpeqd(XMMRegister dst, XMMRegister src) { |
void Assembler::cmpltsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -2167,7 +2166,7 @@ void Assembler::cmpltsd(XMMRegister dst, XMMRegister src) { |
void Assembler::movaps(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x0F); |
EMIT(0x28); |
@@ -2176,7 +2175,7 @@ void Assembler::movaps(XMMRegister dst, XMMRegister src) { |
void Assembler::movdqa(const Operand& dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2186,7 +2185,7 @@ void Assembler::movdqa(const Operand& dst, XMMRegister src) { |
void Assembler::movdqa(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2196,7 +2195,7 @@ void Assembler::movdqa(XMMRegister dst, const Operand& src) { |
void Assembler::movdqu(const Operand& dst, XMMRegister src ) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF3); |
EMIT(0x0F); |
@@ -2206,7 +2205,7 @@ void Assembler::movdqu(const Operand& dst, XMMRegister src ) { |
void Assembler::movdqu(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF3); |
EMIT(0x0F); |
@@ -2216,7 +2215,7 @@ void Assembler::movdqu(XMMRegister dst, const Operand& src) { |
void Assembler::movntdqa(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE4_1)); |
+ ASSERT(IsEnabled(SSE4_1)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2227,7 +2226,7 @@ void Assembler::movntdqa(XMMRegister dst, const Operand& src) { |
void Assembler::movntdq(const Operand& dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2260,7 +2259,7 @@ void Assembler::movdbl(const Operand& dst, XMMRegister src) { |
void Assembler::movsd(const Operand& dst, XMMRegister src ) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); // double |
EMIT(0x0F); |
@@ -2270,7 +2269,7 @@ void Assembler::movsd(const Operand& dst, XMMRegister src ) { |
void Assembler::movsd(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); // double |
EMIT(0x0F); |
@@ -2280,7 +2279,7 @@ void Assembler::movsd(XMMRegister dst, const Operand& src) { |
void Assembler::movsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF2); |
EMIT(0x0F); |
@@ -2290,7 +2289,7 @@ void Assembler::movsd(XMMRegister dst, XMMRegister src) { |
void Assembler::movss(const Operand& dst, XMMRegister src ) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF3); // float |
EMIT(0x0F); |
@@ -2300,7 +2299,7 @@ void Assembler::movss(const Operand& dst, XMMRegister src ) { |
void Assembler::movss(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF3); // float |
EMIT(0x0F); |
@@ -2310,7 +2309,7 @@ void Assembler::movss(XMMRegister dst, const Operand& src) { |
void Assembler::movss(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0xF3); |
EMIT(0x0F); |
@@ -2320,7 +2319,7 @@ void Assembler::movss(XMMRegister dst, XMMRegister src) { |
void Assembler::movd(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2330,7 +2329,7 @@ void Assembler::movd(XMMRegister dst, const Operand& src) { |
void Assembler::movd(const Operand& dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2353,7 +2352,7 @@ void Assembler::extractps(Register dst, XMMRegister src, byte imm8) { |
void Assembler::pand(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2363,7 +2362,7 @@ void Assembler::pand(XMMRegister dst, XMMRegister src) { |
void Assembler::pxor(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2373,7 +2372,7 @@ void Assembler::pxor(XMMRegister dst, XMMRegister src) { |
void Assembler::por(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2383,7 +2382,7 @@ void Assembler::por(XMMRegister dst, XMMRegister src) { |
void Assembler::ptest(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE4_1)); |
+ ASSERT(IsEnabled(SSE4_1)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2394,7 +2393,7 @@ void Assembler::ptest(XMMRegister dst, XMMRegister src) { |
void Assembler::psllq(XMMRegister reg, int8_t shift) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2405,7 +2404,7 @@ void Assembler::psllq(XMMRegister reg, int8_t shift) { |
void Assembler::psllq(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2415,7 +2414,7 @@ void Assembler::psllq(XMMRegister dst, XMMRegister src) { |
void Assembler::psrlq(XMMRegister reg, int8_t shift) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2426,7 +2425,7 @@ void Assembler::psrlq(XMMRegister reg, int8_t shift) { |
void Assembler::psrlq(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2436,7 +2435,7 @@ void Assembler::psrlq(XMMRegister dst, XMMRegister src) { |
void Assembler::pshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2447,7 +2446,7 @@ void Assembler::pshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle) { |
void Assembler::pextrd(const Operand& dst, XMMRegister src, int8_t offset) { |
- ASSERT(CpuFeatures::IsEnabled(SSE4_1)); |
+ ASSERT(IsEnabled(SSE4_1)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |
@@ -2459,7 +2458,7 @@ void Assembler::pextrd(const Operand& dst, XMMRegister src, int8_t offset) { |
void Assembler::pinsrd(XMMRegister dst, const Operand& src, int8_t offset) { |
- ASSERT(CpuFeatures::IsEnabled(SSE4_1)); |
+ ASSERT(IsEnabled(SSE4_1)); |
EnsureSpace ensure_space(this); |
EMIT(0x66); |
EMIT(0x0F); |