Index: src/x87/code-stubs-x87.cc |
diff --git a/src/x87/code-stubs-x87.cc b/src/x87/code-stubs-x87.cc |
index f90642428156d6ecbabc9da19bd9ae9efc233acc..d5c362d76feeaa1484a01b2e5baa97fccb031a66 100644 |
--- a/src/x87/code-stubs-x87.cc |
+++ b/src/x87/code-stubs-x87.cc |
@@ -411,7 +411,7 @@ void LoadIndexedStringStub::Generate(MacroAssembler* masm) { |
__ ret(0); |
StubRuntimeCallHelper call_helper; |
- char_at_generator.GenerateSlow(masm, call_helper); |
+ char_at_generator.GenerateSlow(masm, PART_OF_IC_HANDLER, call_helper); |
__ bind(&miss); |
PropertyAccessCompiler::TailCallBuiltin( |
@@ -2626,7 +2626,7 @@ void StringCharCodeAtGenerator::GenerateFast(MacroAssembler* masm) { |
void StringCharCodeAtGenerator::GenerateSlow( |
- MacroAssembler* masm, |
+ MacroAssembler* masm, EmbedMode embed_mode, |
const RuntimeCallHelper& call_helper) { |
__ Abort(kUnexpectedFallthroughToCharCodeAtSlowCase); |
@@ -2638,6 +2638,10 @@ void StringCharCodeAtGenerator::GenerateSlow( |
index_not_number_, |
DONT_DO_SMI_CHECK); |
call_helper.BeforeCall(masm); |
+ if (FLAG_vector_ics && embed_mode == PART_OF_IC_HANDLER) { |
+ __ push(VectorLoadICDescriptor::VectorRegister()); |
+ __ push(VectorLoadICDescriptor::SlotRegister()); |
+ } |
__ push(object_); |
__ push(index_); // Consumed by runtime conversion function. |
if (index_flags_ == STRING_INDEX_IS_NUMBER) { |
@@ -2653,6 +2657,10 @@ void StringCharCodeAtGenerator::GenerateSlow( |
__ mov(index_, eax); |
} |
__ pop(object_); |
+ if (FLAG_vector_ics && embed_mode == PART_OF_IC_HANDLER) { |
+ __ pop(VectorLoadICDescriptor::SlotRegister()); |
+ __ pop(VectorLoadICDescriptor::VectorRegister()); |
+ } |
// Reload the instance type. |
__ mov(result_, FieldOperand(object_, HeapObject::kMapOffset)); |
__ movzx_b(result_, FieldOperand(result_, Map::kInstanceTypeOffset)); |
@@ -4249,16 +4257,14 @@ void VectorRawKeyedLoadStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { |
Label not_array, smi_key, key_okay, miss; |
__ CompareRoot(FieldOperand(feedback, 0), Heap::kWeakCellMapRootIndex); |
__ j(not_equal, &try_array); |
- __ JumpIfNotSmi(key, &miss); |
HandleMonomorphicCase(masm, receiver, key, vector, slot, feedback, &miss); |
__ bind(&try_array); |
// Is it a fixed array? |
__ CompareRoot(FieldOperand(feedback, 0), Heap::kFixedArrayMapRootIndex); |
__ j(not_equal, ¬_array); |
- // We have a polymorphic element handler. |
- __ JumpIfNotSmi(key, &miss); |
+ // We have a polymorphic element handler. |
Label polymorphic, try_poly_name; |
__ bind(&polymorphic); |
HandleArrayCases(masm, receiver, key, vector, slot, feedback, true, &miss); |