OLD | NEW |
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_FULL_CODEGEN_FULL_CODEGEN_H_ | 5 #ifndef V8_FULL_CODEGEN_FULL_CODEGEN_H_ |
6 #define V8_FULL_CODEGEN_FULL_CODEGEN_H_ | 6 #define V8_FULL_CODEGEN_FULL_CODEGEN_H_ |
7 | 7 |
8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
9 #include "src/assert-scope.h" | 9 #include "src/assert-scope.h" |
10 #include "src/ast/ast.h" | 10 #include "src/ast/ast.h" |
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 void EmitReturnSequence(); | 460 void EmitReturnSequence(); |
461 void EmitProfilingCounterHandlingForReturnSequence(bool is_tail_call); | 461 void EmitProfilingCounterHandlingForReturnSequence(bool is_tail_call); |
462 | 462 |
463 // Platform-specific code sequences for calls | 463 // Platform-specific code sequences for calls |
464 void EmitCall(Call* expr, ConvertReceiverMode = ConvertReceiverMode::kAny); | 464 void EmitCall(Call* expr, ConvertReceiverMode = ConvertReceiverMode::kAny); |
465 void EmitSuperConstructorCall(Call* expr); | 465 void EmitSuperConstructorCall(Call* expr); |
466 void EmitCallWithLoadIC(Call* expr); | 466 void EmitCallWithLoadIC(Call* expr); |
467 void EmitSuperCallWithLoadIC(Call* expr); | 467 void EmitSuperCallWithLoadIC(Call* expr); |
468 void EmitKeyedCallWithLoadIC(Call* expr, Expression* key); | 468 void EmitKeyedCallWithLoadIC(Call* expr, Expression* key); |
469 void EmitKeyedSuperCallWithLoadIC(Call* expr); | 469 void EmitKeyedSuperCallWithLoadIC(Call* expr); |
470 void EmitPossiblyEvalCall(Call* expr); | |
471 | 470 |
472 #define FOR_EACH_FULL_CODE_INTRINSIC(F) \ | 471 #define FOR_EACH_FULL_CODE_INTRINSIC(F) \ |
473 F(IsSmi) \ | 472 F(IsSmi) \ |
474 F(IsArray) \ | 473 F(IsArray) \ |
475 F(IsTypedArray) \ | 474 F(IsTypedArray) \ |
476 F(IsRegExp) \ | 475 F(IsRegExp) \ |
477 F(IsJSProxy) \ | 476 F(IsJSProxy) \ |
478 F(Call) \ | 477 F(Call) \ |
479 F(NewObject) \ | 478 F(NewObject) \ |
480 F(IsJSReceiver) \ | 479 F(IsJSReceiver) \ |
(...skipping 18 matching lines...) Expand all Loading... |
499 | 498 |
500 void EmitIntrinsicAsStubCall(CallRuntime* expr, const Callable& callable); | 499 void EmitIntrinsicAsStubCall(CallRuntime* expr, const Callable& callable); |
501 | 500 |
502 // Emits call to respective code stub. | 501 // Emits call to respective code stub. |
503 void EmitHasProperty(); | 502 void EmitHasProperty(); |
504 | 503 |
505 // Platform-specific code for restoring context from current JS frame. | 504 // Platform-specific code for restoring context from current JS frame. |
506 void RestoreContext(); | 505 void RestoreContext(); |
507 | 506 |
508 // Platform-specific code for loading variables. | 507 // Platform-specific code for loading variables. |
509 void EmitLoadGlobalCheckExtensions(VariableProxy* proxy, | |
510 TypeofMode typeof_mode, Label* slow); | |
511 MemOperand ContextSlotOperandCheckExtensions(Variable* var, Label* slow); | |
512 void EmitDynamicLookupFastCase(VariableProxy* proxy, TypeofMode typeof_mode, | |
513 Label* slow, Label* done); | |
514 void EmitGlobalVariableLoad(VariableProxy* proxy, TypeofMode typeof_mode); | 508 void EmitGlobalVariableLoad(VariableProxy* proxy, TypeofMode typeof_mode); |
515 void EmitVariableLoad(VariableProxy* proxy, | 509 void EmitVariableLoad(VariableProxy* proxy, |
516 TypeofMode typeof_mode = NOT_INSIDE_TYPEOF); | 510 TypeofMode typeof_mode = NOT_INSIDE_TYPEOF); |
517 | 511 |
518 void EmitAccessor(ObjectLiteralProperty* property); | 512 void EmitAccessor(ObjectLiteralProperty* property); |
519 | 513 |
520 // Expects the arguments and the function already pushed. | |
521 void EmitResolvePossiblyDirectEval(Call* expr); | |
522 | |
523 // Platform-specific support for allocating a new closure based on | 514 // Platform-specific support for allocating a new closure based on |
524 // the given function info. | 515 // the given function info. |
525 void EmitNewClosure(Handle<SharedFunctionInfo> info, bool pretenure); | 516 void EmitNewClosure(Handle<SharedFunctionInfo> info, bool pretenure); |
526 | 517 |
527 // Re-usable portions of CallRuntime | 518 // Re-usable portions of CallRuntime |
528 void EmitLoadJSRuntimeFunction(CallRuntime* expr); | 519 void EmitLoadJSRuntimeFunction(CallRuntime* expr); |
529 void EmitCallJSRuntimeFunction(CallRuntime* expr); | 520 void EmitCallJSRuntimeFunction(CallRuntime* expr); |
530 | 521 |
531 // Load a value from a named property. | 522 // Load a value from a named property. |
532 // The receiver is left on the stack by the IC. | 523 // The receiver is left on the stack by the IC. |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
691 void StoreToFrameField(int frame_offset, Register value); | 682 void StoreToFrameField(int frame_offset, Register value); |
692 | 683 |
693 // Load a value from the current context. Indices are defined as an enum | 684 // Load a value from the current context. Indices are defined as an enum |
694 // in v8::internal::Context. | 685 // in v8::internal::Context. |
695 void LoadContextField(Register dst, int context_index); | 686 void LoadContextField(Register dst, int context_index); |
696 | 687 |
697 // Push the function argument for the runtime functions PushWithContext | 688 // Push the function argument for the runtime functions PushWithContext |
698 // and PushCatchContext. | 689 // and PushCatchContext. |
699 void PushFunctionArgumentForContextAllocation(); | 690 void PushFunctionArgumentForContextAllocation(); |
700 | 691 |
701 void PushCalleeAndWithBaseObject(Call* expr); | |
702 | |
703 // AST node visit functions. | 692 // AST node visit functions. |
704 #define DECLARE_VISIT(type) void Visit##type(type* node); | 693 #define DECLARE_VISIT(type) void Visit##type(type* node); |
705 AST_NODE_LIST(DECLARE_VISIT) | 694 AST_NODE_LIST(DECLARE_VISIT) |
706 #undef DECLARE_VISIT | 695 #undef DECLARE_VISIT |
707 | 696 |
708 void VisitComma(BinaryOperation* expr); | 697 void VisitComma(BinaryOperation* expr); |
709 void VisitLogicalExpression(BinaryOperation* expr); | 698 void VisitLogicalExpression(BinaryOperation* expr); |
710 void VisitArithmeticExpression(BinaryOperation* expr); | 699 void VisitArithmeticExpression(BinaryOperation* expr); |
711 | 700 |
712 void VisitForTypeofValue(Expression* expr); | 701 void VisitForTypeofValue(Expression* expr); |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1018 Address start_; | 1007 Address start_; |
1019 Address instruction_start_; | 1008 Address instruction_start_; |
1020 uint32_t length_; | 1009 uint32_t length_; |
1021 }; | 1010 }; |
1022 | 1011 |
1023 | 1012 |
1024 } // namespace internal | 1013 } // namespace internal |
1025 } // namespace v8 | 1014 } // namespace v8 |
1026 | 1015 |
1027 #endif // V8_FULL_CODEGEN_FULL_CODEGEN_H_ | 1016 #endif // V8_FULL_CODEGEN_FULL_CODEGEN_H_ |
OLD | NEW |