diff options
Diffstat (limited to 'deps/v8/src/builtins/builtins-wasm-gen.cc')
-rw-r--r-- | deps/v8/src/builtins/builtins-wasm-gen.cc | 61 |
1 files changed, 56 insertions, 5 deletions
diff --git a/deps/v8/src/builtins/builtins-wasm-gen.cc b/deps/v8/src/builtins/builtins-wasm-gen.cc index 382a835b49..373e9dbfef 100644 --- a/deps/v8/src/builtins/builtins-wasm-gen.cc +++ b/deps/v8/src/builtins/builtins-wasm-gen.cc @@ -105,7 +105,7 @@ TF_BUILTIN(WasmThrow, WasmBuiltinsAssembler) { TailCallRuntimeWithCEntry(Runtime::kThrow, centry, context, exception); } -TF_BUILTIN(WasmAtomicWake, WasmBuiltinsAssembler) { +TF_BUILTIN(WasmAtomicNotify, WasmBuiltinsAssembler) { TNode<Uint32T> address = UncheckedCast<Uint32T>(Parameter(Descriptor::kAddress)); TNode<Uint32T> count = UncheckedCast<Uint32T>(Parameter(Descriptor::kCount)); @@ -125,7 +125,7 @@ TF_BUILTIN(WasmAtomicWake, WasmBuiltinsAssembler) { StoreHeapNumberValue(count_heap, ChangeUint32ToFloat64(count)); TNode<Smi> result_smi = UncheckedCast<Smi>(CallRuntimeWithCEntry( - Runtime::kWasmAtomicWake, centry, NoContextConstant(), instance, + Runtime::kWasmAtomicNotify, centry, NoContextConstant(), instance, address_heap, count_heap)); ReturnRaw(SmiToInt32(result_smi)); } @@ -226,7 +226,59 @@ TF_BUILTIN(WasmMemoryGrow, WasmBuiltinsAssembler) { ReturnRaw(Int32Constant(-1)); } -TF_BUILTIN(BigIntToWasmI64, WasmBuiltinsAssembler) { +TF_BUILTIN(WasmTableGet, WasmBuiltinsAssembler) { + TNode<Int32T> entry_index = + UncheckedCast<Int32T>(Parameter(Descriptor::kEntryIndex)); + TNode<Object> instance = LoadInstanceFromFrame(); + TNode<Code> centry = LoadCEntryFromInstance(instance); + TNode<Object> context = LoadContextFromInstance(instance); + Label entry_index_out_of_range(this, Label::kDeferred); + + TNode<BoolT> entry_index_fits_in_smi = + IsValidPositiveSmi(ChangeInt32ToIntPtr(entry_index)); + GotoIfNot(entry_index_fits_in_smi, &entry_index_out_of_range); + + TNode<Smi> entry_index_smi = SmiFromInt32(entry_index); + TNode<Smi> table_index_smi = + UncheckedCast<Smi>(Parameter(Descriptor::kTableIndex)); + + TailCallRuntimeWithCEntry(Runtime::kWasmFunctionTableGet, centry, context, + instance, table_index_smi, entry_index_smi); + + BIND(&entry_index_out_of_range); + MessageTemplate message_id = + wasm::WasmOpcodes::TrapReasonToMessageId(wasm::kTrapTableOutOfBounds); + TailCallRuntimeWithCEntry(Runtime::kThrowWasmError, centry, context, + SmiConstant(static_cast<int>(message_id))); +} + +TF_BUILTIN(WasmTableSet, WasmBuiltinsAssembler) { + TNode<Int32T> entry_index = + UncheckedCast<Int32T>(Parameter(Descriptor::kEntryIndex)); + TNode<Object> instance = LoadInstanceFromFrame(); + TNode<Code> centry = LoadCEntryFromInstance(instance); + TNode<Object> context = LoadContextFromInstance(instance); + Label entry_index_out_of_range(this, Label::kDeferred); + + TNode<BoolT> entry_index_fits_in_smi = + IsValidPositiveSmi(ChangeInt32ToIntPtr(entry_index)); + GotoIfNot(entry_index_fits_in_smi, &entry_index_out_of_range); + + TNode<Smi> entry_index_smi = SmiFromInt32(entry_index); + TNode<Smi> table_index_smi = + UncheckedCast<Smi>(Parameter(Descriptor::kTableIndex)); + TNode<Object> value = UncheckedCast<Object>(Parameter(Descriptor::kValue)); + TailCallRuntimeWithCEntry(Runtime::kWasmFunctionTableSet, centry, context, + instance, table_index_smi, entry_index_smi, value); + + BIND(&entry_index_out_of_range); + MessageTemplate message_id = + wasm::WasmOpcodes::TrapReasonToMessageId(wasm::kTrapTableOutOfBounds); + TailCallRuntimeWithCEntry(Runtime::kThrowWasmError, centry, context, + SmiConstant(static_cast<int>(message_id))); +} + +TF_BUILTIN(WasmI64ToBigInt, WasmBuiltinsAssembler) { if (!Is64()) { Unreachable(); return; @@ -236,8 +288,7 @@ TF_BUILTIN(BigIntToWasmI64, WasmBuiltinsAssembler) { TNode<IntPtrT> argument = UncheckedCast<IntPtrT>(Parameter(Descriptor::kArgument)); - TailCallStub(BigIntToWasmI64Descriptor(), target, NoContextConstant(), - argument); + TailCallStub(I64ToBigIntDescriptor(), target, NoContextConstant(), argument); } TF_BUILTIN(WasmBigIntToI64, WasmBuiltinsAssembler) { |