Lines Matching defs:wasm
6 // https://github.com/WebAssembly/wasm-c-api/:
22 #include "src/wasm/c-api.h"
33 #include "src/compiler/wasm-compiler.h"
37 #include "src/wasm/leb-helper.h"
38 #include "src/wasm/module-instantiate.h"
39 #include "src/wasm/wasm-arguments.h"
40 #include "src/wasm/wasm-constants.h"
41 #include "src/wasm/wasm-engine.h"
42 #include "src/wasm/wasm-objects.h"
43 #include "src/wasm/wasm-result.h"
44 #include "src/wasm/wasm-serialization.h"
45 #include "third_party/wasm-api/wasm.h"
55 namespace wasm {
72 ValKind V8ValueTypeToWasm(i::wasm::ValueType v8_valtype) {
74 case i::wasm::kI32:
76 case i::wasm::kI64:
78 case i::wasm::kF32:
80 case i::wasm::kF64:
82 case i::wasm::kRef:
83 case i::wasm::kOptRef:
85 case i::wasm::HeapType::kFunc:
87 case i::wasm::HeapType::kAny:
90 // TODO(wasm+): support new value types
94 // TODO(wasm+): support new value types
99 i::wasm::ValueType WasmValKindToV8(ValKind kind) {
102 return i::wasm::kWasmI32;
104 return i::wasm::kWasmI64;
106 return i::wasm::kWasmF32;
108 return i::wasm::kWasmF64;
110 return i::wasm::kWasmFuncRef;
112 return i::wasm::kWasmAnyRef;
114 // TODO(wasm+): support new value types
119 Name GetNameFromWireBytes(const i::wasm::WireBytesRef& ref,
129 own<FuncType> FunctionSigToFuncType(const i::wasm::FunctionSig* sig) {
143 own<ExternType> GetImportExportType(const i::wasm::WasmModule* module,
144 const i::wasm::ImportExportKindCode kind,
147 case i::wasm::kExternalFunction: {
150 case i::wasm::kExternalTable: {
151 const i::wasm::WasmTable& table = module->tables[index];
157 case i::wasm::kExternalMemory: {
163 case i::wasm::kExternalGlobal: {
164 const i::wasm::WasmGlobal& global = module->globals[index];
169 case i::wasm::kExternalTag:
176 /// BEGIN FILE wasm-v8.cc
573 // TODO(wasm+): support new value types
1055 size_t func_offset = module_offset - i::wasm::GetWasmFunctionOffset(
1124 i::wasm::ModuleWireBytes bytes(
1127 i::wasm::WasmFeatures features = i::wasm::WasmFeatures::FromIsolate(isolate);
1128 return i::wasm::GetWasmEngine()->SyncValidate(isolate, features, bytes);
1136 i::wasm::ModuleWireBytes bytes(
1138 i::wasm::WasmFeatures features = i::wasm::WasmFeatures::FromIsolate(isolate);
1139 i::wasm::ErrorThrower thrower(isolate, "ignored");
1141 if (!i::wasm::GetWasmEngine()
1151 const i::wasm::NativeModule* native_module =
1153 const i::wasm::WasmModule* module = native_module->module();
1156 const std::vector<i::wasm::WasmImport>& import_table = module->import_table;
1160 const i::wasm::WasmImport& imp = import_table[i];
1171 const i::wasm::NativeModule* native_module = module_obj->native_module();
1172 const i::wasm::WasmModule* module = native_module->module();
1175 const std::vector<i::wasm::WasmExport>& export_table = module->export_table;
1179 const i::wasm::WasmExport& exp = export_table[i];
1192 i::wasm::NativeModule* native_module =
1198 i::wasm::WasmSerializer serializer(native_module);
1200 size_t size_size = i::wasm::LEBHelper::sizeof_u64v(binary_size);
1204 i::wasm::LEBHelper::write_u64v(reinterpret_cast<uint8_t**>(&ptr),
1226 if (!i::wasm::DeserializeNativeModule(
1275 return wasm::EXTERN_FUNC;
1277 if (obj->IsWasmGlobalObject()) return wasm::EXTERN_GLOBAL;
1278 if (obj->IsWasmTableObject()) return wasm::EXTERN_TABLE;
1279 if (obj->IsWasmMemoryObject()) return wasm::EXTERN_MEMORY;
1374 static constexpr i::wasm::ValueType kMarker = i::wasm::kWasmVoid;
1376 static i::Handle<i::PodArray<i::wasm::ValueType>> Serialize(
1380 i::Handle<i::PodArray<i::wasm::ValueType>> sig =
1381 i::PodArray<i::wasm::ValueType>::New(isolate, sig_size,
1390 i::wasm::ValueType marker = kMarker;
1398 static own<FuncType> Deserialize(i::PodArray<i::wasm::ValueType> sig) {
1415 static int ResultArity(i::PodArray<i::wasm::ValueType> sig) {
1423 static int ParamArity(i::PodArray<i::wasm::ValueType> sig) {
1427 static i::PodArray<i::wasm::ValueType> GetSig(
1435 constexpr i::wasm::ValueType SignatureHelper::kMarker;
1492 const i::wasm::FunctionSig* sig =
1505 const i::wasm::FunctionSig* sig =
1525 const i::wasm::FunctionSig* sig,
1526 const i::wasm::WasmModule* module) {
1537 i::wasm::CWasmArgumentsPacker::TotalSize(sig));
1540 void PushArgs(const i::wasm::FunctionSig* sig, const Val args[],
1541 i::wasm::CWasmArgumentsPacker* packer, StoreImpl* store) {
1543 i::wasm::ValueType type = sig->GetParam(i);
1545 case i::wasm::kI32:
1548 case i::wasm::kI64:
1551 case i::wasm::kF32:
1554 case i::wasm::kF64:
1557 case i::wasm::kRef:
1558 case i::wasm::kOptRef:
1562 case i::wasm::kRtt:
1563 case i::wasm::kS128:
1566 case i::wasm::kI8:
1567 case i::wasm::kI16:
1568 case i::wasm::kVoid:
1569 case i::wasm::kBottom:
1575 void PopArgs(const i::wasm::FunctionSig* sig, Val results[],
1576 i::wasm::CWasmArgumentsPacker* packer, StoreImpl* store) {
1579 i::wasm::ValueType type = sig->GetReturn(i);
1581 case i::wasm::kI32:
1584 case i::wasm::kI64:
1587 case i::wasm::kF32:
1590 case i::wasm::kF64:
1593 case i::wasm::kRef:
1594 case i::wasm::kOptRef: {
1601 case i::wasm::kRtt:
1602 case i::wasm::kS128:
1605 case i::wasm::kI8:
1606 case i::wasm::kI16:
1607 case i::wasm::kVoid:
1608 case i::wasm::kBottom:
1665 const i::wasm::FunctionSig* sig =
1671 i::wasm::CWasmArgumentsPacker packer(function_data->packed_args_size());
1822 i::wasm::ValueType i_type = WasmValKindToV8(type->content()->kind());
1848 case i::wasm::kI32:
1850 case i::wasm::kI64:
1852 case i::wasm::kF32:
1854 case i::wasm::kF64:
1856 case i::wasm::kRef:
1857 case i::wasm::kOptRef: {
1863 case i::wasm::kRtt:
1864 case i::wasm::kS128:
1867 case i::wasm::kI8:
1868 case i::wasm::kI16:
1869 case i::wasm::kVoid:
1870 case i::wasm::kBottom:
1898 // TODO(wasm+): support new value types
1922 i::wasm::ValueType i_type;
1925 i_type = i::wasm::kWasmFuncRef;
1929 i_type = i::wasm::kWasmAnyRef;
1937 if (minimum > i::wasm::max_table_init_entries()) return nullptr;
1943 if (maximum > i::wasm::max_table_init_entries()) return nullptr;
1953 DCHECK(i::wasm::max_table_init_entries() <= i::kMaxInt);
1972 case i::wasm::HeapType::kFunc:
1975 case i::wasm::HeapType::kAny:
2008 if ((table->type() == i::wasm::kWasmFuncRef || table->type().has_index()) &&
2027 if ((table->type() == i::wasm::kWasmFuncRef || table->type().has_index()) &&
2057 if (minimum > i::wasm::kSpecMaxMemoryPages) return nullptr;
2061 if (maximum > i::wasm::kSpecMaxMemoryPages) return nullptr;
2063 // TODO(wasm+): Support shared memory.
2076 i::wasm::kWasmPageSize);
2094 i::wasm::kWasmPageSize);
2149 i::wasm::ErrorThrower thrower(isolate, "instantiation");
2151 i::wasm::GetWasmEngine()->SyncInstantiate(
2237 } // namespace wasm
2239 // BEGIN FILE wasm-c.cc
2252 wasm::vec<T> it;
2253 explicit borrowed_vec(wasm::vec<T>&& v) : it(std::move(v)) {}
2279 extern "C++" inline auto get_##name(wasm::own<Name>& x)->wasm_##name##_t* { \
2282 extern "C++" inline auto get_##name(const wasm::own<Name>& x) \
2286 extern "C++" inline auto release_##name(wasm::own<Name>&& x) \
2290 extern "C++" inline auto adopt_##name(wasm_##name##_t* x)->wasm::own<Name> { \
2377 wasm::vec, ) /* NOLINT(whitespace/parens) */ \
2381 auto v2 = wasm::vec<Name>::make_uninitialized(size); \
2395 WASM_DEFINE_VEC_BASE(name, Name, wasm::ownvec, *) \
2399 auto v2 = wasm::ownvec<Name>::make_uninitialized(size); \
2408 auto v2 = wasm::ownvec<Name>::make_uninitialized(v->size); \
2432 WASM_DEFINE_OWN(config, wasm::Config)
2435 return release_config(wasm::Config::make());
2440 WASM_DEFINE_OWN(engine, wasm::Engine)
2443 return release_engine(wasm::Engine::make());
2447 return release_engine(wasm::Engine::make(adopt_config(config)));
2452 WASM_DEFINE_OWN(store, wasm::Store)
2455 return release_store(wasm::Store::make(engine));
2463 extern "C++" inline auto hide_mutability(wasm::Mutability mutability)
2469 -> wasm::Mutability {
2470 return static_cast<wasm::Mutability>(mutability);
2473 extern "C++" inline auto hide_limits(const wasm::Limits& limits)
2478 extern "C++" inline auto reveal_limits(wasm_limits_t limits) -> wasm::Limits {
2479 return wasm::Limits(limits.min, limits.max);
2482 extern "C++" inline auto hide_valkind(wasm::ValKind kind) -> wasm_valkind_t {
2486 extern "C++" inline auto reveal_valkind(wasm_valkind_t kind) -> wasm::ValKind {
2487 return static_cast<wasm::ValKind>(kind);
2490 extern "C++" inline auto hide_externkind(wasm::ExternKind kind)
2496 -> wasm::ExternKind {
2497 return static_cast<wasm::ExternKind>(kind);
2512 WASM_DEFINE_TYPE(valtype, wasm::ValType)
2515 return release_valtype(wasm::ValType::make(reveal_valkind(k)));
2524 WASM_DEFINE_TYPE(functype, wasm::FuncType)
2528 return release_functype(wasm::FuncType::make(adopt_valtype_vec(params),
2542 WASM_DEFINE_TYPE(globaltype, wasm::GlobalType)
2546 return release_globaltype(wasm::GlobalType::make(
2560 WASM_DEFINE_TYPE(tabletype, wasm::TableType)
2565 wasm::TableType::make(adopt_valtype(element), reveal_limits(*limits)));
2578 WASM_DEFINE_TYPE(memorytype, wasm::MemoryType)
2581 return release_memorytype(wasm::MemoryType::make(reveal_limits(*limits)));
2590 WASM_DEFINE_TYPE(externtype, wasm::ExternType)
2597 return hide_externtype(static_cast<wasm::ExternType*>(ft));
2600 return hide_externtype(static_cast<wasm::ExternType*>(gt));
2603 return hide_externtype(static_cast<wasm::ExternType*>(tt));
2606 return hide_externtype(static_cast<wasm::ExternType*>(mt));
2611 return hide_externtype(static_cast<const wasm::ExternType*>(ft));
2615 return hide_externtype(static_cast<const wasm::ExternType*>(gt));
2619 return hide_externtype(static_cast<const wasm::ExternType*>(tt));
2623 return hide_externtype(static_cast<const wasm::ExternType*>(mt));
2627 return et->kind() == wasm::EXTERN_FUNC
2629 static_cast<wasm::FuncType*>(reveal_externtype(et)))
2633 return et->kind() == wasm::EXTERN_GLOBAL
2635 static_cast<wasm::GlobalType*>(reveal_externtype(et)))
2639 return et->kind() == wasm::EXTERN_TABLE
2641 static_cast<wasm::TableType*>(reveal_externtype(et)))
2645 return et->kind() == wasm::EXTERN_MEMORY
2647 static_cast<wasm::MemoryType*>(reveal_externtype(et)))
2653 return et->kind() == wasm::EXTERN_FUNC
2655 static_cast<const wasm::FuncType*>(reveal_externtype(et)))
2660 return et->kind() == wasm::EXTERN_GLOBAL
2662 static_cast<const wasm::GlobalType*>(reveal_externtype(et)))
2667 return et->kind() == wasm::EXTERN_TABLE
2669 static_cast<const wasm::TableType*>(reveal_externtype(et)))
2674 return et->kind() == wasm::EXTERN_MEMORY
2676 static_cast<const wasm::MemoryType*>(reveal_externtype(et)))
2682 WASM_DEFINE_TYPE(importtype, wasm::ImportType)
2686 return release_importtype(wasm::ImportType::make(
2704 WASM_DEFINE_TYPE(exporttype, wasm::ExportType)
2709 wasm::ExportType::make(adopt_byte_vec(name), adopt_externtype(type)));
2752 return hide_ref(static_cast<wasm::Ref*>(reveal_##name(r))); \
2759 return hide_ref(static_cast<const wasm::Ref*>(reveal_##name(r))); \
2767 WASM_DEFINE_OWN(shared_##name, wasm::Shared<Name>)
2769 WASM_DEFINE_REF_BASE(ref, wasm::Ref)
2779 inline auto hide_val(wasm::Val v) -> wasm_val_t {
2782 case wasm::I32:
2785 case wasm::I64:
2788 case wasm::F32:
2791 case wasm::F64:
2794 case wasm::ANYREF:
2795 case wasm::FUNCREF:
2804 inline auto release_val(wasm::Val v) -> wasm_val_t {
2807 case wasm::I32:
2810 case wasm::I64:
2813 case wasm::F32:
2816 case wasm::F64:
2819 case wasm::ANYREF:
2820 case wasm::FUNCREF:
2829 inline auto adopt_val(wasm_val_t v) -> wasm::Val {
2831 case wasm::I32:
2832 return wasm::Val(v.of.i32);
2833 case wasm::I64:
2834 return wasm::Val(v.of.i64);
2835 case wasm::F32:
2836 return wasm::Val(v.of.f32);
2837 case wasm::F64:
2838 return wasm::Val(v.of.f64);
2839 case wasm::ANYREF:
2840 case wasm::FUNCREF:
2841 return wasm::Val(adopt_ref(v.of.ref));
2848 wasm::Val it;
2849 explicit borrowed_val(wasm::Val&& v) : it(std::move(v)) {}
2857 wasm::Val v2;
2859 case wasm::I32:
2860 v2 = wasm::Val(v->of.i32);
2862 case wasm::I64:
2863 v2 = wasm::Val(v->of.i64);
2865 case wasm::F32:
2866 v2 = wasm::Val(v->of.f32);
2868 case wasm::F64:
2869 v2 = wasm::Val(v->of.f64);
2871 case wasm::ANYREF:
2872 case wasm::FUNCREF:
2873 v2 = wasm::Val(adopt_ref(v->of.ref));
2883 WASM_DEFINE_VEC_BASE(val, wasm::Val, wasm::vec, )
2887 auto v2 = wasm::vec<wasm::Val>::make_uninitialized(size);
2895 auto v2 = wasm::vec<wasm::Val>::make_uninitialized(v->size);
2922 WASM_DEFINE_OWN(frame, wasm::Frame)
2923 WASM_DEFINE_VEC_OWN(frame, wasm::Frame)
2946 WASM_DEFINE_REF(trap, wasm::Trap)
2950 return release_trap(wasm::Trap::make(store, message_.it));
2967 WASM_DEFINE_REF(foreign, wasm::Foreign)
2970 return release_foreign(wasm::Foreign::make(store));
2975 WASM_DEFINE_SHARABLE_REF(module, wasm::Module)
2979 return wasm::Module::validate(store, binary_.it);
2985 return release_module(wasm::Module::make(store, binary_.it));
3005 return release_module(wasm::Module::deserialize(store, binary_.it));
3014 return release_module(wasm::Module::obtain(store, shared));
3019 WASM_DEFINE_REF(func, wasm::Func)
3023 auto wasm_callback(void* env, const wasm::Val args[], wasm::Val results[])
3024 -> wasm::own<wasm::Trap> {
3035 auto wasm_callback_with_env(void* env, const wasm::Val args[],
3036 wasm::Val results[]) -> wasm::own<wasm::Trap> {
3052 return release_func(wasm::Func::make(store, type, wasm_callback,
3061 return release_func(wasm::Func::make(store, type, wasm_callback_with_env,
3085 WASM_DEFINE_REF(global, wasm::Global)
3091 return release_global(wasm::Global::make(store, type, val_.it));
3109 WASM_DEFINE_REF(table, wasm::Table)
3113 return release_table(wasm::Table::make(store, type, ref));
3140 WASM_DEFINE_REF(memory, wasm::Memory)
3144 return release_memory(wasm::Memory::make(store, type));
3167 WASM_DEFINE_REF(extern, wasm::Extern)
3168 WASM_DEFINE_VEC_OWN(extern, wasm::Extern)
3178 return hide_extern(static_cast<wasm::Extern*>(reveal_func(func)));
3181 return hide_extern(static_cast<wasm::Extern*>(reveal_global(global)));
3184 return hide_extern(static_cast<wasm::Extern*>(reveal_table(table)));
3187 return hide_extern(static_cast<wasm::Extern*>(reveal_memory(memory)));
3191 return hide_extern(static_cast<const wasm::Extern*>(reveal_func(func)));
3194 return hide_extern(static_cast<const wasm::Extern*>(reveal_global(global)));
3197 return hide_extern(static_cast<const wasm::Extern*>(reveal_table(table)));
3200 return hide_extern(static_cast<const wasm::Extern*>(reveal_memory(memory)));
3233 WASM_DEFINE_REF(instance, wasm::Instance)
3239 wasm::own<wasm::Trap> error;
3240 wasm_instance_t* instance = release_instance(wasm::Instance::make(
3241 store, module, reinterpret_cast<const wasm::Extern* const*>(imports),