summaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/builtins-wasm-gen.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/builtins/builtins-wasm-gen.cc')
-rw-r--r--deps/v8/src/builtins/builtins-wasm-gen.cc61
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) {