| OLD | NEW | 
|---|
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "src/crankshaft/arm64/lithium-codegen-arm64.h" | 5 #include "src/crankshaft/arm64/lithium-codegen-arm64.h" | 
| 6 | 6 | 
| 7 #include "src/arm64/frames-arm64.h" | 7 #include "src/arm64/frames-arm64.h" | 
| 8 #include "src/base/bits.h" | 8 #include "src/base/bits.h" | 
| 9 #include "src/code-factory.h" | 9 #include "src/code-factory.h" | 
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" | 
| (...skipping 5546 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5557 | 5557 | 
| 5558 | 5558 | 
| 5559 void LCodeGen::DoToFastProperties(LToFastProperties* instr) { | 5559 void LCodeGen::DoToFastProperties(LToFastProperties* instr) { | 
| 5560   DCHECK(ToRegister(instr->value()).Is(x0)); | 5560   DCHECK(ToRegister(instr->value()).Is(x0)); | 
| 5561   DCHECK(ToRegister(instr->result()).Is(x0)); | 5561   DCHECK(ToRegister(instr->result()).Is(x0)); | 
| 5562   __ Push(x0); | 5562   __ Push(x0); | 
| 5563   CallRuntime(Runtime::kToFastProperties, 1, instr); | 5563   CallRuntime(Runtime::kToFastProperties, 1, instr); | 
| 5564 } | 5564 } | 
| 5565 | 5565 | 
| 5566 | 5566 | 
| 5567 void LCodeGen::DoRegExpLiteral(LRegExpLiteral* instr) { |  | 
| 5568   DCHECK(ToRegister(instr->context()).is(cp)); |  | 
| 5569   Label materialized; |  | 
| 5570   // Registers will be used as follows: |  | 
| 5571   // x7 = literals array. |  | 
| 5572   // x1 = regexp literal. |  | 
| 5573   // x0 = regexp literal clone. |  | 
| 5574   // x10-x12 are used as temporaries. |  | 
| 5575   int literal_offset = |  | 
| 5576       LiteralsArray::OffsetOfLiteralAt(instr->hydrogen()->literal_index()); |  | 
| 5577   __ LoadObject(x7, instr->hydrogen()->literals()); |  | 
| 5578   __ Ldr(x1, FieldMemOperand(x7, literal_offset)); |  | 
| 5579   __ JumpIfNotRoot(x1, Heap::kUndefinedValueRootIndex, &materialized); |  | 
| 5580 |  | 
| 5581   // Create regexp literal using runtime function |  | 
| 5582   // Result will be in x0. |  | 
| 5583   __ Mov(x12, Operand(Smi::FromInt(instr->hydrogen()->literal_index()))); |  | 
| 5584   __ Mov(x11, Operand(instr->hydrogen()->pattern())); |  | 
| 5585   __ Mov(x10, Operand(instr->hydrogen()->flags())); |  | 
| 5586   __ Push(x7, x12, x11, x10); |  | 
| 5587   CallRuntime(Runtime::kMaterializeRegExpLiteral, 4, instr); |  | 
| 5588   __ Mov(x1, x0); |  | 
| 5589 |  | 
| 5590   __ Bind(&materialized); |  | 
| 5591   int size = JSRegExp::kSize + JSRegExp::kInObjectFieldCount * kPointerSize; |  | 
| 5592   Label allocated, runtime_allocate; |  | 
| 5593 |  | 
| 5594   __ Allocate(size, x0, x10, x11, &runtime_allocate, TAG_OBJECT); |  | 
| 5595   __ B(&allocated); |  | 
| 5596 |  | 
| 5597   __ Bind(&runtime_allocate); |  | 
| 5598   __ Mov(x0, Smi::FromInt(size)); |  | 
| 5599   __ Push(x1, x0); |  | 
| 5600   CallRuntime(Runtime::kAllocateInNewSpace, 1, instr); |  | 
| 5601   __ Pop(x1); |  | 
| 5602 |  | 
| 5603   __ Bind(&allocated); |  | 
| 5604   // Copy the content into the newly allocated memory. |  | 
| 5605   __ CopyFields(x0, x1, CPURegList(x10, x11, x12), size / kPointerSize); |  | 
| 5606 } |  | 
| 5607 |  | 
| 5608 |  | 
| 5609 void LCodeGen::DoTransitionElementsKind(LTransitionElementsKind* instr) { | 5567 void LCodeGen::DoTransitionElementsKind(LTransitionElementsKind* instr) { | 
| 5610   Register object = ToRegister(instr->object()); | 5568   Register object = ToRegister(instr->object()); | 
| 5611 | 5569 | 
| 5612   Handle<Map> from_map = instr->original_map(); | 5570   Handle<Map> from_map = instr->original_map(); | 
| 5613   Handle<Map> to_map = instr->transitioned_map(); | 5571   Handle<Map> to_map = instr->transitioned_map(); | 
| 5614   ElementsKind from_kind = instr->from_kind(); | 5572   ElementsKind from_kind = instr->from_kind(); | 
| 5615   ElementsKind to_kind = instr->to_kind(); | 5573   ElementsKind to_kind = instr->to_kind(); | 
| 5616 | 5574 | 
| 5617   Label not_applicable; | 5575   Label not_applicable; | 
| 5618 | 5576 | 
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5937   Handle<ScopeInfo> scope_info = instr->scope_info(); | 5895   Handle<ScopeInfo> scope_info = instr->scope_info(); | 
| 5938   __ Push(scope_info); | 5896   __ Push(scope_info); | 
| 5939   __ Push(ToRegister(instr->function())); | 5897   __ Push(ToRegister(instr->function())); | 
| 5940   CallRuntime(Runtime::kPushBlockContext, 2, instr); | 5898   CallRuntime(Runtime::kPushBlockContext, 2, instr); | 
| 5941   RecordSafepoint(Safepoint::kNoLazyDeopt); | 5899   RecordSafepoint(Safepoint::kNoLazyDeopt); | 
| 5942 } | 5900 } | 
| 5943 | 5901 | 
| 5944 | 5902 | 
| 5945 }  // namespace internal | 5903 }  // namespace internal | 
| 5946 }  // namespace v8 | 5904 }  // namespace v8 | 
| OLD | NEW | 
|---|