Lines Matching full:wasm
5 #include "src/compiler/wasm-compiler.h"
51 #include "src/wasm/code-space-access.h"
52 #include "src/wasm/function-body-decoder-impl.h"
53 #include "src/wasm/function-compiler.h"
54 #include "src/wasm/graph-builder-interface.h"
55 #include "src/wasm/jump-table-assembler.h"
56 #include "src/wasm/memory-tracing.h"
57 #include "src/wasm/object-access.h"
58 #include "src/wasm/wasm-code-manager.h"
59 #include "src/wasm/wasm-constants.h"
60 #include "src/wasm/wasm-engine.h"
61 #include "src/wasm/wasm-limits.h"
62 #include "src/wasm/wasm-linkage.h"
63 #include "src/wasm/wasm-module.h"
64 #include "src/wasm/wasm-objects-inl.h"
65 #include "src/wasm/wasm-opcodes-inl.h"
75 wasm::WasmOpcodes::OpcodeName(opcode));
89 wasm::ObjectAccess::ToTagged(WasmInstanceObject::k##name##Offset))
94 wasm::ObjectAccess::ToTagged(WasmInstanceObject::k##name##Offset))
99 wasm::ObjectAccess::ToTagged(WasmInstanceObject::k##name##Offset))
111 bool ContainsSimd(const wasm::FunctionSig* sig) { in ContainsSimd()
113 if (type == wasm::kWasmS128) return true; in ContainsSimd()
118 bool ContainsInt64(const wasm::FunctionSig* sig) { in ContainsInt64()
120 if (type == wasm::kWasmI64) return true; in ContainsInt64()
126 wasm::WasmCode::RuntimeStubId runtime_stub_id) { in WasmRuntimeStubIdToBuiltinName()
129 case wasm::WasmCode::k##name: \ in WasmRuntimeStubIdToBuiltinName()
156 ObjectAccess ObjectAccessForGCStores(wasm::ValueType type) { in ObjectAccessForGCStores()
164 JSWasmCallData::JSWasmCallData(const wasm::FunctionSig* wasm_signature) in JSWasmCallData()
167 wasm::kI64) { in JSWasmCallData()
170 wasm::ValueType type = wasm_signature->GetParam(i); in JSWasmCallData()
171 arg_needs_conversion_[i] = type.kind() == wasm::kI64; in JSWasmCallData()
181 Node* CallRuntimeStub(wasm::WasmCode::RuntimeStubId stub_id, in CallRuntimeStub()
186 // A direct call to a wasm runtime stub defined in this module. in CallRuntimeStub()
345 wasm::ObjectAccess::ToTagged(Map::kInstanceTypeOffset)); in LoadInstanceType()
350 wasm::ObjectAccess::ToTagged(offset)); in LoadWasmTypeInfo()
356 wasm::ObjectAccess::ToTagged(WasmTypeInfo::kSupertypesOffset)); in LoadSupertypes()
364 wasm::ObjectAccess::ToTagged(FixedArray::kLengthOffset)); in LoadFixedArrayLengthAsSmi()
371 IntPtrConstant(wasm::ObjectAccess::ToTagged(FixedArray::kHeaderSize))); in LoadFixedArrayElement()
380 IntPtrConstant(wasm::ObjectAccess::ToTagged(FixedArray::kHeaderSize))); in LoadImmutableFixedArrayElement()
387 wasm::ObjectAccess::ElementOffsetInTaggedFixedArray(index)); in LoadFixedArrayElement()
406 wasm::ObjectAccess::ElementOffsetInTaggedFixedArray(index), value); in StoreFixedArrayElement()
426 wasm::ObjectAccess::SharedFunctionInfoOffsetInTaggedJSFunction()); in LoadSharedFunctionInfo()
431 wasm::ObjectAccess::ContextOffsetInTaggedJSFunction()); in LoadContextFromJSFunction()
438 wasm::ObjectAccess::ToTagged(SharedFunctionInfo::kFunctionDataOffset)); in LoadFunctionDataFromJSFunction()
444 wasm::ObjectAccess::ToTagged( in LoadExportedFunctionIndexAsSmi()
450 wasm::ObjectAccess::ToTagged( in LoadExportedFunctionInstance()
459 wasm::ObjectAccess::ToTagged(JSObject::kElementsOffset)); in LoadJSArrayElements()
464 Node* FieldOffset(const wasm::StructType* type, uint32_t field_index) { in FieldOffset()
465 return IntPtrConstant(wasm::ObjectAccess::ToTagged( in FieldOffset()
469 Node* StoreStructField(Node* struct_object, const wasm::StructType* type, in StoreStructField()
480 Node* WasmArrayElementOffset(Node* index, wasm::ValueType element_type) { in WasmArrayElementOffset()
484 IntPtrConstant(wasm::ObjectAccess::ToTagged(WasmArray::kHeaderSize)), in WasmArrayElementOffset()
491 wasm::ObjectAccess::ToTagged(WasmArray::kLengthOffset)); in LoadWasmArrayLength()
520 wasm::CompilationEnv* env, Zone* zone, MachineGraph* mcgraph, in WasmGraphBuilder()
521 const wasm::FunctionSig* sig, in WasmGraphBuilder()
534 DCHECK_IMPLIES(env && env->bounds_checks == wasm::kTrapHandler, in WasmGraphBuilder()
555 instance_node_ = Param(wasm::kWasmInstanceParameterIndex); in Start()
661 Node* WasmGraphBuilder::Phi(wasm::ValueType type, unsigned count, in Phi()
679 return gasm_->CallRuntimeStub(wasm::WasmCode::kWasmRefFunc, in RefFunc()
685 wasm::WasmCodePosition position) { in RefAsNonNull()
687 TrapIfTrue(wasm::kTrapIllegalCast, IsNull(arg), position); in RefAsNonNull()
701 // For wasm functions, the IsolateRoot is loaded from the instance node so in BuildLoadIsolateRoot()
710 wasm::ObjectAccess::ToTagged(WasmApiFunctionRef::kIsolateRootOffset)); in BuildLoadIsolateRoot()
730 wasm::WasmCodePosition position) { in StackCheck()
752 // A direct call to a wasm runtime stub defined in this module. in StackCheck()
755 wasm::WasmCode::kWasmStackGuard, RelocInfo::WASM_STUB_CALL)); in StackCheck()
841 Node* WasmGraphBuilder::Binop(wasm::WasmOpcode opcode, Node* left, Node* right, in Binop()
842 wasm::WasmCodePosition position) { in Binop()
846 case wasm::kExprI32Add: in Binop()
849 case wasm::kExprI32Sub: in Binop()
852 case wasm::kExprI32Mul: in Binop()
855 case wasm::kExprI32DivS: in Binop()
857 case wasm::kExprI32DivU: in Binop()
859 case wasm::kExprI32RemS: in Binop()
861 case wasm::kExprI32RemU: in Binop()
863 case wasm::kExprI32And: in Binop()
866 case wasm::kExprI32Ior: in Binop()
869 case wasm::kExprI32Xor: in Binop()
872 case wasm::kExprI32Shl: in Binop()
876 case wasm::kExprI32ShrU: in Binop()
880 case wasm::kExprI32ShrS: in Binop()
884 case wasm::kExprI32Ror: in Binop()
888 case wasm::kExprI32Rol: in Binop()
895 case wasm::kExprI32Eq: in Binop()
898 case wasm::kExprI32Ne: in Binop()
899 return Invert(Binop(wasm::kExprI32Eq, left, right)); in Binop()
900 case wasm::kExprI32LtS: in Binop()
903 case wasm::kExprI32LeS: in Binop()
906 case wasm::kExprI32LtU: in Binop()
909 case wasm::kExprI32LeU: in Binop()
912 case wasm::kExprI32GtS: in Binop()
916 case wasm::kExprI32GeS: in Binop()
920 case wasm::kExprI32GtU: in Binop()
924 case wasm::kExprI32GeU: in Binop()
928 case wasm::kExprI64And: in Binop()
931 case wasm::kExprI64Add: in Binop()
934 case wasm::kExprI64Sub: in Binop()
937 case wasm::kExprI64Mul: in Binop()
940 case wasm::kExprI64DivS: in Binop()
942 case wasm::kExprI64DivU: in Binop()
944 case wasm::kExprI64RemS: in Binop()
946 case wasm::kExprI64RemU: in Binop()
948 case wasm::kExprI64Ior: in Binop()
951 case wasm::kExprI64Xor: in Binop()
954 case wasm::kExprI64Shl: in Binop()
958 case wasm::kExprI64ShrU: in Binop()
962 case wasm::kExprI64ShrS: in Binop()
966 case wasm::kExprI64Eq: in Binop()
969 case wasm::kExprI64Ne: in Binop()
970 return Invert(Binop(wasm::kExprI64Eq, left, right)); in Binop()
971 case wasm::kExprI64LtS: in Binop()
974 case wasm::kExprI64LeS: in Binop()
977 case wasm::kExprI64LtU: in Binop()
980 case wasm::kExprI64LeU: in Binop()
983 case wasm::kExprI64GtS: in Binop()
987 case wasm::kExprI64GeS: in Binop()
991 case wasm::kExprI64GtU: in Binop()
995 case wasm::kExprI64GeU: in Binop()
999 case wasm::kExprI64Ror: in Binop()
1004 case wasm::kExprI64Rol: in Binop()
1015 case wasm::kExprF32CopySign: in Binop()
1017 case wasm::kExprF64CopySign: in Binop()
1019 case wasm::kExprF32Add: in Binop()
1022 case wasm::kExprF32Sub: in Binop()
1025 case wasm::kExprF32Mul: in Binop()
1028 case wasm::kExprF32Div: in Binop()
1031 case wasm::kExprF32Eq: in Binop()
1034 case wasm::kExprF32Ne: in Binop()
1035 return Invert(Binop(wasm::kExprF32Eq, left, right)); in Binop()
1036 case wasm::kExprF32Lt: in Binop()
1039 case wasm::kExprF32Ge: in Binop()
1043 case wasm::kExprF32Gt: in Binop()
1047 case wasm::kExprF32Le: in Binop()
1050 case wasm::kExprF64Add: in Binop()
1053 case wasm::kExprF64Sub: in Binop()
1056 case wasm::kExprF64Mul: in Binop()
1059 case wasm::kExprF64Div: in Binop()
1062 case wasm::kExprF64Eq: in Binop()
1065 case wasm::kExprF64Ne: in Binop()
1066 return Invert(Binop(wasm::kExprF64Eq, left, right)); in Binop()
1067 case wasm::kExprF64Lt: in Binop()
1070 case wasm::kExprF64Le: in Binop()
1073 case wasm::kExprF64Gt: in Binop()
1077 case wasm::kExprF64Ge: in Binop()
1081 case wasm::kExprF32Min: in Binop()
1084 case wasm::kExprF64Min: in Binop()
1087 case wasm::kExprF32Max: in Binop()
1090 case wasm::kExprF64Max: in Binop()
1093 case wasm::kExprF64Pow: in Binop()
1095 case wasm::kExprF64Atan2: in Binop()
1098 case wasm::kExprF64Mod: in Binop()
1100 case wasm::kExprRefEq: in Binop()
1102 case wasm::kExprI32AsmjsDivS: in Binop()
1104 case wasm::kExprI32AsmjsDivU: in Binop()
1106 case wasm::kExprI32AsmjsRemS: in Binop()
1108 case wasm::kExprI32AsmjsRemU: in Binop()
1110 case wasm::kExprI32AsmjsStoreMem8: in Binop()
1112 case wasm::kExprI32AsmjsStoreMem16: in Binop()
1114 case wasm::kExprI32AsmjsStoreMem: in Binop()
1116 case wasm::kExprF32AsmjsStoreMem: in Binop()
1118 case wasm::kExprF64AsmjsStoreMem: in Binop()
1126 Node* WasmGraphBuilder::Unop(wasm::WasmOpcode opcode, Node* input, in Unop()
1127 wasm::WasmCodePosition position) { in Unop()
1131 case wasm::kExprI32Eqz: in Unop()
1133 case wasm::kExprF32Abs: in Unop()
1136 case wasm::kExprF32Neg: { in Unop()
1140 case wasm::kExprF32Sqrt: in Unop()
1143 case wasm::kExprF64Abs: in Unop()
1146 case wasm::kExprF64Neg: { in Unop()
1150 case wasm::kExprF64Sqrt: in Unop()
1153 case wasm::kExprI32SConvertF32: in Unop()
1154 case wasm::kExprI32UConvertF32: in Unop()
1155 case wasm::kExprI32SConvertF64: in Unop()
1156 case wasm::kExprI32UConvertF64: in Unop()
1157 case wasm::kExprI32SConvertSatF64: in Unop()
1158 case wasm::kExprI32UConvertSatF64: in Unop()
1159 case wasm::kExprI32SConvertSatF32: in Unop()
1160 case wasm::kExprI32UConvertSatF32: in Unop()
1162 case wasm::kExprI32AsmjsSConvertF64: in Unop()
1164 case wasm::kExprI32AsmjsUConvertF64: in Unop()
1166 case wasm::kExprF32ConvertF64: in Unop()
1169 case wasm::kExprF64SConvertI32: in Unop()
1172 case wasm::kExprF64UConvertI32: in Unop()
1175 case wasm::kExprF32SConvertI32: in Unop()
1178 case wasm::kExprF32UConvertI32: in Unop()
1181 case wasm::kExprI32AsmjsSConvertF32: in Unop()
1183 case wasm::kExprI32AsmjsUConvertF32: in Unop()
1185 case wasm::kExprF64ConvertF32: in Unop()
1188 case wasm::kExprF32ReinterpretI32: in Unop()
1191 case wasm::kExprI32ReinterpretF32: in Unop()
1194 case wasm::kExprI32Clz: in Unop()
1197 case wasm::kExprI32Ctz: { in Unop()
1209 case wasm::kExprI32Popcnt: { in Unop()
1217 case wasm::kExprF32Floor: { in Unop()
1222 case wasm::kExprF32Ceil: { in Unop()
1227 case wasm::kExprF32Trunc: { in Unop()
1232 case wasm::kExprF32NearestInt: { in Unop()
1238 case wasm::kExprF64Floor: { in Unop()
1243 case wasm::kExprF64Ceil: { in Unop()
1248 case wasm::kExprF64Trunc: { in Unop()
1253 case wasm::kExprF64NearestInt: { in Unop()
1259 case wasm::kExprF64Acos: { in Unop()
1262 case wasm::kExprF64Asin: { in Unop()
1265 case wasm::kExprF64Atan: in Unop()
1268 case wasm::kExprF64Cos: { in Unop()
1272 case wasm::kExprF64Sin: { in Unop()
1276 case wasm::kExprF64Tan: { in Unop()
1280 case wasm::kExprF64Exp: { in Unop()
1284 case wasm::kExprF64Log: in Unop()
1287 case wasm::kExprI32ConvertI64: in Unop()
1290 case wasm::kExprI64SConvertI32: in Unop()
1293 case wasm::kExprI64UConvertI32: in Unop()
1296 case wasm::kExprF64ReinterpretI64: in Unop()
1299 case wasm::kExprI64ReinterpretF64: in Unop()
1302 case wasm::kExprI64Clz: in Unop()
1306 case wasm::kExprI64Ctz: { in Unop()
1324 case wasm::kExprI64Popcnt: { in Unop()
1335 case wasm::kExprI64Eqz: in Unop()
1337 case wasm::kExprF32SConvertI64: in Unop()
1343 case wasm::kExprF32UConvertI64: in Unop()
1349 case wasm::kExprF64SConvertI64: in Unop()
1355 case wasm::kExprF64UConvertI64: in Unop()
1361 case wasm::kExprI32SExtendI8: in Unop()
1364 case wasm::kExprI32SExtendI16: in Unop()
1367 case wasm::kExprI64SExtendI8: in Unop()
1370 case wasm::kExprI64SExtendI16: in Unop()
1373 case wasm::kExprI64SExtendI32: in Unop()
1376 case wasm::kExprI64SConvertF32: in Unop()
1377 case wasm::kExprI64UConvertF32: in Unop()
1378 case wasm::kExprI64SConvertF64: in Unop()
1379 case wasm::kExprI64UConvertF64: in Unop()
1380 case wasm::kExprI64SConvertSatF32: in Unop()
1381 case wasm::kExprI64UConvertSatF32: in Unop()
1382 case wasm::kExprI64SConvertSatF64: in Unop()
1383 case wasm::kExprI64UConvertSatF64: in Unop()
1387 case wasm::kExprRefIsNull: in Unop()
1391 case wasm::kExprRefAsNonNull: in Unop()
1393 case wasm::kExprI32AsmjsLoadMem8S: in Unop()
1395 case wasm::kExprI32AsmjsLoadMem8U: in Unop()
1397 case wasm::kExprI32AsmjsLoadMem16S: in Unop()
1399 case wasm::kExprI32AsmjsLoadMem16U: in Unop()
1401 case wasm::kExprI32AsmjsLoadMem: in Unop()
1403 case wasm::kExprF32AsmjsLoadMem: in Unop()
1405 case wasm::kExprF64AsmjsLoadMem: in Unop()
1442 Node* false_node, wasm::ValueType type) { in Select()
1444 wasm::ValueKind kind = type.kind(); in Select()
1446 if (kind == wasm::kF32 && m->Float32Select().IsSupported()) { in Select()
1450 if (kind == wasm::kF64 && m->Float64Select().IsSupported()) { in Select()
1454 if (kind == wasm::kI32 && m->Word32Select().IsSupported()) { in Select()
1458 if (kind == wasm::kI64 && m->Word64Select().IsSupported()) { in Select()
1471 TrapId WasmGraphBuilder::GetTrapIdForTrap(wasm::TrapReason reason) { in GetTrapIdForTrap()
1472 // TODO(wasm): "!env_" should not happen when compiling an actual wasm in GetTrapIdForTrap()
1483 case wasm::k##name: \ in GetTrapIdForTrap()
1485 static_cast<int>(TrapId::k##name) == wasm::WasmCode::kThrowWasm##name, \ in GetTrapIdForTrap()
1495 void WasmGraphBuilder::TrapIfTrue(wasm::TrapReason reason, Node* cond, in TrapIfTrue()
1496 wasm::WasmCodePosition position) { in TrapIfTrue()
1503 void WasmGraphBuilder::TrapIfFalse(wasm::TrapReason reason, Node* cond, in TrapIfFalse()
1504 wasm::WasmCodePosition position) { in TrapIfFalse()
1512 void WasmGraphBuilder::TrapIfEq32(wasm::TrapReason reason, Node* node, in TrapIfEq32()
1514 wasm::WasmCodePosition position) { in TrapIfEq32()
1525 void WasmGraphBuilder::ZeroCheck32(wasm::TrapReason reason, Node* node, in ZeroCheck32()
1526 wasm::WasmCodePosition position) { in ZeroCheck32()
1531 void WasmGraphBuilder::TrapIfEq64(wasm::TrapReason reason, Node* node, in TrapIfEq64()
1533 wasm::WasmCodePosition position) { in TrapIfEq64()
1540 void WasmGraphBuilder::ZeroCheck64(wasm::TrapReason reason, Node* node, in ZeroCheck64()
1541 wasm::WasmCodePosition position) { in ZeroCheck64()
1549 DCHECK_LE(count, wasm::kV8MaxWasmFunctionBrTableSize + 1); // plus IfDefault in Switch()
1580 void WasmGraphBuilder::Trap(wasm::TrapReason reason, in Trap()
1581 wasm::WasmCodePosition position) { in Trap()
1635 Node* node, MachineRepresentation mem_rep, wasm::ValueType wasmtype) { in BuildChangeEndiannessStore()
1644 case wasm::kF64: in BuildChangeEndiannessStore()
1648 case wasm::kI64: in BuildChangeEndiannessStore()
1651 case wasm::kF32: in BuildChangeEndiannessStore()
1655 case wasm::kI32: in BuildChangeEndiannessStore()
1658 case wasm::kS128: in BuildChangeEndiannessStore()
1669 if (wasmtype == wasm::kWasmI64 && mem_rep < MachineRepresentation::kWord64) { in BuildChangeEndiannessStore()
1673 valueSizeInBytes = wasm::kWasmI32.value_kind_size(); in BuildChangeEndiannessStore()
1678 } else if (wasmtype == wasm::kWasmI32 && in BuildChangeEndiannessStore()
1737 case wasm::kF64: in BuildChangeEndiannessStore()
1740 case wasm::kF32: in BuildChangeEndiannessStore()
1753 wasm::ValueType wasmtype) { in BuildChangeEndiannessLoad()
1864 if (wasmtype == wasm::kWasmI64) { in BuildChangeEndiannessLoad()
1869 } else if (wasmtype == wasm::kWasmI32) { in BuildChangeEndiannessLoad()
1875 } else if (wasmtype == wasm::kWasmI64 && valueSizeInBits < 64) { in BuildChangeEndiannessLoad()
1884 wasm::kExprF32ReinterpretI32, in BuildF32CopySign()
1885 Binop(wasm::kExprI32Ior, in BuildF32CopySign()
1886 Binop(wasm::kExprI32And, Unop(wasm::kExprI32ReinterpretF32, left), in BuildF32CopySign()
1888 Binop(wasm::kExprI32And, Unop(wasm::kExprI32ReinterpretF32, right), in BuildF32CopySign()
1917 MachineType IntConvertType(wasm::WasmOpcode opcode) { in IntConvertType()
1919 case wasm::kExprI32SConvertF32: in IntConvertType()
1920 case wasm::kExprI32SConvertF64: in IntConvertType()
1921 case wasm::kExprI32SConvertSatF32: in IntConvertType()
1922 case wasm::kExprI32SConvertSatF64: in IntConvertType()
1924 case wasm::kExprI32UConvertF32: in IntConvertType()
1925 case wasm::kExprI32UConvertF64: in IntConvertType()
1926 case wasm::kExprI32UConvertSatF32: in IntConvertType()
1927 case wasm::kExprI32UConvertSatF64: in IntConvertType()
1929 case wasm::kExprI64SConvertF32: in IntConvertType()
1930 case wasm::kExprI64SConvertF64: in IntConvertType()
1931 case wasm::kExprI64SConvertSatF32: in IntConvertType()
1932 case wasm::kExprI64SConvertSatF64: in IntConvertType()
1934 case wasm::kExprI64UConvertF32: in IntConvertType()
1935 case wasm::kExprI64UConvertF64: in IntConvertType()
1936 case wasm::kExprI64UConvertSatF32: in IntConvertType()
1937 case wasm::kExprI64UConvertSatF64: in IntConvertType()
1944 MachineType FloatConvertType(wasm::WasmOpcode opcode) { in FloatConvertType()
1946 case wasm::kExprI32SConvertF32: in FloatConvertType()
1947 case wasm::kExprI32UConvertF32: in FloatConvertType()
1948 case wasm::kExprI32SConvertSatF32: in FloatConvertType()
1949 case wasm::kExprI64SConvertF32: in FloatConvertType()
1950 case wasm::kExprI64UConvertF32: in FloatConvertType()
1951 case wasm::kExprI32UConvertSatF32: in FloatConvertType()
1952 case wasm::kExprI64SConvertSatF32: in FloatConvertType()
1953 case wasm::kExprI64UConvertSatF32: in FloatConvertType()
1955 case wasm::kExprI32SConvertF64: in FloatConvertType()
1956 case wasm::kExprI32UConvertF64: in FloatConvertType()
1957 case wasm::kExprI64SConvertF64: in FloatConvertType()
1958 case wasm::kExprI64UConvertF64: in FloatConvertType()
1959 case wasm::kExprI32SConvertSatF64: in FloatConvertType()
1960 case wasm::kExprI32UConvertSatF64: in FloatConvertType()
1961 case wasm::kExprI64SConvertSatF64: in FloatConvertType()
1962 case wasm::kExprI64UConvertSatF64: in FloatConvertType()
1969 const Operator* ConvertOp(WasmGraphBuilder* builder, wasm::WasmOpcode opcode) { in ConvertOp()
1971 case wasm::kExprI32SConvertF32: in ConvertOp()
1974 case wasm::kExprI32SConvertSatF32: in ConvertOp()
1977 case wasm::kExprI32UConvertF32: in ConvertOp()
1980 case wasm::kExprI32UConvertSatF32: in ConvertOp()
1983 case wasm::kExprI32SConvertF64: in ConvertOp()
1984 case wasm::kExprI32SConvertSatF64: in ConvertOp()
1986 case wasm::kExprI32UConvertF64: in ConvertOp()
1987 case wasm::kExprI32UConvertSatF64: in ConvertOp()
1989 case wasm::kExprI64SConvertF32: in ConvertOp()
1990 case wasm::kExprI64SConvertSatF32: in ConvertOp()
1992 case wasm::kExprI64UConvertF32: in ConvertOp()
1993 case wasm::kExprI64UConvertSatF32: in ConvertOp()
1995 case wasm::kExprI64SConvertF64: in ConvertOp()
1996 case wasm::kExprI64SConvertSatF64: in ConvertOp()
1998 case wasm::kExprI64UConvertF64: in ConvertOp()
1999 case wasm::kExprI64UConvertSatF64: in ConvertOp()
2006 wasm::WasmOpcode ConvertBackOp(wasm::WasmOpcode opcode) { in ConvertBackOp()
2008 case wasm::kExprI32SConvertF32: in ConvertBackOp()
2009 case wasm::kExprI32SConvertSatF32: in ConvertBackOp()
2010 return wasm::kExprF32SConvertI32; in ConvertBackOp()
2011 case wasm::kExprI32UConvertF32: in ConvertBackOp()
2012 case wasm::kExprI32UConvertSatF32: in ConvertBackOp()
2013 return wasm::kExprF32UConvertI32; in ConvertBackOp()
2014 case wasm::kExprI32SConvertF64: in ConvertBackOp()
2015 case wasm::kExprI32SConvertSatF64: in ConvertBackOp()
2016 return wasm::kExprF64SConvertI32; in ConvertBackOp()
2017 case wasm::kExprI32UConvertF64: in ConvertBackOp()
2018 case wasm::kExprI32UConvertSatF64: in ConvertBackOp()
2019 return wasm::kExprF64UConvertI32; in ConvertBackOp()
2025 bool IsTrappingConvertOp(wasm::WasmOpcode opcode) { in IsTrappingConvertOp()
2027 case wasm::kExprI32SConvertF32: in IsTrappingConvertOp()
2028 case wasm::kExprI32UConvertF32: in IsTrappingConvertOp()
2029 case wasm::kExprI32SConvertF64: in IsTrappingConvertOp()
2030 case wasm::kExprI32UConvertF64: in IsTrappingConvertOp()
2031 case wasm::kExprI64SConvertF32: in IsTrappingConvertOp()
2032 case wasm::kExprI64UConvertF32: in IsTrappingConvertOp()
2033 case wasm::kExprI64SConvertF64: in IsTrappingConvertOp()
2034 case wasm::kExprI64UConvertF64: in IsTrappingConvertOp()
2036 case wasm::kExprI32SConvertSatF64: in IsTrappingConvertOp()
2037 case wasm::kExprI32UConvertSatF64: in IsTrappingConvertOp()
2038 case wasm::kExprI32SConvertSatF32: in IsTrappingConvertOp()
2039 case wasm::kExprI32UConvertSatF32: in IsTrappingConvertOp()
2040 case wasm::kExprI64SConvertSatF32: in IsTrappingConvertOp()
2041 case wasm::kExprI64UConvertSatF32: in IsTrappingConvertOp()
2042 case wasm::kExprI64SConvertSatF64: in IsTrappingConvertOp()
2043 case wasm::kExprI64UConvertSatF64: in IsTrappingConvertOp()
2095 wasm::WasmOpcode TruncOp(const MachineType& ty) { in TruncOp()
2098 return wasm::kExprF32Trunc; in TruncOp()
2100 return wasm::kExprF64Trunc; in TruncOp()
2106 wasm::WasmOpcode NeOp(const MachineType& ty) { in NeOp()
2109 return wasm::kExprF32Ne; in NeOp()
2111 return wasm::kExprF64Ne; in NeOp()
2117 wasm::WasmOpcode LtOp(const MachineType& ty) { in LtOp()
2120 return wasm::kExprF32Lt; in LtOp()
2122 return wasm::kExprF64Lt; in LtOp()
2128 Node* ConvertTrapTest(WasmGraphBuilder* builder, wasm::WasmOpcode opcode, in ConvertTrapTest()
2139 Node* ConvertSaturateTest(WasmGraphBuilder* builder, wasm::WasmOpcode opcode, in ConvertSaturateTest()
2146 test = builder->Binop(wasm::kExprI64Eq, test, builder->Int64Constant(0)); in ConvertSaturateTest()
2154 wasm::WasmCodePosition position, in BuildIntConvertFloat()
2155 wasm::WasmOpcode opcode) { in BuildIntConvertFloat()
2175 TrapIfTrue(wasm::kTrapFloatUnrepresentable, test, position); in BuildIntConvertFloat()
2177 ZeroCheck64(wasm::kTrapFloatUnrepresentable, test, position); in BuildIntConvertFloat()
2239 return Unop(wasm::kExprI64UConvertI32, in BuildI64Ctz()
2251 wasm::kExprI64UConvertI32, in BuildI64Popcnt()
2398 ExternalReference convert_ccall_ref(wasm::WasmOpcode opcode) { in convert_ccall_ref()
2400 case wasm::kExprI64SConvertF32: in convert_ccall_ref()
2401 case wasm::kExprI64SConvertSatF32: in convert_ccall_ref()
2403 case wasm::kExprI64UConvertF32: in convert_ccall_ref()
2404 case wasm::kExprI64UConvertSatF32: in convert_ccall_ref()
2406 case wasm::kExprI64SConvertF64: in convert_ccall_ref()
2407 case wasm::kExprI64SConvertSatF64: in convert_ccall_ref()
2409 case wasm::kExprI64UConvertF64: in convert_ccall_ref()
2410 case wasm::kExprI64UConvertSatF64: in convert_ccall_ref()
2420 wasm::WasmCodePosition position, in BuildCcallConvertFloat()
2421 wasm::WasmOpcode opcode) { in BuildCcallConvertFloat()
2437 ZeroCheck32(wasm::kTrapFloatUnrepresentable, overflow, position); in BuildCcallConvertFloat()
2440 Node* test = Binop(wasm::kExprI32Eq, overflow, Int32Constant(0), position); in BuildCcallConvertFloat()
2461 return gasm_->CallRuntimeStub(wasm::WasmCode::kWasmMemoryGrow, in MemoryGrow()
2476 wasm::WasmCode::kWasmMemoryGrow, Operator::kNoThrow, in MemoryGrow()
2485 Node* WasmGraphBuilder::Throw(uint32_t tag_index, const wasm::WasmTag* tag, in Throw()
2487 wasm::WasmCodePosition position) { in Throw()
2492 wasm::WasmCode::kWasmAllocateFixedArray, Operator::kNoThrow, in Throw()
2497 const wasm::WasmTagSig* sig = tag->sig; in Throw()
2502 case wasm::kF32: in Throw()
2505 case wasm::kI32: in Throw()
2508 case wasm::kF64: in Throw()
2511 case wasm::kI64: { in Throw()
2513 Binop(wasm::kExprI64ShrU, value, Int64Constant(32))); in Throw()
2519 case wasm::kS128: in Throw()
2533 case wasm::kRef: in Throw()
2534 case wasm::kOptRef: in Throw()
2535 case wasm::kRtt: in Throw()
2539 case wasm::kI8: in Throw()
2540 case wasm::kI16: in Throw()
2541 case wasm::kVoid: in Throw()
2542 case wasm::kBottom: in Throw()
2550 Node* throw_call = gasm_->CallRuntimeStub(wasm::WasmCode::kWasmThrow, in Throw()
2585 Node* upper = Binop(wasm::kExprI64Shl, in BuildDecodeException64BitValue()
2586 Unop(wasm::kExprI64UConvertI32, in BuildDecodeException64BitValue()
2589 Node* lower = Unop(wasm::kExprI64UConvertI32, in BuildDecodeException64BitValue()
2591 return Binop(wasm::kExprI64Ior, upper, lower); in BuildDecodeException64BitValue()
2598 return gasm_->CallRuntimeStub(wasm::WasmCode::kWasmRethrow, in Rethrow()
2622 const wasm::WasmTag* tag, in GetExceptionValues()
2629 const wasm::WasmTagSig* sig = tag->sig; in GetExceptionValues()
2634 case wasm::kI32: in GetExceptionValues()
2637 case wasm::kI64: in GetExceptionValues()
2640 case wasm::kF32: { in GetExceptionValues()
2641 value = Unop(wasm::kExprF32ReinterpretI32, in GetExceptionValues()
2645 case wasm::kF64: { in GetExceptionValues()
2646 value = Unop(wasm::kExprF64ReinterpretI64, in GetExceptionValues()
2650 case wasm::kS128: in GetExceptionValues()
2664 case wasm::kRef: in GetExceptionValues()
2665 case wasm::kOptRef: in GetExceptionValues()
2666 case wasm::kRtt: in GetExceptionValues()
2670 case wasm::kI8: in GetExceptionValues()
2671 case wasm::kI16: in GetExceptionValues()
2672 case wasm::kVoid: in GetExceptionValues()
2673 case wasm::kBottom: in GetExceptionValues()
2683 wasm::WasmCodePosition position) { in BuildI32DivS()
2684 ZeroCheck32(wasm::kTrapDivByZero, right, position); in BuildI32DivS()
2691 TrapIfEq32(wasm::kTrapDivUnrepresentable, left, kMinInt, position); in BuildI32DivS()
2701 wasm::WasmCodePosition position) { in BuildI32RemS()
2704 ZeroCheck32(wasm::kTrapRemByZero, right, position); in BuildI32RemS()
2715 wasm::WasmCodePosition position) { in BuildI32DivU()
2716 ZeroCheck32(wasm::kTrapDivByZero, right, position); in BuildI32DivU()
2721 wasm::WasmCodePosition position) { in BuildI32RemU()
2722 ZeroCheck32(wasm::kTrapRemByZero, right, position); in BuildI32RemU()
2893 wasm::WasmCodePosition position) { in BuildI64DivS()
2896 MachineType::Int64(), wasm::kTrapDivByZero, position); in BuildI64DivS()
2898 ZeroCheck64(wasm::kTrapDivByZero, right, position); in BuildI64DivS()
2905 TrapIfEq64(wasm::kTrapDivUnrepresentable, left, in BuildI64DivS()
2916 wasm::WasmCodePosition position) { in BuildI64RemS()
2919 MachineType::Int64(), wasm::kTrapRemByZero, position); in BuildI64RemS()
2921 ZeroCheck64(wasm::kTrapRemByZero, right, position); in BuildI64RemS()
2934 wasm::WasmCodePosition position) { in BuildI64DivU()
2937 MachineType::Int64(), wasm::kTrapDivByZero, position); in BuildI64DivU()
2939 ZeroCheck64(wasm::kTrapDivByZero, right, position); in BuildI64DivU()
2943 wasm::WasmCodePosition position) { in BuildI64RemU()
2946 MachineType::Int64(), wasm::kTrapRemByZero, position); in BuildI64RemU()
2948 ZeroCheck64(wasm::kTrapRemByZero, right, position); in BuildI64RemU()
2955 wasm::TrapReason trap_zero, in BuildDiv64Call()
2956 wasm::WasmCodePosition position) { in BuildDiv64Call()
2968 TrapIfEq32(wasm::kTrapDivUnrepresentable, call, -1, position); in BuildDiv64Call()
2989 Node* WasmGraphBuilder::BuildCallNode(const wasm::FunctionSig* sig, in BuildCallNode()
2991 wasm::WasmCodePosition position, in BuildCallNode()
3020 DCHECK(position == wasm::kNoCodePosition || position > 0); in BuildCallNode()
3026 Node* WasmGraphBuilder::BuildWasmCall(const wasm::FunctionSig* sig, in BuildWasmCall()
3029 wasm::WasmCodePosition position, in BuildWasmCall()
3057 Node* WasmGraphBuilder::BuildWasmReturnCall(const wasm::FunctionSig* sig, in BuildWasmReturnCall()
3059 wasm::WasmCodePosition position, in BuildWasmReturnCall()
3073 Node* WasmGraphBuilder::BuildImportCall(const wasm::FunctionSig* sig, in BuildImportCall()
3076 wasm::WasmCodePosition position, in BuildImportCall()
3083 Node* WasmGraphBuilder::BuildImportCall(const wasm::FunctionSig* sig, in BuildImportCall()
3086 wasm::WasmCodePosition position, in BuildImportCall()
3116 Node* WasmGraphBuilder::CallDirect(uint32_t index, wasm::FunctionSig* real_sig, in CallDirect()
3119 wasm::WasmCodePosition position) { in CallDirect()
3128 // A direct call to a wasm function defined in this module. in CallDirect()
3137 wasm::FunctionSig* sig, in CallIndirect()
3140 wasm::WasmCodePosition position) { in CallIndirect()
3151 const wasm::WasmTable& table = env_->module->tables[table_index]; in LoadIndirectFunctionTable()
3178 wasm::ObjectAccess::ToTagged(WasmIndirectFunctionTable::kSizeOffset)); in LoadIndirectFunctionTable()
3183 wasm::ObjectAccess::ToTagged(WasmIndirectFunctionTable::kSigIdsOffset)); in LoadIndirectFunctionTable()
3187 wasm::ObjectAccess::ToTagged(WasmIndirectFunctionTable::kTargetsOffset)); in LoadIndirectFunctionTable()
3191 wasm::ObjectAccess::ToTagged(WasmIndirectFunctionTable::kRefsOffset)); in LoadIndirectFunctionTable()
3195 uint32_t table_index, uint32_t sig_index, wasm::FunctionSig* real_sig, in BuildIndirectCall()
3197 wasm::WasmCodePosition position, IsReturnCall continuation) { in BuildIndirectCall()
3213 TrapIfFalse(wasm::kTrapTableOutOfBounds, in_bounds, position); in BuildIndirectCall()
3215 const wasm::ValueType table_type = env_->module->tables[table_index].type; in BuildIndirectCall()
3224 table_type.is_reference_to(wasm::HeapType::kFunc) || in BuildIndirectCall()
3235 TrapIfFalse(wasm::kTrapFuncSigMismatch, sig_match, position); in BuildIndirectCall()
3263 MachineType::Uint32(), object, wasm::ObjectAccess::ToTagged(offset)); in BuildLoadExternalPointerFromObject()
3277 wasm::ObjectAccess::ToTagged(offset)); in BuildLoadExternalPointerFromObject()
3285 wasm::ObjectAccess::ToTagged(WasmExportedFunctionData::kInternalOffset)); in BuildLoadCallTargetFromExportedFunctionData()
3291 Node* WasmGraphBuilder::BuildCallRef(const wasm::FunctionSig* real_sig, in BuildCallRef()
3296 wasm::WasmCodePosition position) { in BuildCallRef()
3298 TrapIfTrue(wasm::kTrapNullDereference, IsNull(args[0]), position); in BuildCallRef()
3308 wasm::ObjectAccess::ToTagged(WasmInternalFunction::kRefOffset)); in BuildCallRef()
3319 wasm::ObjectAccess::ToTagged(WasmInternalFunction::kCodeOffset)); in BuildCallRef()
3329 wasm::ObjectAccess::ToTagged(Code::kHeaderSize))); in BuildCallRef()
3351 wasm::ObjectAccess::ToTagged( in CompareToInternalFunctionAtIndex()
3360 Node* WasmGraphBuilder::CallRef(const wasm::FunctionSig* real_sig, in CallRef()
3364 wasm::WasmCodePosition position) { in CallRef()
3369 Node* WasmGraphBuilder::ReturnCallRef(const wasm::FunctionSig* real_sig, in ReturnCallRef()
3372 wasm::WasmCodePosition position) { in ReturnCallRef()
3378 const wasm::FunctionSig* real_sig, in ReturnCall()
3380 wasm::WasmCodePosition position) { in ReturnCall()
3388 // A direct tail call to a wasm function defined in this module. in ReturnCall()
3399 wasm::FunctionSig* real_sig, in ReturnCallIndirect()
3401 wasm::WasmCodePosition position) { in ReturnCallIndirect()
3416 return Binop(wasm::kExprI32Ror, left, in BuildI32Rol()
3419 return Binop(wasm::kExprI32Ror, left, in BuildI32Rol()
3420 Binop(wasm::kExprI32Sub, Int32Constant(32), right)); in BuildI32Rol()
3430 : Binop(wasm::kExprI64Sub, Int64Constant(64), right); in BuildI64Rol()
3431 return Binop(wasm::kExprI64Ror, left, inv_right); in BuildI64Rol()
3435 return Unop(wasm::kExprI32Eqz, node); in Invert()
3637 DCHECK_EQ(wasm::kWasmOrigin, env_->module->origin); in CurrentMemoryPages()
3642 gasm_->WordShr(mem_size, Int32Constant(wasm::kWasmPageSizeLog2)); in CurrentMemoryPages()
3695 void WasmGraphBuilder::GetGlobalBaseAndOffset(const wasm::WasmGlobal& global, in GetGlobalBaseAndOffset()
3714 wasm::ObjectAccess::ToTagged(FixedArray::kObjectsOffset))); in GetGlobalBaseAndOffset()
3723 wasm::ObjectAccess::ElementOffsetInTaggedFixedArray(global.offset)); in GetGlobalBaseAndOffset()
3731 const wasm::WasmGlobal& global = env_->module->globals[index]; in GlobalGet()
3732 if (global.type == wasm::kWasmS128) has_simd_ = true; in GlobalGet()
3742 const wasm::WasmGlobal& global = env_->module->globals[index]; in GlobalSet()
3743 if (global.type == wasm::kWasmS128) has_simd_ = true; in GlobalSet()
3754 wasm::WasmCodePosition position) { in TableGet()
3755 return gasm_->CallRuntimeStub(wasm::WasmCode::kWasmTableGet, in TableGet()
3761 wasm::WasmCodePosition position) { in TableSet()
3762 gasm_->CallRuntimeStub(wasm::WasmCode::kWasmTableSet, Operator::kNoThrow, in TableSet()
3768 wasm::WasmCodePosition position) { in CheckBoundsAndAlignment()
3780 // TODO(wasm): a constant match is also done above in {BoundsCheckMem}. in CheckBoundsAndAlignment()
3786 TrapIfEq32(wasm::kTrapUnalignedAccess, Int32Constant(0), 0, position); in CheckBoundsAndAlignment()
3793 // TODO(wasm): this addition is redundant with one inserted by {MemBuffer}. in CheckBoundsAndAlignment()
3798 TrapIfFalse(wasm::kTrapUnalignedAccess, in CheckBoundsAndAlignment()
3809 wasm::WasmCodePosition position, in BoundsCheckMem()
3819 TrapIfEq32(wasm::kTrapMemOutOfBounds, Int32Constant(0), 0, position); in BoundsCheckMem()
3829 DCHECK_NE(wasm::kTrapHandler, env_->bounds_checks); in BoundsCheckMem()
3830 if (env_->bounds_checks == wasm::kExplicitBoundsChecks) { in BoundsCheckMem()
3833 TrapIfTrue(wasm::kTrapMemOutOfBounds, high_word, position); in BoundsCheckMem()
3841 if (env_->bounds_checks == wasm::kNoBoundsChecks) return {index, kInBounds}; in BoundsCheckMem()
3862 if (env_->bounds_checks == wasm::kTrapHandler && in BoundsCheckMem()
3873 TrapIfFalse(wasm::kTrapMemOutOfBounds, cond, position); in BoundsCheckMem()
3881 TrapIfFalse(wasm::kTrapMemOutOfBounds, cond, position); in BoundsCheckMem()
3886 wasm::ValueType type) { in GetSafeLoadOperator()
3902 wasm::ValueType type) { in GetSafeStoreOperator()
3918 void WasmGraphBuilder::TraceFunctionEntry(wasm::WasmCodePosition position) { in TraceFunctionEntry()
3924 wasm::WasmCodePosition position) { in TraceFunctionExit()
3928 wasm::ValueType return_type = sig_->GetReturn(0); in TraceFunctionExit()
3944 wasm::WasmCodePosition position) { in TraceMemoryOperation()
3947 gasm_->StackSlot(sizeof(wasm::MemoryTracingInfo), kAlign); in TraceMemoryOperation()
3955 store(offsetof(wasm::MemoryTracingInfo, offset), in TraceMemoryOperation()
3957 store(offsetof(wasm::MemoryTracingInfo, is_store), in TraceMemoryOperation()
3959 store(offsetof(wasm::MemoryTracingInfo, mem_rep), in TraceMemoryOperation()
3970 MachineType memtype, wasm::LoadTransformationKind transform) { in GetLoadTransformation()
3972 case wasm::LoadTransformationKind::kSplat: { in GetLoadTransformation()
3984 case wasm::LoadTransformationKind::kExtend: { in GetLoadTransformation()
4000 case wasm::LoadTransformationKind::kZeroExtend: { in GetLoadTransformation()
4031 Node* WasmGraphBuilder::LoadLane(wasm::ValueType type, MachineType memtype, in LoadLane()
4034 wasm::WasmCodePosition position) { in LoadLane()
4062 Node* WasmGraphBuilder::LoadTransform(wasm::ValueType type, MachineType memtype, in LoadTransform()
4063 wasm::LoadTransformationKind transform, in LoadTransform()
4066 wasm::WasmCodePosition position) { in LoadTransform()
4073 // Wasm semantics throw on OOB. Introduce explicit bounds check and in LoadTransform()
4077 uint8_t access_size = transform == wasm::LoadTransformationKind::kExtend in LoadTransform()
4103 Node* WasmGraphBuilder::LoadMem(wasm::ValueType type, MachineType memtype, in LoadMem()
4106 wasm::WasmCodePosition position) { in LoadMem()
4113 // Wasm semantics throw on OOB. Introduce explicit bounds check and in LoadMem()
4140 if (type == wasm::kWasmI64 && in LoadMem()
4159 wasm::WasmCodePosition position, in StoreLane()
4160 wasm::ValueType type) { in StoreLane()
4186 wasm::WasmCodePosition position, in StoreMem()
4187 wasm::ValueType type) { in StoreMem()
4354 Zone* zone, const wasm::FunctionSig* sig, in CreateMachineSignature()
4430 wasm::WasmCodePosition position) { in SetSourcePosition()
4431 DCHECK_NE(position, wasm::kNoCodePosition); in SetSourcePosition()
4442 Node* WasmGraphBuilder::SimdOp(wasm::WasmOpcode opcode, Node* const* inputs) { in SimdOp()
4445 case wasm::kExprF64x2Splat: in SimdOp()
4447 case wasm::kExprF64x2Abs: in SimdOp()
4449 case wasm::kExprF64x2Neg: in SimdOp()
4451 case wasm::kExprF64x2Sqrt: in SimdOp()
4453 case wasm::kExprF64x2Add: in SimdOp()
4456 case wasm::kExprF64x2Sub: in SimdOp()
4459 case wasm::kExprF64x2Mul: in SimdOp()
4462 case wasm::kExprF64x2Div: in SimdOp()
4465 case wasm::kExprF64x2Min: in SimdOp()
4468 case wasm::kExprF64x2Max: in SimdOp()
4471 case wasm::kExprF64x2Eq: in SimdOp()
4474 case wasm::kExprF64x2Ne: in SimdOp()
4477 case wasm::kExprF64x2Lt: in SimdOp()
4480 case wasm::kExprF64x2Le: in SimdOp()
4483 case wasm::kExprF64x2Gt: in SimdOp()
4486 case wasm::kExprF64x2Ge: in SimdOp()
4489 case wasm::kExprF64x2Qfma: in SimdOp()
4492 case wasm::kExprF64x2Qfms: in SimdOp()
4495 case wasm::kExprF64x2Pmin: in SimdOp()
4498 case wasm::kExprF64x2Pmax: in SimdOp()
4501 case wasm::kExprF64x2Ceil: in SimdOp()
4506 case wasm::kExprF64x2Floor: in SimdOp()
4511 case wasm::kExprF64x2Trunc: in SimdOp()
4517 case wasm::kExprF64x2NearestInt: in SimdOp()
4524 case wasm::kExprF64x2ConvertLowI32x4S: in SimdOp()
4527 case wasm::kExprF64x2ConvertLowI32x4U: in SimdOp()
4530 case wasm::kExprF64x2PromoteLowF32x4: in SimdOp()
4533 case wasm::kExprF32x4Splat: in SimdOp()
4535 case wasm::kExprF32x4SConvertI32x4: in SimdOp()
4538 case wasm::kExprF32x4UConvertI32x4: in SimdOp()
4541 case wasm::kExprF32x4Abs: in SimdOp()
4543 case wasm::kExprF32x4Neg: in SimdOp()
4545 case wasm::kExprF32x4Sqrt: in SimdOp()
4547 case wasm::kExprF32x4RecipApprox: in SimdOp()
4550 case wasm::kExprF32x4RecipSqrtApprox: in SimdOp()
4553 case wasm::kExprF32x4Add: in SimdOp()
4556 case wasm::kExprF32x4Sub: in SimdOp()
4559 case wasm::kExprF32x4Mul: in SimdOp()
4562 case wasm::kExprF32x4Div: in SimdOp()
4565 case wasm::kExprF32x4Min: in SimdOp()
4568 case wasm::kExprF32x4Max: in SimdOp()
4571 case wasm::kExprF32x4Eq: in SimdOp()
4574 case wasm::kExprF32x4Ne: in SimdOp()
4577 case wasm::kExprF32x4Lt: in SimdOp()
4580 case wasm::kExprF32x4Le: in SimdOp()
4583 case wasm::kExprF32x4Gt: in SimdOp()
4586 case wasm::kExprF32x4Ge: in SimdOp()
4589 case wasm::kExprF32x4Qfma: in SimdOp()
4592 case wasm::kExprF32x4Qfms: in SimdOp()
4595 case wasm::kExprF32x4Pmin: in SimdOp()
4598 case wasm::kExprF32x4Pmax: in SimdOp()
4601 case wasm::kExprF32x4Ceil: in SimdOp()
4606 case wasm::kExprF32x4Floor: in SimdOp()
4611 case wasm::kExprF32x4Trunc: in SimdOp()
4617 case wasm::kExprF32x4NearestInt: in SimdOp()
4624 case wasm::kExprF32x4DemoteF64x2Zero: in SimdOp()
4627 case wasm::kExprI64x2Splat: in SimdOp()
4629 case wasm::kExprI64x2Abs: in SimdOp()
4631 case wasm::kExprI64x2Neg: in SimdOp()
4633 case wasm::kExprI64x2SConvertI32x4Low: in SimdOp()
4636 case wasm::kExprI64x2SConvertI32x4High: in SimdOp()
4639 case wasm::kExprI64x2UConvertI32x4Low: in SimdOp()
4642 case wasm::kExprI64x2UConvertI32x4High: in SimdOp()
4645 case wasm::kExprI64x2BitMask: in SimdOp()
4647 case wasm::kExprI64x2Shl: in SimdOp()
4650 case wasm::kExprI64x2ShrS: in SimdOp()
4653 case wasm::kExprI64x2Add: in SimdOp()
4656 case wasm::kExprI64x2Sub: in SimdOp()
4659 case wasm::kExprI64x2Mul: in SimdOp()
4662 case wasm::kExprI64x2Eq: in SimdOp()
4665 case wasm::kExprI64x2Ne: in SimdOp()
4668 case wasm::kExprI64x2LtS: in SimdOp()
4671 case wasm::kExprI64x2LeS: in SimdOp()
4674 case wasm::kExprI64x2GtS: in SimdOp()
4677 case wasm::kExprI64x2GeS: in SimdOp()
4680 case wasm::kExprI64x2ShrU: in SimdOp()
4683 case wasm::kExprI64x2ExtMulLowI32x4S: in SimdOp()
4686 case wasm::kExprI64x2ExtMulHighI32x4S: in SimdOp()
4689 case wasm::kExprI64x2ExtMulLowI32x4U: in SimdOp()
4692 case wasm::kExprI64x2ExtMulHighI32x4U: in SimdOp()
4695 case wasm::kExprI32x4Splat: in SimdOp()
4697 case wasm::kExprI32x4SConvertF32x4: in SimdOp()
4700 case wasm::kExprI32x4UConvertF32x4: in SimdOp()
4703 case wasm::kExprI32x4SConvertI16x8Low: in SimdOp()
4706 case wasm::kExprI32x4SConvertI16x8High: in SimdOp()
4709 case wasm::kExprI32x4Neg: in SimdOp()
4711 case wasm::kExprI32x4Shl: in SimdOp()
4714 case wasm::kExprI32x4ShrS: in SimdOp()
4717 case wasm::kExprI32x4Add: in SimdOp()
4720 case wasm::kExprI32x4Sub: in SimdOp()
4723 case wasm::kExprI32x4Mul: in SimdOp()
4726 case wasm::kExprI32x4MinS: in SimdOp()
4729 case wasm::kExprI32x4MaxS: in SimdOp()
4732 case wasm::kExprI32x4Eq: in SimdOp()
4735 case wasm::kExprI32x4Ne: in SimdOp()
4738 case wasm::kExprI32x4LtS: in SimdOp()
4741 case wasm::kExprI32x4LeS: in SimdOp()
4744 case wasm::kExprI32x4GtS: in SimdOp()
4747 case wasm::kExprI32x4GeS: in SimdOp()
4750 case wasm::kExprI32x4UConvertI16x8Low: in SimdOp()
4753 case wasm::kExprI32x4UConvertI16x8High: in SimdOp()
4756 case wasm::kExprI32x4ShrU: in SimdOp()
4759 case wasm::kExprI32x4MinU: in SimdOp()
4762 case wasm::kExprI32x4MaxU: in SimdOp()
4765 case wasm::kExprI32x4LtU: in SimdOp()
4768 case wasm::kExprI32x4LeU: in SimdOp()
4771 case wasm::kExprI32x4GtU: in SimdOp()
4774 case wasm::kExprI32x4GeU: in SimdOp()
4777 case wasm::kExprI32x4Abs: in SimdOp()
4779 case wasm::kExprI32x4BitMask: in SimdOp()
4781 case wasm::kExprI32x4DotI16x8S: in SimdOp()
4784 case wasm::kExprI32x4ExtMulLowI16x8S: in SimdOp()
4787 case wasm::kExprI32x4ExtMulHighI16x8S: in SimdOp()
4790 case wasm::kExprI32x4ExtMulLowI16x8U: in SimdOp()
4793 case wasm::kExprI32x4ExtMulHighI16x8U: in SimdOp()
4796 case wasm::kExprI32x4ExtAddPairwiseI16x8S: in SimdOp()
4799 case wasm::kExprI32x4ExtAddPairwiseI16x8U: in SimdOp()
4802 case wasm::kExprI32x4TruncSatF64x2SZero: in SimdOp()
4805 case wasm::kExprI32x4TruncSatF64x2UZero: in SimdOp()
4808 case wasm::kExprI16x8Splat: in SimdOp()
4810 case wasm::kExprI16x8SConvertI8x16Low: in SimdOp()
4813 case wasm::kExprI16x8SConvertI8x16High: in SimdOp()
4816 case wasm::kExprI16x8Shl: in SimdOp()
4819 case wasm::kExprI16x8ShrS: in SimdOp()
4822 case wasm::kExprI16x8Neg: in SimdOp()
4824 case wasm::kExprI16x8SConvertI32x4: in SimdOp()
4827 case wasm::kExprI16x8Add: in SimdOp()
4830 case wasm::kExprI16x8AddSatS: in SimdOp()
4833 case wasm::kExprI16x8Sub: in SimdOp()
4836 case wasm::kExprI16x8SubSatS: in SimdOp()
4839 case wasm::kExprI16x8Mul: in SimdOp()
4842 case wasm::kExprI16x8MinS: in SimdOp()
4845 case wasm::kExprI16x8MaxS: in SimdOp()
4848 case wasm::kExprI16x8Eq: in SimdOp()
4851 case wasm::kExprI16x8Ne: in SimdOp()
4854 case wasm::kExprI16x8LtS: in SimdOp()
4857 case wasm::kExprI16x8LeS: in SimdOp()
4860 case wasm::kExprI16x8GtS: in SimdOp()
4863 case wasm::kExprI16x8GeS: in SimdOp()
4866 case wasm::kExprI16x8UConvertI8x16Low: in SimdOp()
4869 case wasm::kExprI16x8UConvertI8x16High: in SimdOp()
4872 case wasm::kExprI16x8UConvertI32x4: in SimdOp()
4875 case wasm::kExprI16x8ShrU: in SimdOp()
4878 case wasm::kExprI16x8AddSatU: in SimdOp()
4881 case wasm::kExprI16x8SubSatU: in SimdOp()
4884 case wasm::kExprI16x8MinU: in SimdOp()
4887 case wasm::kExprI16x8MaxU: in SimdOp()
4890 case wasm::kExprI16x8LtU: in SimdOp()
4893 case wasm::kExprI16x8LeU: in SimdOp()
4896 case wasm::kExprI16x8GtU: in SimdOp()
4899 case wasm::kExprI16x8GeU: in SimdOp()
4902 case wasm::kExprI16x8RoundingAverageU: in SimdOp()
4905 case wasm::kExprI16x8Q15MulRSatS: in SimdOp()
4908 case wasm::kExprI16x8Abs: in SimdOp()
4910 case wasm::kExprI16x8BitMask: in SimdOp()
4912 case wasm::kExprI16x8ExtMulLowI8x16S: in SimdOp()
4915 case wasm::kExprI16x8ExtMulHighI8x16S: in SimdOp()
4918 case wasm::kExprI16x8ExtMulLowI8x16U: in SimdOp()
4921 case wasm::kExprI16x8ExtMulHighI8x16U: in SimdOp()
4924 case wasm::kExprI16x8ExtAddPairwiseI8x16S: in SimdOp()
4927 case wasm::kExprI16x8ExtAddPairwiseI8x16U: in SimdOp()
4930 case wasm::kExprI8x16Splat: in SimdOp()
4932 case wasm::kExprI8x16Neg: in SimdOp()
4934 case wasm::kExprI8x16Shl: in SimdOp()
4937 case wasm::kExprI8x16ShrS: in SimdOp()
4940 case wasm::kExprI8x16SConvertI16x8: in SimdOp()
4943 case wasm::kExprI8x16Add: in SimdOp()
4946 case wasm::kExprI8x16AddSatS: in SimdOp()
4949 case wasm::kExprI8x16Sub: in SimdOp()
4952 case wasm::kExprI8x16SubSatS: in SimdOp()
4955 case wasm::kExprI8x16MinS: in SimdOp()
4958 case wasm::kExprI8x16MaxS: in SimdOp()
4961 case wasm::kExprI8x16Eq: in SimdOp()
4964 case wasm::kExprI8x16Ne: in SimdOp()
4967 case wasm::kExprI8x16LtS: in SimdOp()
4970 case wasm::kExprI8x16LeS: in SimdOp()
4973 case wasm::kExprI8x16GtS: in SimdOp()
4976 case wasm::kExprI8x16GeS: in SimdOp()
4979 case wasm::kExprI8x16ShrU: in SimdOp()
4982 case wasm::kExprI8x16UConvertI16x8: in SimdOp()
4985 case wasm::kExprI8x16AddSatU: in SimdOp()
4988 case wasm::kExprI8x16SubSatU: in SimdOp()
4991 case wasm::kExprI8x16MinU: in SimdOp()
4994 case wasm::kExprI8x16MaxU: in SimdOp()
4997 case wasm::kExprI8x16LtU: in SimdOp()
5000 case wasm::kExprI8x16LeU: in SimdOp()
5003 case wasm::kExprI8x16GtU: in SimdOp()
5006 case wasm::kExprI8x16GeU: in SimdOp()
5009 case wasm::kExprI8x16RoundingAverageU: in SimdOp()
5012 case wasm::kExprI8x16Popcnt: in SimdOp()
5014 case wasm::kExprI8x16Abs: in SimdOp()
5016 case wasm::kExprI8x16BitMask: in SimdOp()
5018 case wasm::kExprS128And: in SimdOp()
5021 case wasm::kExprS128Or: in SimdOp()
5024 case wasm::kExprS128Xor: in SimdOp()
5027 case wasm::kExprS128Not: in SimdOp()
5029 case wasm::kExprS128Select: in SimdOp()
5032 case wasm::kExprS128AndNot: in SimdOp()
5035 case wasm::kExprI64x2AllTrue: in SimdOp()
5037 case wasm::kExprI32x4AllTrue: in SimdOp()
5039 case wasm::kExprI16x8AllTrue: in SimdOp()
5041 case wasm::kExprV128AnyTrue: in SimdOp()
5043 case wasm::kExprI8x16AllTrue: in SimdOp()
5045 case wasm::kExprI8x16Swizzle: in SimdOp()
5048 case wasm::kExprI8x16RelaxedSwizzle: in SimdOp()
5051 case wasm::kExprI8x16RelaxedLaneSelect: in SimdOp()
5055 case wasm::kExprI16x8RelaxedLaneSelect: in SimdOp()
5058 case wasm::kExprI32x4RelaxedLaneSelect: in SimdOp()
5061 case wasm::kExprI64x2RelaxedLaneSelect: in SimdOp()
5064 case wasm::kExprF32x4RelaxedMin: in SimdOp()
5067 case wasm::kExprF32x4RelaxedMax: in SimdOp()
5070 case wasm::kExprF64x2RelaxedMin: in SimdOp()
5073 case wasm::kExprF64x2RelaxedMax: in SimdOp()
5076 case wasm::kExprI32x4RelaxedTruncF64x2SZero: in SimdOp()
5079 case wasm::kExprI32x4RelaxedTruncF64x2UZero: in SimdOp()
5082 case wasm::kExprI32x4RelaxedTruncF32x4S: in SimdOp()
5085 case wasm::kExprI32x4RelaxedTruncF32x4U: in SimdOp()
5093 Node* WasmGraphBuilder::SimdLaneOp(wasm::WasmOpcode opcode, uint8_t lane, in SimdLaneOp()
5097 case wasm::kExprF64x2ExtractLane: in SimdLaneOp()
5100 case wasm::kExprF64x2ReplaceLane: in SimdLaneOp()
5103 case wasm::kExprF32x4ExtractLane: in SimdLaneOp()
5106 case wasm::kExprF32x4ReplaceLane: in SimdLaneOp()
5109 case wasm::kExprI64x2ExtractLane: in SimdLaneOp()
5112 case wasm::kExprI64x2ReplaceLane: in SimdLaneOp()
5115 case wasm::kExprI32x4ExtractLane: in SimdLaneOp()
5118 case wasm::kExprI32x4ReplaceLane: in SimdLaneOp()
5121 case wasm::kExprI16x8ExtractLaneS: in SimdLaneOp()
5124 case wasm::kExprI16x8ExtractLaneU: in SimdLaneOp()
5127 case wasm::kExprI16x8ReplaceLane: in SimdLaneOp()
5130 case wasm::kExprI8x16ExtractLaneS: in SimdLaneOp()
5133 case wasm::kExprI8x16ExtractLaneU: in SimdLaneOp()
5136 case wasm::kExprI8x16ReplaceLane: in SimdLaneOp()
5151 Node* WasmGraphBuilder::AtomicOp(wasm::WasmOpcode opcode, Node* const* inputs, in AtomicOp()
5153 wasm::WasmCodePosition position) { in AtomicOp()
5177 const wasm::ValueType wasm_type; in AtomicOp()
5184 wasm::ValueType v) in AtomicOp()
5190 wasm::ValueType v) in AtomicOp()
5197 static constexpr AtomicOpInfo Get(wasm::WasmOpcode opcode) { in AtomicOp()
5200 case wasm::kExpr##Name: \ in AtomicOp()
5203 case wasm::kExpr##Name: \ in AtomicOp()
5269 wasm::kWasmI32) in AtomicOp()
5271 wasm::kWasmI64) in AtomicOp()
5273 wasm::kWasmI32) in AtomicOp()
5275 wasm::kWasmI32) in AtomicOp()
5277 wasm::kWasmI64) in AtomicOp()
5279 wasm::kWasmI64) in AtomicOp()
5281 wasm::kWasmI64) in AtomicOp()
5285 wasm::kWasmI32) in AtomicOp()
5287 wasm::kWasmI64) in AtomicOp()
5289 wasm::kWasmI32) in AtomicOp()
5291 wasm::kWasmI32) in AtomicOp()
5293 wasm::kWasmI64) in AtomicOp()
5295 wasm::kWasmI64) in AtomicOp()
5297 wasm::kWasmI64) in AtomicOp()
5302 case wasm::kExprAtomicNotify: in AtomicOp()
5304 case wasm::kExprI32AtomicWait: in AtomicOp()
5306 case wasm::kExprI64AtomicWait: in AtomicOp()
5372 case wasm::kExprAtomicNotify: in AtomicOp()
5373 return gasm_->CallRuntimeStub(wasm::WasmCode::kWasmAtomicNotify, in AtomicOp()
5377 case wasm::kExprI32AtomicWait: { in AtomicOp()
5381 ? wasm::WasmCode::kWasmI32AtomicWait64 in AtomicOp()
5382 : wasm::WasmCode::kWasmI32AtomicWait32; in AtomicOp()
5390 case wasm::kExprI64AtomicWait: { in AtomicOp()
5394 ? wasm::WasmCode::kWasmI64AtomicWait64 in AtomicOp()
5395 : wasm::WasmCode::kWasmI64AtomicWait32; in AtomicOp()
5415 wasm::WasmCodePosition position) { in MemoryInit()
5437 TrapIfFalse(wasm::kTrapMemOutOfBounds, call, position); in MemoryInit()
5441 wasm::WasmCodePosition position) { in DataDrop()
5446 STATIC_ASSERT(wasm::kV8MaxWasmDataSegments <= kMaxUInt32 >> 2); in DataDrop()
5473 std::initializer_list<Node**> nodes, wasm::WasmCodePosition position) { in MemTypeToUintPtrOrOOBTrap()
5490 TrapIfTrue(wasm::kTrapMemOutOfBounds, any_high_word, position); in MemTypeToUintPtrOrOOBTrap()
5494 wasm::WasmCodePosition position) { in MemoryCopy()
5509 TrapIfFalse(wasm::kTrapMemOutOfBounds, call, position); in MemoryCopy()
5513 wasm::WasmCodePosition position) { in MemoryFill()
5528 TrapIfFalse(wasm::kTrapMemOutOfBounds, call, position); in MemoryFill()
5534 wasm::WasmCodePosition position) { in TableInit()
5535 gasm_->CallRuntimeStub(wasm::WasmCode::kWasmTableInit, Operator::kNoThrow, in TableInit()
5541 wasm::WasmCodePosition position) { in ElemDrop()
5556 Node* size, wasm::WasmCodePosition position) { in TableCopy()
5557 gasm_->CallRuntimeStub(wasm::WasmCode::kWasmTableCopy, Operator::kNoThrow, in TableCopy()
5565 wasm::WasmCode::kWasmTableGrow, Operator::kNoThrow, in TableGrow()
5578 wasm::ObjectAccess::ToTagged(WasmTableObject::kCurrentLengthOffset)); in TableSize()
5586 wasm::WasmCode::kWasmTableFill, Operator::kNoThrow, in TableFill()
5592 const wasm::StructType* type, in StructNewWithRtt()
5600 wasm::ObjectAccess::ToTagged(JSReceiver::kPropertiesOrHashOffset), in StructNewWithRtt()
5613 Builtin ChooseArrayAllocationBuiltin(wasm::ValueType element_type, in ChooseArrayAllocationBuiltin()
5626 const wasm::ArrayType* type, in ArrayNewWithRtt()
5629 wasm::WasmCodePosition position) { in ArrayNewWithRtt()
5630 TrapIfFalse(wasm::kTrapArrayTooLarge, in ArrayNewWithRtt()
5634 wasm::ValueType element_type = type->element_type(); in ArrayNewWithRtt()
5650 Int32Constant(wasm::ObjectAccess::ToTagged(WasmArray::kHeaderSize)); in ArrayNewWithRtt()
5670 Node* WasmGraphBuilder::ArrayInit(const wasm::ArrayType* type, Node* rtt, in ArrayInit()
5672 wasm::ValueType element_type = type->element_type(); in ArrayInit()
5693 Node* WasmGraphBuilder::ArrayInitFromData(const wasm::ArrayType* type, in ArrayInitFromData()
5696 wasm::WasmCodePosition position) { in ArrayInitFromData()
5700 TrapIfTrue(wasm::kTrapArrayTooLarge, in ArrayInitFromData()
5703 wasm::kArrayInitFromDataArrayTooLargeErrorCode)), in ArrayInitFromData()
5706 wasm::kTrapDataSegmentOutOfBounds, in ArrayInitFromData()
5709 wasm::kArrayInitFromDataSegmentOutOfBoundsErrorCode)), in ArrayInitFromData()
5719 wasm::ObjectAccess::ElementOffsetInTaggedFixedArray(type_index)); in RttCanon()
5739 GraphAssemblerLabel<0>* label, wasm::WasmCodePosition position) { in CastCallbacks()
5746 TrapIfTrue(wasm::kTrapIllegalCast, condition, position); in CastCallbacks()
5750 TrapIfFalse(wasm::kTrapIllegalCast, condition, position); in CastCallbacks()
5808 if (config.rtt_depth >= wasm::kMinimumSupertypeArraySize) { in TypeCheck()
5882 wasm::WasmCodePosition position) { in RefCast()
5912 wasm::WasmCodePosition position) { in RefAsData()
5941 wasm::WasmCodePosition position) { in RefAsFunc()
5974 wasm::WasmCodePosition position) { in RefAsArray()
5999 wasm::WasmCodePosition position) { in RefAsI31()
6000 TrapIfFalse(wasm::kTrapIllegalCast, gasm_->IsI31(object), position); in RefAsI31()
6018 const wasm::StructType* struct_type, in StructGet()
6021 wasm::WasmCodePosition position) { in StructGet()
6023 TrapIfTrue(wasm::kTrapNullDereference, IsNull(struct_object), position); in StructGet()
6037 const wasm::StructType* struct_type, in StructSet()
6040 wasm::WasmCodePosition position) { in StructSet()
6042 TrapIfTrue(wasm::kTrapNullDereference, IsNull(struct_object), position); in StructSet()
6048 wasm::WasmCodePosition position) { in BoundsCheckArray()
6051 TrapIfFalse(wasm::kTrapArrayOutOfBounds, gasm_->Uint32LessThan(index, length), in BoundsCheckArray()
6057 wasm::WasmCodePosition position) { in BoundsCheckArrayCopy()
6064 TrapIfFalse(wasm::kTrapArrayOutOfBounds, range_valid, position); in BoundsCheckArrayCopy()
6068 const wasm::ArrayType* type, Node* index, in ArrayGet()
6070 wasm::WasmCodePosition position) { in ArrayGet()
6072 TrapIfTrue(wasm::kTrapNullDereference, IsNull(array_object), position); in ArrayGet()
6084 void WasmGraphBuilder::ArraySet(Node* array_object, const wasm::ArrayType* type, in ArraySet()
6087 wasm::WasmCodePosition position) { in ArraySet()
6089 TrapIfTrue(wasm::kTrapNullDereference, IsNull(array_object), position); in ArraySet()
6098 wasm::WasmCodePosition position) { in ArrayLen()
6100 TrapIfTrue(wasm::kTrapNullDereference, IsNull(array_object), position); in ArrayLen()
6106 // the length limit, run test/mjsunit/wasm/array-copy-benchmark.js.
6111 wasm::WasmCodePosition position) { in ArrayCopy()
6113 TrapIfTrue(wasm::kTrapNullDereference, IsNull(dst_array), position); in ArrayCopy()
6116 TrapIfTrue(wasm::kTrapNullDereference, IsNull(src_array), position); in ArrayCopy()
6173 explicit WasmDecorator(NodeOriginTable* origins, wasm::Decoder* decoder) in WasmDecorator()
6178 node, NodeOrigin("wasm graph creation", "n/a", in Decorate()
6184 wasm::Decoder* decoder_;
6188 NodeOriginTable* node_origins, wasm::Decoder* decoder) { in AddBytecodePositionDecorator()
6207 const wasm::FunctionSig* sig, in WasmWrapperGraphBuilder()
6208 const wasm::WasmModule* module, in WasmWrapperGraphBuilder()
6211 StubCallMode stub_mode, wasm::WasmFeatures features) in WasmWrapperGraphBuilder()
6242 Node* GetTargetForBuiltinCall(wasm::WasmCode::RuntimeStubId wasm_stub, in GetTargetForBuiltinCall()
6274 GetTargetForBuiltinCall(wasm::WasmCode::kWasmInt32ToHeapNumber, in BuildChangeInt32ToNumber()
6306 GetTargetForBuiltinCall(wasm::WasmCode::kWasmTaggedNonSmiToInt32, in BuildChangeTaggedToInt32()
6329 Node* target = GetTargetForBuiltinCall(wasm::WasmCode::kWasmFloat32ToNumber, in BuildChangeFloat32ToNumber()
6342 Node* target = GetTargetForBuiltinCall(wasm::WasmCode::kWasmFloat64ToNumber, in BuildChangeFloat64ToNumber()
6356 Node* target = GetTargetForBuiltinCall(wasm::WasmCode::kWasmTaggedToFloat64, in BuildChangeTaggedToFloat64()
6377 const wasm::FunctionSig* sig, Node* context) { in AddArgumentNodes()
6378 // Convert wasm numbers to JS values. in AddArgumentNodes()
6387 Node* ToJS(Node* node, wasm::ValueType type, Node* context) { in ToJS()
6389 case wasm::kI32: in ToJS()
6391 case wasm::kI64: in ToJS()
6393 case wasm::kF32: in ToJS()
6395 case wasm::kF64: in ToJS()
6397 case wasm::kRef: in ToJS()
6398 case wasm::kOptRef: in ToJS()
6400 case wasm::HeapType::kFunc: { in ToJS()
6401 if (type.kind() == wasm::kOptRef) { in ToJS()
6409 wasm::ObjectAccess::ToTagged( in ToJS()
6416 wasm::ObjectAccess::ToTagged( in ToJS()
6420 case wasm::HeapType::kEq: in ToJS()
6421 case wasm::HeapType::kData: in ToJS()
6422 case wasm::HeapType::kArray: in ToJS()
6423 case wasm::HeapType::kI31: in ToJS()
6425 if (type.kind() == wasm::kOptRef) { in ToJS()
6436 case wasm::HeapType::kAny: { in ToJS()
6461 wasm::ObjectAccess::ToTagged( in ToJS()
6473 wasm::ObjectAccess::ToTagged( in ToJS()
6481 case wasm::kRtt: in ToJS()
6482 case wasm::kI8: in ToJS()
6483 case wasm::kI16: in ToJS()
6484 case wasm::kS128: in ToJS()
6485 case wasm::kVoid: in ToJS()
6486 case wasm::kBottom: in ToJS()
6493 // TODO(7748): Temporary solution to allow round-tripping of Wasm objects
6502 // Assumes {input} has been checked for validity against the target wasm type.
6518 wasm::ObjectAccess::ToTagged(WasmFunctionData::kInternalOffset)); in BuildUnpackObjectWrapper()
6545 target = GetTargetForBuiltinCall(wasm::WasmCode::kI64ToBigInt, in BuildChangeInt64ToBigInt()
6552 target = GetTargetForBuiltinCall(wasm::WasmCode::kI32PairToBigInt, in BuildChangeInt64ToBigInt()
6562 target = GetTargetForBuiltinCall(wasm::WasmCode::kBigIntToI64, in BuildChangeBigIntToInt64()
6569 target = GetTargetForBuiltinCall(wasm::WasmCode::kBigIntToI32Pair, in BuildChangeBigIntToInt64()
6580 wasm::ValueType type) { in BuildCheckValidRefValue()
6582 STATIC_ASSERT(wasm::ValueType::kLastUsedBit + 1 <= kSmiValueSize); in BuildCheckValidRefValue()
6604 Node* FromJS(Node* input, Node* js_context, wasm::ValueType type, in FromJS()
6607 case wasm::kRef: in FromJS()
6608 case wasm::kOptRef: { in FromJS()
6610 case wasm::HeapType::kAny: in FromJS()
6615 case wasm::HeapType::kFunc: in FromJS()
6618 case wasm::HeapType::kData: in FromJS()
6619 case wasm::HeapType::kArray: in FromJS()
6620 case wasm::HeapType::kEq: in FromJS()
6621 case wasm::HeapType::kI31: in FromJS()
6637 case wasm::kF32: in FromJS()
6641 case wasm::kF64: in FromJS()
6644 case wasm::kI32: in FromJS()
6647 case wasm::kI64: in FromJS()
6651 case wasm::kRtt: in FromJS()
6652 case wasm::kS128: in FromJS()
6653 case wasm::kI8: in FromJS()
6654 case wasm::kI16: in FromJS()
6655 case wasm::kBottom: in FromJS()
6656 case wasm::kVoid: in FromJS()
6674 wasm::ObjectAccess::ToTagged(HeapNumber::kValueOffset)); in HeapNumberToFloat64()
6677 Node* FromJSFast(Node* input, wasm::ValueType type) { in FromJSFast()
6679 case wasm::kI32: in FromJSFast()
6681 case wasm::kF32: { in FromJSFast()
6693 case wasm::kF64: { in FromJSFast()
6703 case wasm::kRef: in FromJSFast()
6704 case wasm::kOptRef: in FromJSFast()
6705 case wasm::kI64: in FromJSFast()
6706 case wasm::kRtt: in FromJSFast()
6707 case wasm::kS128: in FromJSFast()
6708 case wasm::kI8: in FromJSFast()
6709 case wasm::kI16: in FromJSFast()
6710 case wasm::kBottom: in FromJSFast()
6711 case wasm::kVoid: in FromJSFast()
6785 Node* BuildMultiReturnFixedArrayFromIterable(const wasm::FunctionSig* sig, in BuildMultiReturnFixedArrayFromIterable()
6798 STATIC_ASSERT(wasm::kV8MaxWasmFunctionReturns <= in BuildCallAllocateJSArray()
6823 wasm::kNoCodePosition, function_index, kCallContinues); in BuildCallAndReturn()
6825 // Call to a wasm function defined in this module. in BuildCallAndReturn()
6829 wasm::ObjectAccess::ToTagged(WasmFunctionData::kInternalOffset)); in BuildCallAndReturn()
6834 wasm::ObjectAccess::ToTagged(WasmInternalFunction::kRefOffset)); in BuildCallAndReturn()
6836 wasm::kNoCodePosition, instance_node, frame_state); in BuildCallAndReturn()
6863 bool QualifiesForFastTransform(const wasm::FunctionSig*) { in QualifiesForFastTransform()
6866 wasm::ValueType type = sig_->GetParam(i); in QualifiesForFastTransform()
6868 case wasm::kRef: in QualifiesForFastTransform()
6869 case wasm::kOptRef: in QualifiesForFastTransform()
6870 case wasm::kI64: in QualifiesForFastTransform()
6871 case wasm::kRtt: in QualifiesForFastTransform()
6872 case wasm::kS128: in QualifiesForFastTransform()
6873 case wasm::kI8: in QualifiesForFastTransform()
6874 case wasm::kI16: in QualifiesForFastTransform()
6875 case wasm::kBottom: in QualifiesForFastTransform()
6876 case wasm::kVoid: in QualifiesForFastTransform()
6878 case wasm::kI32: in QualifiesForFastTransform()
6879 case wasm::kF32: in QualifiesForFastTransform()
6880 case wasm::kF64: in QualifiesForFastTransform()
6895 Node* input, wasm::ValueType type, in CanTransformFast()
6898 case wasm::kI32: { in CanTransformFast()
6902 case wasm::kF32: in CanTransformFast()
6903 case wasm::kF64: { in CanTransformFast()
6918 case wasm::kRef: in CanTransformFast()
6919 case wasm::kOptRef: in CanTransformFast()
6920 case wasm::kI64: in CanTransformFast()
6921 case wasm::kRtt: in CanTransformFast()
6922 case wasm::kS128: in CanTransformFast()
6923 case wasm::kI8: in CanTransformFast()
6924 case wasm::kI16: in CanTransformFast()
6925 case wasm::kBottom: in CanTransformFast()
6926 case wasm::kVoid: in CanTransformFast()
6945 if (!wasm::IsJSCompatibleSignature(sig_, module_, enabled_features_)) { in BuildJSToWasmWrapper()
6978 // Convert JS parameters to wasm numbers using the fast transformation in BuildJSToWasmWrapper()
6990 // Convert JS parameters to wasm numbers using the default transformation in BuildJSToWasmWrapper()
7006 if (sig_->GetParam(i).kind() == wasm::kF32) { in BuildJSToWasmWrapper()
7033 wasm::ObjectAccess::FlagsOffsetInSharedFunctionInfo()); in BuildReceiverNode()
7035 Binop(wasm::kExprI32And, flags, in BuildReceiverNode()
7054 // If value is a promise, suspend to the js-to-wasm prompt, and resume later in BuildSuspend()
7062 wasm::ObjectAccess::ToTagged(WasmApiFunctionRef::kSuspenderOffset)); in BuildSuspend()
7065 wasm::ObjectAccess::ToTagged(WasmApiFunctionRef::kNativeContextOffset)); in BuildSuspend()
7069 wasm::WasmCode::kWasmSuspend, RelocInfo::WASM_STUB_CALL); in BuildSuspend()
7080 // For wasm-to-js wrappers, parameter 0 is a WasmApiFunctionRef.
7082 wasm::Suspend suspend) { in BuildWasmToJSWrapper()
7090 wasm::ObjectAccess::ToTagged(WasmApiFunctionRef::kNativeContextOffset)); in BuildWasmToJSWrapper()
7104 wasm::ObjectAccess::ToTagged(WasmApiFunctionRef::kCallableOffset)); in BuildWasmToJSWrapper()
7131 // Convert wasm numbers to JS values. in BuildWasmToJSWrapper()
7144 if (suspend == wasm::kSuspend) { in BuildWasmToJSWrapper()
7166 // Convert wasm numbers to JS values. in BuildWasmToJSWrapper()
7207 // Convert wasm numbers to JS values. in BuildWasmToJSWrapper()
7262 for (wasm::ValueType type : sig_->parameters()) { in BuildCapiCallWrapper()
7266 for (wasm::ValueType type : sig_->returns()) { in BuildCapiCallWrapper()
7279 wasm::ValueType type = sig_->GetParam(i); in BuildCapiCallWrapper()
7291 wasm::ObjectAccess::ToTagged(WasmApiFunctionRef::kCallableOffset)); in BuildCapiCallWrapper()
7295 wasm::ObjectAccess::ToTagged( in BuildCapiCallWrapper()
7329 wasm::WasmCode::kWasmRethrowExplicitContext, RelocInfo::WASM_STUB_CALL); in BuildCapiCallWrapper()
7332 wasm::ObjectAccess::ToTagged(WasmApiFunctionRef::kNativeContextOffset)); in BuildCapiCallWrapper()
7338 DCHECK_LT(sig_->return_count(), wasm::kV8MaxWasmFunctionReturns); in BuildCapiCallWrapper()
7346 wasm::ValueType type = sig_->GetReturn(i); in BuildCapiCallWrapper()
7365 wasm::ObjectAccess::ToTagged(WasmApiFunctionRef::kCallableOffset)); in BuildJSFastApiCallWrapper()
7368 wasm::ObjectAccess::ToTagged(WasmApiFunctionRef::kNativeContextOffset)); in BuildJSFastApiCallWrapper()
7474 if (!wasm::IsJSCompatibleSignature(sig_, module_, enabled_features_)) { in BuildJSToJSWrapper()
7485 wasm::ObjectAccess::ToTagged(WasmFunctionData::kInternalOffset)); in BuildJSToJSWrapper()
7488 wasm::ObjectAccess::ToTagged(WasmInternalFunction::kRefOffset)); in BuildJSToJSWrapper()
7491 wasm::ObjectAccess::ToTagged(WasmApiFunctionRef::kCallableOffset)); in BuildJSToJSWrapper()
7507 // Convert parameter JS values to wasm numbers and back to JS values. in BuildJSToJSWrapper()
7521 // Convert return JS values to wasm numbers and back to JS values. in BuildJSToJSWrapper()
7568 for (wasm::ValueType type : sig_->parameters()) { in BuildCWasmEntry()
7579 // Call the wasm code. in BuildCWasmEntry()
7597 for (wasm::ValueType type : sig_->returns()) { in BuildCWasmEntry()
7631 const wasm::WasmModule* module_;
7638 wasm::WasmFeatures enabled_features_;
7646 Zone* zone, MachineGraph* mcgraph, const wasm::FunctionSig* signature, in BuildInlinedJSToWasmWrapper()
7647 const wasm::WasmModule* module, Isolate* isolate, in BuildInlinedJSToWasmWrapper()
7649 wasm::WasmFeatures features, const JSWasmCallData* js_wasm_call_data, in BuildInlinedJSToWasmWrapper()
7658 Isolate* isolate, const wasm::FunctionSig* sig, in NewJSToWasmCompilationJob()
7659 const wasm::WasmModule* module, bool is_import, in NewJSToWasmCompilationJob()
7660 const wasm::WasmFeatures& enabled_features) { in NewJSToWasmCompilationJob()
7665 wasm::GetWasmEngine()->allocator(), ZONE_NAME, kCompressGraphZone); in NewJSToWasmCompilationJob()
7697 // Wasm representation of bool is i32 instead of i1. in NormalizeFastApiRepresentation()
7705 const wasm::FunctionSig* expected_sig, Handle<SharedFunctionInfo> shared) { in IsSupportedWasmFastApiFunction()
7716 // TODO(wasm): CFunctionInfo* signature check. in IsSupportedWasmFastApiFunction()
7734 ", reason: the signature of the imported function in the Wasm " in IsSupportedWasmFastApiFunction()
7743 // that case we use the "slow" path making a normal Wasm->JS call and in IsSupportedWasmFastApiFunction()
7774 // Arg 0 is the receiver, skip over it since wasm doesn't in IsSupportedWasmFastApiFunction()
7787 Handle<JSReceiver> callable, const wasm::FunctionSig* expected_sig, in ResolveWasmImportCall()
7788 const wasm::WasmModule* module, in ResolveWasmImportCall()
7789 const wasm::WasmFeatures& enabled_features) { in ResolveWasmImportCall()
7829 if (!wasm::IsJSCompatibleSignature(expected_sig, module, enabled_features)) { in ResolveWasmImportCall()
7870 const wasm::FunctionSig* sig = \ in ResolveWasmImportCall()
7871 wasm::WasmOpcodes::Signature(wasm::kExpr##name); \ in ResolveWasmImportCall()
7872 if (!sig) sig = wasm::WasmOpcodes::AsmjsSignature(wasm::kExpr##name); \ in ResolveWasmImportCall()
7944 wasm::WasmOpcode GetMathIntrinsicOpcode(WasmImportCallKind kind, in GetMathIntrinsicOpcode()
7949 return wasm::kExpr##name in GetMathIntrinsicOpcode()
7980 wasm::WasmCompilationResult CompileWasmMathIntrinsic( in CompileWasmMathIntrinsic()
7981 WasmImportCallKind kind, const wasm::FunctionSig* sig) { in CompileWasmMathIntrinsic()
7984 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.wasm.detailed"), in CompileWasmMathIntrinsic()
7985 "wasm.CompileWasmMathIntrinsic"); in CompileWasmMathIntrinsic()
7987 Zone zone(wasm::GetWasmEngine()->allocator(), ZONE_NAME, kCompressGraphZone); in CompileWasmMathIntrinsic()
7989 // Compile a Wasm function with a single bytecode and let TurboFan in CompileWasmMathIntrinsic()
7999 wasm::CompilationEnv env( in CompileWasmMathIntrinsic()
8000 nullptr, wasm::kNoBoundsChecks, in CompileWasmMathIntrinsic()
8001 wasm::RuntimeExceptionSupport::kNoRuntimeExceptionSupport, in CompileWasmMathIntrinsic()
8002 wasm::WasmFeatures::All(), wasm::DynamicTiering::kDisabled); in CompileWasmMathIntrinsic()
8035 // TODO(wasm): Rename this to {WASM_IMPORT_CALL}? in CompileWasmMathIntrinsic()
8043 wasm::WasmCompilationResult CompileWasmImportCallWrapper( in CompileWasmImportCallWrapper()
8044 wasm::CompilationEnv* env, WasmImportCallKind kind, in CompileWasmImportCallWrapper()
8045 const wasm::FunctionSig* sig, bool source_positions, int expected_arity, in CompileWasmImportCallWrapper()
8046 wasm::Suspend suspend) { in CompileWasmImportCallWrapper()
8058 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.wasm.detailed"), in CompileWasmImportCallWrapper()
8059 "wasm.CompileWasmImportCallWrapper"); in CompileWasmImportCallWrapper()
8068 Zone zone(wasm::GetWasmEngine()->allocator(), ZONE_NAME, kCompressGraphZone); in CompileWasmImportCallWrapper()
8086 // Build a name in the form "wasm-to-js-<kind>-<signature>". in CompileWasmImportCallWrapper()
8090 "wasm-to-js-%d-", static_cast<int>(kind)); in CompileWasmImportCallWrapper()
8100 wasm::WasmCompilationResult result = Pipeline::GenerateCodeForWasmNativeStub( in CompileWasmImportCallWrapper()
8115 wasm::WasmCode* CompileWasmCapiCallWrapper(wasm::NativeModule* native_module, in CompileWasmCapiCallWrapper()
8116 const wasm::FunctionSig* sig) { in CompileWasmCapiCallWrapper()
8117 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.wasm.detailed"), in CompileWasmCapiCallWrapper()
8118 "wasm.CompileWasmCapiFunction"); in CompileWasmCapiCallWrapper()
8120 Zone zone(wasm::GetWasmEngine()->allocator(), ZONE_NAME, kCompressGraphZone); in CompileWasmCapiCallWrapper()
8146 wasm::WasmCompilationResult result = Pipeline::GenerateCodeForWasmNativeStub( in CompileWasmCapiCallWrapper()
8149 wasm::WasmCode* published_code; in CompileWasmCapiCallWrapper()
8151 wasm::CodeSpaceWriteScope code_space_write_scope(native_module); in CompileWasmCapiCallWrapper()
8152 std::unique_ptr<wasm::WasmCode> wasm_code = native_module->AddCode( in CompileWasmCapiCallWrapper()
8153 wasm::kAnonymousFuncIndex, result.code_desc, result.frame_slot_count, in CompileWasmCapiCallWrapper()
8156 result.source_positions.as_vector(), wasm::WasmCode::kWasmToCapiWrapper, in CompileWasmCapiCallWrapper()
8157 wasm::ExecutionTier::kNone, wasm::kNoDebugging); in CompileWasmCapiCallWrapper()
8163 wasm::WasmCode* CompileWasmJSFastCallWrapper(wasm::NativeModule* native_module, in CompileWasmJSFastCallWrapper()
8164 const wasm::FunctionSig* sig, in CompileWasmJSFastCallWrapper()
8166 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.wasm.detailed"), in CompileWasmJSFastCallWrapper()
8167 "wasm.CompileWasmJSFastCallWrapper"); in CompileWasmJSFastCallWrapper()
8169 Zone zone(wasm::GetWasmEngine()->allocator(), ZONE_NAME, kCompressGraphZone); in CompileWasmJSFastCallWrapper()
8188 1 /* Wasm instance */ + 1 /* kExtraCallableParam */; in CompileWasmJSFastCallWrapper()
8200 wasm::WasmCompilationResult result = Pipeline::GenerateCodeForWasmNativeStub( in CompileWasmJSFastCallWrapper()
8204 wasm::CodeSpaceWriteScope code_space_write_scope(native_module); in CompileWasmJSFastCallWrapper()
8205 std::unique_ptr<wasm::WasmCode> wasm_code = native_module->AddCode( in CompileWasmJSFastCallWrapper()
8206 wasm::kAnonymousFuncIndex, result.code_desc, result.frame_slot_count, in CompileWasmJSFastCallWrapper()
8209 result.source_positions.as_vector(), wasm::WasmCode::kWasmToJsWrapper, in CompileWasmJSFastCallWrapper()
8210 wasm::ExecutionTier::kNone, wasm::kNoDebugging); in CompileWasmJSFastCallWrapper()
8216 const wasm::FunctionSig* sig, in CompileWasmToJSWrapper()
8219 wasm::Suspend suspend) { in CompileWasmToJSWrapper()
8236 wasm::WasmFeatures::FromIsolate(isolate)); in CompileWasmToJSWrapper()
8239 // Build a name in the form "wasm-to-js-<kind>-<signature>". in CompileWasmToJSWrapper()
8243 memcpy(name_buffer.get(), "wasm-to-js:", kNamePrefixLen); in CompileWasmToJSWrapper()
8269 const wasm::FunctionSig* sig, in CompileJSToJSWrapper()
8270 const wasm::WasmModule* module) { in CompileJSToJSWrapper()
8285 wasm::WasmFeatures::FromIsolate(isolate)); in CompileJSToJSWrapper()
8317 Handle<CodeT> CompileCWasmEntry(Isolate* isolate, const wasm::FunctionSig* sig, in CompileCWasmEntry()
8318 const wasm::WasmModule* module) { in CompileCWasmEntry()
8333 wasm::WasmFeatures::FromIsolate(isolate)); in CompileCWasmEntry()
8349 // Build a name in the form "c-wasm-entry:<params>:<returns>". in CompileCWasmEntry()
8353 memcpy(name_buffer.get(), "c-wasm-entry:", kNamePrefixLen); in CompileCWasmEntry()
8372 bool BuildGraphForWasmFunction(wasm::CompilationEnv* env, in BuildGraphForWasmFunction()
8373 const wasm::FunctionBody& func_body, in BuildGraphForWasmFunction()
8374 int func_index, wasm::WasmFeatures* detected, in BuildGraphForWasmFunction()
8382 auto* allocator = wasm::GetWasmEngine()->allocator(); in BuildGraphForWasmFunction()
8383 wasm::VoidResult graph_construction_result = wasm::BuildTFGraph( in BuildGraphForWasmFunction()
8385 func_body, loop_infos, node_origins, func_index, wasm::kRegularFunction); in BuildGraphForWasmFunction()
8403 const wasm::WasmModule* module, in GetDebugName()
8404 const wasm::WireBytesStorage* wire_bytes, in GetDebugName()
8406 base::Optional<wasm::ModuleWireBytes> module_bytes = in GetDebugName()
8411 wasm::WireBytesRef name = module->lazily_generated_names.LookupFunctionName( in GetDebugName()
8424 int name_len = SNPrintF(name_vector, "wasm-function#%d", index); in GetDebugName()
8434 wasm::WasmCompilationResult ExecuteTurbofanWasmCompilation( in ExecuteTurbofanWasmCompilation()
8435 wasm::CompilationEnv* env, const wasm::WireBytesStorage* wire_byte_storage, in ExecuteTurbofanWasmCompilation()
8436 const wasm::FunctionBody& func_body, int func_index, Counters* counters, in ExecuteTurbofanWasmCompilation()
8437 wasm::WasmFeatures* detected) { in ExecuteTurbofanWasmCompilation()
8438 // Check that we do not accidentally compile a Wasm function to TurboFan if in ExecuteTurbofanWasmCompilation()
8442 TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("v8.wasm.detailed"), in ExecuteTurbofanWasmCompilation()
8443 "wasm.CompileTopTier", "func_index", func_index, "body_size", in ExecuteTurbofanWasmCompilation()
8445 Zone zone(wasm::GetWasmEngine()->allocator(), ZONE_NAME, kCompressGraphZone); in ExecuteTurbofanWasmCompilation()
8475 wasm::WasmFeatures unused_detected_features; in ExecuteTurbofanWasmCompilation()
8479 return wasm::WasmCompilationResult{}; in ExecuteTurbofanWasmCompilation()
8494 return wasm::WasmCompilationResult{}; in ExecuteTurbofanWasmCompilation()
8513 wasm::GetWasmEngine()->DumpTurboStatistics(); in ExecuteTurbofanWasmCompilation()
8517 DCHECK_EQ(wasm::ExecutionTier::kTurbofan, result->result_tier); in ExecuteTurbofanWasmCompilation()
8529 : allocator_(wasm::LinkageAllocator(gp, fp)), slot_offset_(slot_offset) {} in LinkageLocationAllocator()
8551 wasm::LinkageAllocator allocator_;
8558 LocationSignature* BuildLocations(Zone* zone, const wasm::FunctionSig* fsig, in BuildLocations()
8567 wasm::kGpParamRegisters, wasm::kFpParamRegisters, 0 /* no slot offset */); in BuildLocations()
8606 LinkageLocationAllocator rets(wasm::kGpReturnRegisters, in BuildLocations()
8607 wasm::kFpReturnRegisters, *parameter_slots); in BuildLocations()
8622 CallDescriptor* GetWasmCallDescriptor(Zone* zone, const wasm::FunctionSig* fsig, in GetWasmCallDescriptor()
8638 // The target for wasm calls is always a code object. in GetWasmCallDescriptor()
8665 "wasm-call", // debug name in GetWasmCallDescriptor()
8673 const wasm::FunctionSig* ReplaceTypeInSig(Zone* zone, in ReplaceTypeInSig()
8674 const wasm::FunctionSig* sig, in ReplaceTypeInSig()
8675 wasm::ValueType from, in ReplaceTypeInSig()
8676 wasm::ValueType to, in ReplaceTypeInSig()
8684 wasm::FunctionSig::Builder builder( in ReplaceTypeInSig()
8688 for (wasm::ValueType ret : sig->returns()) { in ReplaceTypeInSig()
8696 for (wasm::ValueType param : sig->parameters()) { in ReplaceTypeInSig()
8709 wasm::ValueType input_type, wasm::ValueType output_type) { in ReplaceTypeInCallDescriptorWith()
8723 const wasm::FunctionSig* sig = in ReplaceTypeInCallDescriptorWith()
8763 const wasm::FunctionSig* WasmGraphBuilder::Int64LoweredSig( in Int64LoweredSig()
8764 Zone* zone, const wasm::FunctionSig* sig) { in Int64LoweredSig()
8766 ? ReplaceTypeInSig(zone, sig, wasm::kWasmI64, wasm::kWasmI32, 2) in Int64LoweredSig()
8773 wasm::kWasmI64, wasm::kWasmI32); in GetI32WasmCallDescriptor()