summaryrefslogtreecommitdiff
path: root/deps/v8/src/compiler/code-assembler.h
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2019-08-16 11:32:46 +0200
committerMichaël Zasso <targos@protonmail.com>2019-08-19 09:25:23 +0200
commite31f0a7d25668d3c1531294d2ef44a9f3bde4ef4 (patch)
tree6c6bed9804be9df6162b2483f0a56f371f66464d /deps/v8/src/compiler/code-assembler.h
parentec16fdae540adaf710b1a86c620170b2880088f0 (diff)
downloadnode-new-e31f0a7d25668d3c1531294d2ef44a9f3bde4ef4.tar.gz
deps: update V8 to 7.7.299.4
PR-URL: https://github.com/nodejs/node/pull/28918 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'deps/v8/src/compiler/code-assembler.h')
-rw-r--r--deps/v8/src/compiler/code-assembler.h123
1 files changed, 101 insertions, 22 deletions
diff --git a/deps/v8/src/compiler/code-assembler.h b/deps/v8/src/compiler/code-assembler.h
index 0f7ae64082..cc432214aa 100644
--- a/deps/v8/src/compiler/code-assembler.h
+++ b/deps/v8/src/compiler/code-assembler.h
@@ -73,6 +73,9 @@ class PromiseReactionJobTask;
class PromiseRejectReactionJobTask;
class WasmDebugInfo;
class Zone;
+#define MAKE_FORWARD_DECLARATION(V, NAME, Name, name) class Name;
+TORQUE_STRUCT_LIST_GENERATOR(MAKE_FORWARD_DECLARATION, UNUSED)
+#undef MAKE_FORWARD_DECLARATION
template <typename T>
class Signature;
@@ -107,13 +110,13 @@ struct Uint32T : Word32T {
struct Int16T : Int32T {
static constexpr MachineType kMachineType = MachineType::Int16();
};
-struct Uint16T : Uint32T {
+struct Uint16T : Uint32T, Int32T {
static constexpr MachineType kMachineType = MachineType::Uint16();
};
struct Int8T : Int16T {
static constexpr MachineType kMachineType = MachineType::Int8();
};
-struct Uint8T : Uint16T {
+struct Uint8T : Uint16T, Int16T {
static constexpr MachineType kMachineType = MachineType::Uint8();
};
@@ -147,6 +150,12 @@ struct Float64T : UntaggedT {
static constexpr MachineType kMachineType = MachineType::Float64();
};
+#ifdef V8_COMPRESS_POINTERS
+using TaggedT = Int32T;
+#else
+using TaggedT = IntPtrT;
+#endif
+
// Result of a comparison operation.
struct BoolT : Word32T {};
@@ -329,6 +338,7 @@ class WasmExceptionObject;
class WasmExceptionTag;
class WasmExportedFunctionData;
class WasmGlobalObject;
+class WasmIndirectFunctionTable;
class WasmJSFunctionData;
class WasmMemoryObject;
class WasmModuleObject;
@@ -413,6 +423,10 @@ struct types_have_common_values {
static const bool value = is_subtype<T, U>::value || is_subtype<U, T>::value;
};
template <class U>
+struct types_have_common_values<BoolT, U> {
+ static const bool value = types_have_common_values<Word32T, U>::value;
+};
+template <class U>
struct types_have_common_values<Uint32T, U> {
static const bool value = types_have_common_values<Word32T, U>::value;
};
@@ -611,14 +625,15 @@ TNode<Float64T> Float64Add(TNode<Float64T> a, TNode<Float64T> b);
V(Float64Sqrt, Float64T, Float64T) \
V(Float64Tan, Float64T, Float64T) \
V(Float64Tanh, Float64T, Float64T) \
- V(Float64ExtractLowWord32, Word32T, Float64T) \
- V(Float64ExtractHighWord32, Word32T, Float64T) \
+ V(Float64ExtractLowWord32, Uint32T, Float64T) \
+ V(Float64ExtractHighWord32, Uint32T, Float64T) \
V(BitcastTaggedToWord, IntPtrT, Object) \
+ V(BitcastTaggedSignedToWord, IntPtrT, Smi) \
V(BitcastMaybeObjectToWord, IntPtrT, MaybeObject) \
V(BitcastWordToTagged, Object, WordT) \
V(BitcastWordToTaggedSigned, Smi, WordT) \
V(TruncateFloat64ToFloat32, Float32T, Float64T) \
- V(TruncateFloat64ToWord32, Word32T, Float64T) \
+ V(TruncateFloat64ToWord32, Uint32T, Float64T) \
V(TruncateInt64ToInt32, Int32T, Int64T) \
V(ChangeFloat32ToFloat64, Float64T, Float32T) \
V(ChangeFloat64ToUint32, Uint32T, Float64T) \
@@ -628,7 +643,7 @@ TNode<Float64T> Float64Add(TNode<Float64T> a, TNode<Float64T> b);
V(ChangeUint32ToFloat64, Float64T, Word32T) \
V(ChangeUint32ToUint64, Uint64T, Word32T) \
V(BitcastInt32ToFloat32, Float32T, Word32T) \
- V(BitcastFloat32ToInt32, Word32T, Float32T) \
+ V(BitcastFloat32ToInt32, Uint32T, Float32T) \
V(RoundFloat64ToInt32, Int32T, Float64T) \
V(RoundInt32ToFloat32, Int32T, Float32T) \
V(Float64SilenceNaN, Float64T, Float64T) \
@@ -840,10 +855,13 @@ class V8_EXPORT_PRIVATE CodeAssembler {
// TODO(jkummerow): The style guide wants pointers for output parameters.
// https://google.github.io/styleguide/cppguide.html#Output_Parameters
- bool ToInt32Constant(Node* node, int32_t& out_value);
- bool ToInt64Constant(Node* node, int64_t& out_value);
+ bool ToInt32Constant(Node* node,
+ int32_t& out_value); // NOLINT(runtime/references)
+ bool ToInt64Constant(Node* node,
+ int64_t& out_value); // NOLINT(runtime/references)
bool ToSmiConstant(Node* node, Smi* out_value);
- bool ToIntPtrConstant(Node* node, intptr_t& out_value);
+ bool ToIntPtrConstant(Node* node,
+ intptr_t& out_value); // NOLINT(runtime/references)
bool IsUndefinedConstant(TNode<Object> node);
bool IsNullConstant(TNode<Object> node);
@@ -872,7 +890,7 @@ class V8_EXPORT_PRIVATE CodeAssembler {
void ReturnRaw(Node* value);
- void DebugAbort(Node* message);
+ void AbortCSAAssert(Node* message);
void DebugBreak();
void Unreachable();
void Comment(const char* msg) {
@@ -938,11 +956,11 @@ class V8_EXPORT_PRIVATE CodeAssembler {
Label** case_labels, size_t case_count);
// Access to the frame pointer
- Node* LoadFramePointer();
- Node* LoadParentFramePointer();
+ TNode<RawPtrT> LoadFramePointer();
+ TNode<RawPtrT> LoadParentFramePointer();
// Access to the stack pointer
- Node* LoadStackPointer();
+ TNode<RawPtrT> LoadStackPointer();
// Poison |value| on speculative paths.
TNode<Object> TaggedPoisonOnSpeculation(SloppyTNode<Object> value);
@@ -1047,20 +1065,60 @@ class V8_EXPORT_PRIVATE CodeAssembler {
CODE_ASSEMBLER_BINARY_OP_LIST(DECLARE_CODE_ASSEMBLER_BINARY_OP)
#undef DECLARE_CODE_ASSEMBLER_BINARY_OP
- TNode<IntPtrT> WordShr(TNode<IntPtrT> left, TNode<IntegralT> right) {
- return UncheckedCast<IntPtrT>(
+ TNode<UintPtrT> WordShr(TNode<UintPtrT> left, TNode<IntegralT> right) {
+ return Unsigned(
WordShr(static_cast<Node*>(left), static_cast<Node*>(right)));
}
TNode<IntPtrT> WordSar(TNode<IntPtrT> left, TNode<IntegralT> right) {
- return UncheckedCast<IntPtrT>(
- WordSar(static_cast<Node*>(left), static_cast<Node*>(right)));
+ return Signed(WordSar(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+ TNode<IntPtrT> WordShl(TNode<IntPtrT> left, TNode<IntegralT> right) {
+ return Signed(WordShl(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+ TNode<UintPtrT> WordShl(TNode<UintPtrT> left, TNode<IntegralT> right) {
+ return Unsigned(
+ WordShl(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+
+ TNode<Int32T> Word32Shl(TNode<Int32T> left, TNode<Int32T> right) {
+ return Signed(
+ Word32Shl(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+ TNode<Uint32T> Word32Shl(TNode<Uint32T> left, TNode<Uint32T> right) {
+ return Unsigned(
+ Word32Shl(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+ TNode<Uint32T> Word32Shr(TNode<Uint32T> left, TNode<Uint32T> right) {
+ return Unsigned(
+ Word32Shr(static_cast<Node*>(left), static_cast<Node*>(right)));
}
TNode<IntPtrT> WordAnd(TNode<IntPtrT> left, TNode<IntPtrT> right) {
- return UncheckedCast<IntPtrT>(
+ return Signed(WordAnd(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+ TNode<UintPtrT> WordAnd(TNode<UintPtrT> left, TNode<UintPtrT> right) {
+ return Unsigned(
WordAnd(static_cast<Node*>(left), static_cast<Node*>(right)));
}
+ TNode<Int32T> Word32And(TNode<Int32T> left, TNode<Int32T> right) {
+ return Signed(
+ Word32And(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+ TNode<Uint32T> Word32And(TNode<Uint32T> left, TNode<Uint32T> right) {
+ return Unsigned(
+ Word32And(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+
+ TNode<Int32T> Word32Or(TNode<Int32T> left, TNode<Int32T> right) {
+ return Signed(
+ Word32Or(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+ TNode<Uint32T> Word32Or(TNode<Uint32T> left, TNode<Uint32T> right) {
+ return Unsigned(
+ Word32Or(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+
template <class Left, class Right,
class = typename std::enable_if<
std::is_base_of<Object, Left>::value &&
@@ -1106,6 +1164,15 @@ class V8_EXPORT_PRIVATE CodeAssembler {
TNode<BoolT> Word64NotEqual(SloppyTNode<Word64T> left,
SloppyTNode<Word64T> right);
+ TNode<BoolT> Word32Or(TNode<BoolT> left, TNode<BoolT> right) {
+ return UncheckedCast<BoolT>(
+ Word32Or(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+ TNode<BoolT> Word32And(TNode<BoolT> left, TNode<BoolT> right) {
+ return UncheckedCast<BoolT>(
+ Word32And(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+
TNode<Int32T> Int32Add(TNode<Int32T> left, TNode<Int32T> right) {
return Signed(
Int32Add(static_cast<Node*>(left), static_cast<Node*>(right)));
@@ -1116,6 +1183,16 @@ class V8_EXPORT_PRIVATE CodeAssembler {
Int32Add(static_cast<Node*>(left), static_cast<Node*>(right)));
}
+ TNode<Int32T> Int32Sub(TNode<Int32T> left, TNode<Int32T> right) {
+ return Signed(
+ Int32Sub(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+
+ TNode<Int32T> Int32Mul(TNode<Int32T> left, TNode<Int32T> right) {
+ return Signed(
+ Int32Mul(static_cast<Node*>(left), static_cast<Node*>(right)));
+ }
+
TNode<WordT> IntPtrAdd(SloppyTNode<WordT> left, SloppyTNode<WordT> right);
TNode<IntPtrT> IntPtrDiv(TNode<IntPtrT> left, TNode<IntPtrT> right);
TNode<WordT> IntPtrSub(SloppyTNode<WordT> left, SloppyTNode<WordT> right);
@@ -1195,6 +1272,12 @@ class V8_EXPORT_PRIVATE CodeAssembler {
CODE_ASSEMBLER_UNARY_OP_LIST(DECLARE_CODE_ASSEMBLER_UNARY_OP)
#undef DECLARE_CODE_ASSEMBLER_UNARY_OP
+ template <class Dummy = void>
+ TNode<IntPtrT> BitcastTaggedToWord(TNode<Smi> node) {
+ static_assert(sizeof(Dummy) < 0,
+ "Should use BitcastTaggedSignedToWord instead.");
+ }
+
// Changes a double to an inptr_t for pointer arithmetic outside of Smi range.
// Assumes that the double can be exactly represented as an int.
TNode<UintPtrT> ChangeFloat64ToUintPtr(SloppyTNode<Float64T> value);
@@ -1217,10 +1300,6 @@ class V8_EXPORT_PRIVATE CodeAssembler {
// Projections
Node* Projection(int index, Node* value);
- // Pointer compression and decompression.
- Node* ChangeTaggedToCompressed(Node* tagged);
- Node* ChangeCompressedToTagged(Node* compressed);
-
template <int index, class T1, class T2>
TNode<typename std::tuple_element<index, std::tuple<T1, T2>>::type>
Projection(TNode<PairT<T1, T2>> value) {