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

Unified Diff: src/code-stubs.h

Issue 352583002: The IC exposes a register definition. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed comments. Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/arm64/stub-cache-arm64.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/code-stubs.h
diff --git a/src/code-stubs.h b/src/code-stubs.h
index b243b56093167772c395b22892603a7985964c93..7f4d91012731eb26ac8ce5451daf29dc79e05ec6 100644
--- a/src/code-stubs.h
+++ b/src/code-stubs.h
@@ -266,25 +266,22 @@ class PlatformCodeStub : public CodeStub {
enum StubFunctionMode { NOT_JS_FUNCTION_STUB_MODE, JS_FUNCTION_STUB_MODE };
enum HandlerArgumentsMode { DONT_PASS_ARGUMENTS, PASS_ARGUMENTS };
-struct CodeStubInterfaceDescriptor {
+class CodeStubInterfaceDescriptor {
+ public:
CodeStubInterfaceDescriptor();
- 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_;
- 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()
- Representation* register_param_representations_;
-
- Address deoptimization_handler_;
- HandlerArgumentsMode handler_arguments_mode_;
+ void Initialize(int register_parameter_count, Register* registers,
+ Address deoptimization_handler = NULL,
+ Representation* register_param_representations = NULL,
+ int hint_stack_parameter_count = -1,
+ StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE);
+ void Initialize(int register_parameter_count, Register* registers,
+ Register stack_parameter_count,
+ Address deoptimization_handler = NULL,
+ Representation* register_param_representations = NULL,
+ 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 {
@@ -299,12 +296,12 @@ struct CodeStubInterfaceDescriptor {
ASSERT(!stack_parameter_count_.is_valid());
}
- ExternalReference miss_handler() {
+ ExternalReference miss_handler() const {
ASSERT(has_miss_handler_);
return miss_handler_;
}
- bool has_miss_handler() {
+ bool has_miss_handler() const {
return has_miss_handler_;
}
@@ -312,11 +309,20 @@ struct CodeStubInterfaceDescriptor {
return register_params_[index];
}
- bool IsParameterCountRegister(int 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() {
+ int GetHandlerParameterCount() const {
int params = environment_length();
if (handler_arguments_mode_ == PASS_ARGUMENTS) {
params += 1;
@@ -324,9 +330,40 @@ struct CodeStubInterfaceDescriptor {
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);
};
« no previous file with comments | « src/arm64/stub-cache-arm64.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698