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

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

Issue 1137703002: Add a MathFloor stub generated with TurboFan (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Latest Created 5 years, 7 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
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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 V(NameDictionaryLookup) \ 81 V(NameDictionaryLookup) \
82 V(NumberToString) \ 82 V(NumberToString) \
83 V(RegExpConstructResult) \ 83 V(RegExpConstructResult) \
84 V(StoreFastElement) \ 84 V(StoreFastElement) \
85 V(StoreScriptContextField) \ 85 V(StoreScriptContextField) \
86 V(StringAdd) \ 86 V(StringAdd) \
87 V(ToBoolean) \ 87 V(ToBoolean) \
88 V(TransitionElementsKind) \ 88 V(TransitionElementsKind) \
89 V(VectorRawKeyedLoad) \ 89 V(VectorRawKeyedLoad) \
90 V(VectorRawLoad) \ 90 V(VectorRawLoad) \
91 /* TurboFanCodeStubs */ \
92 V(StringLengthTF) \
93 V(MathFloor) \
91 /* IC Handler stubs */ \ 94 /* IC Handler stubs */ \
92 V(ArrayBufferViewLoadField) \ 95 V(ArrayBufferViewLoadField) \
93 V(LoadConstant) \ 96 V(LoadConstant) \
94 V(LoadField) \ 97 V(LoadField) \
95 V(KeyedLoadSloppyArguments) \ 98 V(KeyedLoadSloppyArguments) \
96 V(StoreField) \ 99 V(StoreField) \
97 V(StoreGlobal) \ 100 V(StoreGlobal) \
98 V(StoreTransition) \ 101 V(StoreTransition) \
99 V(StringLength) \ 102 V(StringLength) \
100 V(RestParamAccess) 103 V(RestParamAccess)
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 #endif 147 #endif
145 148
146 // Combined list of code stubs. 149 // Combined list of code stubs.
147 #define CODE_STUB_LIST(V) \ 150 #define CODE_STUB_LIST(V) \
148 CODE_STUB_LIST_ALL_PLATFORMS(V) \ 151 CODE_STUB_LIST_ALL_PLATFORMS(V) \
149 CODE_STUB_LIST_ARM(V) \ 152 CODE_STUB_LIST_ARM(V) \
150 CODE_STUB_LIST_ARM64(V) \ 153 CODE_STUB_LIST_ARM64(V) \
151 CODE_STUB_LIST_PPC(V) \ 154 CODE_STUB_LIST_PPC(V) \
152 CODE_STUB_LIST_MIPS(V) 155 CODE_STUB_LIST_MIPS(V)
153 156
157 static const int kHasReturnedMinusZeroSentinel = 1;
158
154 // Stub is base classes of all stubs. 159 // Stub is base classes of all stubs.
155 class CodeStub BASE_EMBEDDED { 160 class CodeStub BASE_EMBEDDED {
156 public: 161 public:
157 enum Major { 162 enum Major {
158 // TODO(mvstanton): eliminate the NoCache key by getting rid 163 // TODO(mvstanton): eliminate the NoCache key by getting rid
159 // of the non-monomorphic-cache. 164 // of the non-monomorphic-cache.
160 NoCache = 0, // marker for stubs that do custom caching] 165 NoCache = 0, // marker for stubs that do custom caching]
161 #define DEF_ENUM(name) name, 166 #define DEF_ENUM(name) name,
162 CODE_STUB_LIST(DEF_ENUM) 167 CODE_STUB_LIST(DEF_ENUM)
163 #undef DEF_ENUM 168 #undef DEF_ENUM
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 // true, which will cause an assertion if we try to call something that can 203 // true, which will cause an assertion if we try to call something that can
199 // GC or if we try to put a stack frame on top of the junk, which would not 204 // GC or if we try to put a stack frame on top of the junk, which would not
200 // result in a traversable stack. 205 // result in a traversable stack.
201 virtual bool SometimesSetsUpAFrame() { return true; } 206 virtual bool SometimesSetsUpAFrame() { return true; }
202 207
203 // Lookup the code in the (possibly custom) cache. 208 // Lookup the code in the (possibly custom) cache.
204 bool FindCodeInCache(Code** code_out); 209 bool FindCodeInCache(Code** code_out);
205 210
206 virtual CallInterfaceDescriptor GetCallInterfaceDescriptor() = 0; 211 virtual CallInterfaceDescriptor GetCallInterfaceDescriptor() = 0;
207 212
213 virtual int GetStackParameterCount() const { return 0; }
214
208 virtual void InitializeDescriptor(CodeStubDescriptor* descriptor) {} 215 virtual void InitializeDescriptor(CodeStubDescriptor* descriptor) {}
209 216
210 static void InitializeDescriptor(Isolate* isolate, uint32_t key, 217 static void InitializeDescriptor(Isolate* isolate, uint32_t key,
211 CodeStubDescriptor* desc); 218 CodeStubDescriptor* desc);
212 219
213 static MaybeHandle<Code> GetCode(Isolate* isolate, uint32_t key); 220 static MaybeHandle<Code> GetCode(Isolate* isolate, uint32_t key);
214 221
215 // Returns information for computing the number key. 222 // Returns information for computing the number key.
216 virtual Major MajorKey() const = 0; 223 virtual Major MajorKey() const = 0;
217 uint32_t MinorKey() const { return minor_key_; } 224 uint32_t MinorKey() const { return minor_key_; }
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 void Generate(MacroAssembler* masm) override; \ 347 void Generate(MacroAssembler* masm) override; \
341 DEFINE_CODE_STUB(NAME, SUPER) 348 DEFINE_CODE_STUB(NAME, SUPER)
342 349
343 350
344 #define DEFINE_HYDROGEN_CODE_STUB(NAME, SUPER) \ 351 #define DEFINE_HYDROGEN_CODE_STUB(NAME, SUPER) \
345 public: \ 352 public: \
346 void InitializeDescriptor(CodeStubDescriptor* descriptor) override; \ 353 void InitializeDescriptor(CodeStubDescriptor* descriptor) override; \
347 Handle<Code> GenerateCode() override; \ 354 Handle<Code> GenerateCode() override; \
348 DEFINE_CODE_STUB(NAME, SUPER) 355 DEFINE_CODE_STUB(NAME, SUPER)
349 356
357 #define DEFINE_TURBOFAN_CODE_STUB(NAME, SUPER, DESC, STACK_PARAMS) \
358 public: \
359 NAME##Stub(Isolate* isolate) : SUPER(isolate) {} \
360 CallInterfaceDescriptor GetCallInterfaceDescriptor() override { \
361 return DESC(isolate()); \
362 }; \
363 virtual const char* GetFunctionName() const override { \
364 return #NAME "_STUB"; \
365 } \
366 int GetStackParameterCount() const override { return STACK_PARAMS; } \
367 Code::StubType GetStubType() const override { return Code::FAST; } \
368 DEFINE_CODE_STUB(NAME, SUPER);
369
350 #define DEFINE_HANDLER_CODE_STUB(NAME, SUPER) \ 370 #define DEFINE_HANDLER_CODE_STUB(NAME, SUPER) \
351 public: \ 371 public: \
352 Handle<Code> GenerateCode() override; \ 372 Handle<Code> GenerateCode() override; \
353 DEFINE_CODE_STUB(NAME, SUPER) 373 DEFINE_CODE_STUB(NAME, SUPER)
354 374
355 #define DEFINE_CALL_INTERFACE_DESCRIPTOR(NAME) \ 375 #define DEFINE_CALL_INTERFACE_DESCRIPTOR(NAME) \
356 public: \ 376 public: \
357 CallInterfaceDescriptor GetCallInterfaceDescriptor() override { \ 377 CallInterfaceDescriptor GetCallInterfaceDescriptor() override { \
358 return NAME##Descriptor(isolate()); \ 378 return NAME##Descriptor(isolate()); \
359 } 379 }
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 private: 530 private:
511 class IsMissBits : public BitField<bool, kSubMinorKeyBits, 1> {}; 531 class IsMissBits : public BitField<bool, kSubMinorKeyBits, 1> {};
512 class SubMinorKeyBits : public BitField<int, 0, kSubMinorKeyBits> {}; 532 class SubMinorKeyBits : public BitField<int, 0, kSubMinorKeyBits> {};
513 533
514 void GenerateLightweightMiss(MacroAssembler* masm, ExternalReference miss); 534 void GenerateLightweightMiss(MacroAssembler* masm, ExternalReference miss);
515 535
516 DEFINE_CODE_STUB_BASE(HydrogenCodeStub, CodeStub); 536 DEFINE_CODE_STUB_BASE(HydrogenCodeStub, CodeStub);
517 }; 537 };
518 538
519 539
540 class TurboFanCodeStub : public CodeStub {
541 public:
542 Code::Kind GetCodeKind() const override { return Code::STUB; }
543
544 // Retrieve the code for the stub. Generate the code if needed.
545 Handle<Code> GenerateCode() override;
546
547 virtual const char* GetFunctionName() const = 0;
548
549 protected:
550 explicit TurboFanCodeStub(Isolate* isolate) : CodeStub(isolate) {}
551
552 private:
553 DEFINE_CODE_STUB_BASE(TurboFanCodeStub, CodeStub);
554 };
555
556
520 // Helper interface to prepare to/restore after making runtime calls. 557 // Helper interface to prepare to/restore after making runtime calls.
521 class RuntimeCallHelper { 558 class RuntimeCallHelper {
522 public: 559 public:
523 virtual ~RuntimeCallHelper() {} 560 virtual ~RuntimeCallHelper() {}
524 561
525 virtual void BeforeCall(MacroAssembler* masm) const = 0; 562 virtual void BeforeCall(MacroAssembler* masm) const = 0;
526 563
527 virtual void AfterCall(MacroAssembler* masm) const = 0; 564 virtual void AfterCall(MacroAssembler* masm) const = 0;
528 565
529 protected: 566 protected:
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 class NopRuntimeCallHelper : public RuntimeCallHelper { 613 class NopRuntimeCallHelper : public RuntimeCallHelper {
577 public: 614 public:
578 NopRuntimeCallHelper() {} 615 NopRuntimeCallHelper() {}
579 616
580 virtual void BeforeCall(MacroAssembler* masm) const {} 617 virtual void BeforeCall(MacroAssembler* masm) const {}
581 618
582 virtual void AfterCall(MacroAssembler* masm) const {} 619 virtual void AfterCall(MacroAssembler* masm) const {}
583 }; 620 };
584 621
585 622
623 class MathFloorStub : public TurboFanCodeStub {
624 DEFINE_TURBOFAN_CODE_STUB(MathFloor, TurboFanCodeStub,
625 MathRoundVariantDescriptor, 1);
626 };
627
628
629 class StringLengthTFStub : public TurboFanCodeStub {
630 DEFINE_TURBOFAN_CODE_STUB(StringLengthTF, TurboFanCodeStub, LoadDescriptor,
631 0);
632
633 public:
634 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
635 InlineCacheState GetICState() const override { return MONOMORPHIC; }
636 ExtraICState GetExtraICState() const override { return Code::LOAD_IC; }
637 };
638
639
586 class NumberToStringStub final : public HydrogenCodeStub { 640 class NumberToStringStub final : public HydrogenCodeStub {
587 public: 641 public:
588 explicit NumberToStringStub(Isolate* isolate) : HydrogenCodeStub(isolate) {} 642 explicit NumberToStringStub(Isolate* isolate) : HydrogenCodeStub(isolate) {}
589 643
590 // Parameters accessed via CodeStubGraphBuilder::GetParameter() 644 // Parameters accessed via CodeStubGraphBuilder::GetParameter()
591 static const int kNumber = 0; 645 static const int kNumber = 0;
592 646
593 DEFINE_CALL_INTERFACE_DESCRIPTOR(NumberToString); 647 DEFINE_CALL_INTERFACE_DESCRIPTOR(NumberToString);
594 DEFINE_HYDROGEN_CODE_STUB(NumberToString, HydrogenCodeStub); 648 DEFINE_HYDROGEN_CODE_STUB(NumberToString, HydrogenCodeStub);
595 }; 649 };
(...skipping 2224 matching lines...) Expand 10 before | Expand all | Expand 10 after
2820 2874
2821 #undef DEFINE_CALL_INTERFACE_DESCRIPTOR 2875 #undef DEFINE_CALL_INTERFACE_DESCRIPTOR
2822 #undef DEFINE_PLATFORM_CODE_STUB 2876 #undef DEFINE_PLATFORM_CODE_STUB
2823 #undef DEFINE_HANDLER_CODE_STUB 2877 #undef DEFINE_HANDLER_CODE_STUB
2824 #undef DEFINE_HYDROGEN_CODE_STUB 2878 #undef DEFINE_HYDROGEN_CODE_STUB
2825 #undef DEFINE_CODE_STUB 2879 #undef DEFINE_CODE_STUB
2826 #undef DEFINE_CODE_STUB_BASE 2880 #undef DEFINE_CODE_STUB_BASE
2827 } } // namespace v8::internal 2881 } } // namespace v8::internal
2828 2882
2829 #endif // V8_CODE_STUBS_H_ 2883 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/arm64/interface-descriptors-arm64.cc ('k') | src/code-stubs.cc » ('j') | src/code-stubs.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698