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

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

Issue 2051573002: [Interpreter] Add intrinsics called as stubs. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix leak Created 4 years, 6 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-factory.cc ('k') | src/compiler/code-assembler.h » ('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 #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/code-stub-assembler.h" 10 #include "src/code-stub-assembler.h"
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 public: \ 427 public: \
428 Handle<Code> GenerateCode() override; \ 428 Handle<Code> GenerateCode() override; \
429 DEFINE_CODE_STUB(NAME, SUPER) 429 DEFINE_CODE_STUB(NAME, SUPER)
430 430
431 #define DEFINE_CALL_INTERFACE_DESCRIPTOR(NAME) \ 431 #define DEFINE_CALL_INTERFACE_DESCRIPTOR(NAME) \
432 public: \ 432 public: \
433 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override { \ 433 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override { \
434 return NAME##Descriptor(isolate()); \ 434 return NAME##Descriptor(isolate()); \
435 } 435 }
436 436
437 #define DEFINE_ON_STACK_CALL_INTERFACE_DESCRIPTOR(PARAMETER_COUNT) \
438 public: \
439 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override { \
440 return OnStackArgsDescriptorBase::ForArgs(isolate(), PARAMETER_COUNT); \
441 }
442
437 // There are some code stubs we just can't describe right now with a 443 // There are some code stubs we just can't describe right now with a
438 // CallInterfaceDescriptor. Isolate behavior for those cases with this macro. 444 // CallInterfaceDescriptor. Isolate behavior for those cases with this macro.
439 // An attempt to retrieve a descriptor will fail. 445 // An attempt to retrieve a descriptor will fail.
440 #define DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR() \ 446 #define DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR() \
441 public: \ 447 public: \
442 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override { \ 448 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override { \
443 UNREACHABLE(); \ 449 UNREACHABLE(); \
444 return CallInterfaceDescriptor(); \ 450 return CallInterfaceDescriptor(); \
445 } 451 }
446 452
(...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after
1321 class MathPowStub: public PlatformCodeStub { 1327 class MathPowStub: public PlatformCodeStub {
1322 public: 1328 public:
1323 enum ExponentType { INTEGER, DOUBLE, TAGGED, ON_STACK }; 1329 enum ExponentType { INTEGER, DOUBLE, TAGGED, ON_STACK };
1324 1330
1325 MathPowStub(Isolate* isolate, ExponentType exponent_type) 1331 MathPowStub(Isolate* isolate, ExponentType exponent_type)
1326 : PlatformCodeStub(isolate) { 1332 : PlatformCodeStub(isolate) {
1327 minor_key_ = ExponentTypeBits::encode(exponent_type); 1333 minor_key_ = ExponentTypeBits::encode(exponent_type);
1328 } 1334 }
1329 1335
1330 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override { 1336 CallInterfaceDescriptor GetCallInterfaceDescriptor() const override {
1331 if (exponent_type() == TAGGED) { 1337 if (exponent_type() == ON_STACK) {
1338 return OnStackArgsDescriptorBase::ForArgs(isolate(), 2);
1339 } else if (exponent_type() == TAGGED) {
1332 return MathPowTaggedDescriptor(isolate()); 1340 return MathPowTaggedDescriptor(isolate());
1333 } else if (exponent_type() == INTEGER) { 1341 } else if (exponent_type() == INTEGER) {
1334 return MathPowIntegerDescriptor(isolate()); 1342 return MathPowIntegerDescriptor(isolate());
1343 } else {
1344 // A CallInterfaceDescriptor doesn't specify double registers (yet).
1345 DCHECK_EQ(DOUBLE, exponent_type());
1346 return ContextOnlyDescriptor(isolate());
1335 } 1347 }
1336 // A CallInterfaceDescriptor doesn't specify double registers (yet).
1337 return ContextOnlyDescriptor(isolate());
1338 } 1348 }
1339 1349
1340 private: 1350 private:
1341 ExponentType exponent_type() const { 1351 ExponentType exponent_type() const {
1342 return ExponentTypeBits::decode(minor_key_); 1352 return ExponentTypeBits::decode(minor_key_);
1343 } 1353 }
1344 1354
1345 class ExponentTypeBits : public BitField<ExponentType, 0, 2> {}; 1355 class ExponentTypeBits : public BitField<ExponentType, 0, 2> {};
1346 1356
1347 DEFINE_PLATFORM_CODE_STUB(MathPow, PlatformCodeStub); 1357 DEFINE_PLATFORM_CODE_STUB(MathPow, PlatformCodeStub);
(...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after
2076 2086
2077 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR(); 2087 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR();
2078 DEFINE_PLATFORM_CODE_STUB(JSEntry, PlatformCodeStub); 2088 DEFINE_PLATFORM_CODE_STUB(JSEntry, PlatformCodeStub);
2079 }; 2089 };
2080 2090
2081 2091
2082 class RegExpExecStub: public PlatformCodeStub { 2092 class RegExpExecStub: public PlatformCodeStub {
2083 public: 2093 public:
2084 explicit RegExpExecStub(Isolate* isolate) : PlatformCodeStub(isolate) { } 2094 explicit RegExpExecStub(Isolate* isolate) : PlatformCodeStub(isolate) { }
2085 2095
2086 DEFINE_CALL_INTERFACE_DESCRIPTOR(ContextOnly); 2096 DEFINE_ON_STACK_CALL_INTERFACE_DESCRIPTOR(4);
2087 DEFINE_PLATFORM_CODE_STUB(RegExpExec, PlatformCodeStub); 2097 DEFINE_PLATFORM_CODE_STUB(RegExpExec, PlatformCodeStub);
2088 }; 2098 };
2089 2099
2090 2100
2091 class RegExpConstructResultStub final : public HydrogenCodeStub { 2101 class RegExpConstructResultStub final : public HydrogenCodeStub {
2092 public: 2102 public:
2093 explicit RegExpConstructResultStub(Isolate* isolate) 2103 explicit RegExpConstructResultStub(Isolate* isolate)
2094 : HydrogenCodeStub(isolate) { } 2104 : HydrogenCodeStub(isolate) { }
2095 2105
2096 // Parameters accessed via CodeStubGraphBuilder::GetParameter() 2106 // Parameters accessed via CodeStubGraphBuilder::GetParameter()
(...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after
3061 3071
3062 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR(); 3072 DEFINE_NULL_CALL_INTERFACE_DESCRIPTOR();
3063 DEFINE_PLATFORM_CODE_STUB(StoreBufferOverflow, PlatformCodeStub); 3073 DEFINE_PLATFORM_CODE_STUB(StoreBufferOverflow, PlatformCodeStub);
3064 }; 3074 };
3065 3075
3066 3076
3067 class SubStringStub : public PlatformCodeStub { 3077 class SubStringStub : public PlatformCodeStub {
3068 public: 3078 public:
3069 explicit SubStringStub(Isolate* isolate) : PlatformCodeStub(isolate) {} 3079 explicit SubStringStub(Isolate* isolate) : PlatformCodeStub(isolate) {}
3070 3080
3071 DEFINE_CALL_INTERFACE_DESCRIPTOR(ContextOnly); 3081 DEFINE_ON_STACK_CALL_INTERFACE_DESCRIPTOR(3);
3072 DEFINE_PLATFORM_CODE_STUB(SubString, PlatformCodeStub); 3082 DEFINE_PLATFORM_CODE_STUB(SubString, PlatformCodeStub);
3073 }; 3083 };
3074 3084
3075 class ToStringStub final : public PlatformCodeStub { 3085 class ToStringStub final : public PlatformCodeStub {
3076 public: 3086 public:
3077 explicit ToStringStub(Isolate* isolate) : PlatformCodeStub(isolate) {} 3087 explicit ToStringStub(Isolate* isolate) : PlatformCodeStub(isolate) {}
3078 3088
3079 DEFINE_CALL_INTERFACE_DESCRIPTOR(TypeConversion); 3089 DEFINE_CALL_INTERFACE_DESCRIPTOR(TypeConversion);
3080 DEFINE_PLATFORM_CODE_STUB(ToString, PlatformCodeStub); 3090 DEFINE_PLATFORM_CODE_STUB(ToString, PlatformCodeStub);
3081 }; 3091 };
(...skipping 21 matching lines...) Expand all
3103 #undef DEFINE_HYDROGEN_CODE_STUB 3113 #undef DEFINE_HYDROGEN_CODE_STUB
3104 #undef DEFINE_CODE_STUB 3114 #undef DEFINE_CODE_STUB
3105 #undef DEFINE_CODE_STUB_BASE 3115 #undef DEFINE_CODE_STUB_BASE
3106 3116
3107 extern Representation RepresentationFromType(Type* type); 3117 extern Representation RepresentationFromType(Type* type);
3108 3118
3109 } // namespace internal 3119 } // namespace internal
3110 } // namespace v8 3120 } // namespace v8
3111 3121
3112 #endif // V8_CODE_STUBS_H_ 3122 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/code-factory.cc ('k') | src/compiler/code-assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698