OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 5 #ifndef V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 6 #define V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
(...skipping 1060 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1071 Register first_object_instance_type, Register second_object_instance_type, | 1071 Register first_object_instance_type, Register second_object_instance_type, |
1072 Register scratch1, Register scratch2, Label* failure); | 1072 Register scratch1, Register scratch2, Label* failure); |
1073 | 1073 |
1074 void JumpIfNotUniqueNameInstanceType(Register type, Label* not_unique_name); | 1074 void JumpIfNotUniqueNameInstanceType(Register type, Label* not_unique_name); |
1075 | 1075 |
1076 // ---- Calling / Jumping helpers ---- | 1076 // ---- Calling / Jumping helpers ---- |
1077 | 1077 |
1078 // This is required for compatibility in architecture indepenedant code. | 1078 // This is required for compatibility in architecture indepenedant code. |
1079 inline void jmp(Label* L) { B(L); } | 1079 inline void jmp(Label* L) { B(L); } |
1080 | 1080 |
1081 // Passes thrown value to the handler of top of the try handler chain. | |
1082 // Register value must be x0. | |
1083 void Throw(Register value, | |
1084 Register scratch1, | |
1085 Register scratch2, | |
1086 Register scratch3, | |
1087 Register scratch4); | |
1088 | |
1089 // Propagates an uncatchable exception to the top of the current JS stack's | |
1090 // handler chain. Register value must be x0. | |
1091 void ThrowUncatchable(Register value, | |
1092 Register scratch1, | |
1093 Register scratch2, | |
1094 Register scratch3, | |
1095 Register scratch4); | |
1096 | |
1097 void CallStub(CodeStub* stub, TypeFeedbackId ast_id = TypeFeedbackId::None()); | 1081 void CallStub(CodeStub* stub, TypeFeedbackId ast_id = TypeFeedbackId::None()); |
1098 void TailCallStub(CodeStub* stub); | 1082 void TailCallStub(CodeStub* stub); |
1099 | 1083 |
1100 void CallRuntime(const Runtime::Function* f, | 1084 void CallRuntime(const Runtime::Function* f, |
1101 int num_arguments, | 1085 int num_arguments, |
1102 SaveFPRegsMode save_doubles = kDontSaveFPRegs); | 1086 SaveFPRegsMode save_doubles = kDontSaveFPRegs); |
1103 | 1087 |
1104 void CallRuntime(Runtime::FunctionId id, | 1088 void CallRuntime(Runtime::FunctionId id, |
1105 int num_arguments, | 1089 int num_arguments, |
1106 SaveFPRegsMode save_doubles = kDontSaveFPRegs) { | 1090 SaveFPRegsMode save_doubles = kDontSaveFPRegs) { |
(...skipping 961 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2068 // Call Printf. On a native build, a simple call will be generated, but if the | 2052 // Call Printf. On a native build, a simple call will be generated, but if the |
2069 // simulator is being used then a suitable pseudo-instruction is used. The | 2053 // simulator is being used then a suitable pseudo-instruction is used. The |
2070 // arguments and stack (csp) must be prepared by the caller as for a normal | 2054 // arguments and stack (csp) must be prepared by the caller as for a normal |
2071 // AAPCS64 call to 'printf'. | 2055 // AAPCS64 call to 'printf'. |
2072 // | 2056 // |
2073 // The 'args' argument should point to an array of variable arguments in their | 2057 // The 'args' argument should point to an array of variable arguments in their |
2074 // proper PCS registers (and in calling order). The argument registers can | 2058 // proper PCS registers (and in calling order). The argument registers can |
2075 // have mixed types. The format string (x0) should not be included. | 2059 // have mixed types. The format string (x0) should not be included. |
2076 void CallPrintf(int arg_count = 0, const CPURegister * args = NULL); | 2060 void CallPrintf(int arg_count = 0, const CPURegister * args = NULL); |
2077 | 2061 |
2078 // Helper for throwing exceptions. Compute a handler address and jump to | |
2079 // it. See the implementation for register usage. | |
2080 void JumpToHandlerEntry(Register exception, | |
2081 Register object, | |
2082 Register state, | |
2083 Register scratch1, | |
2084 Register scratch2); | |
2085 | |
2086 // Helper for implementing JumpIfNotInNewSpace and JumpIfInNewSpace. | 2062 // Helper for implementing JumpIfNotInNewSpace and JumpIfInNewSpace. |
2087 void InNewSpace(Register object, | 2063 void InNewSpace(Register object, |
2088 Condition cond, // eq for new space, ne otherwise. | 2064 Condition cond, // eq for new space, ne otherwise. |
2089 Label* branch); | 2065 Label* branch); |
2090 | 2066 |
2091 // Try to represent a double as an int so that integer fast-paths may be | 2067 // Try to represent a double as an int so that integer fast-paths may be |
2092 // used. Not every valid integer value is guaranteed to be caught. | 2068 // used. Not every valid integer value is guaranteed to be caught. |
2093 // It supports both 32-bit and 64-bit integers depending whether 'as_int' | 2069 // It supports both 32-bit and 64-bit integers depending whether 'as_int' |
2094 // is a W or X register. | 2070 // is a W or X register. |
2095 // | 2071 // |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2322 #error "Unsupported option" | 2298 #error "Unsupported option" |
2323 #define CODE_COVERAGE_STRINGIFY(x) #x | 2299 #define CODE_COVERAGE_STRINGIFY(x) #x |
2324 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) | 2300 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) |
2325 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) | 2301 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) |
2326 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> | 2302 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> |
2327 #else | 2303 #else |
2328 #define ACCESS_MASM(masm) masm-> | 2304 #define ACCESS_MASM(masm) masm-> |
2329 #endif | 2305 #endif |
2330 | 2306 |
2331 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ | 2307 #endif // V8_ARM64_MACRO_ASSEMBLER_ARM64_H_ |
OLD | NEW |