| Index: src/mips64/code-stubs-mips64.cc
|
| diff --git a/src/mips64/code-stubs-mips64.cc b/src/mips64/code-stubs-mips64.cc
|
| index 55c073ff454221f8b9920342deeb1e8d3ca1d011..76a469a516b7a9ec7eaa2c793a8ea0b0ed8eee24 100644
|
| --- a/src/mips64/code-stubs-mips64.cc
|
| +++ b/src/mips64/code-stubs-mips64.cc
|
| @@ -1347,10 +1347,16 @@ void LoadIndexedStringStub::Generate(MacroAssembler* masm) {
|
|
|
| Register receiver = LoadDescriptor::ReceiverRegister();
|
| Register index = LoadDescriptor::NameRegister();
|
| - Register scratch = a3;
|
| + Register scratch = a4;
|
| Register result = v0;
|
| DCHECK(!scratch.is(receiver) && !scratch.is(index));
|
| + DCHECK(!FLAG_vector_ics ||
|
| + (!scratch.is(VectorLoadICDescriptor::VectorRegister()) &&
|
| + result.is(VectorLoadICDescriptor::SlotRegister())));
|
|
|
| + // StringCharAtGenerator doesn't use the result register until it's passed
|
| + // the different miss possibilities. If it did, we would have a conflict
|
| + // when FLAG_vector_ics is true.
|
| StringCharAtGenerator char_at_generator(receiver, index, scratch, result,
|
| &miss, // When not a string.
|
| &miss, // When not a number.
|
| @@ -1564,8 +1570,14 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
|
| void FunctionPrototypeStub::Generate(MacroAssembler* masm) {
|
| Label miss;
|
| Register receiver = LoadDescriptor::ReceiverRegister();
|
| - NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype(masm, receiver, a3,
|
| - a4, &miss);
|
| + // Ensure that the vector and slot registers won't be clobbered before
|
| + // calling the miss handler.
|
| + DCHECK(!FLAG_vector_ics ||
|
| + !AreAliased(a4, a5, VectorLoadICDescriptor::VectorRegister(),
|
| + VectorLoadICDescriptor::SlotRegister()));
|
| +
|
| + NamedLoadHandlerCompiler::GenerateLoadFunctionPrototype(masm, receiver, a4,
|
| + a5, &miss);
|
| __ bind(&miss);
|
| PropertyAccessCompiler::TailCallBuiltin(
|
| masm, PropertyAccessCompiler::MissBuiltin(Code::LOAD_IC));
|
|
|