| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 void KeyedLoadFieldStub::InitializeInterfaceDescriptor( | 130 void KeyedLoadFieldStub::InitializeInterfaceDescriptor( |
| 131 Isolate* isolate, | 131 Isolate* isolate, |
| 132 CodeStubInterfaceDescriptor* descriptor) { | 132 CodeStubInterfaceDescriptor* descriptor) { |
| 133 static Register registers[] = { edx }; | 133 static Register registers[] = { edx }; |
| 134 descriptor->register_param_count_ = 1; | 134 descriptor->register_param_count_ = 1; |
| 135 descriptor->register_params_ = registers; | 135 descriptor->register_params_ = registers; |
| 136 descriptor->deoptimization_handler_ = NULL; | 136 descriptor->deoptimization_handler_ = NULL; |
| 137 } | 137 } |
| 138 | 138 |
| 139 | 139 |
| 140 void KeyedArrayCallStub::InitializeInterfaceDescriptor( |
| 141 Isolate* isolate, |
| 142 CodeStubInterfaceDescriptor* descriptor) { |
| 143 static Register registers[] = { ecx }; |
| 144 descriptor->register_param_count_ = 1; |
| 145 descriptor->register_params_ = registers; |
| 146 descriptor->call_stub_ = true; |
| 147 descriptor->deoptimization_handler_ = |
| 148 FUNCTION_ADDR(KeyedCallIC_MissFromStubFailure); |
| 149 } |
| 150 |
| 151 |
| 140 void KeyedStoreFastElementStub::InitializeInterfaceDescriptor( | 152 void KeyedStoreFastElementStub::InitializeInterfaceDescriptor( |
| 141 Isolate* isolate, | 153 Isolate* isolate, |
| 142 CodeStubInterfaceDescriptor* descriptor) { | 154 CodeStubInterfaceDescriptor* descriptor) { |
| 143 static Register registers[] = { edx, ecx, eax }; | 155 static Register registers[] = { edx, ecx, eax }; |
| 144 descriptor->register_param_count_ = 3; | 156 descriptor->register_param_count_ = 3; |
| 145 descriptor->register_params_ = registers; | 157 descriptor->register_params_ = registers; |
| 146 descriptor->deoptimization_handler_ = | 158 descriptor->deoptimization_handler_ = |
| 147 FUNCTION_ADDR(KeyedStoreIC_MissFromStubFailure); | 159 FUNCTION_ADDR(KeyedStoreIC_MissFromStubFailure); |
| 148 } | 160 } |
| 149 | 161 |
| (...skipping 4200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4350 CEntryStub::GenerateAheadOfTime(isolate); | 4362 CEntryStub::GenerateAheadOfTime(isolate); |
| 4351 StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime(isolate); | 4363 StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime(isolate); |
| 4352 StubFailureTrampolineStub::GenerateAheadOfTime(isolate); | 4364 StubFailureTrampolineStub::GenerateAheadOfTime(isolate); |
| 4353 // It is important that the store buffer overflow stubs are generated first. | 4365 // It is important that the store buffer overflow stubs are generated first. |
| 4354 RecordWriteStub::GenerateFixedRegStubsAheadOfTime(isolate); | 4366 RecordWriteStub::GenerateFixedRegStubsAheadOfTime(isolate); |
| 4355 ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); | 4367 ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); |
| 4356 CreateAllocationSiteStub::GenerateAheadOfTime(isolate); | 4368 CreateAllocationSiteStub::GenerateAheadOfTime(isolate); |
| 4357 } | 4369 } |
| 4358 | 4370 |
| 4359 | 4371 |
| 4372 void CodeStub::GenerateStubsRequiringBuiltinsAheadOfTime(Isolate* isolate) { |
| 4373 CallStubFailureTrampolineStub::GenerateAheadOfTime(isolate); |
| 4374 } |
| 4375 |
| 4376 |
| 4360 void CodeStub::GenerateFPStubs(Isolate* isolate) { | 4377 void CodeStub::GenerateFPStubs(Isolate* isolate) { |
| 4361 if (CpuFeatures::IsSupported(SSE2)) { | 4378 if (CpuFeatures::IsSupported(SSE2)) { |
| 4362 CEntryStub save_doubles(1, kSaveFPRegs); | 4379 CEntryStub save_doubles(1, kSaveFPRegs); |
| 4363 // Stubs might already be in the snapshot, detect that and don't regenerate, | 4380 // Stubs might already be in the snapshot, detect that and don't regenerate, |
| 4364 // which would lead to code stub initialization state being messed up. | 4381 // which would lead to code stub initialization state being messed up. |
| 4365 Code* save_doubles_code; | 4382 Code* save_doubles_code; |
| 4366 if (!save_doubles.FindCodeInCache(&save_doubles_code, isolate)) { | 4383 if (!save_doubles.FindCodeInCache(&save_doubles_code, isolate)) { |
| 4367 save_doubles_code = *(save_doubles.GetCode(isolate)); | 4384 save_doubles_code = *(save_doubles.GetCode(isolate)); |
| 4368 } | 4385 } |
| 4369 save_doubles_code->set_is_pregenerated(true); | 4386 save_doubles_code->set_is_pregenerated(true); |
| (...skipping 2710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7080 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE); | 7097 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE); |
| 7081 __ pop(ecx); | 7098 __ pop(ecx); |
| 7082 int additional_offset = function_mode_ == JS_FUNCTION_STUB_MODE | 7099 int additional_offset = function_mode_ == JS_FUNCTION_STUB_MODE |
| 7083 ? kPointerSize | 7100 ? kPointerSize |
| 7084 : 0; | 7101 : 0; |
| 7085 __ lea(esp, MemOperand(esp, ebx, times_pointer_size, additional_offset)); | 7102 __ lea(esp, MemOperand(esp, ebx, times_pointer_size, additional_offset)); |
| 7086 __ jmp(ecx); // Return to IC Miss stub, continuation still on stack. | 7103 __ jmp(ecx); // Return to IC Miss stub, continuation still on stack. |
| 7087 } | 7104 } |
| 7088 | 7105 |
| 7089 | 7106 |
| 7107 void CallStubFailureTrampolineStub::Generate(MacroAssembler* masm) { |
| 7108 CEntryStub ces(1, fp_registers_ ? kSaveFPRegs : kDontSaveFPRegs); |
| 7109 __ call(ces.GetCode(masm->isolate()), RelocInfo::CODE_TARGET); |
| 7110 __ mov(edi, eax); |
| 7111 int parameter_count_offset = |
| 7112 StubFailureTrampolineFrame::kCallerStackParameterCountFrameOffset; |
| 7113 __ mov(eax, MemOperand(ebp, parameter_count_offset)); |
| 7114 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE); |
| 7115 ParameterCount argument_count(eax); |
| 7116 __ InvokeFunction(edi, |
| 7117 argument_count, |
| 7118 JUMP_FUNCTION, |
| 7119 NullCallWrapper(), |
| 7120 CALL_AS_METHOD); |
| 7121 } |
| 7122 |
| 7123 |
| 7090 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { | 7124 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { |
| 7091 if (masm->isolate()->function_entry_hook() != NULL) { | 7125 if (masm->isolate()->function_entry_hook() != NULL) { |
| 7092 // It's always safe to call the entry hook stub, as the hook itself | 7126 // It's always safe to call the entry hook stub, as the hook itself |
| 7093 // is not allowed to call back to V8. | 7127 // is not allowed to call back to V8. |
| 7094 AllowStubCallsScope allow_stub_calls(masm, true); | 7128 AllowStubCallsScope allow_stub_calls(masm, true); |
| 7095 | 7129 |
| 7096 ProfileEntryHookStub stub; | 7130 ProfileEntryHookStub stub; |
| 7097 masm->CallStub(&stub); | 7131 masm->CallStub(&stub); |
| 7098 } | 7132 } |
| 7099 } | 7133 } |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7452 __ bind(&fast_elements_case); | 7486 __ bind(&fast_elements_case); |
| 7453 GenerateCase(masm, FAST_ELEMENTS); | 7487 GenerateCase(masm, FAST_ELEMENTS); |
| 7454 } | 7488 } |
| 7455 | 7489 |
| 7456 | 7490 |
| 7457 #undef __ | 7491 #undef __ |
| 7458 | 7492 |
| 7459 } } // namespace v8::internal | 7493 } } // namespace v8::internal |
| 7460 | 7494 |
| 7461 #endif // V8_TARGET_ARCH_IA32 | 7495 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |