Lines Matching full:wasm
20 #include "src/wasm/function-body-decoder.h"
21 #include "src/wasm/function-compiler.h"
22 #include "src/wasm/wasm-module.h"
23 #include "src/wasm/wasm-opcodes.h"
24 #include "src/wasm/wasm-result.h"
50 namespace wasm {
52 // Expose {Node} and {Graph} opaquely as {wasm::TFNode} and {wasm::TFGraph}.
60 } // namespace wasm
64 wasm::WasmCompilationResult ExecuteTurbofanWasmCompilation(
65 wasm::CompilationEnv*, const wasm::WireBytesStorage* wire_bytes_storage,
66 const wasm::FunctionBody&, int func_index, Counters*,
67 wasm::WasmFeatures* detected);
69 // Calls to Wasm imports are handled in several different ways, depending on the
73 kLinkError, // static Wasm->Wasm type error
74 kRuntimeTypeError, // runtime Wasm->JS type error
75 kWasmToCapi, // fast Wasm->C-API call
76 kWasmToJSFastApi, // fast Wasm->JS Fast API C call
77 kWasmToWasm, // fast Wasm->Wasm call
78 kJSFunctionArityMatch, // fast Wasm->JS call
79 kJSFunctionArityMismatch, // Wasm->JS, needs adapter frame
124 Handle<JSReceiver> callable, const wasm::FunctionSig* sig,
125 const wasm::WasmModule* module, const wasm::WasmFeatures& enabled_features);
127 // Compiles an import call wrapper, which allows Wasm to call imports.
128 V8_EXPORT_PRIVATE wasm::WasmCompilationResult CompileWasmImportCallWrapper(
129 wasm::CompilationEnv* env, WasmImportCallKind, const wasm::FunctionSig*,
130 bool source_positions, int expected_arity, wasm::Suspend);
132 // Compiles a host call wrapper, which allows Wasm to call host functions.
133 wasm::WasmCode* CompileWasmCapiCallWrapper(wasm::NativeModule*,
134 const wasm::FunctionSig*);
136 // Compiles a wrapper to call a Fast API function from Wasm.
137 wasm::WasmCode* CompileWasmJSFastCallWrapper(wasm::NativeModule*,
138 const wasm::FunctionSig*,
141 // Returns an TurbofanCompilationJob object for a JS to Wasm wrapper.
143 Isolate* isolate, const wasm::FunctionSig* sig,
144 const wasm::WasmModule* module, bool is_import,
145 const wasm::WasmFeatures& enabled_features);
148 const wasm::FunctionSig* sig,
151 wasm::Suspend suspend);
155 // simulating a JS-to-Wasm-to-JS coercion of parameter and return values.
156 MaybeHandle<Code> CompileJSToJSWrapper(Isolate*, const wasm::FunctionSig*,
157 const wasm::WasmModule* module);
171 Isolate*, const wasm::FunctionSig*, const wasm::WasmModule* module);
175 explicit JSWasmCallData(const wasm::FunctionSig* wasm_signature);
188 // Values from the instance object are cached between Wasm-level function calls.
190 // and manipulated in wasm-compiler.{h,cc} instead of inside the Wasm decoder.
210 // Abstracts details of building TurboFan graph nodes for wasm to separate
211 // the wasm decoder from the internal details of TurboFan.
214 // The parameter at index 0 in a wasm function has special meaning:
215 // - For normal wasm functions, it points to the function's instance.
216 // - For Wasm-to-JS and C-API wrappers, it points to a {WasmApiFunctionRef}
218 // - For JS-to-Wasm and JS-to-JS wrappers (which are JS functions), it does
250 wasm::CompilationEnv* env, Zone* zone, MachineGraph* mcgraph,
251 const wasm::FunctionSig* sig,
272 Node* Phi(wasm::ValueType type, unsigned count, Node** vals_and_control);
279 Node* RefAsNonNull(Node* arg, wasm::WasmCodePosition position);
285 Node* Binop(wasm::WasmOpcode opcode, Node* left, Node* right,
286 wasm::WasmCodePosition position = wasm::kNoCodePosition);
287 Node* Unop(wasm::WasmOpcode opcode, Node* input,
288 wasm::WasmCodePosition position = wasm::kNoCodePosition);
290 Node* Throw(uint32_t tag_index, const wasm::WasmTag* tag,
292 wasm::WasmCodePosition position);
297 Node* GetExceptionValues(Node* except_obj, const wasm::WasmTag* tag,
305 wasm::WasmCodePosition);
316 void TrapIfTrue(wasm::TrapReason reason, Node* cond,
317 wasm::WasmCodePosition position);
318 void TrapIfFalse(wasm::TrapReason reason, Node* cond,
319 wasm::WasmCodePosition position);
321 wasm::ValueType type);
323 void TrapIfEq32(wasm::TrapReason reason, Node* node, int32_t val,
324 wasm::WasmCodePosition position);
325 void ZeroCheck32(wasm::TrapReason reason, Node* node,
326 wasm::WasmCodePosition position);
327 void TrapIfEq64(wasm::TrapReason reason, Node* node, int64_t val,
328 wasm::WasmCodePosition position);
329 void ZeroCheck64(wasm::TrapReason reason, Node* node,
330 wasm::WasmCodePosition position);
342 void TraceFunctionEntry(wasm::WasmCodePosition position);
344 wasm::WasmCodePosition position);
346 void Trap(wasm::TrapReason reason, wasm::WasmCodePosition position);
351 Node* CallDirect(uint32_t index, wasm::FunctionSig* real_sig,
353 wasm::WasmCodePosition position);
355 wasm::FunctionSig* real_sig, base::Vector<Node*> args,
356 base::Vector<Node*> rets, wasm::WasmCodePosition position);
357 Node* CallRef(const wasm::FunctionSig* real_sig, base::Vector<Node*> args,
359 wasm::WasmCodePosition position);
361 Node* ReturnCall(uint32_t index, const wasm::FunctionSig* real_sig,
362 base::Vector<Node*> args, wasm::WasmCodePosition position);
364 wasm::FunctionSig* real_sig,
366 wasm::WasmCodePosition position);
367 Node* ReturnCallRef(const wasm::FunctionSig* real_sig,
369 wasm::WasmCodePosition position);
382 wasm::WasmCodePosition position);
384 wasm::WasmCodePosition position);
390 uintptr_t offset, wasm::WasmCodePosition);
391 Node* LoadMem(wasm::ValueType type, MachineType memtype, Node* index,
393 wasm::WasmCodePosition position);
395 Node* LoadTransformBigEndian(wasm::ValueType type, MachineType memtype,
396 wasm::LoadTransformationKind transform,
398 wasm::WasmCodePosition position);
400 Node* LoadTransform(wasm::ValueType type, MachineType memtype,
401 wasm::LoadTransformationKind transform, Node* index,
403 wasm::WasmCodePosition position);
404 Node* LoadLane(wasm::ValueType type, MachineType memtype, Node* value,
406 uint8_t laneidx, wasm::WasmCodePosition position);
408 uint32_t alignment, Node* val, wasm::WasmCodePosition position,
409 wasm::ValueType type);
412 wasm::WasmCodePosition position, wasm::ValueType type);
438 const wasm::FunctionSig* GetFunctionSignature() { return sig_; } in GetFunctionSignature()
447 void SetSourcePosition(Node* node, wasm::WasmCodePosition position);
454 Node* SimdOp(wasm::WasmOpcode opcode, Node* const* inputs);
456 Node* SimdLaneOp(wasm::WasmOpcode opcode, uint8_t lane, Node* const* inputs);
460 Node* AtomicOp(wasm::WasmOpcode opcode, Node* const* inputs,
462 wasm::WasmCodePosition position);
466 wasm::WasmCodePosition position);
468 wasm::WasmCodePosition position);
469 void DataDrop(uint32_t data_segment_index, wasm::WasmCodePosition position);
471 wasm::WasmCodePosition position);
474 Node* src, Node* size, wasm::WasmCodePosition position);
475 void ElemDrop(uint32_t elem_segment_index, wasm::WasmCodePosition position);
477 Node* src, Node* size, wasm::WasmCodePosition position);
482 Node* StructNewWithRtt(uint32_t struct_index, const wasm::StructType* type,
484 Node* StructGet(Node* struct_object, const wasm::StructType* struct_type,
486 wasm::WasmCodePosition position);
487 void StructSet(Node* struct_object, const wasm::StructType* struct_type,
489 wasm::WasmCodePosition position);
490 Node* ArrayNewWithRtt(uint32_t array_index, const wasm::ArrayType* type,
492 wasm::WasmCodePosition position);
493 Node* ArrayGet(Node* array_object, const wasm::ArrayType* type, Node* index,
495 wasm::WasmCodePosition position);
496 void ArraySet(Node* array_object, const wasm::ArrayType* type, Node* index,
498 wasm::WasmCodePosition position);
500 wasm::WasmCodePosition position);
503 Node* length, wasm::WasmCodePosition position);
504 Node* ArrayInit(const wasm::ArrayType* type, Node* rtt,
506 Node* ArrayInitFromData(const wasm::ArrayType* type, uint32_t data_segment,
508 wasm::WasmCodePosition position);
516 wasm::WasmCodePosition position);
522 wasm::WasmCodePosition position);
528 wasm::WasmCodePosition position);
534 wasm::WasmCodePosition position);
539 Node* RefAsI31(Node* object, wasm::WasmCodePosition position);
546 wasm::BoundsCheckStrategy bounds_checks() const { in bounds_checks()
555 wasm::Decoder* decoder);
559 static const wasm::FunctionSig* Int64LoweredSig(Zone* zone,
560 const wasm::FunctionSig* sig);
563 V8_EXPORT_PRIVATE WasmGraphBuilder(wasm::CompilationEnv* env, Zone* zone,
565 const wasm::FunctionSig* sig,
586 wasm::WasmCodePosition,
590 uint64_t offset, wasm::WasmCodePosition);
592 const Operator* GetSafeLoadOperator(int offset, wasm::ValueType type);
593 const Operator* GetSafeStoreOperator(int offset, wasm::ValueType type);
595 wasm::ValueType wasmtype = wasm::kWasmVoid);
597 wasm::ValueType wasmtype = wasm::kWasmVoid);
606 Node* BuildCallNode(const wasm::FunctionSig* sig, base::Vector<Node*> args,
607 wasm::WasmCodePosition position, Node* instance_node,
614 wasm::FunctionSig* real_sig, base::Vector<Node*> args,
616 wasm::WasmCodePosition position,
618 Node* BuildWasmCall(const wasm::FunctionSig* sig, base::Vector<Node*> args,
619 base::Vector<Node*> rets, wasm::WasmCodePosition position,
621 Node* BuildWasmReturnCall(const wasm::FunctionSig* sig,
623 wasm::WasmCodePosition position,
625 Node* BuildImportCall(const wasm::FunctionSig* sig, base::Vector<Node*> args,
627 wasm::WasmCodePosition position, int func_index,
629 Node* BuildImportCall(const wasm::FunctionSig* sig, base::Vector<Node*> args,
631 wasm::WasmCodePosition position, Node* func_index,
633 Node* BuildCallRef(const wasm::FunctionSig* real_sig,
636 wasm::WasmCodePosition position);
641 Node* BuildIntConvertFloat(Node* input, wasm::WasmCodePosition position,
642 wasm::WasmOpcode);
677 Node* BuildCcallConvertFloat(Node* input, wasm::WasmCodePosition position,
678 wasm::WasmOpcode opcode);
680 Node* BuildI32DivS(Node* left, Node* right, wasm::WasmCodePosition position);
681 Node* BuildI32RemS(Node* left, Node* right, wasm::WasmCodePosition position);
682 Node* BuildI32DivU(Node* left, Node* right, wasm::WasmCodePosition position);
683 Node* BuildI32RemU(Node* left, Node* right, wasm::WasmCodePosition position);
685 Node* BuildI64DivS(Node* left, Node* right, wasm::WasmCodePosition position);
686 Node* BuildI64RemS(Node* left, Node* right, wasm::WasmCodePosition position);
687 Node* BuildI64DivU(Node* left, Node* right, wasm::WasmCodePosition position);
688 Node* BuildI64RemU(Node* left, Node* right, wasm::WasmCodePosition position);
690 MachineType result_type, wasm::TrapReason trap_zero,
691 wasm::WasmCodePosition position);
707 wasm::WasmCodePosition position);
711 void GetGlobalBaseAndOffset(const wasm::WasmGlobal&, Node** base_node,
729 wasm::WasmCodePosition position);
746 wasm::WasmCodePosition position);
748 wasm::WasmCodePosition position);
762 // Wasm SIMD.
777 Node* BuildMultiReturnFixedArrayFromIterable(const wasm::FunctionSig* sig,
795 TrapId GetTrapIdForTrap(wasm::TrapReason reason);
810 wasm::CompilationEnv* const env_;
822 const wasm::FunctionSig* const sig_;
839 Zone* zone, MachineGraph* mcgraph, const wasm::FunctionSig* signature,
840 const wasm::WasmModule* module, Isolate* isolate,
842 wasm::WasmFeatures features, const JSWasmCallData* js_wasm_call_data,
846 Zone* zone, const wasm::FunctionSig* signature,