| Index: src/full-codegen/arm64/full-codegen-arm64.cc
|
| diff --git a/src/full-codegen/arm64/full-codegen-arm64.cc b/src/full-codegen/arm64/full-codegen-arm64.cc
|
| index 2041bf851f8c9c93679435c72c9d1296d5614e81..0ab43be7770037865671ee96aec369388a97f93c 100644
|
| --- a/src/full-codegen/arm64/full-codegen-arm64.cc
|
| +++ b/src/full-codegen/arm64/full-codegen-arm64.cc
|
| @@ -1450,47 +1450,12 @@ void FullCodeGenerator::EmitVariableLoad(VariableProxy* proxy,
|
|
|
| void FullCodeGenerator::VisitRegExpLiteral(RegExpLiteral* expr) {
|
| Comment cmnt(masm_, "[ RegExpLiteral");
|
| - Label materialized;
|
| - // Registers will be used as follows:
|
| - // x5 = materialized value (RegExp literal)
|
| - // x4 = JS function, literals array
|
| - // x3 = literal index
|
| - // x2 = RegExp pattern
|
| - // x1 = RegExp flags
|
| - // x0 = RegExp literal clone
|
| - __ Ldr(x10, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
|
| - __ Ldr(x4, FieldMemOperand(x10, JSFunction::kLiteralsOffset));
|
| - int literal_offset = LiteralsArray::OffsetOfLiteralAt(expr->literal_index());
|
| - __ Ldr(x5, FieldMemOperand(x4, literal_offset));
|
| - __ JumpIfNotRoot(x5, Heap::kUndefinedValueRootIndex, &materialized);
|
| -
|
| - // Create regexp literal using runtime function.
|
| - // Result will be in x0.
|
| - __ Mov(x3, Smi::FromInt(expr->literal_index()));
|
| - __ Mov(x2, Operand(expr->pattern()));
|
| - __ Mov(x1, Operand(expr->flags()));
|
| - __ Push(x4, x3, x2, x1);
|
| - __ CallRuntime(Runtime::kMaterializeRegExpLiteral, 4);
|
| - __ Mov(x5, x0);
|
| -
|
| - __ Bind(&materialized);
|
| - int size = JSRegExp::kSize + JSRegExp::kInObjectFieldCount * kPointerSize;
|
| - Label allocated, runtime_allocate;
|
| - __ Allocate(size, x0, x2, x3, &runtime_allocate, TAG_OBJECT);
|
| - __ B(&allocated);
|
| -
|
| - __ Bind(&runtime_allocate);
|
| - __ Mov(x10, Smi::FromInt(size));
|
| - __ Push(x5, x10);
|
| - __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
|
| - __ Pop(x5);
|
| -
|
| - __ Bind(&allocated);
|
| - // After this, registers are used as follows:
|
| - // x0: Newly allocated regexp.
|
| - // x5: Materialized regexp.
|
| - // x10, x11, x12: temps.
|
| - __ CopyFields(x0, x5, CPURegList(x10, x11, x12), size / kPointerSize);
|
| + __ Ldr(x3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
|
| + __ Mov(x2, Smi::FromInt(expr->literal_index()));
|
| + __ Mov(x1, Operand(expr->pattern()));
|
| + __ Mov(x0, Operand(expr->flags()));
|
| + FastCloneRegExpStub stub(isolate());
|
| + __ CallStub(&stub);
|
| context()->Plug(x0);
|
| }
|
|
|
|
|