diff options
Diffstat (limited to 'deps/v8/src/turbo-assembler.h')
-rw-r--r-- | deps/v8/src/turbo-assembler.h | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/deps/v8/src/turbo-assembler.h b/deps/v8/src/turbo-assembler.h index 67f895b1ca..44fbbca64c 100644 --- a/deps/v8/src/turbo-assembler.h +++ b/deps/v8/src/turbo-assembler.h @@ -6,6 +6,7 @@ #define V8_TURBO_ASSEMBLER_H_ #include "src/assembler-arch.h" +#include "src/base/template-utils.h" #include "src/heap/heap.h" namespace v8 { @@ -13,7 +14,7 @@ namespace internal { // Common base class for platform-specific TurboAssemblers containing // platform-independent bits. -class TurboAssemblerBase : public Assembler { +class V8_EXPORT_PRIVATE TurboAssemblerBase : public Assembler { public: Isolate* isolate() const { return isolate_; } @@ -26,7 +27,9 @@ class TurboAssemblerBase : public Assembler { void set_root_array_available(bool v) { root_array_available_ = v; } bool trap_on_abort() const { return trap_on_abort_; } - void set_trap_on_abort(bool v) { trap_on_abort_ = v; } + + bool should_abort_hard() const { return hard_abort_; } + void set_abort_hard(bool v) { hard_abort_ = v; } void set_builtin_index(int i) { maybe_builtin_index_ = i; } @@ -67,6 +70,8 @@ class TurboAssemblerBase : public Assembler { void* buffer, int buffer_size, CodeObjectRequired create_code_object); + void RecordCommentForOffHeapTrampoline(int builtin_index); + Isolate* const isolate_ = nullptr; // This handle will be patched with the code object on installation. @@ -78,6 +83,9 @@ class TurboAssemblerBase : public Assembler { // Immediately trap instead of calling {Abort} when debug code fails. bool trap_on_abort_ = FLAG_trap_on_abort; + // Emit a C call to abort instead of a runtime call. + bool hard_abort_ = false; + // May be set while generating builtins. int maybe_builtin_index_ = Builtins::kNoBuiltinId; @@ -89,13 +97,13 @@ class TurboAssemblerBase : public Assembler { // Avoids emitting calls to the {Builtins::kAbort} builtin when emitting debug // code during the lifetime of this scope object. For disabling debug code // entirely use the {DontEmitDebugCodeScope} instead. -class TrapOnAbortScope BASE_EMBEDDED { +class HardAbortScope BASE_EMBEDDED { public: - explicit TrapOnAbortScope(TurboAssemblerBase* assembler) - : assembler_(assembler), old_value_(assembler->trap_on_abort()) { - assembler_->set_trap_on_abort(true); + explicit HardAbortScope(TurboAssemblerBase* assembler) + : assembler_(assembler), old_value_(assembler->should_abort_hard()) { + assembler_->set_abort_hard(true); } - ~TrapOnAbortScope() { assembler_->set_trap_on_abort(old_value_); } + ~HardAbortScope() { assembler_->set_abort_hard(old_value_); } private: TurboAssemblerBase* assembler_; @@ -108,6 +116,19 @@ class TrapOnAbortScope BASE_EMBEDDED { // - WebAssembly: Call native {WasmCode} stub via {RelocInfo::WASM_STUB_CALL}. enum class StubCallMode { kCallOnHeapBuiltin, kCallWasmRuntimeStub }; +#ifdef DEBUG +template <typename RegType, typename... RegTypes, + // All arguments must be either Register or DoubleRegister. + typename = typename std::enable_if< + base::is_same<Register, RegType, RegTypes...>::value || + base::is_same<DoubleRegister, RegType, RegTypes...>::value>::type> +inline bool AreAliased(RegType first_reg, RegTypes... regs) { + int num_different_regs = NumRegs(RegType::ListOf(first_reg, regs...)); + int num_given_regs = sizeof...(regs) + 1; + return num_different_regs < num_given_regs; +} +#endif + } // namespace internal } // namespace v8 |