summaryrefslogtreecommitdiff
path: root/deps/v8/src/turbo-assembler.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/turbo-assembler.h')
-rw-r--r--deps/v8/src/turbo-assembler.h35
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