Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(324)

Side by Side Diff: src/code-stubs.cc

Issue 2189663002: Add a flag to help platform ports bootstrap V8 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rename flag Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/code-stubs.h ('k') | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/code-stubs.h" 5 #include "src/code-stubs.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 8
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
11 #include "src/code-stub-assembler.h" 11 #include "src/code-stub-assembler.h"
12 #include "src/factory.h" 12 #include "src/factory.h"
13 #include "src/gdb-jit.h" 13 #include "src/gdb-jit.h"
14 #include "src/ic/handler-compiler.h" 14 #include "src/ic/handler-compiler.h"
15 #include "src/ic/ic.h" 15 #include "src/ic/ic.h"
16 #include "src/macro-assembler.h" 16 #include "src/macro-assembler.h"
17 #include "src/parsing/parser.h" 17 #include "src/parsing/parser.h"
18 18
19 namespace v8 { 19 namespace v8 {
20 namespace internal { 20 namespace internal {
21 21
22 22
23 RUNTIME_FUNCTION(UnexpectedStubMiss) { 23 RUNTIME_FUNCTION(UnexpectedStubMiss) {
24 FATAL("Unexpected deopt of a stub"); 24 FATAL("Unexpected deopt of a stub");
25 return Smi::FromInt(0); 25 return Smi::FromInt(0);
26 } 26 }
27 27
28
29 CodeStubDescriptor::CodeStubDescriptor(CodeStub* stub) 28 CodeStubDescriptor::CodeStubDescriptor(CodeStub* stub)
30 : call_descriptor_(stub->GetCallInterfaceDescriptor()), 29 : isolate_(stub->isolate()),
30 call_descriptor_(stub->GetCallInterfaceDescriptor()),
31 stack_parameter_count_(no_reg), 31 stack_parameter_count_(no_reg),
32 hint_stack_parameter_count_(-1), 32 hint_stack_parameter_count_(-1),
33 function_mode_(NOT_JS_FUNCTION_STUB_MODE), 33 function_mode_(NOT_JS_FUNCTION_STUB_MODE),
34 deoptimization_handler_(NULL), 34 deoptimization_handler_(NULL),
35 miss_handler_(), 35 miss_handler_(),
36 has_miss_handler_(false) { 36 has_miss_handler_(false) {
37 stub->InitializeDescriptor(this); 37 stub->InitializeDescriptor(this);
38 } 38 }
39 39
40
41 CodeStubDescriptor::CodeStubDescriptor(Isolate* isolate, uint32_t stub_key) 40 CodeStubDescriptor::CodeStubDescriptor(Isolate* isolate, uint32_t stub_key)
42 : stack_parameter_count_(no_reg), 41 : isolate_(isolate),
42 stack_parameter_count_(no_reg),
43 hint_stack_parameter_count_(-1), 43 hint_stack_parameter_count_(-1),
44 function_mode_(NOT_JS_FUNCTION_STUB_MODE), 44 function_mode_(NOT_JS_FUNCTION_STUB_MODE),
45 deoptimization_handler_(NULL), 45 deoptimization_handler_(NULL),
46 miss_handler_(), 46 miss_handler_(),
47 has_miss_handler_(false) { 47 has_miss_handler_(false) {
48 CodeStub::InitializeDescriptor(isolate, stub_key, this); 48 CodeStub::InitializeDescriptor(isolate, stub_key, this);
49 } 49 }
50 50
51 51
52 void CodeStubDescriptor::Initialize(Address deoptimization_handler, 52 void CodeStubDescriptor::Initialize(Address deoptimization_handler,
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 HandleScope scope(isolate); 263 HandleScope scope(isolate);
264 Handle<Code> code; 264 Handle<Code> code;
265 void** value_out = reinterpret_cast<void**>(&code); 265 void** value_out = reinterpret_cast<void**>(&code);
266 Dispatch(isolate, key, value_out, &GetCodeDispatchCall); 266 Dispatch(isolate, key, value_out, &GetCodeDispatchCall);
267 return scope.CloseAndEscape(code); 267 return scope.CloseAndEscape(code);
268 } 268 }
269 269
270 270
271 // static 271 // static
272 void BinaryOpICStub::GenerateAheadOfTime(Isolate* isolate) { 272 void BinaryOpICStub::GenerateAheadOfTime(Isolate* isolate) {
273 if (FLAG_minimal) return;
273 // Generate the uninitialized versions of the stub. 274 // Generate the uninitialized versions of the stub.
274 for (int op = Token::BIT_OR; op <= Token::MOD; ++op) { 275 for (int op = Token::BIT_OR; op <= Token::MOD; ++op) {
275 BinaryOpICStub stub(isolate, static_cast<Token::Value>(op)); 276 BinaryOpICStub stub(isolate, static_cast<Token::Value>(op));
276 stub.GetCode(); 277 stub.GetCode();
277 } 278 }
278 279
279 // Generate special versions of the stub. 280 // Generate special versions of the stub.
280 BinaryOpICState::GenerateAheadOfTime(isolate, &GenerateAheadOfTime); 281 BinaryOpICState::GenerateAheadOfTime(isolate, &GenerateAheadOfTime);
281 } 282 }
282 283
283 284
284 void BinaryOpICStub::PrintState(std::ostream& os) const { // NOLINT 285 void BinaryOpICStub::PrintState(std::ostream& os) const { // NOLINT
285 os << state(); 286 os << state();
286 } 287 }
287 288
288 289
289 // static 290 // static
290 void BinaryOpICStub::GenerateAheadOfTime(Isolate* isolate, 291 void BinaryOpICStub::GenerateAheadOfTime(Isolate* isolate,
291 const BinaryOpICState& state) { 292 const BinaryOpICState& state) {
293 if (FLAG_minimal) return;
292 BinaryOpICStub stub(isolate, state); 294 BinaryOpICStub stub(isolate, state);
293 stub.GetCode(); 295 stub.GetCode();
294 } 296 }
295 297
296 298
297 // static 299 // static
298 void BinaryOpICWithAllocationSiteStub::GenerateAheadOfTime(Isolate* isolate) { 300 void BinaryOpICWithAllocationSiteStub::GenerateAheadOfTime(Isolate* isolate) {
299 // Generate special versions of the stub. 301 // Generate special versions of the stub.
300 BinaryOpICState::GenerateAheadOfTime(isolate, &GenerateAheadOfTime); 302 BinaryOpICState::GenerateAheadOfTime(isolate, &GenerateAheadOfTime);
301 } 303 }
(...skipping 3781 matching lines...) Expand 10 before | Expand all | Expand 10 after
4083 4085
4084 void ElementsTransitionAndStoreStub::InitializeDescriptor( 4086 void ElementsTransitionAndStoreStub::InitializeDescriptor(
4085 CodeStubDescriptor* descriptor) { 4087 CodeStubDescriptor* descriptor) {
4086 descriptor->Initialize( 4088 descriptor->Initialize(
4087 FUNCTION_ADDR(Runtime_ElementsTransitionAndStoreIC_Miss)); 4089 FUNCTION_ADDR(Runtime_ElementsTransitionAndStoreIC_Miss));
4088 } 4090 }
4089 4091
4090 4092
4091 void ToObjectStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { 4093 void ToObjectStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
4092 descriptor->Initialize(Runtime::FunctionForId(Runtime::kToObject)->entry); 4094 descriptor->Initialize(Runtime::FunctionForId(Runtime::kToObject)->entry);
4095 descriptor->SetMissHandler(Runtime::kToObject);
4093 } 4096 }
4094 4097
4095 void StoreTransitionStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { 4098 void StoreTransitionStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
4096 descriptor->Initialize( 4099 descriptor->Initialize(
4097 FUNCTION_ADDR(Runtime_TransitionStoreIC_MissFromStubFailure)); 4100 FUNCTION_ADDR(Runtime_TransitionStoreIC_MissFromStubFailure));
4098 } 4101 }
4099 4102
4100 void TypeofStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {} 4103 void TypeofStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
4104 descriptor->SetMissHandler(Runtime::kTypeof);
4105 }
4101 4106
4102 void NumberToStringStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { 4107 void NumberToStringStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
4103 descriptor->Initialize( 4108 descriptor->Initialize(
4104 Runtime::FunctionForId(Runtime::kNumberToString)->entry); 4109 Runtime::FunctionForId(Runtime::kNumberToString)->entry);
4110 descriptor->SetMissHandler(Runtime::kNumberToString);
4105 } 4111 }
4106 4112
4107 4113
4108 void FastCloneRegExpStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { 4114 void FastCloneRegExpStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
4109 FastCloneRegExpDescriptor call_descriptor(isolate()); 4115 FastCloneRegExpDescriptor call_descriptor(isolate());
4110 descriptor->Initialize( 4116 descriptor->Initialize(
4111 Runtime::FunctionForId(Runtime::kCreateRegExpLiteral)->entry); 4117 Runtime::FunctionForId(Runtime::kCreateRegExpLiteral)->entry);
4118 descriptor->SetMissHandler(Runtime::kCreateRegExpLiteral);
4112 } 4119 }
4113 4120
4114 4121
4115 void FastCloneShallowArrayStub::InitializeDescriptor( 4122 void FastCloneShallowArrayStub::InitializeDescriptor(
4116 CodeStubDescriptor* descriptor) { 4123 CodeStubDescriptor* descriptor) {
4117 FastCloneShallowArrayDescriptor call_descriptor(isolate()); 4124 FastCloneShallowArrayDescriptor call_descriptor(isolate());
4118 descriptor->Initialize( 4125 descriptor->Initialize(
4119 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry); 4126 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry);
4127 descriptor->SetMissHandler(Runtime::kCreateArrayLiteralStubBailout);
4120 } 4128 }
4121 4129
4122
4123 void RegExpConstructResultStub::InitializeDescriptor( 4130 void RegExpConstructResultStub::InitializeDescriptor(
4124 CodeStubDescriptor* descriptor) { 4131 CodeStubDescriptor* descriptor) {
4125 descriptor->Initialize( 4132 descriptor->Initialize(
4126 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry); 4133 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry);
4134 descriptor->SetMissHandler(Runtime::kRegExpConstructResult);
4127 } 4135 }
4128 4136
4129 4137
4130 void TransitionElementsKindStub::InitializeDescriptor( 4138 void TransitionElementsKindStub::InitializeDescriptor(
4131 CodeStubDescriptor* descriptor) { 4139 CodeStubDescriptor* descriptor) {
4132 descriptor->Initialize( 4140 descriptor->Initialize(
4133 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry); 4141 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry);
4134 } 4142 }
4135 4143
4136 4144
4137 void AllocateHeapNumberStub::InitializeDescriptor( 4145 void AllocateHeapNumberStub::InitializeDescriptor(
4138 CodeStubDescriptor* descriptor) { 4146 CodeStubDescriptor* descriptor) {
4139 descriptor->Initialize( 4147 descriptor->Initialize(
4140 Runtime::FunctionForId(Runtime::kAllocateHeapNumber)->entry); 4148 Runtime::FunctionForId(Runtime::kAllocateHeapNumber)->entry);
4141 } 4149 }
4142 4150
4143 4151
4144 #define SIMD128_INIT_DESC(TYPE, Type, type, lane_count, lane_type) \ 4152 #define SIMD128_INIT_DESC(TYPE, Type, type, lane_count, lane_type) \
4145 void Allocate##Type##Stub::InitializeDescriptor( \ 4153 void Allocate##Type##Stub::InitializeDescriptor( \
4146 CodeStubDescriptor* descriptor) { \ 4154 CodeStubDescriptor* descriptor) { \
4147 descriptor->Initialize( \ 4155 descriptor->Initialize( \
4148 Runtime::FunctionForId(Runtime::kCreate##Type)->entry); \ 4156 Runtime::FunctionForId(Runtime::kCreate##Type)->entry); \
4149 } 4157 }
4150 SIMD128_TYPES(SIMD128_INIT_DESC) 4158 SIMD128_TYPES(SIMD128_INIT_DESC)
4151 #undef SIMD128_INIT_DESC 4159 #undef SIMD128_INIT_DESC
4152 4160
4153 void ToBooleanICStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { 4161 void ToBooleanICStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
4154 descriptor->Initialize(FUNCTION_ADDR(Runtime_ToBooleanIC_Miss)); 4162 descriptor->Initialize(FUNCTION_ADDR(Runtime_ToBooleanIC_Miss));
4155 descriptor->SetMissHandler(ExternalReference( 4163 descriptor->SetMissHandler(Runtime::kToBooleanIC_Miss);
4156 Runtime::FunctionForId(Runtime::kToBooleanIC_Miss), isolate()));
4157 } 4164 }
4158 4165
4159 4166
4160 void BinaryOpICStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { 4167 void BinaryOpICStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
4161 descriptor->Initialize(FUNCTION_ADDR(Runtime_BinaryOpIC_Miss)); 4168 descriptor->Initialize(FUNCTION_ADDR(Runtime_BinaryOpIC_Miss));
4162 descriptor->SetMissHandler(ExternalReference( 4169 descriptor->SetMissHandler(Runtime::kBinaryOpIC_Miss);
4163 Runtime::FunctionForId(Runtime::kBinaryOpIC_Miss), isolate()));
4164 } 4170 }
4165 4171
4166 4172
4167 void BinaryOpWithAllocationSiteStub::InitializeDescriptor( 4173 void BinaryOpWithAllocationSiteStub::InitializeDescriptor(
4168 CodeStubDescriptor* descriptor) { 4174 CodeStubDescriptor* descriptor) {
4169 descriptor->Initialize( 4175 descriptor->Initialize(
4170 FUNCTION_ADDR(Runtime_BinaryOpIC_MissWithAllocationSite)); 4176 FUNCTION_ADDR(Runtime_BinaryOpIC_MissWithAllocationSite));
4171 } 4177 }
4172 4178
4173 4179
4174 void StringAddStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { 4180 void StringAddStub::InitializeDescriptor(CodeStubDescriptor* descriptor) {
4175 descriptor->Initialize(Runtime::FunctionForId(Runtime::kStringAdd)->entry); 4181 descriptor->Initialize(Runtime::FunctionForId(Runtime::kStringAdd)->entry);
4182 descriptor->SetMissHandler(Runtime::kStringAdd);
4176 } 4183 }
4177 4184
4178 4185
4179 void GrowArrayElementsStub::InitializeDescriptor( 4186 void GrowArrayElementsStub::InitializeDescriptor(
4180 CodeStubDescriptor* descriptor) { 4187 CodeStubDescriptor* descriptor) {
4181 descriptor->Initialize( 4188 descriptor->Initialize(
4182 Runtime::FunctionForId(Runtime::kGrowArrayElements)->entry); 4189 Runtime::FunctionForId(Runtime::kGrowArrayElements)->entry);
4183 } 4190 }
4184 4191
4185 4192
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
4568 4575
4569 4576
4570 void StoreElementStub::Generate(MacroAssembler* masm) { 4577 void StoreElementStub::Generate(MacroAssembler* masm) {
4571 DCHECK_EQ(DICTIONARY_ELEMENTS, elements_kind()); 4578 DCHECK_EQ(DICTIONARY_ELEMENTS, elements_kind());
4572 ElementHandlerCompiler::GenerateStoreSlow(masm); 4579 ElementHandlerCompiler::GenerateStoreSlow(masm);
4573 } 4580 }
4574 4581
4575 4582
4576 // static 4583 // static
4577 void StoreFastElementStub::GenerateAheadOfTime(Isolate* isolate) { 4584 void StoreFastElementStub::GenerateAheadOfTime(Isolate* isolate) {
4585 if (FLAG_minimal) return;
4578 StoreFastElementStub(isolate, false, FAST_HOLEY_ELEMENTS, STANDARD_STORE) 4586 StoreFastElementStub(isolate, false, FAST_HOLEY_ELEMENTS, STANDARD_STORE)
4579 .GetCode(); 4587 .GetCode();
4580 StoreFastElementStub(isolate, false, FAST_HOLEY_ELEMENTS, 4588 StoreFastElementStub(isolate, false, FAST_HOLEY_ELEMENTS,
4581 STORE_AND_GROW_NO_TRANSITION).GetCode(); 4589 STORE_AND_GROW_NO_TRANSITION).GetCode();
4582 for (int i = FIRST_FAST_ELEMENTS_KIND; i <= LAST_FAST_ELEMENTS_KIND; i++) { 4590 for (int i = FIRST_FAST_ELEMENTS_KIND; i <= LAST_FAST_ELEMENTS_KIND; i++) {
4583 ElementsKind kind = static_cast<ElementsKind>(i); 4591 ElementsKind kind = static_cast<ElementsKind>(i);
4584 StoreFastElementStub(isolate, true, kind, STANDARD_STORE).GetCode(); 4592 StoreFastElementStub(isolate, true, kind, STANDARD_STORE).GetCode();
4585 StoreFastElementStub(isolate, true, kind, STORE_AND_GROW_NO_TRANSITION) 4593 StoreFastElementStub(isolate, true, kind, STORE_AND_GROW_NO_TRANSITION)
4586 .GetCode(); 4594 .GetCode();
4587 } 4595 }
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
4924 if (type->Is(Type::UntaggedPointer())) { 4932 if (type->Is(Type::UntaggedPointer())) {
4925 return Representation::External(); 4933 return Representation::External();
4926 } 4934 }
4927 4935
4928 DCHECK(!type->Is(Type::Untagged())); 4936 DCHECK(!type->Is(Type::Untagged()));
4929 return Representation::Tagged(); 4937 return Representation::Tagged();
4930 } 4938 }
4931 4939
4932 } // namespace internal 4940 } // namespace internal
4933 } // namespace v8 4941 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stubs.h ('k') | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698