| Index: src/full-codegen/mips/full-codegen-mips.cc
|
| diff --git a/src/full-codegen/mips/full-codegen-mips.cc b/src/full-codegen/mips/full-codegen-mips.cc
|
| index 40ee4374a10e3cbbb1f25387cce40e92537f0c1a..eb63f882b155d6b2820e912c2edd18d89d72035a 100644
|
| --- a/src/full-codegen/mips/full-codegen-mips.cc
|
| +++ b/src/full-codegen/mips/full-codegen-mips.cc
|
| @@ -1459,49 +1459,12 @@ void FullCodeGenerator::EmitVariableLoad(VariableProxy* proxy,
|
|
|
| void FullCodeGenerator::VisitRegExpLiteral(RegExpLiteral* expr) {
|
| Comment cmnt(masm_, "[ RegExpLiteral");
|
| - Label materialized;
|
| - // Registers will be used as follows:
|
| - // t1 = materialized value (RegExp literal)
|
| - // t0 = JS function, literals array
|
| - // a3 = literal index
|
| - // a2 = RegExp pattern
|
| - // a1 = RegExp flags
|
| - // a0 = RegExp literal clone
|
| - __ lw(a0, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
|
| - __ lw(t0, FieldMemOperand(a0, JSFunction::kLiteralsOffset));
|
| - int literal_offset = LiteralsArray::OffsetOfLiteralAt(expr->literal_index());
|
| - __ lw(t1, FieldMemOperand(t0, literal_offset));
|
| - __ LoadRoot(at, Heap::kUndefinedValueRootIndex);
|
| - __ Branch(&materialized, ne, t1, Operand(at));
|
| -
|
| - // Create regexp literal using runtime function.
|
| - // Result will be in v0.
|
| - __ li(a3, Operand(Smi::FromInt(expr->literal_index())));
|
| - __ li(a2, Operand(expr->pattern()));
|
| - __ li(a1, Operand(expr->flags()));
|
| - __ Push(t0, a3, a2, a1);
|
| - __ CallRuntime(Runtime::kMaterializeRegExpLiteral, 4);
|
| - __ mov(t1, v0);
|
| -
|
| - __ bind(&materialized);
|
| - int size = JSRegExp::kSize + JSRegExp::kInObjectFieldCount * kPointerSize;
|
| - Label allocated, runtime_allocate;
|
| - __ Allocate(size, v0, a2, a3, &runtime_allocate, TAG_OBJECT);
|
| - __ jmp(&allocated);
|
| -
|
| - __ bind(&runtime_allocate);
|
| - __ li(a0, Operand(Smi::FromInt(size)));
|
| - __ Push(t1, a0);
|
| - __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
|
| - __ pop(t1);
|
| -
|
| - __ bind(&allocated);
|
| -
|
| - // After this, registers are used as follows:
|
| - // v0: Newly allocated regexp.
|
| - // t1: Materialized regexp.
|
| - // a2: temp.
|
| - __ CopyFields(v0, t1, a2.bit(), size / kPointerSize);
|
| + __ lw(a3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
|
| + __ li(a2, Operand(Smi::FromInt(expr->literal_index())));
|
| + __ li(a1, Operand(expr->pattern()));
|
| + __ li(a0, Operand(expr->flags()));
|
| + FastCloneRegExpStub stub(isolate());
|
| + __ CallStub(&stub);
|
| context()->Plug(v0);
|
| }
|
|
|
|
|