| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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_CALL_INTERFACE_DESCRIPTOR_H_ | 5 #ifndef V8_CALL_INTERFACE_DESCRIPTOR_H_ |
| 6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_ | 6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_ |
| 7 | 7 |
| 8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
| 9 #include "src/macro-assembler.h" | 9 #include "src/macro-assembler.h" |
| 10 | 10 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 class CallInterfaceDescriptorData { | 49 class CallInterfaceDescriptorData { |
| 50 public: | 50 public: |
| 51 CallInterfaceDescriptorData() : register_param_count_(-1) {} | 51 CallInterfaceDescriptorData() : register_param_count_(-1) {} |
| 52 | 52 |
| 53 // A copy of the passed in registers and param_representations is made | 53 // A copy of the passed in registers and param_representations is made |
| 54 // and owned by the CallInterfaceDescriptorData. | 54 // and owned by the CallInterfaceDescriptorData. |
| 55 | 55 |
| 56 // TODO(mvstanton): Instead of taking parallel arrays register and | 56 // TODO(mvstanton): Instead of taking parallel arrays register and |
| 57 // param_representations, how about a struct that puts the representation | 57 // param_representations, how about a struct that puts the representation |
| 58 // and register side by side (eg, RegRep(r1, Representation::Tagged()). | 58 // and register side by side (eg, RegRep(r1, Representation::Tagged()). |
| 59 // The same should go for the CodeStubInterfaceDescriptor class. | 59 // The same should go for the CodeStubDescriptor class. |
| 60 void Initialize(int register_parameter_count, Register* registers, | 60 void Initialize(int register_parameter_count, Register* registers, |
| 61 Representation* param_representations, | 61 Representation* param_representations, |
| 62 PlatformInterfaceDescriptor* platform_descriptor = NULL); | 62 PlatformInterfaceDescriptor* platform_descriptor = NULL); |
| 63 | 63 |
| 64 bool IsInitialized() const { return register_param_count_ >= 0; } | 64 bool IsInitialized() const { return register_param_count_ >= 0; } |
| 65 | 65 |
| 66 int register_param_count() const { return register_param_count_; } | 66 int register_param_count() const { return register_param_count_; } |
| 67 Register register_param(int index) const { return register_params_[index]; } | 67 Register register_param(int index) const { return register_params_[index]; } |
| 68 Register* register_params() const { return register_params_.get(); } | 68 Register* register_params() const { return register_params_.get(); } |
| 69 Representation register_param_representation(int index) const { | 69 Representation register_param_representation(int index) const { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 }; | 107 }; |
| 108 | 108 |
| 109 | 109 |
| 110 class CallInterfaceDescriptor { | 110 class CallInterfaceDescriptor { |
| 111 public: | 111 public: |
| 112 CallInterfaceDescriptor() : data_(NULL) {} | 112 CallInterfaceDescriptor() : data_(NULL) {} |
| 113 | 113 |
| 114 CallInterfaceDescriptor(Isolate* isolate, CallDescriptors::Key key) | 114 CallInterfaceDescriptor(Isolate* isolate, CallDescriptors::Key key) |
| 115 : data_(isolate->call_descriptor_data(key)) {} | 115 : data_(isolate->call_descriptor_data(key)) {} |
| 116 | 116 |
| 117 bool IsInitialized() const { | |
| 118 return data() != NULL && data()->IsInitialized(); | |
| 119 } | |
| 120 | |
| 121 int GetEnvironmentLength() const { return data()->register_param_count(); } | 117 int GetEnvironmentLength() const { return data()->register_param_count(); } |
| 122 | 118 |
| 123 int GetRegisterParameterCount() const { | 119 int GetRegisterParameterCount() const { |
| 124 return data()->register_param_count(); | 120 return data()->register_param_count(); |
| 125 } | 121 } |
| 126 | 122 |
| 127 Register GetParameterRegister(int index) const { | 123 Register GetParameterRegister(int index) const { |
| 128 return data()->register_param(index); | 124 return data()->register_param(index); |
| 129 } | 125 } |
| 130 | 126 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 151 return GetParameterRepresentation(index + 1); | 147 return GetParameterRepresentation(index + 1); |
| 152 } | 148 } |
| 153 | 149 |
| 154 // Some platforms have extra information to associate with the descriptor. | 150 // Some platforms have extra information to associate with the descriptor. |
| 155 PlatformInterfaceDescriptor* platform_specific_descriptor() const { | 151 PlatformInterfaceDescriptor* platform_specific_descriptor() const { |
| 156 return data()->platform_specific_descriptor(); | 152 return data()->platform_specific_descriptor(); |
| 157 } | 153 } |
| 158 | 154 |
| 159 static const Register ContextRegister(); | 155 static const Register ContextRegister(); |
| 160 | 156 |
| 157 const char* DebugName(Isolate* isolate); |
| 158 |
| 161 protected: | 159 protected: |
| 162 const CallInterfaceDescriptorData* data() const { return data_; } | 160 const CallInterfaceDescriptorData* data() const { return data_; } |
| 163 | 161 |
| 164 private: | 162 private: |
| 165 const CallInterfaceDescriptorData* data_; | 163 const CallInterfaceDescriptorData* data_; |
| 166 }; | 164 }; |
| 167 | 165 |
| 168 | 166 |
| 169 #define DECLARE_DESCRIPTOR(name) \ | 167 #define DECLARE_DESCRIPTOR(name) \ |
| 170 explicit name(Isolate* isolate) : CallInterfaceDescriptor(isolate, key()) { \ | 168 explicit name(Isolate* isolate) : CallInterfaceDescriptor(isolate, key()) { \ |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 405 } // namespace v8::internal | 403 } // namespace v8::internal |
| 406 | 404 |
| 407 | 405 |
| 408 #if V8_TARGET_ARCH_ARM64 | 406 #if V8_TARGET_ARCH_ARM64 |
| 409 #include "src/arm64/interface-descriptors-arm64.h" | 407 #include "src/arm64/interface-descriptors-arm64.h" |
| 410 #elif V8_TARGET_ARCH_ARM | 408 #elif V8_TARGET_ARCH_ARM |
| 411 #include "src/arm/interface-descriptors-arm.h" | 409 #include "src/arm/interface-descriptors-arm.h" |
| 412 #endif | 410 #endif |
| 413 | 411 |
| 414 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ | 412 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ |
| OLD | NEW |