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

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

Issue 552803002: Get CallInterfaceDescriptor directly from CodeStub. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 3 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 | Annotate | Revision Log
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 #ifndef V8_CODE_STUBS_H_ 5 #ifndef V8_CODE_STUBS_H_
6 #define V8_CODE_STUBS_H_ 6 #define V8_CODE_STUBS_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/assembler.h" 9 #include "src/assembler.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 // GC. This means that we must be statically sure that no GC can occur while 173 // GC. This means that we must be statically sure that no GC can occur while
174 // they are running. If that is the case they should override this to return 174 // they are running. If that is the case they should override this to return
175 // true, which will cause an assertion if we try to call something that can 175 // true, which will cause an assertion if we try to call something that can
176 // GC or if we try to put a stack frame on top of the junk, which would not 176 // GC or if we try to put a stack frame on top of the junk, which would not
177 // result in a traversable stack. 177 // result in a traversable stack.
178 virtual bool SometimesSetsUpAFrame() { return true; } 178 virtual bool SometimesSetsUpAFrame() { return true; }
179 179
180 // Lookup the code in the (possibly custom) cache. 180 // Lookup the code in the (possibly custom) cache.
181 bool FindCodeInCache(Code** code_out); 181 bool FindCodeInCache(Code** code_out);
182 182
183 virtual void InitializeInterfaceDescriptor( 183 virtual CallInterfaceDescriptor GetCallInterfaceDescriptor() {
mvstanton 2014/09/08 14:58:38 Good, I'll be able to add implementations for the
184 CodeStubInterfaceDescriptor* descriptor) {} 184 UNREACHABLE(); // Default returns an uninitialized descriptor.
185 return CallInterfaceDescriptor();
186 }
185 187
186 static void InitializeInterfaceDescriptor(Isolate* isolate, uint32_t key, 188 virtual void InitializeDescriptor(CodeStubDescriptor* descriptor) {}
187 CodeStubInterfaceDescriptor* desc); 189
190 static void InitializeDescriptor(Isolate* isolate, uint32_t key,
191 CodeStubDescriptor* desc);
188 192
189 // Returns information for computing the number key. 193 // Returns information for computing the number key.
190 virtual Major MajorKey() const = 0; 194 virtual Major MajorKey() const = 0;
191 uint32_t MinorKey() const { return minor_key_; } 195 uint32_t MinorKey() const { return minor_key_; }
192 196
193 virtual InlineCacheState GetICState() const { return UNINITIALIZED; } 197 virtual InlineCacheState GetICState() const { return UNINITIALIZED; }
194 virtual ExtraICState GetExtraICState() const { return kNoExtraICState; } 198 virtual ExtraICState GetExtraICState() const { return kNoExtraICState; }
195 virtual Code::StubType GetStubType() { 199 virtual Code::StubType GetStubType() {
196 return Code::NORMAL; 200 return Code::NORMAL;
197 } 201 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 }; \ 290 }; \
287 DEFINE_CODE_STUB_BASE(NAME##Stub, SUPER) 291 DEFINE_CODE_STUB_BASE(NAME##Stub, SUPER)
288 292
289 293
290 #define DEFINE_PLATFORM_CODE_STUB(NAME, SUPER) \ 294 #define DEFINE_PLATFORM_CODE_STUB(NAME, SUPER) \
291 private: \ 295 private: \
292 virtual void Generate(MacroAssembler* masm) OVERRIDE; \ 296 virtual void Generate(MacroAssembler* masm) OVERRIDE; \
293 DEFINE_CODE_STUB(NAME, SUPER) 297 DEFINE_CODE_STUB(NAME, SUPER)
294 298
295 299
296 #define DEFINE_HYDROGEN_CODE_STUB(NAME, SUPER) \ 300 #define DEFINE_HYDROGEN_CODE_STUB(NAME, SUPER) \
297 public: \ 301 public: \
298 virtual void InitializeInterfaceDescriptor( \ 302 virtual void InitializeDescriptor(CodeStubDescriptor* descriptor) OVERRIDE; \
299 CodeStubInterfaceDescriptor* descriptor) OVERRIDE; \ 303 virtual Handle<Code> GenerateCode() OVERRIDE; \
300 virtual Handle<Code> GenerateCode() OVERRIDE; \
301 DEFINE_CODE_STUB(NAME, SUPER) 304 DEFINE_CODE_STUB(NAME, SUPER)
302 305
303 #define DEFINE_HANDLER_CODE_STUB(NAME, SUPER) \ 306 #define DEFINE_HANDLER_CODE_STUB(NAME, SUPER) \
304 public: \ 307 public: \
305 virtual Handle<Code> GenerateCode() OVERRIDE; \ 308 virtual Handle<Code> GenerateCode() OVERRIDE; \
306 DEFINE_CODE_STUB(NAME, SUPER) 309 DEFINE_CODE_STUB(NAME, SUPER)
307 310
311 #define DEFINE_CALL_INTERFACE_DESCRIPTOR(NAME) \
312 public: \
313 virtual CallInterfaceDescriptor GetCallInterfaceDescriptor() OVERRIDE { \
314 return NAME##Descriptor(isolate()); \
315 }
316
308 317
309 class PlatformCodeStub : public CodeStub { 318 class PlatformCodeStub : public CodeStub {
310 public: 319 public:
311 // Retrieve the code for the stub. Generate the code if needed. 320 // Retrieve the code for the stub. Generate the code if needed.
312 virtual Handle<Code> GenerateCode() OVERRIDE; 321 virtual Handle<Code> GenerateCode() OVERRIDE;
313 322
314 virtual Code::Kind GetCodeKind() const { return Code::STUB; } 323 virtual Code::Kind GetCodeKind() const { return Code::STUB; }
315 324
316 protected: 325 protected:
317 explicit PlatformCodeStub(Isolate* isolate) : CodeStub(isolate) {} 326 explicit PlatformCodeStub(Isolate* isolate) : CodeStub(isolate) {}
318 327
319 // Generates the assembler code for the stub. 328 // Generates the assembler code for the stub.
320 virtual void Generate(MacroAssembler* masm) = 0; 329 virtual void Generate(MacroAssembler* masm) = 0;
321 330
322 DEFINE_CODE_STUB_BASE(PlatformCodeStub, CodeStub); 331 DEFINE_CODE_STUB_BASE(PlatformCodeStub, CodeStub);
323 }; 332 };
324 333
325 334
326 enum StubFunctionMode { NOT_JS_FUNCTION_STUB_MODE, JS_FUNCTION_STUB_MODE }; 335 enum StubFunctionMode { NOT_JS_FUNCTION_STUB_MODE, JS_FUNCTION_STUB_MODE };
327 enum HandlerArgumentsMode { DONT_PASS_ARGUMENTS, PASS_ARGUMENTS }; 336 enum HandlerArgumentsMode { DONT_PASS_ARGUMENTS, PASS_ARGUMENTS };
328 337
329 338
330 class CodeStubInterfaceDescriptor { 339 class CodeStubDescriptor {
331 public: 340 public:
332 explicit CodeStubInterfaceDescriptor(CodeStub* stub); 341 explicit CodeStubDescriptor(CodeStub* stub);
333 342
334 CodeStubInterfaceDescriptor(Isolate* isolate, uint32_t stub_key); 343 CodeStubDescriptor(Isolate* isolate, uint32_t stub_key);
335 344
336 void Initialize(CodeStub::Major major, 345 void Initialize(Address deoptimization_handler = NULL,
337 CallInterfaceDescriptor call_descriptor,
338 Address deoptimization_handler = NULL,
339 int hint_stack_parameter_count = -1, 346 int hint_stack_parameter_count = -1,
340 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE); 347 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE);
341 void Initialize(CodeStub::Major major, 348 void Initialize(Register stack_parameter_count,
342 CallInterfaceDescriptor call_descriptor,
343 Register stack_parameter_count,
344 Address deoptimization_handler = NULL, 349 Address deoptimization_handler = NULL,
345 int hint_stack_parameter_count = -1, 350 int hint_stack_parameter_count = -1,
346 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE, 351 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE,
347 HandlerArgumentsMode handler_mode = DONT_PASS_ARGUMENTS); 352 HandlerArgumentsMode handler_mode = DONT_PASS_ARGUMENTS);
348 353
349 void SetMissHandler(ExternalReference handler) { 354 void SetMissHandler(ExternalReference handler) {
350 miss_handler_ = handler; 355 miss_handler_ = handler;
351 has_miss_handler_ = true; 356 has_miss_handler_ = true;
352 // Our miss handler infrastructure doesn't currently support 357 // Our miss handler infrastructure doesn't currently support
353 // variable stack parameter counts. 358 // variable stack parameter counts.
354 DCHECK(!stack_parameter_count_.is_valid()); 359 DCHECK(!stack_parameter_count_.is_valid());
355 } 360 }
356 361
357 bool IsInitialized() const { return call_descriptor_.IsInitialized(); } 362 void set_call_descriptor(CallInterfaceDescriptor d) { call_descriptor_ = d; }
358
359 CallInterfaceDescriptor call_descriptor() const { return call_descriptor_; } 363 CallInterfaceDescriptor call_descriptor() const { return call_descriptor_; }
360 364
361 int GetEnvironmentLength() const {
362 return call_descriptor().GetEnvironmentLength();
363 }
364
365 int GetRegisterParameterCount() const {
366 return call_descriptor().GetRegisterParameterCount();
367 }
368
369 Register GetParameterRegister(int index) const {
370 return call_descriptor().GetParameterRegister(index);
371 }
372
373 Representation GetParameterRepresentation(int index) const {
374 return call_descriptor().GetParameterRepresentation(index);
375 }
376
377 int GetEnvironmentParameterCount() const { 365 int GetEnvironmentParameterCount() const {
378 return call_descriptor().GetEnvironmentParameterCount(); 366 return call_descriptor().GetEnvironmentParameterCount();
379 } 367 }
380 368
381 Register GetEnvironmentParameterRegister(int index) const {
382 return call_descriptor().GetEnvironmentParameterRegister(index);
383 }
384
385 Representation GetEnvironmentParameterRepresentation(int index) const { 369 Representation GetEnvironmentParameterRepresentation(int index) const {
386 return call_descriptor().GetEnvironmentParameterRepresentation(index); 370 return call_descriptor().GetEnvironmentParameterRepresentation(index);
387 } 371 }
388 372
389 ExternalReference miss_handler() const { 373 ExternalReference miss_handler() const {
390 DCHECK(has_miss_handler_); 374 DCHECK(has_miss_handler_);
391 return miss_handler_; 375 return miss_handler_;
392 } 376 }
393 377
394 bool has_miss_handler() const { 378 bool has_miss_handler() const {
(...skipping 10 matching lines...) Expand all
405 if (handler_arguments_mode_ == PASS_ARGUMENTS) { 389 if (handler_arguments_mode_ == PASS_ARGUMENTS) {
406 params += 1; 390 params += 1;
407 } 391 }
408 return params; 392 return params;
409 } 393 }
410 394
411 int hint_stack_parameter_count() const { return hint_stack_parameter_count_; } 395 int hint_stack_parameter_count() const { return hint_stack_parameter_count_; }
412 Register stack_parameter_count() const { return stack_parameter_count_; } 396 Register stack_parameter_count() const { return stack_parameter_count_; }
413 StubFunctionMode function_mode() const { return function_mode_; } 397 StubFunctionMode function_mode() const { return function_mode_; }
414 Address deoptimization_handler() const { return deoptimization_handler_; } 398 Address deoptimization_handler() const { return deoptimization_handler_; }
415 CodeStub::Major MajorKey() const { return major_; }
416 399
417 private: 400 private:
418 CallInterfaceDescriptor call_descriptor_; 401 CallInterfaceDescriptor call_descriptor_;
419 Register stack_parameter_count_; 402 Register stack_parameter_count_;
420 // If hint_stack_parameter_count_ > 0, the code stub can optimize the 403 // If hint_stack_parameter_count_ > 0, the code stub can optimize the
421 // return sequence. Default value is -1, which means it is ignored. 404 // return sequence. Default value is -1, which means it is ignored.
422 int hint_stack_parameter_count_; 405 int hint_stack_parameter_count_;
423 StubFunctionMode function_mode_; 406 StubFunctionMode function_mode_;
424 407
425 Address deoptimization_handler_; 408 Address deoptimization_handler_;
426 HandlerArgumentsMode handler_arguments_mode_; 409 HandlerArgumentsMode handler_arguments_mode_;
427 410
428 ExternalReference miss_handler_; 411 ExternalReference miss_handler_;
429 bool has_miss_handler_; 412 bool has_miss_handler_;
430 CodeStub::Major major_;
431 }; 413 };
432 414
433 415
434 class HydrogenCodeStub : public CodeStub { 416 class HydrogenCodeStub : public CodeStub {
435 public: 417 public:
436 enum InitializationState { 418 enum InitializationState {
437 UNINITIALIZED, 419 UNINITIALIZED,
438 INITIALIZED 420 INITIALIZED
439 }; 421 };
440 422
441 virtual Code::Kind GetCodeKind() const { return Code::STUB; } 423 virtual Code::Kind GetCodeKind() const { return Code::STUB; }
442 424
443 template<class SubClass> 425 template<class SubClass>
444 static Handle<Code> GetUninitialized(Isolate* isolate) { 426 static Handle<Code> GetUninitialized(Isolate* isolate) {
445 SubClass::GenerateAheadOfTime(isolate); 427 SubClass::GenerateAheadOfTime(isolate);
446 return SubClass().GetCode(isolate); 428 return SubClass().GetCode(isolate);
447 } 429 }
448 430
449 // Retrieve the code for the stub. Generate the code if needed. 431 // Retrieve the code for the stub. Generate the code if needed.
450 virtual Handle<Code> GenerateCode() = 0; 432 virtual Handle<Code> GenerateCode() = 0;
451 433
452 bool IsUninitialized() const { return IsMissBits::decode(minor_key_); } 434 bool IsUninitialized() const { return IsMissBits::decode(minor_key_); }
453 435
454 Handle<Code> GenerateLightweightMissCode(); 436 Handle<Code> GenerateLightweightMissCode(ExternalReference miss);
455 437
456 template<class StateType> 438 template<class StateType>
457 void TraceTransition(StateType from, StateType to); 439 void TraceTransition(StateType from, StateType to);
458 440
459 protected: 441 protected:
460 explicit HydrogenCodeStub(Isolate* isolate, 442 explicit HydrogenCodeStub(Isolate* isolate,
461 InitializationState state = INITIALIZED) 443 InitializationState state = INITIALIZED)
462 : CodeStub(isolate) { 444 : CodeStub(isolate) {
463 minor_key_ = IsMissBits::encode(state == UNINITIALIZED); 445 minor_key_ = IsMissBits::encode(state == UNINITIALIZED);
464 } 446 }
465 447
466 void set_sub_minor_key(uint32_t key) { 448 void set_sub_minor_key(uint32_t key) {
467 minor_key_ = SubMinorKeyBits::update(minor_key_, key); 449 minor_key_ = SubMinorKeyBits::update(minor_key_, key);
468 } 450 }
469 451
470 uint32_t sub_minor_key() const { return SubMinorKeyBits::decode(minor_key_); } 452 uint32_t sub_minor_key() const { return SubMinorKeyBits::decode(minor_key_); }
471 453
472 static const int kSubMinorKeyBits = kStubMinorKeyBits - 1; 454 static const int kSubMinorKeyBits = kStubMinorKeyBits - 1;
473 455
474 private: 456 private:
475 class IsMissBits : public BitField<bool, kSubMinorKeyBits, 1> {}; 457 class IsMissBits : public BitField<bool, kSubMinorKeyBits, 1> {};
476 class SubMinorKeyBits : public BitField<int, 0, kSubMinorKeyBits> {}; 458 class SubMinorKeyBits : public BitField<int, 0, kSubMinorKeyBits> {};
477 459
478 void GenerateLightweightMiss(MacroAssembler* masm); 460 void GenerateLightweightMiss(MacroAssembler* masm, ExternalReference miss);
479 461
480 DEFINE_CODE_STUB_BASE(HydrogenCodeStub, CodeStub); 462 DEFINE_CODE_STUB_BASE(HydrogenCodeStub, CodeStub);
481 }; 463 };
482 464
483 465
484 // Helper interface to prepare to/restore after making runtime calls. 466 // Helper interface to prepare to/restore after making runtime calls.
485 class RuntimeCallHelper { 467 class RuntimeCallHelper {
486 public: 468 public:
487 virtual ~RuntimeCallHelper() {} 469 virtual ~RuntimeCallHelper() {}
488 470
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 virtual void BeforeCall(MacroAssembler* masm) const {} 524 virtual void BeforeCall(MacroAssembler* masm) const {}
543 525
544 virtual void AfterCall(MacroAssembler* masm) const {} 526 virtual void AfterCall(MacroAssembler* masm) const {}
545 }; 527 };
546 528
547 529
548 class ToNumberStub: public HydrogenCodeStub { 530 class ToNumberStub: public HydrogenCodeStub {
549 public: 531 public:
550 explicit ToNumberStub(Isolate* isolate) : HydrogenCodeStub(isolate) { } 532 explicit ToNumberStub(Isolate* isolate) : HydrogenCodeStub(isolate) { }
551 533
534 DEFINE_CALL_INTERFACE_DESCRIPTOR(ToNumber);
552 DEFINE_HYDROGEN_CODE_STUB(ToNumber, HydrogenCodeStub); 535 DEFINE_HYDROGEN_CODE_STUB(ToNumber, HydrogenCodeStub);
553 }; 536 };
554 537
555 538
556 class NumberToStringStub FINAL : public HydrogenCodeStub { 539 class NumberToStringStub FINAL : public HydrogenCodeStub {
557 public: 540 public:
558 explicit NumberToStringStub(Isolate* isolate) : HydrogenCodeStub(isolate) {} 541 explicit NumberToStringStub(Isolate* isolate) : HydrogenCodeStub(isolate) {}
559 542
560 // Parameters accessed via CodeStubGraphBuilder::GetParameter() 543 // Parameters accessed via CodeStubGraphBuilder::GetParameter()
561 static const int kNumber = 0; 544 static const int kNumber = 0;
562 545
546 DEFINE_CALL_INTERFACE_DESCRIPTOR(NumberToString);
563 DEFINE_HYDROGEN_CODE_STUB(NumberToString, HydrogenCodeStub); 547 DEFINE_HYDROGEN_CODE_STUB(NumberToString, HydrogenCodeStub);
564 }; 548 };
565 549
566 550
567 class FastNewClosureStub : public HydrogenCodeStub { 551 class FastNewClosureStub : public HydrogenCodeStub {
568 public: 552 public:
569 FastNewClosureStub(Isolate* isolate, StrictMode strict_mode, 553 FastNewClosureStub(Isolate* isolate, StrictMode strict_mode,
570 bool is_generator) 554 bool is_generator)
571 : HydrogenCodeStub(isolate) { 555 : HydrogenCodeStub(isolate) {
572 set_sub_minor_key(StrictModeBits::encode(strict_mode) | 556 set_sub_minor_key(StrictModeBits::encode(strict_mode) |
573 IsGeneratorBits::encode(is_generator)); 557 IsGeneratorBits::encode(is_generator));
574 } 558 }
575 559
576 StrictMode strict_mode() const { 560 StrictMode strict_mode() const {
577 return StrictModeBits::decode(sub_minor_key()); 561 return StrictModeBits::decode(sub_minor_key());
578 } 562 }
579 563
580 bool is_generator() const { return IsGeneratorBits::decode(sub_minor_key()); } 564 bool is_generator() const { return IsGeneratorBits::decode(sub_minor_key()); }
581 565
582 private: 566 private:
583 class StrictModeBits : public BitField<StrictMode, 0, 1> {}; 567 class StrictModeBits : public BitField<StrictMode, 0, 1> {};
584 class IsGeneratorBits : public BitField<bool, 1, 1> {}; 568 class IsGeneratorBits : public BitField<bool, 1, 1> {};
585 569
570 DEFINE_CALL_INTERFACE_DESCRIPTOR(FastNewClosure);
586 DEFINE_HYDROGEN_CODE_STUB(FastNewClosure, HydrogenCodeStub); 571 DEFINE_HYDROGEN_CODE_STUB(FastNewClosure, HydrogenCodeStub);
587 }; 572 };
588 573
589 574
590 class FastNewContextStub FINAL : public HydrogenCodeStub { 575 class FastNewContextStub FINAL : public HydrogenCodeStub {
591 public: 576 public:
592 static const int kMaximumSlots = 64; 577 static const int kMaximumSlots = 64;
593 578
594 FastNewContextStub(Isolate* isolate, int slots) : HydrogenCodeStub(isolate) { 579 FastNewContextStub(Isolate* isolate, int slots) : HydrogenCodeStub(isolate) {
595 DCHECK(slots > 0 && slots <= kMaximumSlots); 580 DCHECK(slots > 0 && slots <= kMaximumSlots);
596 set_sub_minor_key(SlotsBits::encode(slots)); 581 set_sub_minor_key(SlotsBits::encode(slots));
597 } 582 }
598 583
599 int slots() const { return SlotsBits::decode(sub_minor_key()); } 584 int slots() const { return SlotsBits::decode(sub_minor_key()); }
600 585
601 // Parameters accessed via CodeStubGraphBuilder::GetParameter() 586 // Parameters accessed via CodeStubGraphBuilder::GetParameter()
602 static const int kFunction = 0; 587 static const int kFunction = 0;
603 588
604 private: 589 private:
605 class SlotsBits : public BitField<int, 0, 8> {}; 590 class SlotsBits : public BitField<int, 0, 8> {};
606 591
592 DEFINE_CALL_INTERFACE_DESCRIPTOR(FastNewContext);
607 DEFINE_HYDROGEN_CODE_STUB(FastNewContext, HydrogenCodeStub); 593 DEFINE_HYDROGEN_CODE_STUB(FastNewContext, HydrogenCodeStub);
608 }; 594 };
609 595
610 596
611 class FastCloneShallowArrayStub : public HydrogenCodeStub { 597 class FastCloneShallowArrayStub : public HydrogenCodeStub {
612 public: 598 public:
613 FastCloneShallowArrayStub(Isolate* isolate, 599 FastCloneShallowArrayStub(Isolate* isolate,
614 AllocationSiteMode allocation_site_mode) 600 AllocationSiteMode allocation_site_mode)
615 : HydrogenCodeStub(isolate) { 601 : HydrogenCodeStub(isolate) {
616 set_sub_minor_key(AllocationSiteModeBits::encode(allocation_site_mode)); 602 set_sub_minor_key(AllocationSiteModeBits::encode(allocation_site_mode));
617 } 603 }
618 604
619 AllocationSiteMode allocation_site_mode() const { 605 AllocationSiteMode allocation_site_mode() const {
620 return AllocationSiteModeBits::decode(sub_minor_key()); 606 return AllocationSiteModeBits::decode(sub_minor_key());
621 } 607 }
622 608
623 private: 609 private:
624 class AllocationSiteModeBits: public BitField<AllocationSiteMode, 0, 1> {}; 610 class AllocationSiteModeBits: public BitField<AllocationSiteMode, 0, 1> {};
625 611
612 DEFINE_CALL_INTERFACE_DESCRIPTOR(FastCloneShallowArray);
626 DEFINE_HYDROGEN_CODE_STUB(FastCloneShallowArray, HydrogenCodeStub); 613 DEFINE_HYDROGEN_CODE_STUB(FastCloneShallowArray, HydrogenCodeStub);
627 }; 614 };
628 615
629 616
630 class FastCloneShallowObjectStub : public HydrogenCodeStub { 617 class FastCloneShallowObjectStub : public HydrogenCodeStub {
631 public: 618 public:
632 // Maximum number of properties in copied object. 619 // Maximum number of properties in copied object.
633 static const int kMaximumClonedProperties = 6; 620 static const int kMaximumClonedProperties = 6;
634 621
635 FastCloneShallowObjectStub(Isolate* isolate, int length) 622 FastCloneShallowObjectStub(Isolate* isolate, int length)
636 : HydrogenCodeStub(isolate) { 623 : HydrogenCodeStub(isolate) {
637 DCHECK_GE(length, 0); 624 DCHECK_GE(length, 0);
638 DCHECK_LE(length, kMaximumClonedProperties); 625 DCHECK_LE(length, kMaximumClonedProperties);
639 set_sub_minor_key(LengthBits::encode(length)); 626 set_sub_minor_key(LengthBits::encode(length));
640 } 627 }
641 628
642 int length() const { return LengthBits::decode(sub_minor_key()); } 629 int length() const { return LengthBits::decode(sub_minor_key()); }
643 630
644 private: 631 private:
645 class LengthBits : public BitField<int, 0, 4> {}; 632 class LengthBits : public BitField<int, 0, 4> {};
646 633
634 DEFINE_CALL_INTERFACE_DESCRIPTOR(FastCloneShallowObject);
647 DEFINE_HYDROGEN_CODE_STUB(FastCloneShallowObject, HydrogenCodeStub); 635 DEFINE_HYDROGEN_CODE_STUB(FastCloneShallowObject, HydrogenCodeStub);
648 }; 636 };
649 637
650 638
651 class CreateAllocationSiteStub : public HydrogenCodeStub { 639 class CreateAllocationSiteStub : public HydrogenCodeStub {
652 public: 640 public:
653 explicit CreateAllocationSiteStub(Isolate* isolate) 641 explicit CreateAllocationSiteStub(Isolate* isolate)
654 : HydrogenCodeStub(isolate) { } 642 : HydrogenCodeStub(isolate) { }
655 643
656 static void GenerateAheadOfTime(Isolate* isolate); 644 static void GenerateAheadOfTime(Isolate* isolate);
657 645
646 DEFINE_CALL_INTERFACE_DESCRIPTOR(CreateAllocationSite);
658 DEFINE_HYDROGEN_CODE_STUB(CreateAllocationSite, HydrogenCodeStub); 647 DEFINE_HYDROGEN_CODE_STUB(CreateAllocationSite, HydrogenCodeStub);
659 }; 648 };
660 649
661 650
662 class InstanceofStub: public PlatformCodeStub { 651 class InstanceofStub: public PlatformCodeStub {
663 public: 652 public:
664 enum Flags { 653 enum Flags {
665 kNoFlags = 0, 654 kNoFlags = 0,
666 kArgsInRegisters = 1 << 0, 655 kArgsInRegisters = 1 << 0,
667 kCallSiteInlineCheck = 1 << 1, 656 kCallSiteInlineCheck = 1 << 1,
668 kReturnTrueFalseObject = 1 << 2 657 kReturnTrueFalseObject = 1 << 2
669 }; 658 };
670 659
671 InstanceofStub(Isolate* isolate, Flags flags) : PlatformCodeStub(isolate) { 660 InstanceofStub(Isolate* isolate, Flags flags) : PlatformCodeStub(isolate) {
672 minor_key_ = FlagBits::encode(flags); 661 minor_key_ = FlagBits::encode(flags);
673 } 662 }
674 663
675 static Register left() { return InstanceofDescriptor::left(); } 664 static Register left() { return InstanceofDescriptor::left(); }
676 static Register right() { return InstanceofDescriptor::right(); } 665 static Register right() { return InstanceofDescriptor::right(); }
677 666
678 virtual void InitializeInterfaceDescriptor(
679 CodeStubInterfaceDescriptor* descriptor);
680
681 private: 667 private:
682 Flags flags() const { return FlagBits::decode(minor_key_); } 668 Flags flags() const { return FlagBits::decode(minor_key_); }
683 669
684 bool HasArgsInRegisters() const { return (flags() & kArgsInRegisters) != 0; } 670 bool HasArgsInRegisters() const { return (flags() & kArgsInRegisters) != 0; }
685 671
686 bool HasCallSiteInlineCheck() const { 672 bool HasCallSiteInlineCheck() const {
687 return (flags() & kCallSiteInlineCheck) != 0; 673 return (flags() & kCallSiteInlineCheck) != 0;
688 } 674 }
689 675
690 bool ReturnTrueFalseObject() const { 676 bool ReturnTrueFalseObject() const {
691 return (flags() & kReturnTrueFalseObject) != 0; 677 return (flags() & kReturnTrueFalseObject) != 0;
692 } 678 }
693 679
694 virtual void PrintName(OStream& os) const OVERRIDE; // NOLINT 680 virtual void PrintName(OStream& os) const OVERRIDE; // NOLINT
695 681
696 class FlagBits : public BitField<Flags, 0, 3> {}; 682 class FlagBits : public BitField<Flags, 0, 3> {};
697 683
684 DEFINE_CALL_INTERFACE_DESCRIPTOR(Instanceof);
698 DEFINE_PLATFORM_CODE_STUB(Instanceof, PlatformCodeStub); 685 DEFINE_PLATFORM_CODE_STUB(Instanceof, PlatformCodeStub);
699 }; 686 };
700 687
701 688
702 enum AllocationSiteOverrideMode { 689 enum AllocationSiteOverrideMode {
703 DONT_OVERRIDE, 690 DONT_OVERRIDE,
704 DISABLE_ALLOCATION_SITES, 691 DISABLE_ALLOCATION_SITES,
705 LAST_ALLOCATION_SITE_OVERRIDE_MODE = DISABLE_ALLOCATION_SITES 692 LAST_ALLOCATION_SITE_OVERRIDE_MODE = DISABLE_ALLOCATION_SITES
706 }; 693 };
707 694
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 DEFINE_PLATFORM_CODE_STUB(FunctionPrototype, PlatformCodeStub); 814 DEFINE_PLATFORM_CODE_STUB(FunctionPrototype, PlatformCodeStub);
828 }; 815 };
829 816
830 817
831 class HandlerStub : public HydrogenCodeStub { 818 class HandlerStub : public HydrogenCodeStub {
832 public: 819 public:
833 virtual Code::Kind GetCodeKind() const { return Code::HANDLER; } 820 virtual Code::Kind GetCodeKind() const { return Code::HANDLER; }
834 virtual ExtraICState GetExtraICState() const { return kind(); } 821 virtual ExtraICState GetExtraICState() const { return kind(); }
835 virtual InlineCacheState GetICState() const { return MONOMORPHIC; } 822 virtual InlineCacheState GetICState() const { return MONOMORPHIC; }
836 823
837 virtual void InitializeInterfaceDescriptor( 824 virtual void InitializeDescriptor(CodeStubDescriptor* descriptor) OVERRIDE;
838 CodeStubInterfaceDescriptor* descriptor) OVERRIDE; 825
826 virtual CallInterfaceDescriptor GetCallInterfaceDescriptor() OVERRIDE;
839 827
840 protected: 828 protected:
841 explicit HandlerStub(Isolate* isolate) : HydrogenCodeStub(isolate) {} 829 explicit HandlerStub(Isolate* isolate) : HydrogenCodeStub(isolate) {}
842 830
843 virtual Code::Kind kind() const = 0; 831 virtual Code::Kind kind() const = 0;
844 832
845 DEFINE_CODE_STUB_BASE(HandlerStub, HydrogenCodeStub); 833 DEFINE_CODE_STUB_BASE(HandlerStub, HydrogenCodeStub);
846 }; 834 };
847 835
848 836
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 virtual void PrintState(OStream& os) const FINAL OVERRIDE; // NOLINT 1050 virtual void PrintState(OStream& os) const FINAL OVERRIDE; // NOLINT
1063 1051
1064 // Parameters accessed via CodeStubGraphBuilder::GetParameter() 1052 // Parameters accessed via CodeStubGraphBuilder::GetParameter()
1065 static const int kLeft = 0; 1053 static const int kLeft = 0;
1066 static const int kRight = 1; 1054 static const int kRight = 1;
1067 1055
1068 private: 1056 private:
1069 static void GenerateAheadOfTime(Isolate* isolate, 1057 static void GenerateAheadOfTime(Isolate* isolate,
1070 const BinaryOpIC::State& state); 1058 const BinaryOpIC::State& state);
1071 1059
1060 DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOp);
1072 DEFINE_HYDROGEN_CODE_STUB(BinaryOpIC, HydrogenCodeStub); 1061 DEFINE_HYDROGEN_CODE_STUB(BinaryOpIC, HydrogenCodeStub);
1073 }; 1062 };
1074 1063
1075 1064
1076 // TODO(bmeurer): Merge this into the BinaryOpICStub once we have proper tail 1065 // TODO(bmeurer): Merge this into the BinaryOpICStub once we have proper tail
1077 // call support for stubs in Hydrogen. 1066 // call support for stubs in Hydrogen.
1078 class BinaryOpICWithAllocationSiteStub FINAL : public PlatformCodeStub { 1067 class BinaryOpICWithAllocationSiteStub FINAL : public PlatformCodeStub {
1079 public: 1068 public:
1080 BinaryOpICWithAllocationSiteStub(Isolate* isolate, 1069 BinaryOpICWithAllocationSiteStub(Isolate* isolate,
1081 const BinaryOpIC::State& state) 1070 const BinaryOpIC::State& state)
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1130 1119
1131 virtual Code::Kind GetCodeKind() const FINAL OVERRIDE { 1120 virtual Code::Kind GetCodeKind() const FINAL OVERRIDE {
1132 return Code::STUB; 1121 return Code::STUB;
1133 } 1122 }
1134 1123
1135 // Parameters accessed via CodeStubGraphBuilder::GetParameter() 1124 // Parameters accessed via CodeStubGraphBuilder::GetParameter()
1136 static const int kAllocationSite = 0; 1125 static const int kAllocationSite = 0;
1137 static const int kLeft = 1; 1126 static const int kLeft = 1;
1138 static const int kRight = 2; 1127 static const int kRight = 2;
1139 1128
1129 DEFINE_CALL_INTERFACE_DESCRIPTOR(BinaryOpWithAllocationSite);
1140 DEFINE_HYDROGEN_CODE_STUB(BinaryOpWithAllocationSite, BinaryOpICStub); 1130 DEFINE_HYDROGEN_CODE_STUB(BinaryOpWithAllocationSite, BinaryOpICStub);
1141 }; 1131 };
1142 1132
1143 1133
1144 enum StringAddFlags { 1134 enum StringAddFlags {
1145 // Omit both parameter checks. 1135 // Omit both parameter checks.
1146 STRING_ADD_CHECK_NONE = 0, 1136 STRING_ADD_CHECK_NONE = 0,
1147 // Check left parameter. 1137 // Check left parameter.
1148 STRING_ADD_CHECK_LEFT = 1 << 0, 1138 STRING_ADD_CHECK_LEFT = 1 << 0,
1149 // Check right parameter. 1139 // Check right parameter.
(...skipping 23 matching lines...) Expand all
1173 // Parameters accessed via CodeStubGraphBuilder::GetParameter() 1163 // Parameters accessed via CodeStubGraphBuilder::GetParameter()
1174 static const int kLeft = 0; 1164 static const int kLeft = 0;
1175 static const int kRight = 1; 1165 static const int kRight = 1;
1176 1166
1177 private: 1167 private:
1178 class StringAddFlagsBits: public BitField<StringAddFlags, 0, 2> {}; 1168 class StringAddFlagsBits: public BitField<StringAddFlags, 0, 2> {};
1179 class PretenureFlagBits: public BitField<PretenureFlag, 2, 1> {}; 1169 class PretenureFlagBits: public BitField<PretenureFlag, 2, 1> {};
1180 1170
1181 virtual void PrintBaseName(OStream& os) const OVERRIDE; // NOLINT 1171 virtual void PrintBaseName(OStream& os) const OVERRIDE; // NOLINT
1182 1172
1173 DEFINE_CALL_INTERFACE_DESCRIPTOR(StringAdd);
1183 DEFINE_HYDROGEN_CODE_STUB(StringAdd, HydrogenCodeStub); 1174 DEFINE_HYDROGEN_CODE_STUB(StringAdd, HydrogenCodeStub);
1184 }; 1175 };
1185 1176
1186 1177
1187 class CompareICStub : public PlatformCodeStub { 1178 class CompareICStub : public PlatformCodeStub {
1188 public: 1179 public:
1189 CompareICStub(Isolate* isolate, Token::Value op, CompareIC::State left, 1180 CompareICStub(Isolate* isolate, Token::Value op, CompareIC::State left,
1190 CompareIC::State right, CompareIC::State state) 1181 CompareIC::State right, CompareIC::State state)
1191 : PlatformCodeStub(isolate) { 1182 : PlatformCodeStub(isolate) {
1192 DCHECK(Token::IsCompareOp(op)); 1183 DCHECK(Token::IsCompareOp(op));
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1312 }; 1303 };
1313 friend OStream& operator<<(OStream& os, const State& s); 1304 friend OStream& operator<<(OStream& os, const State& s);
1314 1305
1315 State state() const { return State(TypesBits::decode(sub_minor_key())); } 1306 State state() const { return State(TypesBits::decode(sub_minor_key())); }
1316 1307
1317 class NilValueBits : public BitField<NilValue, 0, 1> {}; 1308 class NilValueBits : public BitField<NilValue, 0, 1> {};
1318 class TypesBits : public BitField<byte, 1, NUMBER_OF_TYPES> {}; 1309 class TypesBits : public BitField<byte, 1, NUMBER_OF_TYPES> {};
1319 1310
1320 friend class CompareNilIC; 1311 friend class CompareNilIC;
1321 1312
1313 DEFINE_CALL_INTERFACE_DESCRIPTOR(CompareNil);
1322 DEFINE_HYDROGEN_CODE_STUB(CompareNilIC, HydrogenCodeStub); 1314 DEFINE_HYDROGEN_CODE_STUB(CompareNilIC, HydrogenCodeStub);
1323 }; 1315 };
1324 1316
1325 1317
1326 OStream& operator<<(OStream& os, const CompareNilICStub::State& s); 1318 OStream& operator<<(OStream& os, const CompareNilICStub::State& s);
1327 1319
1328 1320
1329 class CEntryStub : public PlatformCodeStub { 1321 class CEntryStub : public PlatformCodeStub {
1330 public: 1322 public:
1331 CEntryStub(Isolate* isolate, int result_size, 1323 CEntryStub(Isolate* isolate, int result_size,
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 class RegExpConstructResultStub FINAL : public HydrogenCodeStub { 1419 class RegExpConstructResultStub FINAL : public HydrogenCodeStub {
1428 public: 1420 public:
1429 explicit RegExpConstructResultStub(Isolate* isolate) 1421 explicit RegExpConstructResultStub(Isolate* isolate)
1430 : HydrogenCodeStub(isolate) { } 1422 : HydrogenCodeStub(isolate) { }
1431 1423
1432 // Parameters accessed via CodeStubGraphBuilder::GetParameter() 1424 // Parameters accessed via CodeStubGraphBuilder::GetParameter()
1433 static const int kLength = 0; 1425 static const int kLength = 0;
1434 static const int kIndex = 1; 1426 static const int kIndex = 1;
1435 static const int kInput = 2; 1427 static const int kInput = 2;
1436 1428
1429 DEFINE_CALL_INTERFACE_DESCRIPTOR(RegExpConstructResult);
1437 DEFINE_HYDROGEN_CODE_STUB(RegExpConstructResult, HydrogenCodeStub); 1430 DEFINE_HYDROGEN_CODE_STUB(RegExpConstructResult, HydrogenCodeStub);
1438 }; 1431 };
1439 1432
1440 1433
1441 class CallFunctionStub: public PlatformCodeStub { 1434 class CallFunctionStub: public PlatformCodeStub {
1442 public: 1435 public:
1443 CallFunctionStub(Isolate* isolate, int argc, CallFunctionFlags flags) 1436 CallFunctionStub(Isolate* isolate, int argc, CallFunctionFlags flags)
1444 : PlatformCodeStub(isolate) { 1437 : PlatformCodeStub(isolate) {
1445 DCHECK(argc >= 0 && argc <= Code::kMaxArguments); 1438 DCHECK(argc >= 0 && argc <= Code::kMaxArguments);
1446 minor_key_ = ArgcBits::encode(argc) | FlagBits::encode(flags); 1439 minor_key_ = ArgcBits::encode(argc) | FlagBits::encode(flags);
1447 } 1440 }
1448 1441
1449 virtual void InitializeInterfaceDescriptor(
1450 CodeStubInterfaceDescriptor* descriptor);
1451
1452 static int ExtractArgcFromMinorKey(int minor_key) { 1442 static int ExtractArgcFromMinorKey(int minor_key) {
1453 return ArgcBits::decode(minor_key); 1443 return ArgcBits::decode(minor_key);
1454 } 1444 }
1455 1445
1456 private: 1446 private:
1457 int argc() const { return ArgcBits::decode(minor_key_); } 1447 int argc() const { return ArgcBits::decode(minor_key_); }
1458 int flags() const { return FlagBits::decode(minor_key_); } 1448 int flags() const { return FlagBits::decode(minor_key_); }
1459 1449
1460 bool CallAsMethod() const { 1450 bool CallAsMethod() const {
1461 return flags() == CALL_AS_METHOD || flags() == WRAP_AND_CALL; 1451 return flags() == CALL_AS_METHOD || flags() == WRAP_AND_CALL;
1462 } 1452 }
1463 1453
1464 bool NeedsChecks() const { return flags() != WRAP_AND_CALL; } 1454 bool NeedsChecks() const { return flags() != WRAP_AND_CALL; }
1465 1455
1466 virtual void PrintName(OStream& os) const OVERRIDE; // NOLINT 1456 virtual void PrintName(OStream& os) const OVERRIDE; // NOLINT
1467 1457
1468 // Minor key encoding in 32 bits with Bitfield <Type, shift, size>. 1458 // Minor key encoding in 32 bits with Bitfield <Type, shift, size>.
1469 class FlagBits : public BitField<CallFunctionFlags, 0, 2> {}; 1459 class FlagBits : public BitField<CallFunctionFlags, 0, 2> {};
1470 class ArgcBits : public BitField<unsigned, 2, Code::kArgumentsBits> {}; 1460 class ArgcBits : public BitField<unsigned, 2, Code::kArgumentsBits> {};
1471 STATIC_ASSERT(Code::kArgumentsBits + 2 <= kStubMinorKeyBits); 1461 STATIC_ASSERT(Code::kArgumentsBits + 2 <= kStubMinorKeyBits);
1472 1462
1463 DEFINE_CALL_INTERFACE_DESCRIPTOR(CallFunction);
1473 DEFINE_PLATFORM_CODE_STUB(CallFunction, PlatformCodeStub); 1464 DEFINE_PLATFORM_CODE_STUB(CallFunction, PlatformCodeStub);
1474 }; 1465 };
1475 1466
1476 1467
1477 class CallConstructStub: public PlatformCodeStub { 1468 class CallConstructStub: public PlatformCodeStub {
1478 public: 1469 public:
1479 CallConstructStub(Isolate* isolate, CallConstructorFlags flags) 1470 CallConstructStub(Isolate* isolate, CallConstructorFlags flags)
1480 : PlatformCodeStub(isolate) { 1471 : PlatformCodeStub(isolate) {
1481 minor_key_ = FlagBits::encode(flags); 1472 minor_key_ = FlagBits::encode(flags);
1482 } 1473 }
1483 1474
1484 virtual void InitializeInterfaceDescriptor(
1485 CodeStubInterfaceDescriptor* descriptor);
1486
1487 virtual void FinishCode(Handle<Code> code) { 1475 virtual void FinishCode(Handle<Code> code) {
1488 code->set_has_function_cache(RecordCallTarget()); 1476 code->set_has_function_cache(RecordCallTarget());
1489 } 1477 }
1490 1478
1491 private: 1479 private:
1492 CallConstructorFlags flags() const { return FlagBits::decode(minor_key_); } 1480 CallConstructorFlags flags() const { return FlagBits::decode(minor_key_); }
1493 1481
1494 bool RecordCallTarget() const { 1482 bool RecordCallTarget() const {
1495 return (flags() & RECORD_CONSTRUCTOR_TARGET) != 0; 1483 return (flags() & RECORD_CONSTRUCTOR_TARGET) != 0;
1496 } 1484 }
1497 1485
1498 virtual void PrintName(OStream& os) const OVERRIDE; // NOLINT 1486 virtual void PrintName(OStream& os) const OVERRIDE; // NOLINT
1499 1487
1500 class FlagBits : public BitField<CallConstructorFlags, 0, 1> {}; 1488 class FlagBits : public BitField<CallConstructorFlags, 0, 1> {};
1501 1489
1490 DEFINE_CALL_INTERFACE_DESCRIPTOR(CallConstruct);
1502 DEFINE_PLATFORM_CODE_STUB(CallConstruct, PlatformCodeStub); 1491 DEFINE_PLATFORM_CODE_STUB(CallConstruct, PlatformCodeStub);
1503 }; 1492 };
1504 1493
1505 1494
1506 enum StringIndexFlags { 1495 enum StringIndexFlags {
1507 // Accepts smis or heap numbers. 1496 // Accepts smis or heap numbers.
1508 STRING_INDEX_IS_NUMBER, 1497 STRING_INDEX_IS_NUMBER,
1509 1498
1510 // Accepts smis or heap numbers that are valid array indices 1499 // Accepts smis or heap numbers that are valid array indices
1511 // (ECMA-262 15.4). Invalid indices are reported as being out of 1500 // (ECMA-262 15.4). Invalid indices are reported as being out of
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 1664
1676 DISALLOW_COPY_AND_ASSIGN(StringCharAtGenerator); 1665 DISALLOW_COPY_AND_ASSIGN(StringCharAtGenerator);
1677 }; 1666 };
1678 1667
1679 1668
1680 class LoadDictionaryElementStub : public HydrogenCodeStub { 1669 class LoadDictionaryElementStub : public HydrogenCodeStub {
1681 public: 1670 public:
1682 explicit LoadDictionaryElementStub(Isolate* isolate) 1671 explicit LoadDictionaryElementStub(Isolate* isolate)
1683 : HydrogenCodeStub(isolate) {} 1672 : HydrogenCodeStub(isolate) {}
1684 1673
1674 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load);
1685 DEFINE_HYDROGEN_CODE_STUB(LoadDictionaryElement, HydrogenCodeStub); 1675 DEFINE_HYDROGEN_CODE_STUB(LoadDictionaryElement, HydrogenCodeStub);
1686 }; 1676 };
1687 1677
1688 1678
1689 class KeyedLoadGenericStub : public HydrogenCodeStub { 1679 class KeyedLoadGenericStub : public HydrogenCodeStub {
1690 public: 1680 public:
1691 explicit KeyedLoadGenericStub(Isolate* isolate) : HydrogenCodeStub(isolate) {} 1681 explicit KeyedLoadGenericStub(Isolate* isolate) : HydrogenCodeStub(isolate) {}
1692 1682
1693 virtual Code::Kind GetCodeKind() const { return Code::KEYED_LOAD_IC; } 1683 virtual Code::Kind GetCodeKind() const { return Code::KEYED_LOAD_IC; }
1694 virtual InlineCacheState GetICState() const { return GENERIC; } 1684 virtual InlineCacheState GetICState() const { return GENERIC; }
1695 1685
1686 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load);
1696 DEFINE_HYDROGEN_CODE_STUB(KeyedLoadGeneric, HydrogenCodeStub); 1687 DEFINE_HYDROGEN_CODE_STUB(KeyedLoadGeneric, HydrogenCodeStub);
1697 }; 1688 };
1698 1689
1699 1690
1700 class LoadICTrampolineStub : public PlatformCodeStub { 1691 class LoadICTrampolineStub : public PlatformCodeStub {
1701 public: 1692 public:
1702 LoadICTrampolineStub(Isolate* isolate, const LoadIC::State& state) 1693 LoadICTrampolineStub(Isolate* isolate, const LoadIC::State& state)
1703 : PlatformCodeStub(isolate) { 1694 : PlatformCodeStub(isolate) {
1704 minor_key_ = state.GetExtraICState(); 1695 minor_key_ = state.GetExtraICState();
1705 } 1696 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1746 virtual Code::Kind GetCodeKind() const OVERRIDE { return Code::LOAD_IC; } 1737 virtual Code::Kind GetCodeKind() const OVERRIDE { return Code::LOAD_IC; }
1747 1738
1748 virtual InlineCacheState GetICState() const FINAL OVERRIDE { 1739 virtual InlineCacheState GetICState() const FINAL OVERRIDE {
1749 return MEGAMORPHIC; 1740 return MEGAMORPHIC;
1750 } 1741 }
1751 1742
1752 virtual ExtraICState GetExtraICState() const FINAL OVERRIDE { 1743 virtual ExtraICState GetExtraICState() const FINAL OVERRIDE {
1753 return static_cast<ExtraICState>(sub_minor_key()); 1744 return static_cast<ExtraICState>(sub_minor_key());
1754 } 1745 }
1755 1746
1747 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load);
1756 DEFINE_HYDROGEN_CODE_STUB(MegamorphicLoad, HydrogenCodeStub); 1748 DEFINE_HYDROGEN_CODE_STUB(MegamorphicLoad, HydrogenCodeStub);
1757 }; 1749 };
1758 1750
1759 1751
1760 class VectorLoadStub : public HydrogenCodeStub { 1752 class VectorLoadStub : public HydrogenCodeStub {
1761 public: 1753 public:
1762 explicit VectorLoadStub(Isolate* isolate, const LoadIC::State& state) 1754 explicit VectorLoadStub(Isolate* isolate, const LoadIC::State& state)
1763 : HydrogenCodeStub(isolate) { 1755 : HydrogenCodeStub(isolate) {
1764 set_sub_minor_key(state.GetExtraICState()); 1756 set_sub_minor_key(state.GetExtraICState());
1765 } 1757 }
1766 1758
1767 virtual Code::Kind GetCodeKind() const OVERRIDE { return Code::LOAD_IC; } 1759 virtual Code::Kind GetCodeKind() const OVERRIDE { return Code::LOAD_IC; }
1768 1760
1769 virtual InlineCacheState GetICState() const FINAL OVERRIDE { 1761 virtual InlineCacheState GetICState() const FINAL OVERRIDE {
1770 return GENERIC; 1762 return GENERIC;
1771 } 1763 }
1772 1764
1773 virtual ExtraICState GetExtraICState() const FINAL OVERRIDE { 1765 virtual ExtraICState GetExtraICState() const FINAL OVERRIDE {
1774 return static_cast<ExtraICState>(sub_minor_key()); 1766 return static_cast<ExtraICState>(sub_minor_key());
1775 } 1767 }
1776 1768
1777 private: 1769 private:
1778 LoadIC::State state() const { return LoadIC::State(GetExtraICState()); } 1770 LoadIC::State state() const { return LoadIC::State(GetExtraICState()); }
1779 1771
1772 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorLoadIC);
1780 DEFINE_HYDROGEN_CODE_STUB(VectorLoad, HydrogenCodeStub); 1773 DEFINE_HYDROGEN_CODE_STUB(VectorLoad, HydrogenCodeStub);
1781 }; 1774 };
1782 1775
1783 1776
1784 class VectorKeyedLoadStub : public VectorLoadStub { 1777 class VectorKeyedLoadStub : public VectorLoadStub {
1785 public: 1778 public:
1786 explicit VectorKeyedLoadStub(Isolate* isolate) 1779 explicit VectorKeyedLoadStub(Isolate* isolate)
1787 : VectorLoadStub(isolate, LoadIC::State(0)) {} 1780 : VectorLoadStub(isolate, LoadIC::State(0)) {}
1788 1781
1789 virtual Code::Kind GetCodeKind() const OVERRIDE { 1782 virtual Code::Kind GetCodeKind() const OVERRIDE {
1790 return Code::KEYED_LOAD_IC; 1783 return Code::KEYED_LOAD_IC;
1791 } 1784 }
1792 1785
1786 DEFINE_CALL_INTERFACE_DESCRIPTOR(VectorLoadIC);
1793 DEFINE_HYDROGEN_CODE_STUB(VectorKeyedLoad, VectorLoadStub); 1787 DEFINE_HYDROGEN_CODE_STUB(VectorKeyedLoad, VectorLoadStub);
1794 }; 1788 };
1795 1789
1796 1790
1797 class DoubleToIStub : public PlatformCodeStub { 1791 class DoubleToIStub : public PlatformCodeStub {
1798 public: 1792 public:
1799 DoubleToIStub(Isolate* isolate, Register source, Register destination, 1793 DoubleToIStub(Isolate* isolate, Register source, Register destination,
1800 int offset, bool is_truncating, bool skip_fastpath = false) 1794 int offset, bool is_truncating, bool skip_fastpath = false)
1801 : PlatformCodeStub(isolate) { 1795 : PlatformCodeStub(isolate) {
1802 minor_key_ = SourceRegisterBits::encode(source.code()) | 1796 minor_key_ = SourceRegisterBits::encode(source.code()) |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1852 bool is_js_array() const { return IsJSArrayBits::decode(sub_minor_key()); } 1846 bool is_js_array() const { return IsJSArrayBits::decode(sub_minor_key()); }
1853 1847
1854 ElementsKind elements_kind() const { 1848 ElementsKind elements_kind() const {
1855 return ElementsKindBits::decode(sub_minor_key()); 1849 return ElementsKindBits::decode(sub_minor_key());
1856 } 1850 }
1857 1851
1858 private: 1852 private:
1859 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; 1853 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {};
1860 class IsJSArrayBits: public BitField<bool, 8, 1> {}; 1854 class IsJSArrayBits: public BitField<bool, 8, 1> {};
1861 1855
1856 DEFINE_CALL_INTERFACE_DESCRIPTOR(Load);
1862 DEFINE_HYDROGEN_CODE_STUB(LoadFastElement, HydrogenCodeStub); 1857 DEFINE_HYDROGEN_CODE_STUB(LoadFastElement, HydrogenCodeStub);
1863 }; 1858 };
1864 1859
1865 1860
1866 class StoreFastElementStub : public HydrogenCodeStub { 1861 class StoreFastElementStub : public HydrogenCodeStub {
1867 public: 1862 public:
1868 StoreFastElementStub(Isolate* isolate, bool is_js_array, 1863 StoreFastElementStub(Isolate* isolate, bool is_js_array,
1869 ElementsKind elements_kind, KeyedAccessStoreMode mode) 1864 ElementsKind elements_kind, KeyedAccessStoreMode mode)
1870 : HydrogenCodeStub(isolate) { 1865 : HydrogenCodeStub(isolate) {
1871 set_sub_minor_key(ElementsKindBits::encode(elements_kind) | 1866 set_sub_minor_key(ElementsKindBits::encode(elements_kind) |
1872 IsJSArrayBits::encode(is_js_array) | 1867 IsJSArrayBits::encode(is_js_array) |
1873 StoreModeBits::encode(mode)); 1868 StoreModeBits::encode(mode));
1874 } 1869 }
1875 1870
1876 bool is_js_array() const { return IsJSArrayBits::decode(sub_minor_key()); } 1871 bool is_js_array() const { return IsJSArrayBits::decode(sub_minor_key()); }
1877 1872
1878 ElementsKind elements_kind() const { 1873 ElementsKind elements_kind() const {
1879 return ElementsKindBits::decode(sub_minor_key()); 1874 return ElementsKindBits::decode(sub_minor_key());
1880 } 1875 }
1881 1876
1882 KeyedAccessStoreMode store_mode() const { 1877 KeyedAccessStoreMode store_mode() const {
1883 return StoreModeBits::decode(sub_minor_key()); 1878 return StoreModeBits::decode(sub_minor_key());
1884 } 1879 }
1885 1880
1886 private: 1881 private:
1887 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; 1882 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {};
1888 class StoreModeBits: public BitField<KeyedAccessStoreMode, 8, 4> {}; 1883 class StoreModeBits: public BitField<KeyedAccessStoreMode, 8, 4> {};
1889 class IsJSArrayBits: public BitField<bool, 12, 1> {}; 1884 class IsJSArrayBits: public BitField<bool, 12, 1> {};
1890 1885
1886 DEFINE_CALL_INTERFACE_DESCRIPTOR(Store);
1891 DEFINE_HYDROGEN_CODE_STUB(StoreFastElement, HydrogenCodeStub); 1887 DEFINE_HYDROGEN_CODE_STUB(StoreFastElement, HydrogenCodeStub);
1892 }; 1888 };
1893 1889
1894 1890
1895 class TransitionElementsKindStub : public HydrogenCodeStub { 1891 class TransitionElementsKindStub : public HydrogenCodeStub {
1896 public: 1892 public:
1897 TransitionElementsKindStub(Isolate* isolate, 1893 TransitionElementsKindStub(Isolate* isolate,
1898 ElementsKind from_kind, 1894 ElementsKind from_kind,
1899 ElementsKind to_kind, 1895 ElementsKind to_kind,
1900 bool is_js_array) : HydrogenCodeStub(isolate) { 1896 bool is_js_array) : HydrogenCodeStub(isolate) {
1901 set_sub_minor_key(FromKindBits::encode(from_kind) | 1897 set_sub_minor_key(FromKindBits::encode(from_kind) |
1902 ToKindBits::encode(to_kind) | 1898 ToKindBits::encode(to_kind) |
1903 IsJSArrayBits::encode(is_js_array)); 1899 IsJSArrayBits::encode(is_js_array));
1904 } 1900 }
1905 1901
1906 ElementsKind from_kind() const { 1902 ElementsKind from_kind() const {
1907 return FromKindBits::decode(sub_minor_key()); 1903 return FromKindBits::decode(sub_minor_key());
1908 } 1904 }
1909 1905
1910 ElementsKind to_kind() const { return ToKindBits::decode(sub_minor_key()); } 1906 ElementsKind to_kind() const { return ToKindBits::decode(sub_minor_key()); }
1911 1907
1912 bool is_js_array() const { return IsJSArrayBits::decode(sub_minor_key()); } 1908 bool is_js_array() const { return IsJSArrayBits::decode(sub_minor_key()); }
1913 1909
1914 private: 1910 private:
1915 class FromKindBits: public BitField<ElementsKind, 8, 8> {}; 1911 class FromKindBits: public BitField<ElementsKind, 8, 8> {};
1916 class ToKindBits: public BitField<ElementsKind, 0, 8> {}; 1912 class ToKindBits: public BitField<ElementsKind, 0, 8> {};
1917 class IsJSArrayBits: public BitField<bool, 16, 1> {}; 1913 class IsJSArrayBits: public BitField<bool, 16, 1> {};
1918 1914
1915 DEFINE_CALL_INTERFACE_DESCRIPTOR(TransitionElementsKind);
1919 DEFINE_HYDROGEN_CODE_STUB(TransitionElementsKind, HydrogenCodeStub); 1916 DEFINE_HYDROGEN_CODE_STUB(TransitionElementsKind, HydrogenCodeStub);
1920 }; 1917 };
1921 1918
1922 1919
1923 class ArrayConstructorStubBase : public HydrogenCodeStub { 1920 class ArrayConstructorStubBase : public HydrogenCodeStub {
1924 public: 1921 public:
1925 ArrayConstructorStubBase(Isolate* isolate, 1922 ArrayConstructorStubBase(Isolate* isolate,
1926 ElementsKind kind, 1923 ElementsKind kind,
1927 AllocationSiteOverrideMode override_mode) 1924 AllocationSiteOverrideMode override_mode)
1928 : HydrogenCodeStub(isolate) { 1925 : HydrogenCodeStub(isolate) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1971 ElementsKind kind, 1968 ElementsKind kind,
1972 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) 1969 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE)
1973 : ArrayConstructorStubBase(isolate, kind, override_mode) { 1970 : ArrayConstructorStubBase(isolate, kind, override_mode) {
1974 } 1971 }
1975 1972
1976 private: 1973 private:
1977 virtual void PrintName(OStream& os) const OVERRIDE { // NOLINT 1974 virtual void PrintName(OStream& os) const OVERRIDE { // NOLINT
1978 BasePrintName(os, "ArrayNoArgumentConstructorStub"); 1975 BasePrintName(os, "ArrayNoArgumentConstructorStub");
1979 } 1976 }
1980 1977
1978 DEFINE_CALL_INTERFACE_DESCRIPTOR(ArrayConstructorConstantArgCount);
1981 DEFINE_HYDROGEN_CODE_STUB(ArrayNoArgumentConstructor, 1979 DEFINE_HYDROGEN_CODE_STUB(ArrayNoArgumentConstructor,
1982 ArrayConstructorStubBase); 1980 ArrayConstructorStubBase);
1983 }; 1981 };
1984 1982
1985 1983
1986 class ArraySingleArgumentConstructorStub : public ArrayConstructorStubBase { 1984 class ArraySingleArgumentConstructorStub : public ArrayConstructorStubBase {
1987 public: 1985 public:
1988 ArraySingleArgumentConstructorStub( 1986 ArraySingleArgumentConstructorStub(
1989 Isolate* isolate, 1987 Isolate* isolate,
1990 ElementsKind kind, 1988 ElementsKind kind,
1991 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) 1989 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE)
1992 : ArrayConstructorStubBase(isolate, kind, override_mode) { 1990 : ArrayConstructorStubBase(isolate, kind, override_mode) {
1993 } 1991 }
1994 1992
1995 private: 1993 private:
1996 virtual void PrintName(OStream& os) const { // NOLINT 1994 virtual void PrintName(OStream& os) const { // NOLINT
1997 BasePrintName(os, "ArraySingleArgumentConstructorStub"); 1995 BasePrintName(os, "ArraySingleArgumentConstructorStub");
1998 } 1996 }
1999 1997
1998 DEFINE_CALL_INTERFACE_DESCRIPTOR(ArrayConstructor);
2000 DEFINE_HYDROGEN_CODE_STUB(ArraySingleArgumentConstructor, 1999 DEFINE_HYDROGEN_CODE_STUB(ArraySingleArgumentConstructor,
2001 ArrayConstructorStubBase); 2000 ArrayConstructorStubBase);
2002 }; 2001 };
2003 2002
2004 2003
2005 class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase { 2004 class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase {
2006 public: 2005 public:
2007 ArrayNArgumentsConstructorStub( 2006 ArrayNArgumentsConstructorStub(
2008 Isolate* isolate, 2007 Isolate* isolate,
2009 ElementsKind kind, 2008 ElementsKind kind,
2010 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) 2009 AllocationSiteOverrideMode override_mode = DONT_OVERRIDE)
2011 : ArrayConstructorStubBase(isolate, kind, override_mode) { 2010 : ArrayConstructorStubBase(isolate, kind, override_mode) {
2012 } 2011 }
2013 2012
2014 private: 2013 private:
2015 virtual void PrintName(OStream& os) const { // NOLINT 2014 virtual void PrintName(OStream& os) const { // NOLINT
2016 BasePrintName(os, "ArrayNArgumentsConstructorStub"); 2015 BasePrintName(os, "ArrayNArgumentsConstructorStub");
2017 } 2016 }
2018 2017
2018 DEFINE_CALL_INTERFACE_DESCRIPTOR(ArrayConstructor);
2019 DEFINE_HYDROGEN_CODE_STUB(ArrayNArgumentsConstructor, 2019 DEFINE_HYDROGEN_CODE_STUB(ArrayNArgumentsConstructor,
2020 ArrayConstructorStubBase); 2020 ArrayConstructorStubBase);
2021 }; 2021 };
2022 2022
2023 2023
2024 class InternalArrayConstructorStubBase : public HydrogenCodeStub { 2024 class InternalArrayConstructorStubBase : public HydrogenCodeStub {
2025 public: 2025 public:
2026 InternalArrayConstructorStubBase(Isolate* isolate, ElementsKind kind) 2026 InternalArrayConstructorStubBase(Isolate* isolate, ElementsKind kind)
2027 : HydrogenCodeStub(isolate) { 2027 : HydrogenCodeStub(isolate) {
2028 set_sub_minor_key(ElementsKindBits::encode(kind)); 2028 set_sub_minor_key(ElementsKindBits::encode(kind));
(...skipping 15 matching lines...) Expand all
2044 }; 2044 };
2045 2045
2046 2046
2047 class InternalArrayNoArgumentConstructorStub : public 2047 class InternalArrayNoArgumentConstructorStub : public
2048 InternalArrayConstructorStubBase { 2048 InternalArrayConstructorStubBase {
2049 public: 2049 public:
2050 InternalArrayNoArgumentConstructorStub(Isolate* isolate, 2050 InternalArrayNoArgumentConstructorStub(Isolate* isolate,
2051 ElementsKind kind) 2051 ElementsKind kind)
2052 : InternalArrayConstructorStubBase(isolate, kind) { } 2052 : InternalArrayConstructorStubBase(isolate, kind) { }
2053 2053
2054 DEFINE_CALL_INTERFACE_DESCRIPTOR(InternalArrayConstructorConstantArgCount);
2054 DEFINE_HYDROGEN_CODE_STUB(InternalArrayNoArgumentConstructor, 2055 DEFINE_HYDROGEN_CODE_STUB(InternalArrayNoArgumentConstructor,
2055 InternalArrayConstructorStubBase); 2056 InternalArrayConstructorStubBase);
2056 }; 2057 };
2057 2058
2058 2059
2059 class InternalArraySingleArgumentConstructorStub : public 2060 class InternalArraySingleArgumentConstructorStub : public
2060 InternalArrayConstructorStubBase { 2061 InternalArrayConstructorStubBase {
2061 public: 2062 public:
2062 InternalArraySingleArgumentConstructorStub(Isolate* isolate, 2063 InternalArraySingleArgumentConstructorStub(Isolate* isolate,
2063 ElementsKind kind) 2064 ElementsKind kind)
2064 : InternalArrayConstructorStubBase(isolate, kind) { } 2065 : InternalArrayConstructorStubBase(isolate, kind) { }
2065 2066
2067 DEFINE_CALL_INTERFACE_DESCRIPTOR(InternalArrayConstructor);
2066 DEFINE_HYDROGEN_CODE_STUB(InternalArraySingleArgumentConstructor, 2068 DEFINE_HYDROGEN_CODE_STUB(InternalArraySingleArgumentConstructor,
2067 InternalArrayConstructorStubBase); 2069 InternalArrayConstructorStubBase);
2068 }; 2070 };
2069 2071
2070 2072
2071 class InternalArrayNArgumentsConstructorStub : public 2073 class InternalArrayNArgumentsConstructorStub : public
2072 InternalArrayConstructorStubBase { 2074 InternalArrayConstructorStubBase {
2073 public: 2075 public:
2074 InternalArrayNArgumentsConstructorStub(Isolate* isolate, ElementsKind kind) 2076 InternalArrayNArgumentsConstructorStub(Isolate* isolate, ElementsKind kind)
2075 : InternalArrayConstructorStubBase(isolate, kind) { } 2077 : InternalArrayConstructorStubBase(isolate, kind) { }
2076 2078
2079 DEFINE_CALL_INTERFACE_DESCRIPTOR(InternalArrayConstructor);
2077 DEFINE_HYDROGEN_CODE_STUB(InternalArrayNArgumentsConstructor, 2080 DEFINE_HYDROGEN_CODE_STUB(InternalArrayNArgumentsConstructor,
2078 InternalArrayConstructorStubBase); 2081 InternalArrayConstructorStubBase);
2079 }; 2082 };
2080 2083
2081 2084
2082 class StoreElementStub : public PlatformCodeStub { 2085 class StoreElementStub : public PlatformCodeStub {
2083 public: 2086 public:
2084 StoreElementStub(Isolate* isolate, ElementsKind elements_kind) 2087 StoreElementStub(Isolate* isolate, ElementsKind elements_kind)
2085 : PlatformCodeStub(isolate) { 2088 : PlatformCodeStub(isolate) {
2086 minor_key_ = ElementsKindBits::encode(elements_kind); 2089 minor_key_ = ElementsKindBits::encode(elements_kind);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
2172 2175
2173 private: 2176 private:
2174 ToBooleanStub(Isolate* isolate, InitializationState init_state) 2177 ToBooleanStub(Isolate* isolate, InitializationState init_state)
2175 : HydrogenCodeStub(isolate, init_state) { 2178 : HydrogenCodeStub(isolate, init_state) {
2176 set_sub_minor_key(ResultModeBits::encode(RESULT_AS_SMI)); 2179 set_sub_minor_key(ResultModeBits::encode(RESULT_AS_SMI));
2177 } 2180 }
2178 2181
2179 class TypesBits : public BitField<byte, 0, NUMBER_OF_TYPES> {}; 2182 class TypesBits : public BitField<byte, 0, NUMBER_OF_TYPES> {};
2180 class ResultModeBits : public BitField<ResultMode, NUMBER_OF_TYPES, 2> {}; 2183 class ResultModeBits : public BitField<ResultMode, NUMBER_OF_TYPES, 2> {};
2181 2184
2185 DEFINE_CALL_INTERFACE_DESCRIPTOR(ToBoolean);
2182 DEFINE_HYDROGEN_CODE_STUB(ToBoolean, HydrogenCodeStub); 2186 DEFINE_HYDROGEN_CODE_STUB(ToBoolean, HydrogenCodeStub);
2183 }; 2187 };
2184 2188
2185 2189
2186 OStream& operator<<(OStream& os, const ToBooleanStub::Types& t); 2190 OStream& operator<<(OStream& os, const ToBooleanStub::Types& t);
2187 2191
2188 2192
2189 class ElementsTransitionAndStoreStub : public HydrogenCodeStub { 2193 class ElementsTransitionAndStoreStub : public HydrogenCodeStub {
2190 public: 2194 public:
2191 ElementsTransitionAndStoreStub(Isolate* isolate, ElementsKind from_kind, 2195 ElementsTransitionAndStoreStub(Isolate* isolate, ElementsKind from_kind,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2225 static const Register ObjectRegister() { 2229 static const Register ObjectRegister() {
2226 return ElementTransitionAndStoreDescriptor::ReceiverRegister(); 2230 return ElementTransitionAndStoreDescriptor::ReceiverRegister();
2227 } 2231 }
2228 2232
2229 private: 2233 private:
2230 class FromBits : public BitField<ElementsKind, 0, 8> {}; 2234 class FromBits : public BitField<ElementsKind, 0, 8> {};
2231 class ToBits : public BitField<ElementsKind, 8, 8> {}; 2235 class ToBits : public BitField<ElementsKind, 8, 8> {};
2232 class IsJSArrayBits : public BitField<bool, 16, 1> {}; 2236 class IsJSArrayBits : public BitField<bool, 16, 1> {};
2233 class StoreModeBits : public BitField<KeyedAccessStoreMode, 17, 4> {}; 2237 class StoreModeBits : public BitField<KeyedAccessStoreMode, 17, 4> {};
2234 2238
2239 DEFINE_CALL_INTERFACE_DESCRIPTOR(ElementTransitionAndStore);
2235 DEFINE_HYDROGEN_CODE_STUB(ElementsTransitionAndStore, HydrogenCodeStub); 2240 DEFINE_HYDROGEN_CODE_STUB(ElementsTransitionAndStore, HydrogenCodeStub);
2236 }; 2241 };
2237 2242
2238 2243
2239 class StoreArrayLiteralElementStub : public PlatformCodeStub { 2244 class StoreArrayLiteralElementStub : public PlatformCodeStub {
2240 public: 2245 public:
2241 explicit StoreArrayLiteralElementStub(Isolate* isolate) 2246 explicit StoreArrayLiteralElementStub(Isolate* isolate)
2242 : PlatformCodeStub(isolate) { } 2247 : PlatformCodeStub(isolate) { }
2243 2248
2244 DEFINE_PLATFORM_CODE_STUB(StoreArrayLiteralElement, PlatformCodeStub); 2249 DEFINE_PLATFORM_CODE_STUB(StoreArrayLiteralElement, PlatformCodeStub);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
2312 2317
2313 2318
2314 class StringCompareStub : public PlatformCodeStub { 2319 class StringCompareStub : public PlatformCodeStub {
2315 public: 2320 public:
2316 explicit StringCompareStub(Isolate* isolate) : PlatformCodeStub(isolate) {} 2321 explicit StringCompareStub(Isolate* isolate) : PlatformCodeStub(isolate) {}
2317 2322
2318 DEFINE_PLATFORM_CODE_STUB(StringCompare, PlatformCodeStub); 2323 DEFINE_PLATFORM_CODE_STUB(StringCompare, PlatformCodeStub);
2319 }; 2324 };
2320 2325
2321 2326
2327 #undef DEFINE_CALL_INTERFACE_DESCRIPTOR
2322 #undef DEFINE_PLATFORM_CODE_STUB 2328 #undef DEFINE_PLATFORM_CODE_STUB
2323 #undef DEFINE_HANDLER_CODE_STUB 2329 #undef DEFINE_HANDLER_CODE_STUB
2324 #undef DEFINE_HYDROGEN_CODE_STUB 2330 #undef DEFINE_HYDROGEN_CODE_STUB
2325 #undef DEFINE_CODE_STUB 2331 #undef DEFINE_CODE_STUB
2326 #undef DEFINE_CODE_STUB_BASE 2332 #undef DEFINE_CODE_STUB_BASE
2327 } } // namespace v8::internal 2333 } } // namespace v8::internal
2328 2334
2329 #endif // V8_CODE_STUBS_H_ 2335 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/arm64/lithium-arm64.cc ('k') | src/code-stubs.cc » ('j') | src/x64/code-stubs-x64.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698