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

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

Issue 523583002: Multiple stubs can point to the same calling convention. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Ports. Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « src/arm64/interface-descriptors-arm64.cc ('k') | src/code-stubs.cc » ('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/codegen.h" 10 #include "src/codegen.h"
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 protected: 274 protected:
275 // Generates the assembler code for the stub. 275 // Generates the assembler code for the stub.
276 virtual void Generate(MacroAssembler* masm) = 0; 276 virtual void Generate(MacroAssembler* masm) = 0;
277 }; 277 };
278 278
279 279
280 enum StubFunctionMode { NOT_JS_FUNCTION_STUB_MODE, JS_FUNCTION_STUB_MODE }; 280 enum StubFunctionMode { NOT_JS_FUNCTION_STUB_MODE, JS_FUNCTION_STUB_MODE };
281 enum HandlerArgumentsMode { DONT_PASS_ARGUMENTS, PASS_ARGUMENTS }; 281 enum HandlerArgumentsMode { DONT_PASS_ARGUMENTS, PASS_ARGUMENTS };
282 282
283 283
284 class CodeStubInterfaceDescriptor: public InterfaceDescriptor { 284 class CodeStubInterfaceDescriptor {
285 public: 285 public:
286 CodeStubInterfaceDescriptor(); 286 CodeStubInterfaceDescriptor();
287 287
288 void Initialize(CodeStub::Major major, int register_parameter_count, 288 void Initialize(CodeStub::Major major,
289 Register* registers, Address deoptimization_handler = NULL, 289 CallInterfaceDescriptor* call_descriptor,
290 Representation* register_param_representations = NULL, 290 Address deoptimization_handler = NULL,
291 int hint_stack_parameter_count = -1, 291 int hint_stack_parameter_count = -1,
292 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE); 292 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE);
293 void Initialize(CodeStub::Major major, int register_parameter_count, 293 void Initialize(CodeStub::Major major,
294 Register* registers, Register stack_parameter_count, 294 CallInterfaceDescriptor* call_descriptor,
295 Register stack_parameter_count,
295 Address deoptimization_handler = NULL, 296 Address deoptimization_handler = NULL,
296 Representation* register_param_representations = NULL,
297 int hint_stack_parameter_count = -1, 297 int hint_stack_parameter_count = -1,
298 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE, 298 StubFunctionMode function_mode = NOT_JS_FUNCTION_STUB_MODE,
299 HandlerArgumentsMode handler_mode = DONT_PASS_ARGUMENTS); 299 HandlerArgumentsMode handler_mode = DONT_PASS_ARGUMENTS);
300 300
301 void SetMissHandler(ExternalReference handler) { 301 void SetMissHandler(ExternalReference handler) {
302 miss_handler_ = handler; 302 miss_handler_ = handler;
303 has_miss_handler_ = true; 303 has_miss_handler_ = true;
304 // Our miss handler infrastructure doesn't currently support 304 // Our miss handler infrastructure doesn't currently support
305 // variable stack parameter counts. 305 // variable stack parameter counts.
306 DCHECK(!stack_parameter_count_.is_valid()); 306 DCHECK(!stack_parameter_count_.is_valid());
307 } 307 }
308 308
309 bool IsInitialized() const { return call_descriptor_ != NULL; }
310
311 CallInterfaceDescriptor* call_descriptor() const { return call_descriptor_; }
312
313 int GetEnvironmentLength() const {
314 return call_descriptor()->GetEnvironmentLength();
315 }
316
317 int GetRegisterParameterCount() const {
318 return call_descriptor()->GetRegisterParameterCount();
319 }
320
321 Register GetParameterRegister(int index) const {
322 return call_descriptor()->GetParameterRegister(index);
323 }
324
325 Representation GetParameterRepresentation(int index) const {
326 return call_descriptor()->GetParameterRepresentation(index);
327 }
328
329 int GetEnvironmentParameterCount() const {
330 return call_descriptor()->GetEnvironmentParameterCount();
331 }
332
333 Register GetEnvironmentParameterRegister(int index) const {
334 return call_descriptor()->GetEnvironmentParameterRegister(index);
335 }
336
337 Representation GetEnvironmentParameterRepresentation(int index) const {
338 return call_descriptor()->GetEnvironmentParameterRepresentation(index);
339 }
340
309 ExternalReference miss_handler() const { 341 ExternalReference miss_handler() const {
310 DCHECK(has_miss_handler_); 342 DCHECK(has_miss_handler_);
311 return miss_handler_; 343 return miss_handler_;
312 } 344 }
313 345
314 bool has_miss_handler() const { 346 bool has_miss_handler() const {
315 return has_miss_handler_; 347 return has_miss_handler_;
316 } 348 }
317 349
318 bool IsEnvironmentParameterCountRegister(int index) const { 350 bool IsEnvironmentParameterCountRegister(int index) const {
319 return GetEnvironmentParameterRegister(index).is(stack_parameter_count_); 351 return call_descriptor()->GetEnvironmentParameterRegister(index).is(
352 stack_parameter_count_);
320 } 353 }
321 354
322 int GetHandlerParameterCount() const { 355 int GetHandlerParameterCount() const {
323 int params = GetEnvironmentParameterCount(); 356 int params = call_descriptor()->GetEnvironmentParameterCount();
324 if (handler_arguments_mode_ == PASS_ARGUMENTS) { 357 if (handler_arguments_mode_ == PASS_ARGUMENTS) {
325 params += 1; 358 params += 1;
326 } 359 }
327 return params; 360 return params;
328 } 361 }
329 362
330 int hint_stack_parameter_count() const { return hint_stack_parameter_count_; } 363 int hint_stack_parameter_count() const { return hint_stack_parameter_count_; }
331 Register stack_parameter_count() const { return stack_parameter_count_; } 364 Register stack_parameter_count() const { return stack_parameter_count_; }
332 StubFunctionMode function_mode() const { return function_mode_; } 365 StubFunctionMode function_mode() const { return function_mode_; }
333 Address deoptimization_handler() const { return deoptimization_handler_; } 366 Address deoptimization_handler() const { return deoptimization_handler_; }
334 CodeStub::Major MajorKey() const { return major_; } 367 CodeStub::Major MajorKey() const { return major_; }
335 368
336 private: 369 private:
370 CallInterfaceDescriptor* call_descriptor_;
337 Register stack_parameter_count_; 371 Register stack_parameter_count_;
338 // If hint_stack_parameter_count_ > 0, the code stub can optimize the 372 // If hint_stack_parameter_count_ > 0, the code stub can optimize the
339 // return sequence. Default value is -1, which means it is ignored. 373 // return sequence. Default value is -1, which means it is ignored.
340 int hint_stack_parameter_count_; 374 int hint_stack_parameter_count_;
341 StubFunctionMode function_mode_; 375 StubFunctionMode function_mode_;
342 376
343 Address deoptimization_handler_; 377 Address deoptimization_handler_;
344 HandlerArgumentsMode handler_arguments_mode_; 378 HandlerArgumentsMode handler_arguments_mode_;
345 379
346 ExternalReference miss_handler_; 380 ExternalReference miss_handler_;
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 kCallSiteInlineCheck = 1 << 1, 698 kCallSiteInlineCheck = 1 << 1,
665 kReturnTrueFalseObject = 1 << 2 699 kReturnTrueFalseObject = 1 << 2
666 }; 700 };
667 701
668 InstanceofStub(Isolate* isolate, Flags flags) : PlatformCodeStub(isolate) { 702 InstanceofStub(Isolate* isolate, Flags flags) : PlatformCodeStub(isolate) {
669 minor_key_ = FlagBits::encode(flags); 703 minor_key_ = FlagBits::encode(flags);
670 } 704 }
671 705
672 void Generate(MacroAssembler* masm); 706 void Generate(MacroAssembler* masm);
673 707
674 static Register left(); 708 static Register left() { return InstanceofConvention::left(); }
675 static Register right(); 709 static Register right() { return InstanceofConvention::right(); }
676 710
677 virtual void InitializeInterfaceDescriptor( 711 virtual void InitializeInterfaceDescriptor(
678 CodeStubInterfaceDescriptor* descriptor); 712 CodeStubInterfaceDescriptor* descriptor);
679 713
680 private: 714 private:
681 virtual Major MajorKey() const V8_OVERRIDE { return Instanceof; } 715 virtual Major MajorKey() const V8_OVERRIDE { return Instanceof; }
682 716
683 Flags flags() const { return FlagBits::decode(minor_key_); } 717 Flags flags() const { return FlagBits::decode(minor_key_); }
684 718
685 bool HasArgsInRegisters() const { return (flags() & kArgsInRegisters) != 0; } 719 bool HasArgsInRegisters() const { return (flags() & kArgsInRegisters) != 0; }
(...skipping 1881 matching lines...) Expand 10 before | Expand all | Expand 10 after
2567 2601
2568 void Generate(MacroAssembler* masm); 2602 void Generate(MacroAssembler* masm);
2569 2603
2570 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub); 2604 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub);
2571 }; 2605 };
2572 2606
2573 2607
2574 } } // namespace v8::internal 2608 } } // namespace v8::internal
2575 2609
2576 #endif // V8_CODE_STUBS_H_ 2610 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/arm64/interface-descriptors-arm64.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698