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

Side by Side Diff: src/x87/macro-assembler-x87.h

Issue 861053002: X87: move CallApiFunctionAndReturn to code-stubs-* (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 11 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
« no previous file with comments | « src/x87/code-stubs-x87.cc ('k') | src/x87/macro-assembler-x87.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_X87_MACRO_ASSEMBLER_X87_H_ 5 #ifndef V8_X87_MACRO_ASSEMBLER_X87_H_
6 #define V8_X87_MACRO_ASSEMBLER_X87_H_ 6 #define V8_X87_MACRO_ASSEMBLER_X87_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/bailout-reason.h" 9 #include "src/bailout-reason.h"
10 #include "src/frames.h" 10 #include "src/frames.h"
(...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 void PrepareCallCFunction(int num_arguments, Register scratch); 748 void PrepareCallCFunction(int num_arguments, Register scratch);
749 749
750 // Calls a C function and cleans up the space for arguments allocated 750 // Calls a C function and cleans up the space for arguments allocated
751 // by PrepareCallCFunction. The called function is not allowed to trigger a 751 // by PrepareCallCFunction. The called function is not allowed to trigger a
752 // garbage collection, since that might move the code and invalidate the 752 // garbage collection, since that might move the code and invalidate the
753 // return address (unless this is somehow accounted for by the called 753 // return address (unless this is somehow accounted for by the called
754 // function). 754 // function).
755 void CallCFunction(ExternalReference function, int num_arguments); 755 void CallCFunction(ExternalReference function, int num_arguments);
756 void CallCFunction(Register function, int num_arguments); 756 void CallCFunction(Register function, int num_arguments);
757 757
758 // Prepares stack to put arguments (aligns and so on). Reserves
759 // space for return value if needed (assumes the return value is a handle).
760 // Arguments must be stored in ApiParameterOperand(0), ApiParameterOperand(1)
761 // etc. Saves context (esi). If space was reserved for return value then
762 // stores the pointer to the reserved slot into esi.
763 void PrepareCallApiFunction(int argc);
764
765 // Calls an API function. Allocates HandleScope, extracts returned value
766 // from handle and propagates exceptions. Clobbers ebx, edi and
767 // caller-save registers. Restores context. On return removes
768 // stack_space * kPointerSize (GCed).
769 void CallApiFunctionAndReturn(Register function_address,
770 ExternalReference thunk_ref,
771 Operand thunk_last_arg, int stack_space,
772 Operand* stack_space_operand,
773 Operand return_value_operand,
774 Operand* context_restore_operand);
775
776 // Jump to a runtime routine. 758 // Jump to a runtime routine.
777 void JumpToExternalReference(const ExternalReference& ext); 759 void JumpToExternalReference(const ExternalReference& ext);
778 760
779 // --------------------------------------------------------------------------- 761 // ---------------------------------------------------------------------------
780 // Utilities 762 // Utilities
781 763
782 void Ret(); 764 void Ret();
783 765
784 // Return and drop arguments from stack, where the number of arguments 766 // Return and drop arguments from stack, where the number of arguments
785 // may be bigger than 2^16 - 1. Requires a scratch register. 767 // may be bigger than 2^16 - 1. Requires a scratch register.
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
1044 inline Operand ContextOperand(Register context, int index) { 1026 inline Operand ContextOperand(Register context, int index) {
1045 return Operand(context, Context::SlotOffset(index)); 1027 return Operand(context, Context::SlotOffset(index));
1046 } 1028 }
1047 1029
1048 1030
1049 inline Operand GlobalObjectOperand() { 1031 inline Operand GlobalObjectOperand() {
1050 return ContextOperand(esi, Context::GLOBAL_OBJECT_INDEX); 1032 return ContextOperand(esi, Context::GLOBAL_OBJECT_INDEX);
1051 } 1033 }
1052 1034
1053 1035
1054 // Generates an Operand for saving parameters after PrepareCallApiFunction.
1055 Operand ApiParameterOperand(int index);
1056
1057
1058 #ifdef GENERATED_CODE_COVERAGE 1036 #ifdef GENERATED_CODE_COVERAGE
1059 extern void LogGeneratedCodeCoverage(const char* file_line); 1037 extern void LogGeneratedCodeCoverage(const char* file_line);
1060 #define CODE_COVERAGE_STRINGIFY(x) #x 1038 #define CODE_COVERAGE_STRINGIFY(x) #x
1061 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) 1039 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
1062 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) 1040 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__)
1063 #define ACCESS_MASM(masm) { \ 1041 #define ACCESS_MASM(masm) { \
1064 byte* ia32_coverage_function = \ 1042 byte* ia32_coverage_function = \
1065 reinterpret_cast<byte*>(FUNCTION_ADDR(LogGeneratedCodeCoverage)); \ 1043 reinterpret_cast<byte*>(FUNCTION_ADDR(LogGeneratedCodeCoverage)); \
1066 masm->pushfd(); \ 1044 masm->pushfd(); \
1067 masm->pushad(); \ 1045 masm->pushad(); \
1068 masm->push(Immediate(reinterpret_cast<int>(&__FILE_LINE__))); \ 1046 masm->push(Immediate(reinterpret_cast<int>(&__FILE_LINE__))); \
1069 masm->call(ia32_coverage_function, RelocInfo::RUNTIME_ENTRY); \ 1047 masm->call(ia32_coverage_function, RelocInfo::RUNTIME_ENTRY); \
1070 masm->pop(eax); \ 1048 masm->pop(eax); \
1071 masm->popad(); \ 1049 masm->popad(); \
1072 masm->popfd(); \ 1050 masm->popfd(); \
1073 } \ 1051 } \
1074 masm-> 1052 masm->
1075 #else 1053 #else
1076 #define ACCESS_MASM(masm) masm-> 1054 #define ACCESS_MASM(masm) masm->
1077 #endif 1055 #endif
1078 1056
1079 1057
1080 } } // namespace v8::internal 1058 } } // namespace v8::internal
1081 1059
1082 #endif // V8_X87_MACRO_ASSEMBLER_X87_H_ 1060 #endif // V8_X87_MACRO_ASSEMBLER_X87_H_
OLDNEW
« no previous file with comments | « src/x87/code-stubs-x87.cc ('k') | src/x87/macro-assembler-x87.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698