Index: src/ia32/assembler-ia32.cc |
=================================================================== |
--- src/ia32/assembler-ia32.cc (revision 7267) |
+++ src/ia32/assembler-ia32.cc (working copy) |
@@ -48,16 +48,17 @@ |
// ----------------------------------------------------------------------------- |
// Implementation of CpuFeatures |
-// Safe default is no features. |
-uint64_t CpuFeatures::supported_ = 0; |
-uint64_t CpuFeatures::enabled_ = 0; |
-uint64_t CpuFeatures::found_by_runtime_probing_ = 0; |
+CpuFeatures::CpuFeatures() |
+ : supported_(0), |
+ enabled_(0), |
+ found_by_runtime_probing_(0) { |
+} |
// The Probe method needs executable memory, so it uses Heap::CreateCode. |
// Allocation failure is silent and leads to safe default. |
void CpuFeatures::Probe(bool portable) { |
- ASSERT(Heap::HasBeenSetup()); |
+ ASSERT(HEAP->HasBeenSetup()); |
ASSERT(supported_ == 0); |
if (portable && Serializer::enabled()) { |
supported_ |= OS::CpuFeaturesImpliedByPlatform(); |
@@ -120,16 +121,16 @@ |
CodeDesc desc; |
assm.GetCode(&desc); |
- |
Object* code; |
- { MaybeObject* maybe_code = Heap::CreateCode(desc, |
+ { MaybeObject* maybe_code = HEAP->CreateCode(desc, |
Code::ComputeFlags(Code::STUB), |
Handle<Code>::null()); |
if (!maybe_code->ToObject(&code)) return; |
} |
if (!code->IsCode()) return; |
- PROFILE(CodeCreateEvent(Logger::BUILTIN_TAG, |
+ PROFILE(ISOLATE, |
+ CodeCreateEvent(Logger::BUILTIN_TAG, |
Code::cast(code), "CpuFeatures::Probe")); |
typedef uint64_t (*F0)(); |
F0 probe = FUNCTION_CAST<F0>(Code::cast(code)->entry()); |
@@ -295,20 +296,18 @@ |
static void InitCoverageLog(); |
#endif |
-// Spare buffer. |
-byte* Assembler::spare_buffer_ = NULL; |
- |
Assembler::Assembler(void* buffer, int buffer_size) |
: positions_recorder_(this), |
emit_debug_code_(FLAG_debug_code) { |
+ Isolate* isolate = Isolate::Current(); |
if (buffer == NULL) { |
// Do our own buffer management. |
if (buffer_size <= kMinimalBufferSize) { |
buffer_size = kMinimalBufferSize; |
- if (spare_buffer_ != NULL) { |
- buffer = spare_buffer_; |
- spare_buffer_ = NULL; |
+ if (isolate->assembler_spare_buffer() != NULL) { |
+ buffer = isolate->assembler_spare_buffer(); |
+ isolate->set_assembler_spare_buffer(NULL); |
} |
} |
if (buffer == NULL) { |
@@ -348,9 +347,11 @@ |
Assembler::~Assembler() { |
+ Isolate* isolate = Isolate::Current(); |
if (own_buffer_) { |
- if (spare_buffer_ == NULL && buffer_size_ == kMinimalBufferSize) { |
- spare_buffer_ = buffer_; |
+ if (isolate->assembler_spare_buffer() == NULL && |
+ buffer_size_ == kMinimalBufferSize) { |
+ isolate->set_assembler_spare_buffer(buffer_); |
} else { |
DeleteArray(buffer_); |
} |
@@ -369,7 +370,7 @@ |
desc->reloc_size = (buffer_ + buffer_size_) - reloc_info_writer.pos(); |
desc->origin = this; |
- Counters::reloc_info_size.Increment(desc->reloc_size); |
+ COUNTERS->reloc_info_size()->Increment(desc->reloc_size); |
} |
@@ -387,7 +388,7 @@ |
void Assembler::cpuid() { |
- ASSERT(CpuFeatures::IsEnabled(CPUID)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(CPUID)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x0F); |
@@ -748,7 +749,7 @@ |
void Assembler::cmov(Condition cc, Register dst, int32_t imm32) { |
- ASSERT(CpuFeatures::IsEnabled(CMOV)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(CMOV)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
UNIMPLEMENTED(); |
@@ -759,7 +760,7 @@ |
void Assembler::cmov(Condition cc, Register dst, Handle<Object> handle) { |
- ASSERT(CpuFeatures::IsEnabled(CMOV)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(CMOV)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
UNIMPLEMENTED(); |
@@ -770,7 +771,7 @@ |
void Assembler::cmov(Condition cc, Register dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(CMOV)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(CMOV)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
// Opcode: 0f 40 + cc /r. |
@@ -1451,7 +1452,7 @@ |
void Assembler::rdtsc() { |
- ASSERT(CpuFeatures::IsEnabled(RDTSC)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(RDTSC)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x0F); |
@@ -1857,7 +1858,7 @@ |
void Assembler::fisttp_s(const Operand& adr) { |
- ASSERT(CpuFeatures::IsEnabled(SSE3)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE3)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xDB); |
@@ -1866,7 +1867,7 @@ |
void Assembler::fisttp_d(const Operand& adr) { |
- ASSERT(CpuFeatures::IsEnabled(SSE3)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE3)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xDD); |
@@ -2135,7 +2136,7 @@ |
void Assembler::cvttss2si(Register dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF3); |
@@ -2146,7 +2147,7 @@ |
void Assembler::cvttsd2si(Register dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF2); |
@@ -2157,7 +2158,7 @@ |
void Assembler::cvtsi2sd(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF2); |
@@ -2168,7 +2169,7 @@ |
void Assembler::cvtss2sd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF3); |
@@ -2179,7 +2180,7 @@ |
void Assembler::addsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF2); |
@@ -2190,7 +2191,7 @@ |
void Assembler::mulsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF2); |
@@ -2201,7 +2202,7 @@ |
void Assembler::subsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF2); |
@@ -2212,7 +2213,7 @@ |
void Assembler::divsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF2); |
@@ -2223,7 +2224,7 @@ |
void Assembler::xorpd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2254,7 +2255,7 @@ |
void Assembler::ucomisd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2265,7 +2266,7 @@ |
void Assembler::movmskpd(Register dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2276,7 +2277,7 @@ |
void Assembler::cmpltsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF2); |
@@ -2288,7 +2289,7 @@ |
void Assembler::movaps(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x0F); |
@@ -2298,7 +2299,7 @@ |
void Assembler::movdqa(const Operand& dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2309,7 +2310,7 @@ |
void Assembler::movdqa(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2320,7 +2321,7 @@ |
void Assembler::movdqu(const Operand& dst, XMMRegister src ) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF3); |
@@ -2331,7 +2332,7 @@ |
void Assembler::movdqu(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF3); |
@@ -2342,7 +2343,7 @@ |
void Assembler::movntdqa(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE4_1)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE4_1)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2354,7 +2355,7 @@ |
void Assembler::movntdq(const Operand& dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2390,7 +2391,7 @@ |
void Assembler::movsd(const Operand& dst, XMMRegister src ) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF2); // double |
@@ -2401,7 +2402,7 @@ |
void Assembler::movsd(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF2); // double |
@@ -2412,7 +2413,7 @@ |
void Assembler::movsd(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0xF2); |
@@ -2423,7 +2424,7 @@ |
void Assembler::movd(XMMRegister dst, const Operand& src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2434,7 +2435,7 @@ |
void Assembler::movd(const Operand& dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2445,7 +2446,7 @@ |
void Assembler::pand(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2456,7 +2457,7 @@ |
void Assembler::pxor(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2467,7 +2468,7 @@ |
void Assembler::por(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2478,7 +2479,7 @@ |
void Assembler::ptest(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE4_1)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE4_1)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2490,7 +2491,7 @@ |
void Assembler::psllq(XMMRegister reg, int8_t shift) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2502,7 +2503,7 @@ |
void Assembler::psllq(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2513,7 +2514,7 @@ |
void Assembler::psrlq(XMMRegister reg, int8_t shift) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2525,7 +2526,7 @@ |
void Assembler::psrlq(XMMRegister dst, XMMRegister src) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2536,7 +2537,7 @@ |
void Assembler::pshufd(XMMRegister dst, XMMRegister src, int8_t shuffle) { |
- ASSERT(CpuFeatures::IsEnabled(SSE2)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE2)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2548,7 +2549,7 @@ |
void Assembler::pextrd(const Operand& dst, XMMRegister src, int8_t offset) { |
- ASSERT(CpuFeatures::IsEnabled(SSE4_1)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE4_1)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2561,7 +2562,7 @@ |
void Assembler::pinsrd(XMMRegister dst, const Operand& src, int8_t offset) { |
- ASSERT(CpuFeatures::IsEnabled(SSE4_1)); |
+ ASSERT(Isolate::Current()->cpu_features()->IsEnabled(SSE4_1)); |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
EMIT(0x66); |
@@ -2617,6 +2618,7 @@ |
void Assembler::GrowBuffer() { |
+ Isolate* isolate = Isolate::Current(); |
ASSERT(overflow()); |
if (!own_buffer_) FATAL("external code buffer is too small"); |
@@ -2630,7 +2632,7 @@ |
// Some internal data structures overflow for very large buffers, |
// they must ensure that kMaximalBufferSize is not too large. |
if ((desc.buffer_size > kMaximalBufferSize) || |
- (desc.buffer_size > Heap::MaxOldGenerationSize())) { |
+ (desc.buffer_size > HEAP->MaxOldGenerationSize())) { |
V8::FatalProcessOutOfMemory("Assembler::GrowBuffer"); |
} |
@@ -2653,8 +2655,9 @@ |
reloc_info_writer.pos(), desc.reloc_size); |
// Switch buffers. |
- if (spare_buffer_ == NULL && buffer_size_ == kMinimalBufferSize) { |
- spare_buffer_ = buffer_; |
+ if (isolate->assembler_spare_buffer() == NULL && |
+ buffer_size_ == kMinimalBufferSize) { |
+ isolate->set_assembler_spare_buffer(buffer_); |
} else { |
DeleteArray(buffer_); |
} |