Index: src/arm/stub-cache-arm.cc |
=================================================================== |
--- src/arm/stub-cache-arm.cc (revision 7267) |
+++ src/arm/stub-cache-arm.cc (working copy) |
@@ -39,15 +39,16 @@ |
#define __ ACCESS_MASM(masm) |
-static void ProbeTable(MacroAssembler* masm, |
+static void ProbeTable(Isolate* isolate, |
+ MacroAssembler* masm, |
Code::Flags flags, |
StubCache::Table table, |
Register name, |
Register offset, |
Register scratch, |
Register scratch2) { |
- ExternalReference key_offset(SCTableReference::keyReference(table)); |
- ExternalReference value_offset(SCTableReference::valueReference(table)); |
+ ExternalReference key_offset(isolate->stub_cache()->key_reference(table)); |
+ ExternalReference value_offset(isolate->stub_cache()->value_reference(table)); |
uint32_t key_off_addr = reinterpret_cast<uint32_t>(key_offset.address()); |
uint32_t value_off_addr = reinterpret_cast<uint32_t>(value_offset.address()); |
@@ -101,8 +102,8 @@ |
Register scratch0, |
Register scratch1) { |
ASSERT(name->IsSymbol()); |
- __ IncrementCounter(&Counters::negative_lookups, 1, scratch0, scratch1); |
- __ IncrementCounter(&Counters::negative_lookups_miss, 1, scratch0, scratch1); |
+ __ IncrementCounter(COUNTERS->negative_lookups(), 1, scratch0, scratch1); |
+ __ IncrementCounter(COUNTERS->negative_lookups_miss(), 1, scratch0, scratch1); |
Label done; |
@@ -198,7 +199,7 @@ |
} |
} |
__ bind(&done); |
- __ DecrementCounter(&Counters::negative_lookups_miss, 1, scratch0, scratch1); |
+ __ DecrementCounter(COUNTERS->negative_lookups_miss(), 1, scratch0, scratch1); |
} |
@@ -209,6 +210,7 @@ |
Register scratch, |
Register extra, |
Register extra2) { |
+ Isolate* isolate = Isolate::Current(); |
Label miss; |
// Make sure that code is valid. The shifting code relies on the |
@@ -248,7 +250,7 @@ |
Operand((kPrimaryTableSize - 1) << kHeapObjectTagSize)); |
// Probe the primary table. |
- ProbeTable(masm, flags, kPrimary, name, scratch, extra, extra2); |
+ ProbeTable(isolate, masm, flags, kPrimary, name, scratch, extra, extra2); |
// Primary miss: Compute hash for secondary probe. |
__ sub(scratch, scratch, Operand(name)); |
@@ -258,7 +260,7 @@ |
Operand((kSecondaryTableSize - 1) << kHeapObjectTagSize)); |
// Probe the secondary table. |
- ProbeTable(masm, flags, kSecondary, name, scratch, extra, extra2); |
+ ProbeTable(isolate, masm, flags, kSecondary, name, scratch, extra, extra2); |
// Cache miss: Fall-through and let caller handle the miss by |
// entering the runtime system. |
@@ -288,11 +290,12 @@ |
MacroAssembler* masm, int index, Register prototype, Label* miss) { |
// Check we're still in the same context. |
__ ldr(prototype, MemOperand(cp, Context::SlotOffset(Context::GLOBAL_INDEX))); |
- __ Move(ip, Top::global()); |
+ __ Move(ip, Isolate::Current()->global()); |
__ cmp(prototype, ip); |
__ b(ne, miss); |
// Get the global function with the given index. |
- JSFunction* function = JSFunction::cast(Top::global_context()->get(index)); |
+ JSFunction* function = JSFunction::cast( |
+ Isolate::Current()->global_context()->get(index)); |
// Load its initial map. The global functions all have initial maps. |
__ Move(prototype, Handle<Map>(function->initial_map())); |
// Load the prototype from the initial map. |
@@ -505,9 +508,9 @@ |
ASSERT(kind == Code::LOAD_IC || kind == Code::KEYED_LOAD_IC); |
Code* code = NULL; |
if (kind == Code::LOAD_IC) { |
- code = Builtins::builtin(Builtins::LoadIC_Miss); |
+ code = Isolate::Current()->builtins()->builtin(Builtins::LoadIC_Miss); |
} else { |
- code = Builtins::builtin(Builtins::KeyedLoadIC_Miss); |
+ code = Isolate::Current()->builtins()->builtin(Builtins::KeyedLoadIC_Miss); |
} |
Handle<Code> ic(code); |
@@ -548,7 +551,7 @@ |
JSObject* holder_obj) { |
__ push(name); |
InterceptorInfo* interceptor = holder_obj->GetNamedInterceptor(); |
- ASSERT(!Heap::InNewSpace(interceptor)); |
+ ASSERT(!HEAP->InNewSpace(interceptor)); |
Register scratch = name; |
__ mov(scratch, Operand(Handle<Object>(interceptor))); |
__ push(scratch); |
@@ -616,7 +619,7 @@ |
// Pass the additional arguments FastHandleApiCall expects. |
Object* call_data = optimization.api_call_info()->data(); |
Handle<CallHandlerInfo> api_call_info_handle(optimization.api_call_info()); |
- if (Heap::InNewSpace(call_data)) { |
+ if (HEAP->InNewSpace(call_data)) { |
__ Move(r0, api_call_info_handle); |
__ ldr(r6, FieldMemOperand(r0, CallHandlerInfo::kDataOffset)); |
} else { |
@@ -710,7 +713,7 @@ |
name, |
holder, |
miss); |
- return Heap::undefined_value(); |
+ return HEAP->undefined_value(); |
} |
} |
@@ -746,11 +749,11 @@ |
(depth2 != kInvalidProtoDepth); |
} |
- __ IncrementCounter(&Counters::call_const_interceptor, 1, |
+ __ IncrementCounter(COUNTERS->call_const_interceptor(), 1, |
scratch1, scratch2); |
if (can_do_fast_api_call) { |
- __ IncrementCounter(&Counters::call_const_interceptor_fast_api, 1, |
+ __ IncrementCounter(COUNTERS->call_const_interceptor_fast_api(), 1, |
scratch1, scratch2); |
ReserveSpaceForFastApiCall(masm, scratch1); |
} |
@@ -811,7 +814,7 @@ |
FreeSpaceForFastApiCall(masm); |
} |
- return Heap::undefined_value(); |
+ return HEAP->undefined_value(); |
} |
void CompileRegular(MacroAssembler* masm, |
@@ -942,7 +945,7 @@ |
Register fval, |
Register scratch1, |
Register scratch2) { |
- if (CpuFeatures::IsSupported(VFP3)) { |
+ if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { |
CpuFeatures::Scope scope(VFP3); |
__ vmov(s0, ival); |
__ add(scratch1, dst, Operand(wordoffset, LSL, 2)); |
@@ -1080,7 +1083,7 @@ |
!current->IsJSGlobalObject() && |
!current->IsJSGlobalProxy()) { |
if (!name->IsSymbol()) { |
- MaybeObject* maybe_lookup_result = Heap::LookupSymbol(name); |
+ MaybeObject* maybe_lookup_result = HEAP->LookupSymbol(name); |
Object* lookup_result = NULL; // Initialization to please compiler. |
if (!maybe_lookup_result->ToObject(&lookup_result)) { |
set_failure(Failure::cast(maybe_lookup_result)); |
@@ -1100,7 +1103,7 @@ |
__ ldr(scratch1, FieldMemOperand(reg, HeapObject::kMapOffset)); |
reg = holder_reg; // from now the object is in holder_reg |
__ ldr(reg, FieldMemOperand(scratch1, Map::kPrototypeOffset)); |
- } else if (Heap::InNewSpace(prototype)) { |
+ } else if (HEAP->InNewSpace(prototype)) { |
// Get the map of the current object. |
__ ldr(scratch1, FieldMemOperand(reg, HeapObject::kMapOffset)); |
__ cmp(scratch1, Operand(Handle<Map>(current->map()))); |
@@ -1154,7 +1157,7 @@ |
__ b(ne, miss); |
// Log the check depth. |
- LOG(IntEvent("check-maps-depth", depth + 1)); |
+ LOG(Isolate::Current(), IntEvent("check-maps-depth", depth + 1)); |
// Perform security check for access to the global object. |
ASSERT(holder->IsJSGlobalProxy() || !holder->IsAccessCheckNeeded()); |
@@ -1248,7 +1251,7 @@ |
__ push(receiver); |
__ mov(scratch2, sp); // scratch2 = AccessorInfo::args_ |
Handle<AccessorInfo> callback_handle(callback); |
- if (Heap::InNewSpace(callback_handle->data())) { |
+ if (HEAP->InNewSpace(callback_handle->data())) { |
__ Move(scratch3, callback_handle); |
__ ldr(scratch3, FieldMemOperand(scratch3, AccessorInfo::kDataOffset)); |
} else { |
@@ -1462,7 +1465,7 @@ |
__ ldr(r1, FieldMemOperand(r3, JSGlobalPropertyCell::kValueOffset)); |
// Check that the cell contains the same function. |
- if (Heap::InNewSpace(function)) { |
+ if (HEAP->InNewSpace(function)) { |
// We can't embed a pointer to a function in new space so we have |
// to verify that the shared function info is unchanged. This has |
// the nice side effect that multiple closures based on the same |
@@ -1486,8 +1489,8 @@ |
MaybeObject* CallStubCompiler::GenerateMissBranch() { |
- MaybeObject* maybe_obj = StubCache::ComputeCallMiss(arguments().immediate(), |
- kind_); |
+ MaybeObject* maybe_obj = Isolate::Current()->stub_cache()->ComputeCallMiss( |
+ arguments().immediate(), kind_); |
Object* obj; |
if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
__ Jump(Handle<Code>(Code::cast(obj)), RelocInfo::CODE_TARGET); |
@@ -1547,7 +1550,7 @@ |
// ----------------------------------- |
// If object is not an array, bail out to regular call. |
- if (!object->IsJSArray() || cell != NULL) return Heap::undefined_value(); |
+ if (!object->IsJSArray() || cell != NULL) return HEAP->undefined_value(); |
Label miss; |
@@ -1707,7 +1710,7 @@ |
// ----------------------------------- |
// If object is not an array, bail out to regular call. |
- if (!object->IsJSArray() || cell != NULL) return Heap::undefined_value(); |
+ if (!object->IsJSArray() || cell != NULL) return HEAP->undefined_value(); |
Label miss, return_undefined, call_builtin; |
@@ -1794,7 +1797,7 @@ |
// ----------------------------------- |
// If object is not a string, bail out to regular call. |
- if (!object->IsString() || cell != NULL) return Heap::undefined_value(); |
+ if (!object->IsString() || cell != NULL) return HEAP->undefined_value(); |
const int argc = arguments().immediate(); |
@@ -1880,7 +1883,7 @@ |
// ----------------------------------- |
// If object is not a string, bail out to regular call. |
- if (!object->IsString() || cell != NULL) return Heap::undefined_value(); |
+ if (!object->IsString() || cell != NULL) return HEAP->undefined_value(); |
const int argc = arguments().immediate(); |
@@ -1971,7 +1974,7 @@ |
// If the object is not a JSObject or we got an unexpected number of |
// arguments, bail out to the regular call. |
- if (!object->IsJSObject() || argc != 1) return Heap::undefined_value(); |
+ if (!object->IsJSObject() || argc != 1) return HEAP->undefined_value(); |
Label miss; |
GenerateNameCheck(name, &miss); |
@@ -2042,14 +2045,16 @@ |
// -- sp[argc * 4] : receiver |
// ----------------------------------- |
- if (!CpuFeatures::IsSupported(VFP3)) return Heap::undefined_value(); |
+ if (!Isolate::Current()->cpu_features()->IsSupported(VFP3)) |
+ return HEAP->undefined_value(); |
+ |
CpuFeatures::Scope scope_vfp3(VFP3); |
const int argc = arguments().immediate(); |
// If the object is not a JSObject or we got an unexpected number of |
// arguments, bail out to the regular call. |
- if (!object->IsJSObject() || argc != 1) return Heap::undefined_value(); |
+ if (!object->IsJSObject() || argc != 1) return HEAP->undefined_value(); |
Label miss, slow; |
GenerateNameCheck(name, &miss); |
@@ -2191,7 +2196,7 @@ |
// If the object is not a JSObject or we got an unexpected number of |
// arguments, bail out to the regular call. |
- if (!object->IsJSObject() || argc != 1) return Heap::undefined_value(); |
+ if (!object->IsJSObject() || argc != 1) return HEAP->undefined_value(); |
Label miss; |
GenerateNameCheck(name, &miss); |
@@ -2288,11 +2293,11 @@ |
ASSERT(optimization.is_simple_api_call()); |
// Bail out if object is a global object as we don't want to |
// repatch it to global receiver. |
- if (object->IsGlobalObject()) return Heap::undefined_value(); |
- if (cell != NULL) return Heap::undefined_value(); |
+ if (object->IsGlobalObject()) return HEAP->undefined_value(); |
+ if (cell != NULL) return HEAP->undefined_value(); |
int depth = optimization.GetPrototypeDepthOfExpectedType( |
JSObject::cast(object), holder); |
- if (depth == kInvalidProtoDepth) return Heap::undefined_value(); |
+ if (depth == kInvalidProtoDepth) return HEAP->undefined_value(); |
Label miss, miss_before_stack_reserved; |
@@ -2306,8 +2311,8 @@ |
__ tst(r1, Operand(kSmiTagMask)); |
__ b(eq, &miss_before_stack_reserved); |
- __ IncrementCounter(&Counters::call_const, 1, r0, r3); |
- __ IncrementCounter(&Counters::call_const_fast_api, 1, r0, r3); |
+ __ IncrementCounter(COUNTERS->call_const(), 1, r0, r3); |
+ __ IncrementCounter(COUNTERS->call_const_fast_api(), 1, r0, r3); |
ReserveSpaceForFastApiCall(masm(), r0); |
@@ -2371,7 +2376,7 @@ |
SharedFunctionInfo* function_info = function->shared(); |
switch (check) { |
case RECEIVER_MAP_CHECK: |
- __ IncrementCounter(&Counters::call_const, 1, r0, r3); |
+ __ IncrementCounter(COUNTERS->call_const(), 1, r0, r3); |
// Check that the maps haven't changed. |
CheckPrototypes(JSObject::cast(object), r1, holder, r0, r3, r4, name, |
@@ -2562,7 +2567,7 @@ |
__ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); |
// Jump to the cached code (tail call). |
- __ IncrementCounter(&Counters::call_global_inline, 1, r3, r4); |
+ __ IncrementCounter(COUNTERS->call_global_inline(), 1, r3, r4); |
ASSERT(function->is_compiled()); |
Handle<Code> code(function->code()); |
ParameterCount expected(function->shared()->formal_parameter_count()); |
@@ -2579,7 +2584,7 @@ |
// Handle call cache miss. |
__ bind(&miss); |
- __ IncrementCounter(&Counters::call_global_inline_miss, 1, r1, r3); |
+ __ IncrementCounter(COUNTERS->call_global_inline_miss(), 1, r1, r3); |
Object* obj; |
{ MaybeObject* maybe_obj = GenerateMissBranch(); |
if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
@@ -2609,7 +2614,8 @@ |
r1, r2, r3, |
&miss); |
__ bind(&miss); |
- Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); |
+ Handle<Code> ic(Isolate::Current()->builtins()->builtin( |
+ Builtins::StoreIC_Miss)); |
__ Jump(ic, RelocInfo::CODE_TARGET); |
// Return the generated code. |
@@ -2657,7 +2663,8 @@ |
// Handle store cache miss. |
__ bind(&miss); |
- Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); |
+ Handle<Code> ic(Isolate::Current()->builtins()->builtin( |
+ Builtins::StoreIC_Miss)); |
__ Jump(ic, RelocInfo::CODE_TARGET); |
// Return the generated code. |
@@ -2705,7 +2712,8 @@ |
// Handle store cache miss. |
__ bind(&miss); |
- Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); |
+ Handle<Code> ic(Isolate::Current()->builtins()->builtin( |
+ Builtins::StoreIC_Miss)); |
__ Jump(ic, RelocInfo::CODE_TARGET); |
// Return the generated code. |
@@ -2742,13 +2750,14 @@ |
// Store the value in the cell. |
__ str(r0, FieldMemOperand(r4, JSGlobalPropertyCell::kValueOffset)); |
- __ IncrementCounter(&Counters::named_store_global_inline, 1, r4, r3); |
+ __ IncrementCounter(COUNTERS->named_store_global_inline(), 1, r4, r3); |
__ Ret(); |
// Handle store cache miss. |
__ bind(&miss); |
- __ IncrementCounter(&Counters::named_store_global_inline_miss, 1, r4, r3); |
- Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss)); |
+ __ IncrementCounter(COUNTERS->named_store_global_inline_miss(), 1, r4, r3); |
+ Handle<Code> ic(Isolate::Current()->builtins()->builtin( |
+ Builtins::StoreIC_Miss)); |
__ Jump(ic, RelocInfo::CODE_TARGET); |
// Return the generated code. |
@@ -2795,7 +2804,7 @@ |
GenerateLoadMiss(masm(), Code::LOAD_IC); |
// Return the generated code. |
- return GetCode(NONEXISTENT, Heap::empty_string()); |
+ return GetCode(NONEXISTENT, HEAP->empty_string()); |
} |
@@ -2930,11 +2939,11 @@ |
} |
__ mov(r0, r4); |
- __ IncrementCounter(&Counters::named_load_global_stub, 1, r1, r3); |
+ __ IncrementCounter(COUNTERS->named_load_global_stub(), 1, r1, r3); |
__ Ret(); |
__ bind(&miss); |
- __ IncrementCounter(&Counters::named_load_global_stub_miss, 1, r1, r3); |
+ __ IncrementCounter(COUNTERS->named_load_global_stub_miss(), 1, r1, r3); |
GenerateLoadMiss(masm(), Code::LOAD_IC); |
// Return the generated code. |
@@ -3079,7 +3088,7 @@ |
// -- r1 : receiver |
// ----------------------------------- |
Label miss; |
- __ IncrementCounter(&Counters::keyed_load_string_length, 1, r2, r3); |
+ __ IncrementCounter(COUNTERS->keyed_load_string_length(), 1, r2, r3); |
// Check the key is the cached one. |
__ cmp(r0, Operand(Handle<String>(name))); |
@@ -3087,7 +3096,7 @@ |
GenerateLoadStringLength(masm(), r1, r2, r3, &miss, true); |
__ bind(&miss); |
- __ DecrementCounter(&Counters::keyed_load_string_length, 1, r2, r3); |
+ __ DecrementCounter(COUNTERS->keyed_load_string_length(), 1, r2, r3); |
GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
@@ -3103,7 +3112,7 @@ |
// ----------------------------------- |
Label miss; |
- __ IncrementCounter(&Counters::keyed_load_function_prototype, 1, r2, r3); |
+ __ IncrementCounter(COUNTERS->keyed_load_function_prototype(), 1, r2, r3); |
// Check the name hasn't changed. |
__ cmp(r0, Operand(Handle<String>(name))); |
@@ -3111,7 +3120,7 @@ |
GenerateLoadFunctionPrototype(masm(), r1, r2, r3, &miss); |
__ bind(&miss); |
- __ DecrementCounter(&Counters::keyed_load_function_prototype, 1, r2, r3); |
+ __ DecrementCounter(COUNTERS->keyed_load_function_prototype(), 1, r2, r3); |
GenerateLoadMiss(masm(), Code::KEYED_LOAD_IC); |
return GetCode(CALLBACKS, name); |
@@ -3179,7 +3188,7 @@ |
// ----------------------------------- |
Label miss; |
- __ IncrementCounter(&Counters::keyed_store_field, 1, r3, r4); |
+ __ IncrementCounter(COUNTERS->keyed_store_field(), 1, r3, r4); |
// Check that the name has not changed. |
__ cmp(r1, Operand(Handle<String>(name))); |
@@ -3195,8 +3204,9 @@ |
&miss); |
__ bind(&miss); |
- __ DecrementCounter(&Counters::keyed_store_field, 1, r3, r4); |
- Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Miss)); |
+ __ DecrementCounter(COUNTERS->keyed_store_field(), 1, r3, r4); |
+ Handle<Code> ic(Isolate::Current()->builtins()->builtin( |
+ Builtins::KeyedStoreIC_Miss)); |
__ Jump(ic, RelocInfo::CODE_TARGET); |
@@ -3240,7 +3250,7 @@ |
__ ldr(elements_reg, |
FieldMemOperand(receiver_reg, JSObject::kElementsOffset)); |
__ ldr(scratch, FieldMemOperand(elements_reg, HeapObject::kMapOffset)); |
- __ cmp(scratch, Operand(Handle<Map>(Factory::fixed_array_map()))); |
+ __ cmp(scratch, Operand(Handle<Map>(FACTORY->fixed_array_map()))); |
__ b(ne, &miss); |
// Check that the key is within bounds. |
@@ -3267,7 +3277,8 @@ |
__ Ret(); |
__ bind(&miss); |
- Handle<Code> ic(Builtins::builtin(Builtins::KeyedStoreIC_Miss)); |
+ Handle<Code> ic( |
+ Isolate::Current()->builtins()->builtin(Builtins::KeyedStoreIC_Miss)); |
__ Jump(ic, RelocInfo::CODE_TARGET); |
// Return the generated code. |
@@ -3403,14 +3414,15 @@ |
// Remove caller arguments and receiver from the stack and return. |
__ add(sp, sp, Operand(r1, LSL, kPointerSizeLog2)); |
__ add(sp, sp, Operand(kPointerSize)); |
- __ IncrementCounter(&Counters::constructed_objects, 1, r1, r2); |
- __ IncrementCounter(&Counters::constructed_objects_stub, 1, r1, r2); |
+ __ IncrementCounter(COUNTERS->constructed_objects(), 1, r1, r2); |
+ __ IncrementCounter(COUNTERS->constructed_objects_stub(), 1, r1, r2); |
__ Jump(lr); |
// Jump to the generic stub in case the specialized code cannot handle the |
// construction. |
__ bind(&generic_stub_call); |
- Code* code = Builtins::builtin(Builtins::JSConstructStubGeneric); |
+ Code* code = Isolate::Current()->builtins()->builtin( |
+ Builtins::JSConstructStubGeneric); |
Handle<Code> generic_construct_stub(code); |
__ Jump(generic_construct_stub, RelocInfo::CODE_TARGET); |
@@ -3499,7 +3511,7 @@ |
__ ldr(value, MemOperand(r3, key, LSL, 1)); |
break; |
case kExternalFloatArray: |
- if (CpuFeatures::IsSupported(VFP3)) { |
+ if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { |
CpuFeatures::Scope scope(VFP3); |
__ add(r2, r3, Operand(key, LSL, 1)); |
__ vldr(s0, r2, 0); |
@@ -3538,7 +3550,7 @@ |
// Now we can use r0 for the result as key is not needed any more. |
__ mov(r0, r5); |
- if (CpuFeatures::IsSupported(VFP3)) { |
+ if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { |
CpuFeatures::Scope scope(VFP3); |
__ vmov(s0, value); |
__ vcvt_f64_s32(d0, s0); |
@@ -3553,7 +3565,7 @@ |
// The test is different for unsigned int values. Since we need |
// the value to be in the range of a positive smi, we can't |
// handle either of the top two bits being set in the value. |
- if (CpuFeatures::IsSupported(VFP3)) { |
+ if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { |
CpuFeatures::Scope scope(VFP3); |
Label box_int, done; |
__ tst(value, Operand(0xC0000000)); |
@@ -3617,7 +3629,7 @@ |
} else if (array_type == kExternalFloatArray) { |
// For the floating-point array type, we need to always allocate a |
// HeapNumber. |
- if (CpuFeatures::IsSupported(VFP3)) { |
+ if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { |
CpuFeatures::Scope scope(VFP3); |
// Allocate a HeapNumber for the result. Don't use r0 and r1 as |
// AllocateHeapNumber clobbers all registers - also when jumping due to |
@@ -3693,7 +3705,7 @@ |
// Slow case, key and receiver still in r0 and r1. |
__ bind(&slow); |
- __ IncrementCounter(&Counters::keyed_load_external_array_slow, 1, r2, r3); |
+ __ IncrementCounter(COUNTERS->keyed_load_external_array_slow(), 1, r2, r3); |
// ---------- S t a t e -------------- |
// -- lr : return address |
@@ -3808,7 +3820,7 @@ |
// The WebGL specification leaves the behavior of storing NaN and |
// +/-Infinity into integer arrays basically undefined. For more |
// reproducible behavior, convert these to zero. |
- if (CpuFeatures::IsSupported(VFP3)) { |
+ if (Isolate::Current()->cpu_features()->IsSupported(VFP3)) { |
CpuFeatures::Scope scope(VFP3); |