| 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 #if V8_TARGET_ARCH_ARM64 | 7 #if V8_TARGET_ARCH_ARM64 | 
| 8 | 8 | 
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" | 
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" | 
| (...skipping 2965 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2976   __ Ldr(vector, FieldMemOperand(vector, | 2976   __ Ldr(vector, FieldMemOperand(vector, | 
| 2977                                  JSFunction::kSharedFunctionInfoOffset)); | 2977                                  JSFunction::kSharedFunctionInfoOffset)); | 
| 2978   __ Ldr(vector, FieldMemOperand(vector, | 2978   __ Ldr(vector, FieldMemOperand(vector, | 
| 2979                                  SharedFunctionInfo::kFeedbackVectorOffset)); | 2979                                  SharedFunctionInfo::kFeedbackVectorOffset)); | 
| 2980 } | 2980 } | 
| 2981 | 2981 | 
| 2982 | 2982 | 
| 2983 void CallIC_ArrayStub::Generate(MacroAssembler* masm) { | 2983 void CallIC_ArrayStub::Generate(MacroAssembler* masm) { | 
| 2984   // x1 - function | 2984   // x1 - function | 
| 2985   // x3 - slot id | 2985   // x3 - slot id | 
|  | 2986   // x2 - vector | 
| 2986   Label miss; | 2987   Label miss; | 
| 2987   Register function = x1; | 2988   Register function = x1; | 
| 2988   Register feedback_vector = x2; | 2989   Register feedback_vector = x2; | 
| 2989   Register index = x3; | 2990   Register index = x3; | 
| 2990   Register scratch = x4; | 2991   Register scratch = x4; | 
| 2991 | 2992 | 
| 2992   EmitLoadTypeFeedbackVector(masm, feedback_vector); |  | 
| 2993 |  | 
| 2994   __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, scratch); | 2993   __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, scratch); | 
| 2995   __ Cmp(function, scratch); | 2994   __ Cmp(function, scratch); | 
| 2996   __ B(ne, &miss); | 2995   __ B(ne, &miss); | 
| 2997 | 2996 | 
| 2998   __ Mov(x0, Operand(arg_count())); | 2997   __ Mov(x0, Operand(arg_count())); | 
| 2999 | 2998 | 
| 3000   __ Add(scratch, feedback_vector, | 2999   __ Add(scratch, feedback_vector, | 
| 3001          Operand::UntagSmiAndScale(index, kPointerSizeLog2)); | 3000          Operand::UntagSmiAndScale(index, kPointerSizeLog2)); | 
| 3002   __ Ldr(scratch, FieldMemOperand(scratch, FixedArray::kHeaderSize)); | 3001   __ Ldr(scratch, FieldMemOperand(scratch, FixedArray::kHeaderSize)); | 
| 3003 | 3002 | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 3022 | 3021 | 
| 3023   __ Unreachable(); | 3022   __ Unreachable(); | 
| 3024 } | 3023 } | 
| 3025 | 3024 | 
| 3026 | 3025 | 
| 3027 void CallICStub::Generate(MacroAssembler* masm) { | 3026 void CallICStub::Generate(MacroAssembler* masm) { | 
| 3028   ASM_LOCATION("CallICStub"); | 3027   ASM_LOCATION("CallICStub"); | 
| 3029 | 3028 | 
| 3030   // x1 - function | 3029   // x1 - function | 
| 3031   // x3 - slot id (Smi) | 3030   // x3 - slot id (Smi) | 
|  | 3031   // x2 - vector | 
| 3032   const int with_types_offset = | 3032   const int with_types_offset = | 
| 3033       FixedArray::OffsetOfElementAt(TypeFeedbackVector::kWithTypesIndex); | 3033       FixedArray::OffsetOfElementAt(TypeFeedbackVector::kWithTypesIndex); | 
| 3034   const int generic_offset = | 3034   const int generic_offset = | 
| 3035       FixedArray::OffsetOfElementAt(TypeFeedbackVector::kGenericCountIndex); | 3035       FixedArray::OffsetOfElementAt(TypeFeedbackVector::kGenericCountIndex); | 
| 3036   Label extra_checks_or_miss, slow_start; | 3036   Label extra_checks_or_miss, slow_start; | 
| 3037   Label slow, non_function, wrap, cont; | 3037   Label slow, non_function, wrap, cont; | 
| 3038   Label have_js_function; | 3038   Label have_js_function; | 
| 3039   int argc = arg_count(); | 3039   int argc = arg_count(); | 
| 3040   ParameterCount actual(argc); | 3040   ParameterCount actual(argc); | 
| 3041 | 3041 | 
| 3042   Register function = x1; | 3042   Register function = x1; | 
| 3043   Register feedback_vector = x2; | 3043   Register feedback_vector = x2; | 
| 3044   Register index = x3; | 3044   Register index = x3; | 
| 3045   Register type = x4; | 3045   Register type = x4; | 
| 3046 | 3046 | 
| 3047   EmitLoadTypeFeedbackVector(masm, feedback_vector); |  | 
| 3048 |  | 
| 3049   // The checks. First, does x1 match the recorded monomorphic target? | 3047   // The checks. First, does x1 match the recorded monomorphic target? | 
| 3050   __ Add(x4, feedback_vector, | 3048   __ Add(x4, feedback_vector, | 
| 3051          Operand::UntagSmiAndScale(index, kPointerSizeLog2)); | 3049          Operand::UntagSmiAndScale(index, kPointerSizeLog2)); | 
| 3052   __ Ldr(x4, FieldMemOperand(x4, FixedArray::kHeaderSize)); | 3050   __ Ldr(x4, FieldMemOperand(x4, FixedArray::kHeaderSize)); | 
| 3053 | 3051 | 
| 3054   __ Cmp(x4, function); | 3052   __ Cmp(x4, function); | 
| 3055   __ B(ne, &extra_checks_or_miss); | 3053   __ B(ne, &extra_checks_or_miss); | 
| 3056 | 3054 | 
| 3057   __ bind(&have_js_function); | 3055   __ bind(&have_js_function); | 
| 3058   if (CallAsMethod()) { | 3056   if (CallAsMethod()) { | 
| (...skipping 1308 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4367 } | 4365 } | 
| 4368 | 4366 | 
| 4369 | 4367 | 
| 4370 void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) { | 4368 void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) { | 
| 4371   EmitLoadTypeFeedbackVector(masm, VectorLoadICDescriptor::VectorRegister()); | 4369   EmitLoadTypeFeedbackVector(masm, VectorLoadICDescriptor::VectorRegister()); | 
| 4372   VectorKeyedLoadStub stub(isolate()); | 4370   VectorKeyedLoadStub stub(isolate()); | 
| 4373   __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET); | 4371   __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET); | 
| 4374 } | 4372 } | 
| 4375 | 4373 | 
| 4376 | 4374 | 
|  | 4375 void CallICTrampolineStub::Generate(MacroAssembler* masm) { | 
|  | 4376   EmitLoadTypeFeedbackVector(masm, x2); | 
|  | 4377   CallICStub stub(isolate(), state()); | 
|  | 4378   __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET); | 
|  | 4379 } | 
|  | 4380 | 
|  | 4381 | 
|  | 4382 void CallIC_ArrayTrampolineStub::Generate(MacroAssembler* masm) { | 
|  | 4383   EmitLoadTypeFeedbackVector(masm, x2); | 
|  | 4384   CallIC_ArrayStub stub(isolate(), state()); | 
|  | 4385   __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET); | 
|  | 4386 } | 
|  | 4387 | 
|  | 4388 | 
| 4377 // The entry hook is a "BumpSystemStackPointer" instruction (sub), followed by | 4389 // The entry hook is a "BumpSystemStackPointer" instruction (sub), followed by | 
| 4378 // a "Push lr" instruction, followed by a call. | 4390 // a "Push lr" instruction, followed by a call. | 
| 4379 static const unsigned int kProfileEntryHookCallSize = | 4391 static const unsigned int kProfileEntryHookCallSize = | 
| 4380     Assembler::kCallSizeWithRelocation + (2 * kInstructionSize); | 4392     Assembler::kCallSizeWithRelocation + (2 * kInstructionSize); | 
| 4381 | 4393 | 
| 4382 | 4394 | 
| 4383 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { | 4395 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { | 
| 4384   if (masm->isolate()->function_entry_hook() != NULL) { | 4396   if (masm->isolate()->function_entry_hook() != NULL) { | 
| 4385     ProfileEntryHookStub stub(masm->isolate()); | 4397     ProfileEntryHookStub stub(masm->isolate()); | 
| 4386     Assembler::BlockConstPoolScope no_const_pools(masm); | 4398     Assembler::BlockConstPoolScope no_const_pools(masm); | 
| (...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5391                            kStackUnwindSpace, NULL, spill_offset, | 5403                            kStackUnwindSpace, NULL, spill_offset, | 
| 5392                            MemOperand(fp, 6 * kPointerSize), NULL); | 5404                            MemOperand(fp, 6 * kPointerSize), NULL); | 
| 5393 } | 5405 } | 
| 5394 | 5406 | 
| 5395 | 5407 | 
| 5396 #undef __ | 5408 #undef __ | 
| 5397 | 5409 | 
| 5398 } }  // namespace v8::internal | 5410 } }  // namespace v8::internal | 
| 5399 | 5411 | 
| 5400 #endif  // V8_TARGET_ARCH_ARM64 | 5412 #endif  // V8_TARGET_ARCH_ARM64 | 
| OLD | NEW | 
|---|