summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/code-assembler.h
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2018-07-25 19:30:07 +0200
committerMichaël Zasso <targos@protonmail.com>2018-07-26 08:31:50 +0200
commit6a31d05340b22fc413ee83eaacd0a5565bbbe799 (patch)
tree78f9e1c2f417244842f6422f17e1816e70317100 /deps/v8/src/compiler/code-assembler.h
parent4d94bb2b1f72b6b612983a517a39c5545724a3ad (diff)
downloadnode-new-6a31d05340b22fc413ee83eaacd0a5565bbbe799.tar.gz
deps: update V8 to 6.8.275.24
PR-URL: https://github.com/nodejs/node/pull/21079 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Yang Guo <yangguo@chromium.org>
Diffstat (limited to 'deps/v8/src/compiler/code-assembler.h')
-rw-r--r--deps/v8/src/compiler/code-assembler.h67
1 files changed, 41 insertions, 26 deletions
diff --git a/deps/v8/src/compiler/code-assembler.h b/deps/v8/src/compiler/code-assembler.h
index c91345e73f..0e4f8ea5c8 100644
--- a/deps/v8/src/compiler/code-assembler.h
+++ b/deps/v8/src/compiler/code-assembler.h
@@ -11,14 +11,16 @@
// Clients of this interface shouldn't depend on lots of compiler internals.
// Do not include anything from src/compiler here!
#include "src/allocation.h"
-#include "src/base/template-utils.h"
+#include "src/base/macros.h"
#include "src/builtins/builtins.h"
#include "src/code-factory.h"
#include "src/globals.h"
#include "src/heap/heap.h"
#include "src/machine-type.h"
+#include "src/objects.h"
#include "src/objects/data-handler.h"
#include "src/objects/map.h"
+#include "src/objects/maybe-object.h"
#include "src/runtime/runtime.h"
#include "src/zone/zone-containers.h"
@@ -42,6 +44,9 @@ class InterpreterData;
class Factory;
class Zone;
+template <typename T>
+class Signature;
+
struct UntaggedT {};
struct IntegralT : UntaggedT {};
@@ -126,6 +131,10 @@ struct MachineTypeOf<Object> {
static constexpr MachineType value = MachineType::AnyTagged();
};
template <>
+struct MachineTypeOf<MaybeObject> {
+ static constexpr MachineType value = MachineType::AnyTagged();
+};
+template <>
struct MachineTypeOf<Smi> {
static constexpr MachineType value = MachineType::TaggedSigned();
};
@@ -151,13 +160,21 @@ struct MachineRepresentationOf<
static const MachineRepresentation value =
MachineTypeOf<T>::value.representation();
};
+template <class T>
+struct MachineRepresentationOf<
+ T, typename std::enable_if<std::is_base_of<MaybeObject, T>::value>::type> {
+ static const MachineRepresentation value =
+ MachineTypeOf<T>::value.representation();
+};
template <class T>
struct is_valid_type_tag {
static const bool value = std::is_base_of<Object, T>::value ||
std::is_base_of<UntaggedT, T>::value ||
+ std::is_base_of<MaybeObject, T>::value ||
std::is_same<ExternalReference, T>::value;
- static const bool is_tagged = std::is_base_of<Object, T>::value;
+ static const bool is_tagged = std::is_base_of<Object, T>::value ||
+ std::is_base_of<MaybeObject, T>::value;
};
template <class T1, class T2>
@@ -225,6 +242,7 @@ class StringWrapper;
class SymbolWrapper;
class Undetectable;
class UniqueName;
+class WasmExportedFunctionData;
class WasmGlobalObject;
class WasmMemoryObject;
class WasmModuleObject;
@@ -362,7 +380,7 @@ class TNode {
TNode() : node_(nullptr) {}
TNode operator=(TNode other) {
- DCHECK_NULL(node_);
+ DCHECK_NOT_NULL(other.node_);
node_ = other.node_;
return *this;
}
@@ -403,6 +421,7 @@ class SloppyTNode : public TNode<T> {
V(Float32GreaterThan, BoolT, Float32T, Float32T) \
V(Float32GreaterThanOrEqual, BoolT, Float32T, Float32T) \
V(Float64Equal, BoolT, Float64T, Float64T) \
+ V(Float64NotEqual, BoolT, Float64T, Float64T) \
V(Float64LessThan, BoolT, Float64T, Float64T) \
V(Float64LessThanOrEqual, BoolT, Float64T, Float64T) \
V(Float64GreaterThan, BoolT, Float64T, Float64T) \
@@ -485,6 +504,7 @@ TNode<Float64T> Float64Add(TNode<Float64T> a, TNode<Float64T> b);
V(Float64ExtractLowWord32, Word32T, Float64T) \
V(Float64ExtractHighWord32, Word32T, Float64T) \
V(BitcastTaggedToWord, IntPtrT, Object) \
+ V(BitcastMaybeObjectToWord, IntPtrT, MaybeObject) \
V(BitcastWordToTagged, Object, WordT) \
V(BitcastWordToTaggedSigned, Smi, WordT) \
V(TruncateFloat64ToFloat32, Float32T, Float64T) \
@@ -584,7 +604,7 @@ class V8_EXPORT_PRIVATE CodeAssembler {
#ifdef DEBUG
if (FLAG_debug_code) {
Node* function = code_assembler_->ExternalConstant(
- ExternalReference::check_object_type(code_assembler_->isolate()));
+ ExternalReference::check_object_type());
code_assembler_->CallCFunction3(
MachineType::AnyTagged(), MachineType::AnyTagged(),
MachineType::TaggedSigned(), MachineType::AnyTagged(), function,
@@ -599,7 +619,7 @@ class V8_EXPORT_PRIVATE CodeAssembler {
template <class A>
operator SloppyTNode<A>() {
- return base::implicit_cast<TNode<A>>(*this);
+ return implicit_cast<TNode<A>>(*this);
}
Node* node() const { return node_; }
@@ -649,13 +669,6 @@ class V8_EXPORT_PRIVATE CodeAssembler {
#endif
#ifdef V8_EMBEDDED_BUILTINS
- // Off-heap builtins cannot embed constants within the code object itself,
- // and thus need to load them from the root list.
- bool ShouldLoadConstantsFromRootList() const {
- return (isolate()->serializer_enabled() &&
- isolate()->builtins_constants_table_builder() != nullptr);
- }
-
TNode<HeapObject> LookupConstant(Handle<HeapObject> object);
TNode<ExternalReference> LookupExternalReference(ExternalReference reference);
#endif
@@ -695,6 +708,9 @@ class V8_EXPORT_PRIVATE CodeAssembler {
bool ToSmiConstant(Node* node, Smi*& out_value);
bool ToIntPtrConstant(Node* node, intptr_t& out_value);
+ bool IsUndefinedConstant(TNode<Object> node);
+ bool IsNullConstant(TNode<Object> node);
+
TNode<Int32T> Signed(TNode<Word32T> x) { return UncheckedCast<Int32T>(x); }
TNode<IntPtrT> Signed(TNode<WordT> x) { return UncheckedCast<IntPtrT>(x); }
TNode<Uint32T> Unsigned(TNode<Word32T> x) {
@@ -744,8 +760,8 @@ class V8_EXPORT_PRIVATE CodeAssembler {
Node* LoadStackPointer();
// Poison |value| on speculative paths.
- TNode<Object> PoisonOnSpeculationTagged(SloppyTNode<Object> value);
- TNode<WordT> PoisonOnSpeculationWord(SloppyTNode<WordT> value);
+ TNode<Object> TaggedPoisonOnSpeculation(SloppyTNode<Object> value);
+ TNode<WordT> WordPoisonOnSpeculation(SloppyTNode<WordT> value);
// Load raw memory location.
Node* Load(MachineType rep, Node* base,
@@ -944,7 +960,7 @@ class V8_EXPORT_PRIVATE CodeAssembler {
TNode<Object> CallRuntime(Runtime::FunctionId function,
SloppyTNode<Object> context, TArgs... args) {
return CallRuntimeImpl(function, context,
- base::implicit_cast<SloppyTNode<Object>>(args)...);
+ implicit_cast<SloppyTNode<Object>>(args)...);
}
template <class... TArgs>
@@ -953,8 +969,8 @@ class V8_EXPORT_PRIVATE CodeAssembler {
template <class... TArgs>
TNode<Object> TailCallRuntime(Runtime::FunctionId function,
SloppyTNode<Object> context, TArgs... args) {
- return TailCallRuntimeImpl(
- function, context, base::implicit_cast<SloppyTNode<Object>>(args)...);
+ return TailCallRuntimeImpl(function, context,
+ implicit_cast<SloppyTNode<Object>>(args)...);
}
//
@@ -965,14 +981,14 @@ class V8_EXPORT_PRIVATE CodeAssembler {
Node* CallStub(Callable const& callable, Node* context, TArgs... args) {
Node* target = HeapConstant(callable.code());
return CallStub(callable.descriptor(), target, context,
- base::implicit_cast<Node*>(args)...);
+ implicit_cast<Node*>(args)...);
}
template <class... TArgs>
Node* CallStub(const CallInterfaceDescriptor& descriptor, Node* target,
Node* context, TArgs... args) {
return CallStubR(descriptor, 1, target, context,
- base::implicit_cast<Node*>(args)...);
+ implicit_cast<Node*>(args)...);
}
template <class... TArgs>
@@ -993,7 +1009,7 @@ class V8_EXPORT_PRIVATE CodeAssembler {
Node* TailCallStub(const CallInterfaceDescriptor& descriptor, Node* target,
Node* context, TArgs... args) {
return TailCallStubImpl(descriptor, target, context,
- base::implicit_cast<Node*>(args)...);
+ implicit_cast<Node*>(args)...);
}
template <class... TArgs>
Node* TailCallStubImpl(const CallInterfaceDescriptor& descriptor,
@@ -1113,7 +1129,7 @@ class V8_EXPORT_PRIVATE CodeAssembler {
void UnregisterCallGenerationCallbacks();
bool Word32ShiftIsSafe() const;
- PoisoningMitigationLevel poisoning_enabled() const;
+ PoisoningMitigationLevel poisoning_level() const;
private:
// These two don't have definitions and are here only for catching use cases
@@ -1228,6 +1244,7 @@ class CodeAssemblerLabel {
~CodeAssemblerLabel();
inline bool is_bound() const { return bound_; }
+ inline bool is_used() const { return merge_count_ != 0; }
private:
friend class CodeAssembler;
@@ -1258,15 +1275,14 @@ class V8_EXPORT_PRIVATE CodeAssemblerState {
// TODO(rmcilroy): move result_size to the CallInterfaceDescriptor.
CodeAssemblerState(Isolate* isolate, Zone* zone,
const CallInterfaceDescriptor& descriptor, Code::Kind kind,
- const char* name,
- PoisoningMitigationLevel poisoning_enabled,
+ const char* name, PoisoningMitigationLevel poisoning_level,
size_t result_size = 1, uint32_t stub_key = 0,
int32_t builtin_index = Builtins::kNoBuiltinId);
// Create with JSCall linkage.
CodeAssemblerState(Isolate* isolate, Zone* zone, int parameter_count,
Code::Kind kind, const char* name,
- PoisoningMitigationLevel poisoning_enabled,
+ PoisoningMitigationLevel poisoning_level,
int32_t builtin_index = Builtins::kNoBuiltinId);
~CodeAssemblerState();
@@ -1288,8 +1304,7 @@ class V8_EXPORT_PRIVATE CodeAssemblerState {
CodeAssemblerState(Isolate* isolate, Zone* zone,
CallDescriptor* call_descriptor, Code::Kind kind,
- const char* name,
- PoisoningMitigationLevel poisoning_enabled,
+ const char* name, PoisoningMitigationLevel poisoning_level,
uint32_t stub_key, int32_t builtin_index);
std::unique_ptr<RawMachineAssembler> raw_assembler_;