48template <
typename T,
size_t Offset>
52 static constexpr size_t size =
sizeof(
T);
54 static_assert(
offset + size <=
sizeof(uint64_t));
59 return static_cast<uint64_t
>(
value);
79template <
typename Op,
typename... Fields>
85#if V8_TARGET_BIG_ENDIAN
86 return static_cast<uint64_t
>(0xFF)
87 << ((
sizeof(uint64_t) -
sizeof(uint8_t)) *
kBitsPerByte);
89 return static_cast<uint64_t
>(0xFF);
95#if V8_TARGET_BIG_ENDIAN
96 return static_cast<uint64_t
>(opcode)
99 return static_cast<uint64_t
>(opcode);
113 template <
typename F>
115 static_assert(F::size <
sizeof(uint64_t));
116 static_assert(F::offset + F::size <=
sizeof(uint64_t));
117 constexpr uint64_t ones =
static_cast<uint64_t
>(-1) >>
119#if V8_TARGET_BIG_ENDIAN
120 return ones << ((
sizeof(uint64_t) - F::size - F::offset) *
kBitsPerByte);
126 template <
typename F>
128#if V8_TARGET_BIG_ENDIAN
130 << ((
sizeof(uint64_t) - F::size - F::offset) *
kBitsPerByte);
136 template <
typename Fields::type... Args>
322#if V8_ENABLE_WEBASSEMBLY
324using Simd128BinopMask =
326using kSimd128I32x4Mul = Simd128BinopMask::For<Simd128BinopOp::Kind::kI32x4Mul>;
327using kSimd128I16x8Mul = Simd128BinopMask::For<Simd128BinopOp::Kind::kI16x8Mul>;
328using kSimd128AndNot = Simd128BinopMask::For<Simd128BinopOp::Kind::kS128AndNot>;
329using kSimd128Xor = Simd128BinopMask::For<Simd128BinopOp::Kind::kS128Xor>;
331#define SIMD_SIGN_EXTENSION_BINOP_MASK(kind) \
332 using kSimd128##kind = Simd128BinopMask::For<Simd128BinopOp::Kind::k##kind>;
333FOREACH_SIMD_128_BINARY_SIGN_EXTENSION_OPCODE(SIMD_SIGN_EXTENSION_BINOP_MASK)
334#undef SIMD_SIGN_EXTENSION_BINOP_MASK
336using Simd128UnaryMask =
338#define SIMD_UNARY_MASK(kind) \
339 using kSimd128##kind = Simd128UnaryMask::For<Simd128UnaryOp::Kind::k##kind>;
340FOREACH_SIMD_128_UNARY_OPCODE(SIMD_UNARY_MASK)
341#undef SIMD_UNARY_MASK
343using Simd128ShiftMask =
345#define SIMD_SHIFT_MASK(kind) \
346 using kSimd128##kind = Simd128ShiftMask::For<Simd128ShiftOp::Kind::k##kind>;
347FOREACH_SIMD_128_SHIFT_OPCODE(SIMD_SHIFT_MASK)
348#undef SIMD_SHIFT_MASK
350using Simd128LoadTransformMask =
352 FIELD(Simd128LoadTransformOp, transform_kind)>;
353#define SIMD_LOAD_TRANSFORM_MASK(kind) \
354 using kSimd128LoadTransform##kind = Simd128LoadTransformMask::For< \
355 Simd128LoadTransformOp::TransformKind::k##kind>;
356FOREACH_SIMD_128_LOAD_TRANSFORM_OPCODE(SIMD_LOAD_TRANSFORM_MASK)
357#undef SIMD_LOAD_TRANSFORM_MASK
359using Simd128ReplaceLaneMask =
361using kSimd128ReplaceLaneF32x4 =
362 Simd128ReplaceLaneMask::For<Simd128ReplaceLaneOp::Kind::kF32x4>;
364#if V8_ENABLE_WASM_SIMD256_REVEC
365using Simd256UnaryMask =
367#define SIMD256_UNARY_MASK(kind) \
368 using kSimd256##kind = Simd256UnaryMask::For<Simd256UnaryOp::Kind::k##kind>;
369FOREACH_SIMD_256_UNARY_OPCODE(SIMD256_UNARY_MASK)
370#undef SIMD256_UNARY_MASK