| Index: src/ia32/code-stubs-ia32.cc
|
| diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc
|
| index 8721656634c87575142e2f446fbfbd05ba80caf4..12cc499a7777797695004ae49938228325fecdd5 100644
|
| --- a/src/ia32/code-stubs-ia32.cc
|
| +++ b/src/ia32/code-stubs-ia32.cc
|
| @@ -3956,11 +3956,7 @@ void NumberToStringStub::GenerateLookupNumberStringCache(MacroAssembler* masm,
|
| Register scratch = scratch2;
|
|
|
| // Load the number string cache.
|
| - ExternalReference roots_array_start =
|
| - ExternalReference::roots_array_start(masm->isolate());
|
| - __ mov(scratch, Immediate(Heap::kNumberStringCacheRootIndex));
|
| - __ mov(number_string_cache,
|
| - Operand::StaticArray(scratch, times_pointer_size, roots_array_start));
|
| + __ LoadRoot(number_string_cache, Heap::kNumberStringCacheRootIndex);
|
| // Make the hash mask from the length of the number string cache. It
|
| // contains two elements (number and string) for each cache entry.
|
| __ mov(mask, FieldOperand(number_string_cache, FixedArray::kLengthOffset));
|
| @@ -5010,9 +5006,6 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
|
| static const int8_t kCmpEdiOperandByte2 = BitCast<int8_t, uint8_t>(0x3d);
|
| static const int8_t kMovEaxImmediateByte = BitCast<int8_t, uint8_t>(0xb8);
|
|
|
| - ExternalReference roots_array_start =
|
| - ExternalReference::roots_array_start(masm->isolate());
|
| -
|
| ASSERT_EQ(object.code(), InstanceofStub::left().code());
|
| ASSERT_EQ(function.code(), InstanceofStub::right().code());
|
|
|
| @@ -5032,18 +5025,11 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
|
| if (!HasCallSiteInlineCheck()) {
|
| // Look up the function and the map in the instanceof cache.
|
| Label miss;
|
| - __ mov(scratch, Immediate(Heap::kInstanceofCacheFunctionRootIndex));
|
| - __ cmp(function, Operand::StaticArray(scratch,
|
| - times_pointer_size,
|
| - roots_array_start));
|
| + __ CompareRoot(function, scratch, Heap::kInstanceofCacheFunctionRootIndex);
|
| __ j(not_equal, &miss, Label::kNear);
|
| - __ mov(scratch, Immediate(Heap::kInstanceofCacheMapRootIndex));
|
| - __ cmp(map, Operand::StaticArray(
|
| - scratch, times_pointer_size, roots_array_start));
|
| + __ CompareRoot(map, scratch, Heap::kInstanceofCacheMapRootIndex);
|
| __ j(not_equal, &miss, Label::kNear);
|
| - __ mov(scratch, Immediate(Heap::kInstanceofCacheAnswerRootIndex));
|
| - __ mov(eax, Operand::StaticArray(
|
| - scratch, times_pointer_size, roots_array_start));
|
| + __ LoadRoot(eax, Heap::kInstanceofCacheAnswerRootIndex);
|
| __ ret((HasArgsInRegisters() ? 0 : 2) * kPointerSize);
|
| __ bind(&miss);
|
| }
|
| @@ -5058,12 +5044,8 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
|
| // Update the global instanceof or call site inlined cache with the current
|
| // map and function. The cached answer will be set when it is known below.
|
| if (!HasCallSiteInlineCheck()) {
|
| - __ mov(scratch, Immediate(Heap::kInstanceofCacheMapRootIndex));
|
| - __ mov(Operand::StaticArray(scratch, times_pointer_size, roots_array_start),
|
| - map);
|
| - __ mov(scratch, Immediate(Heap::kInstanceofCacheFunctionRootIndex));
|
| - __ mov(Operand::StaticArray(scratch, times_pointer_size, roots_array_start),
|
| - function);
|
| + __ StoreRoot(map, scratch, Heap::kInstanceofCacheMapRootIndex);
|
| + __ StoreRoot(function, scratch, Heap::kInstanceofCacheFunctionRootIndex);
|
| } else {
|
| // The constants for the code patching are based on no push instructions
|
| // at the call site.
|
| @@ -5097,10 +5079,8 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
|
|
|
| __ bind(&is_instance);
|
| if (!HasCallSiteInlineCheck()) {
|
| - __ Set(eax, Immediate(0));
|
| - __ mov(scratch, Immediate(Heap::kInstanceofCacheAnswerRootIndex));
|
| - __ mov(Operand::StaticArray(scratch,
|
| - times_pointer_size, roots_array_start), eax);
|
| + __ mov(eax, Immediate(0));
|
| + __ StoreRoot(eax, scratch, Heap::kInstanceofCacheAnswerRootIndex);
|
| } else {
|
| // Get return address and delta to inlined map check.
|
| __ mov(eax, factory->true_value());
|
| @@ -5119,10 +5099,8 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
|
|
|
| __ bind(&is_not_instance);
|
| if (!HasCallSiteInlineCheck()) {
|
| - __ Set(eax, Immediate(Smi::FromInt(1)));
|
| - __ mov(scratch, Immediate(Heap::kInstanceofCacheAnswerRootIndex));
|
| - __ mov(Operand::StaticArray(
|
| - scratch, times_pointer_size, roots_array_start), eax);
|
| + __ mov(eax, Immediate(Smi::FromInt(1)));
|
| + __ StoreRoot(eax, scratch, Heap::kInstanceofCacheAnswerRootIndex);
|
| } else {
|
| // Get return address and delta to inlined map check.
|
| __ mov(eax, factory->false_value());
|
| @@ -5875,11 +5853,7 @@ void StringHelper::GenerateTwoCharacterStringTableProbe(MacroAssembler* masm,
|
|
|
| // Load the string table.
|
| Register string_table = c2;
|
| - ExternalReference roots_array_start =
|
| - ExternalReference::roots_array_start(masm->isolate());
|
| - __ mov(scratch, Immediate(Heap::kStringTableRootIndex));
|
| - __ mov(string_table,
|
| - Operand::StaticArray(scratch, times_pointer_size, roots_array_start));
|
| + __ LoadRoot(string_table, Heap::kStringTableRootIndex);
|
|
|
| // Calculate capacity mask from the string table capacity.
|
| Register mask = scratch2;
|
| @@ -5967,12 +5941,7 @@ void StringHelper::GenerateHashInit(MacroAssembler* masm,
|
| Register scratch) {
|
| // hash = (seed + character) + ((seed + character) << 10);
|
| if (Serializer::enabled()) {
|
| - ExternalReference roots_array_start =
|
| - ExternalReference::roots_array_start(masm->isolate());
|
| - __ mov(scratch, Immediate(Heap::kHashSeedRootIndex));
|
| - __ mov(scratch, Operand::StaticArray(scratch,
|
| - times_pointer_size,
|
| - roots_array_start));
|
| + __ LoadRoot(scratch, Heap::kHashSeedRootIndex);
|
| __ SmiUntag(scratch);
|
| __ add(scratch, character);
|
| __ mov(hash, scratch);
|
|
|