| 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/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/arm64/lithium-codegen-arm64.h" | 7 #include "src/arm64/lithium-codegen-arm64.h" |
| 8 #include "src/arm64/lithium-gap-resolver-arm64.h" | 8 #include "src/arm64/lithium-gap-resolver-arm64.h" |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
| (...skipping 2639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2650 | 2650 |
| 2651 | 2651 |
| 2652 void LCodeGen::DoCheckValue(LCheckValue* instr) { | 2652 void LCodeGen::DoCheckValue(LCheckValue* instr) { |
| 2653 Register reg = ToRegister(instr->value()); | 2653 Register reg = ToRegister(instr->value()); |
| 2654 Handle<HeapObject> object = instr->hydrogen()->object().handle(); | 2654 Handle<HeapObject> object = instr->hydrogen()->object().handle(); |
| 2655 AllowDeferredHandleDereference smi_check; | 2655 AllowDeferredHandleDereference smi_check; |
| 2656 if (isolate()->heap()->InNewSpace(*object)) { | 2656 if (isolate()->heap()->InNewSpace(*object)) { |
| 2657 UseScratchRegisterScope temps(masm()); | 2657 UseScratchRegisterScope temps(masm()); |
| 2658 Register temp = temps.AcquireX(); | 2658 Register temp = temps.AcquireX(); |
| 2659 Handle<Cell> cell = isolate()->factory()->NewCell(object); | 2659 Handle<Cell> cell = isolate()->factory()->NewCell(object); |
| 2660 __ Mov(temp, Operand(Handle<Object>(cell))); | 2660 __ Mov(temp, Operand(cell)); |
| 2661 __ Ldr(temp, FieldMemOperand(temp, Cell::kValueOffset)); | 2661 __ Ldr(temp, FieldMemOperand(temp, Cell::kValueOffset)); |
| 2662 __ Cmp(reg, temp); | 2662 __ Cmp(reg, temp); |
| 2663 } else { | 2663 } else { |
| 2664 __ Cmp(reg, Operand(object)); | 2664 __ Cmp(reg, Operand(object)); |
| 2665 } | 2665 } |
| 2666 DeoptimizeIf(ne, instr, Deoptimizer::kValueMismatch); | 2666 DeoptimizeIf(ne, instr, Deoptimizer::kValueMismatch); |
| 2667 } | 2667 } |
| 2668 | 2668 |
| 2669 | 2669 |
| 2670 void LCodeGen::DoLazyBailout(LLazyBailout* instr) { | 2670 void LCodeGen::DoLazyBailout(LLazyBailout* instr) { |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3125 // instanceof stub. | 3125 // instanceof stub. |
| 3126 __ Ldr(map, FieldMemOperand(object, HeapObject::kMapOffset)); | 3126 __ Ldr(map, FieldMemOperand(object, HeapObject::kMapOffset)); |
| 3127 { | 3127 { |
| 3128 // Below we use Factory::the_hole_value() on purpose instead of loading from | 3128 // Below we use Factory::the_hole_value() on purpose instead of loading from |
| 3129 // the root array to force relocation and later be able to patch with a | 3129 // the root array to force relocation and later be able to patch with a |
| 3130 // custom value. | 3130 // custom value. |
| 3131 InstructionAccurateScope scope(masm(), 5); | 3131 InstructionAccurateScope scope(masm(), 5); |
| 3132 __ bind(&map_check); | 3132 __ bind(&map_check); |
| 3133 // Will be patched with the cached map. | 3133 // Will be patched with the cached map. |
| 3134 Handle<Cell> cell = factory()->NewCell(factory()->the_hole_value()); | 3134 Handle<Cell> cell = factory()->NewCell(factory()->the_hole_value()); |
| 3135 __ ldr(scratch, Immediate(Handle<Object>(cell))); | 3135 __ ldr(scratch, Immediate(cell)); |
| 3136 __ ldr(scratch, FieldMemOperand(scratch, PropertyCell::kValueOffset)); | 3136 __ ldr(scratch, FieldMemOperand(scratch, Cell::kValueOffset)); |
| 3137 __ cmp(map, scratch); | 3137 __ cmp(map, scratch); |
| 3138 __ b(&cache_miss, ne); | 3138 __ b(&cache_miss, ne); |
| 3139 // The address of this instruction is computed relative to the map check | 3139 // The address of this instruction is computed relative to the map check |
| 3140 // above, so check the size of the code generated. | 3140 // above, so check the size of the code generated. |
| 3141 DCHECK(masm()->InstructionsGeneratedSince(&map_check) == 4); | 3141 DCHECK(masm()->InstructionsGeneratedSince(&map_check) == 4); |
| 3142 // Will be patched with the cached result. | 3142 // Will be patched with the cached result. |
| 3143 __ ldr(result, Immediate(factory()->the_hole_value())); | 3143 __ ldr(result, Immediate(factory()->the_hole_value())); |
| 3144 } | 3144 } |
| 3145 __ B(&done); | 3145 __ B(&done); |
| 3146 | 3146 |
| (...skipping 2915 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6062 Handle<ScopeInfo> scope_info = instr->scope_info(); | 6062 Handle<ScopeInfo> scope_info = instr->scope_info(); |
| 6063 __ Push(scope_info); | 6063 __ Push(scope_info); |
| 6064 __ Push(ToRegister(instr->function())); | 6064 __ Push(ToRegister(instr->function())); |
| 6065 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 6065 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
| 6066 RecordSafepoint(Safepoint::kNoLazyDeopt); | 6066 RecordSafepoint(Safepoint::kNoLazyDeopt); |
| 6067 } | 6067 } |
| 6068 | 6068 |
| 6069 | 6069 |
| 6070 | 6070 |
| 6071 } } // namespace v8::internal | 6071 } } // namespace v8::internal |
| OLD | NEW |