aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/builtins-wasm-gen.cc
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2019-03-12 09:01:49 +0100
committerMichaël Zasso <targos@protonmail.com>2019-03-14 18:49:21 +0100
commit7b48713334469818661fe276cf571de9c7899f2d (patch)
tree4dbda49ac88db76ce09dc330a0cb587e68e139ba /deps/v8/src/builtins/builtins-wasm-gen.cc
parent8549ac09b256666cf5275224ec58fab9939ff32e (diff)
downloadandroid-node-v8-7b48713334469818661fe276cf571de9c7899f2d.tar.gz
android-node-v8-7b48713334469818661fe276cf571de9c7899f2d.tar.bz2
android-node-v8-7b48713334469818661fe276cf571de9c7899f2d.zip
deps: update V8 to 7.3.492.25
PR-URL: https://github.com/nodejs/node/pull/25852 Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Diffstat (limited to 'deps/v8/src/builtins/builtins-wasm-gen.cc')
-rw-r--r--deps/v8/src/builtins/builtins-wasm-gen.cc169
1 files changed, 154 insertions, 15 deletions
diff --git a/deps/v8/src/builtins/builtins-wasm-gen.cc b/deps/v8/src/builtins/builtins-wasm-gen.cc
index 60be33de20..a79ff81101 100644
--- a/deps/v8/src/builtins/builtins-wasm-gen.cc
+++ b/deps/v8/src/builtins/builtins-wasm-gen.cc
@@ -23,13 +23,13 @@ class WasmBuiltinsAssembler : public CodeStubAssembler {
TNode<Code> LoadBuiltinFromFrame(Builtins::Name id) {
TNode<Object> instance = LoadInstanceFromFrame();
- TNode<IntPtrT> roots = UncheckedCast<IntPtrT>(
+ TNode<IntPtrT> isolate_root = UncheckedCast<IntPtrT>(
Load(MachineType::Pointer(), instance,
- IntPtrConstant(WasmInstanceObject::kRootsArrayAddressOffset -
+ IntPtrConstant(WasmInstanceObject::kIsolateRootOffset -
kHeapObjectTag)));
- TNode<Code> target = UncheckedCast<Code>(Load(
- MachineType::TaggedPointer(), roots,
- IntPtrConstant(Heap::roots_to_builtins_offset() + id * kPointerSize)));
+ TNode<Code> target = UncheckedCast<Code>(
+ Load(MachineType::TaggedPointer(), isolate_root,
+ IntPtrConstant(IsolateData::builtin_slot_offset(id))));
return target;
}
@@ -66,6 +66,16 @@ TF_BUILTIN(WasmCallJavaScript, WasmBuiltinsAssembler) {
TailCallStub(CallTrampolineDescriptor{}, target, context, function, argc);
}
+TF_BUILTIN(WasmRecordWrite, WasmBuiltinsAssembler) {
+ TNode<Object> object = UncheckedParameter(Descriptor::kObject);
+ TNode<Object> slot = UncheckedParameter(Descriptor::kSlot);
+ TNode<Object> remembered = UncheckedParameter(Descriptor::kRememberedSet);
+ TNode<Object> fp_mode = UncheckedParameter(Descriptor::kFPMode);
+ TNode<Code> target = LoadBuiltinFromFrame(Builtins::kRecordWrite);
+ TailCallStub(RecordWriteDescriptor{}, target, NoContextConstant(), object,
+ slot, remembered, fp_mode);
+}
+
TF_BUILTIN(WasmToNumber, WasmBuiltinsAssembler) {
TNode<Object> context = UncheckedParameter(Descriptor::kContext);
TNode<Object> argument = UncheckedParameter(Descriptor::kArgument);
@@ -88,7 +98,106 @@ TF_BUILTIN(WasmThrow, WasmBuiltinsAssembler) {
TailCallRuntimeWithCEntry(Runtime::kThrow, centry, context, exception);
}
-TF_BUILTIN(WasmGrowMemory, WasmBuiltinsAssembler) {
+TF_BUILTIN(WasmAtomicWake, WasmBuiltinsAssembler) {
+ TNode<Uint32T> address =
+ UncheckedCast<Uint32T>(Parameter(Descriptor::kAddress));
+ TNode<Uint32T> count = UncheckedCast<Uint32T>(Parameter(Descriptor::kCount));
+
+ TNode<Object> instance = LoadInstanceFromFrame();
+ TNode<Code> centry = LoadCEntryFromInstance(instance);
+
+ TNode<Code> target = LoadBuiltinFromFrame(Builtins::kAllocateHeapNumber);
+
+ // TODO(aseemgarg): Use SMIs if possible for address and count
+ TNode<HeapNumber> address_heap = UncheckedCast<HeapNumber>(
+ CallStub(AllocateHeapNumberDescriptor(), target, NoContextConstant()));
+ StoreHeapNumberValue(address_heap, ChangeUint32ToFloat64(address));
+
+ TNode<HeapNumber> count_heap = UncheckedCast<HeapNumber>(
+ CallStub(AllocateHeapNumberDescriptor(), target, NoContextConstant()));
+ StoreHeapNumberValue(count_heap, ChangeUint32ToFloat64(count));
+
+ TNode<Smi> result_smi = UncheckedCast<Smi>(CallRuntimeWithCEntry(
+ Runtime::kWasmAtomicWake, centry, NoContextConstant(), instance,
+ address_heap, count_heap));
+ ReturnRaw(SmiToInt32(result_smi));
+}
+
+TF_BUILTIN(WasmI32AtomicWait, WasmBuiltinsAssembler) {
+ TNode<Uint32T> address =
+ UncheckedCast<Uint32T>(Parameter(Descriptor::kAddress));
+ TNode<Int32T> expected_value =
+ UncheckedCast<Int32T>(Parameter(Descriptor::kExpectedValue));
+ TNode<Float64T> timeout =
+ UncheckedCast<Float64T>(Parameter(Descriptor::kTimeout));
+
+ TNode<Object> instance = LoadInstanceFromFrame();
+ TNode<Code> centry = LoadCEntryFromInstance(instance);
+
+ TNode<Code> target = LoadBuiltinFromFrame(Builtins::kAllocateHeapNumber);
+
+ // TODO(aseemgarg): Use SMIs if possible for address and expected_value
+ TNode<HeapNumber> address_heap = UncheckedCast<HeapNumber>(
+ CallStub(AllocateHeapNumberDescriptor(), target, NoContextConstant()));
+ StoreHeapNumberValue(address_heap, ChangeUint32ToFloat64(address));
+
+ TNode<HeapNumber> expected_value_heap = UncheckedCast<HeapNumber>(
+ CallStub(AllocateHeapNumberDescriptor(), target, NoContextConstant()));
+ StoreHeapNumberValue(expected_value_heap,
+ ChangeInt32ToFloat64(expected_value));
+
+ TNode<HeapNumber> timeout_heap = UncheckedCast<HeapNumber>(
+ CallStub(AllocateHeapNumberDescriptor(), target, NoContextConstant()));
+ StoreHeapNumberValue(timeout_heap, timeout);
+
+ TNode<Smi> result_smi = UncheckedCast<Smi>(CallRuntimeWithCEntry(
+ Runtime::kWasmI32AtomicWait, centry, NoContextConstant(), instance,
+ address_heap, expected_value_heap, timeout_heap));
+ ReturnRaw(SmiToInt32(result_smi));
+}
+
+TF_BUILTIN(WasmI64AtomicWait, WasmBuiltinsAssembler) {
+ TNode<Uint32T> address =
+ UncheckedCast<Uint32T>(Parameter(Descriptor::kAddress));
+ TNode<Uint32T> expected_value_high =
+ UncheckedCast<Uint32T>(Parameter(Descriptor::kExpectedValueHigh));
+ TNode<Uint32T> expected_value_low =
+ UncheckedCast<Uint32T>(Parameter(Descriptor::kExpectedValueLow));
+ TNode<Float64T> timeout =
+ UncheckedCast<Float64T>(Parameter(Descriptor::kTimeout));
+
+ TNode<Object> instance = LoadInstanceFromFrame();
+ TNode<Code> centry = LoadCEntryFromInstance(instance);
+
+ TNode<Code> target = LoadBuiltinFromFrame(Builtins::kAllocateHeapNumber);
+
+ // TODO(aseemgarg): Use SMIs if possible for address and expected_value
+ TNode<HeapNumber> address_heap = UncheckedCast<HeapNumber>(
+ CallStub(AllocateHeapNumberDescriptor(), target, NoContextConstant()));
+ StoreHeapNumberValue(address_heap, ChangeUint32ToFloat64(address));
+
+ TNode<HeapNumber> expected_value_high_heap = UncheckedCast<HeapNumber>(
+ CallStub(AllocateHeapNumberDescriptor(), target, NoContextConstant()));
+ StoreHeapNumberValue(expected_value_high_heap,
+ ChangeUint32ToFloat64(expected_value_high));
+
+ TNode<HeapNumber> expected_value_low_heap = UncheckedCast<HeapNumber>(
+ CallStub(AllocateHeapNumberDescriptor(), target, NoContextConstant()));
+ StoreHeapNumberValue(expected_value_low_heap,
+ ChangeUint32ToFloat64(expected_value_low));
+
+ TNode<HeapNumber> timeout_heap = UncheckedCast<HeapNumber>(
+ CallStub(AllocateHeapNumberDescriptor(), target, NoContextConstant()));
+ StoreHeapNumberValue(timeout_heap, timeout);
+
+ TNode<Smi> result_smi = UncheckedCast<Smi>(CallRuntimeWithCEntry(
+ Runtime::kWasmI64AtomicWait, centry, NoContextConstant(), instance,
+ address_heap, expected_value_high_heap, expected_value_low_heap,
+ timeout_heap));
+ ReturnRaw(SmiToInt32(result_smi));
+}
+
+TF_BUILTIN(WasmMemoryGrow, WasmBuiltinsAssembler) {
TNode<Int32T> num_pages =
UncheckedCast<Int32T>(Parameter(Descriptor::kNumPages));
Label num_pages_out_of_range(this, Label::kDeferred);
@@ -102,7 +211,7 @@ TF_BUILTIN(WasmGrowMemory, WasmBuiltinsAssembler) {
TNode<Code> centry = LoadCEntryFromInstance(instance);
TNode<Object> context = LoadContextFromInstance(instance);
TNode<Smi> ret_smi = UncheckedCast<Smi>(CallRuntimeWithCEntry(
- Runtime::kWasmGrowMemory, centry, context, instance, num_pages_smi));
+ Runtime::kWasmMemoryGrow, centry, context, instance, num_pages_smi));
TNode<Int32T> ret = SmiToInt32(ret_smi);
ReturnRaw(ret);
@@ -110,14 +219,44 @@ TF_BUILTIN(WasmGrowMemory, WasmBuiltinsAssembler) {
ReturnRaw(Int32Constant(-1));
}
-#define DECLARE_ENUM(name) \
- TF_BUILTIN(ThrowWasm##name, WasmBuiltinsAssembler) { \
- TNode<Object> instance = LoadInstanceFromFrame(); \
- TNode<Code> centry = LoadCEntryFromInstance(instance); \
- TNode<Object> context = LoadContextFromInstance(instance); \
- int message_id = wasm::WasmOpcodes::TrapReasonToMessageId(wasm::k##name); \
- TailCallRuntimeWithCEntry(Runtime::kThrowWasmError, centry, context, \
- SmiConstant(message_id)); \
+TF_BUILTIN(BigIntToWasmI64, WasmBuiltinsAssembler) {
+ if (!Is64()) {
+ Unreachable();
+ return;
+ }
+
+ TNode<Code> target = LoadBuiltinFromFrame(Builtins::kI64ToBigInt);
+ TNode<IntPtrT> argument =
+ UncheckedCast<IntPtrT>(Parameter(Descriptor::kArgument));
+
+ TailCallStub(BigIntToWasmI64Descriptor(), target, NoContextConstant(),
+ argument);
+}
+
+TF_BUILTIN(WasmBigIntToI64, WasmBuiltinsAssembler) {
+ if (!Is64()) {
+ Unreachable();
+ return;
+ }
+
+ TNode<Object> context =
+ UncheckedCast<Object>(Parameter(Descriptor::kContext));
+ TNode<Code> target = LoadBuiltinFromFrame(Builtins::kBigIntToI64);
+ TNode<IntPtrT> argument =
+ UncheckedCast<IntPtrT>(Parameter(Descriptor::kArgument));
+
+ TailCallStub(BigIntToI64Descriptor(), target, context, argument);
+}
+
+#define DECLARE_ENUM(name) \
+ TF_BUILTIN(ThrowWasm##name, WasmBuiltinsAssembler) { \
+ TNode<Object> instance = LoadInstanceFromFrame(); \
+ TNode<Code> centry = LoadCEntryFromInstance(instance); \
+ TNode<Object> context = LoadContextFromInstance(instance); \
+ MessageTemplate message_id = \
+ wasm::WasmOpcodes::TrapReasonToMessageId(wasm::k##name); \
+ TailCallRuntimeWithCEntry(Runtime::kThrowWasmError, centry, context, \
+ SmiConstant(static_cast<int>(message_id))); \
}
FOREACH_WASM_TRAPREASON(DECLARE_ENUM)
#undef DECLARE_ENUM