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

Unified Diff: src/code-stubs.h

Issue 384403002: StubCallInterfaceDescriptor takes a context register. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: More refinements. Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: src/code-stubs.h
diff --git a/src/code-stubs.h b/src/code-stubs.h
index c0ab7e9e5a17cdb243db3224d5636aef572e8880..e25e77ab8954a4125ffc7976c745ca85a9326e7a 100644
--- a/src/code-stubs.h
+++ b/src/code-stubs.h
@@ -271,7 +271,57 @@ class PlatformCodeStub : public CodeStub {
enum StubFunctionMode { NOT_JS_FUNCTION_STUB_MODE, JS_FUNCTION_STUB_MODE };
enum HandlerArgumentsMode { DONT_PASS_ARGUMENTS, PASS_ARGUMENTS };
-class CodeStubInterfaceDescriptor {
+class InterfaceDescriptor {
+ public:
+ bool initialized() const { return register_param_count_ >= 0; }
danno 2014/07/16 13:19:59 style: should be IsInitialized()
mvstanton 2014/07/17 09:04:05 Done.
+
+ int GetEnvironmentLength() const {
+ return register_param_count_;
+ }
danno 2014/07/16 13:19:59 I think with a little more "duplication", you can
mvstanton 2014/07/17 09:04:04 I fully factored this out so that customers who pr
+
+ int register_param_count() const { return register_param_count_; }
danno 2014/07/16 13:19:59 For consistency, make this GetRegisterParameterCou
mvstanton 2014/07/17 09:04:05 Done.
+
+ Register GetParameterRegister(int index) const {
+ return register_params_[index];
+ }
+
+ Representation GetParameterRepresentation(int index) const {
+ ASSERT(index < register_param_count_);
+ if (register_param_representations_.get() == NULL) {
+ return Representation::Tagged();
+ }
+
+ return register_param_representations_[index];
+ }
+
+ static const Register ContextRegister();
+
+ protected:
+ InterfaceDescriptor();
+ virtual ~InterfaceDescriptor() {}
+
+ void Initialize(int register_parameter_count, Register* registers,
+ Representation* register_param_representations);
+
+ private:
+ int register_param_count_;
+
+ // The Register params are allocated dynamically by the
+ // InterfaceDescriptor, and freed on destruction. This is because static
+ // arrays of Registers cause creation of runtime static initializers
+ // which we don't want.
+ SmartArrayPointer<Register> register_params_;
+ // Specifies Representations for the stub's parameter. Points to an array of
+ // Representations of the same length of the numbers of parameters to the
+ // stub, or if NULL (the default value), Representation of each parameter
+ // assumed to be Tagged().
+ SmartArrayPointer<Representation> register_param_representations_;
+
+ DISALLOW_COPY_AND_ASSIGN(InterfaceDescriptor);
+};
+
+
+class CodeStubInterfaceDescriptor: public InterfaceDescriptor {
public:
CodeStubInterfaceDescriptor();
@@ -287,11 +337,6 @@ class CodeStubInterfaceDescriptor {
int hint_stack_parameter_count = -1,
StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE,
HandlerArgumentsMode handler_mode = DONT_PASS_ARGUMENTS);
- bool initialized() const { return register_param_count_ >= 0; }
-
- int environment_length() const {
- return register_param_count_;
- }
void SetMissHandler(ExternalReference handler) {
miss_handler_ = handler;
@@ -310,78 +355,46 @@ class CodeStubInterfaceDescriptor {
return has_miss_handler_;
}
- Register GetParameterRegister(int index) const {
- return register_params_[index];
- }
-
- Representation GetRegisterParameterRepresentation(int index) const {
- ASSERT(index < register_param_count_);
- if (register_param_representations_.get() == NULL) {
- return Representation::Tagged();
- }
-
- return register_param_representations_[index];
- }
-
bool IsParameterCountRegister(int index) const {
return GetParameterRegister(index).is(stack_parameter_count_);
}
int GetHandlerParameterCount() const {
- int params = environment_length();
+ // Context is dealt with as a defined part of the frame, not as a parameter.
+ int params = GetEnvironmentLength() - 1;
if (handler_arguments_mode_ == PASS_ARGUMENTS) {
params += 1;
}
return params;
}
- int register_param_count() const { return register_param_count_; }
int hint_stack_parameter_count() const { return hint_stack_parameter_count_; }
Register stack_parameter_count() const { return stack_parameter_count_; }
StubFunctionMode function_mode() const { return function_mode_; }
Address deoptimization_handler() const { return deoptimization_handler_; }
- Representation* register_param_representations() const {
- return register_param_representations_.get();
- }
private:
- int register_param_count_;
-
Register stack_parameter_count_;
// If hint_stack_parameter_count_ > 0, the code stub can optimize the
// return sequence. Default value is -1, which means it is ignored.
int hint_stack_parameter_count_;
StubFunctionMode function_mode_;
- // The Register params are allocated dynamically by the
- // CodeStubInterfaceDescriptor, and freed on destruction. This is because
- // static arrays of Registers cause creation of runtime static initializers
- // which we don't want.
- SmartArrayPointer<Register> register_params_;
- // Specifies Representations for the stub's parameter. Points to an array of
- // Representations of the same length of the numbers of parameters to the
- // stub, or if NULL (the default value), Representation of each parameter
- // assumed to be Tagged().
- SmartArrayPointer<Representation> register_param_representations_;
Address deoptimization_handler_;
HandlerArgumentsMode handler_arguments_mode_;
ExternalReference miss_handler_;
bool has_miss_handler_;
- DISALLOW_COPY_AND_ASSIGN(CodeStubInterfaceDescriptor);
};
class PlatformCallInterfaceDescriptor;
-class CallInterfaceDescriptor {
+class CallInterfaceDescriptor: public InterfaceDescriptor {
public:
CallInterfaceDescriptor()
- : register_param_count_(-1),
- register_params_(NULL),
- param_representations_(NULL),
- platform_specific_descriptor_(NULL) { }
+ : platform_specific_descriptor_(NULL) { }
// A copy of the passed in registers and param_representations is made
// and owned by the CallInterfaceDescriptor.
@@ -394,28 +407,11 @@ class CallInterfaceDescriptor {
Representation* param_representations,
PlatformCallInterfaceDescriptor* platform_descriptor = NULL);
- bool initialized() const { return register_param_count_ >= 0; }
-
- int environment_length() const {
- return register_param_count_;
- }
-
- Representation GetParameterRepresentation(int index) const {
- return param_representations_[index];
- }
-
- Register GetParameterRegister(int index) const {
- return register_params_[index];
- }
-
PlatformCallInterfaceDescriptor* platform_specific_descriptor() const {
return platform_specific_descriptor_;
}
private:
- int register_param_count_;
- SmartArrayPointer<Register> register_params_;
- SmartArrayPointer<Representation> param_representations_;
PlatformCallInterfaceDescriptor* platform_specific_descriptor_;
};
« no previous file with comments | « src/arm64/lithium-arm64.h ('k') | src/code-stubs.cc » ('j') | src/code-stubs-hydrogen.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698