diff options
author | Michaël Zasso <targos@protonmail.com> | 2019-03-12 09:01:49 +0100 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2019-03-14 18:49:21 +0100 |
commit | 7b48713334469818661fe276cf571de9c7899f2d (patch) | |
tree | 4dbda49ac88db76ce09dc330a0cb587e68e139ba /deps/v8/src/builtins/builtins-wasm-gen.cc | |
parent | 8549ac09b256666cf5275224ec58fab9939ff32e (diff) | |
download | android-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.cc | 169 |
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 |