Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions diskann-wide/src/arch/aarch64/double.rs
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ mod tests {

// Bit ops
test_utils::ops::test_bitops!(u8x32, 0xd62d8de09f82ed4e, test_neon());
test_utils::ops::test_popcount!(u8x32, 0xf24be4e5bc1d95b6, test_neon());
test_utils::ops::test_splitjoin!(u8x32 => u8x16, 0x2e301b7e12090d5c, test_neon());
test_utils::ops::test_zipunzip!(u8x32 => u8x16, 0xa1b2c3d4e5f67890, test_neon());
}
Expand All @@ -253,6 +254,7 @@ mod tests {

// Bit ops
test_utils::ops::test_bitops!(u8x64, 0xd62d8de09f82ed4e, test_neon());
test_utils::ops::test_popcount!(u8x64, 0x7207f32ecac3fbf3, test_neon());
test_utils::ops::test_splitjoin!(u8x64 => u8x32, 0x2e301b7e12090d5c, test_neon());
}

Expand Down Expand Up @@ -300,6 +302,7 @@ mod tests {

// Bit ops
test_utils::ops::test_bitops!(i8x32, 0xd62d8de09f82ed4e, test_neon());
test_utils::ops::test_popcount!(i8x32, 0x45f60286da125e84, test_neon());
test_utils::ops::test_abs!(i8x32, 0xd62d8de09f82ed4e, test_neon());
test_utils::ops::test_splitjoin!(i8x32 => i8x16, 0x2e301b7e12090d5c, test_neon());
test_utils::ops::test_zipunzip!(i8x32 => i8x16, 0xc7e3a92f1d8b5604, test_neon());
Expand All @@ -311,6 +314,7 @@ mod tests {

// Bit ops
test_utils::ops::test_bitops!(i8x64, 0xd62d8de09f82ed4e, test_neon());
test_utils::ops::test_popcount!(i8x64, 0x73e6c7da94a679ac, test_neon());
test_utils::ops::test_abs!(i8x64, 0xd62d8de09f82ed4e, test_neon());
test_utils::ops::test_splitjoin!(i8x64 => i8x32, 0x2e301b7e12090d5c, test_neon());
}
Expand Down
6 changes: 4 additions & 2 deletions diskann-wide/src/arch/aarch64/i8x16_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
*/

use crate::{
Emulated, SIMDAbs, SIMDMask, SIMDMulAdd, SIMDPartialEq, SIMDPartialOrd, SIMDVector,
constant::Const, helpers,
Emulated, SIMDAbs, SIMDMask, SIMDMulAdd, SIMDPartialEq, SIMDPartialOrd, SIMDPopcount,
SIMDVector, constant::Const, helpers,
};

// AArch64 masks
Expand All @@ -31,6 +31,7 @@ helpers::unsafe_map_binary_op!(i8x16, std::ops::Add, add, vaddq_s8, "neon");
helpers::unsafe_map_binary_op!(i8x16, std::ops::Sub, sub, vsubq_s8, "neon");
helpers::unsafe_map_binary_op!(i8x16, std::ops::Mul, mul, vmulq_s8, "neon");
helpers::unsafe_map_unary_op!(i8x16, SIMDAbs, abs_simd, vabsq_s8, "neon");
helpers::unsafe_map_unary_op!(i8x16, SIMDPopcount, popcount_simd, vcntq_s8, "neon");
macros::aarch64_define_fma!(i8x16, vmlaq_s8);

macros::aarch64_define_cmp!(
Expand Down Expand Up @@ -102,4 +103,5 @@ mod tests {

// Bit ops
test_utils::ops::test_bitops!(i8x16, 0xd62d8de09f82ed4e, test_neon());
test_utils::ops::test_popcount!(i8x16, 0xddff81feaf77563f, test_neon());
}
6 changes: 4 additions & 2 deletions diskann-wide/src/arch/aarch64/i8x8_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
*/

use crate::{
Emulated, SIMDAbs, SIMDMask, SIMDMulAdd, SIMDPartialEq, SIMDPartialOrd, SIMDVector,
constant::Const, helpers,
Emulated, SIMDAbs, SIMDMask, SIMDMulAdd, SIMDPartialEq, SIMDPartialOrd, SIMDPopcount,
SIMDVector, constant::Const, helpers,
};

// AArch64 masks
Expand All @@ -30,6 +30,7 @@ helpers::unsafe_map_binary_op!(i8x8, std::ops::Add, add, vadd_s8, "neon");
helpers::unsafe_map_binary_op!(i8x8, std::ops::Sub, sub, vsub_s8, "neon");
helpers::unsafe_map_binary_op!(i8x8, std::ops::Mul, mul, vmul_s8, "neon");
helpers::unsafe_map_unary_op!(i8x8, SIMDAbs, abs_simd, vabs_s8, "neon");
helpers::unsafe_map_unary_op!(i8x8, SIMDPopcount, popcount_simd, vcnt_s8, "neon");
macros::aarch64_define_fma!(i8x8, vmla_s8);

macros::aarch64_define_cmp!(i8x8, vceq_s8, (vmvn_u8), vclt_s8, vcle_s8, vcgt_s8, vcge_s8);
Expand Down Expand Up @@ -92,4 +93,5 @@ mod tests {

// Bit ops
test_utils::ops::test_bitops!(i8x8, 0xd62d8de09f82ed4e, test_neon());
test_utils::ops::test_popcount!(i8x8, 0x46c84a6be23bc633, test_neon());
}
4 changes: 3 additions & 1 deletion diskann-wide/src/arch/aarch64/u8x16_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::{
Emulated,
constant::Const,
helpers,
traits::{SIMDMask, SIMDMulAdd, SIMDPartialEq, SIMDPartialOrd, SIMDVector},
traits::{SIMDMask, SIMDMulAdd, SIMDPartialEq, SIMDPartialOrd, SIMDPopcount, SIMDVector},
};

// AArch64 masks
Expand All @@ -33,6 +33,7 @@ macros::aarch64_splitjoin!(u8x16, u8x8, vget_low_u8, vget_high_u8, vcombine_u8);
helpers::unsafe_map_binary_op!(u8x16, std::ops::Add, add, vaddq_u8, "neon");
helpers::unsafe_map_binary_op!(u8x16, std::ops::Sub, sub, vsubq_u8, "neon");
helpers::unsafe_map_binary_op!(u8x16, std::ops::Mul, mul, vmulq_u8, "neon");
helpers::unsafe_map_unary_op!(u8x16, SIMDPopcount, popcount_simd, vcntq_u8, "neon");
macros::aarch64_define_fma!(u8x16, vmlaq_u8);

macros::aarch64_define_cmp!(
Expand Down Expand Up @@ -103,4 +104,5 @@ mod tests {

// Bit ops
test_utils::ops::test_bitops!(u8x16, 0xd62d8de09f82ed4e, test_neon());
test_utils::ops::test_popcount!(u8x16, 0xb801a142f098b25d, test_neon());
}
4 changes: 3 additions & 1 deletion diskann-wide/src/arch/aarch64/u8x8_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::{
Emulated,
constant::Const,
helpers,
traits::{SIMDMask, SIMDMulAdd, SIMDPartialEq, SIMDPartialOrd, SIMDVector},
traits::{SIMDMask, SIMDMulAdd, SIMDPartialEq, SIMDPartialOrd, SIMDPopcount, SIMDVector},
};

// AArch64 masks
Expand All @@ -31,6 +31,7 @@ macros::aarch64_define_loadstore!(u8x8, vld1_u8, internal::load_first::u8x8, vst
helpers::unsafe_map_binary_op!(u8x8, std::ops::Add, add, vadd_u8, "neon");
helpers::unsafe_map_binary_op!(u8x8, std::ops::Sub, sub, vsub_u8, "neon");
helpers::unsafe_map_binary_op!(u8x8, std::ops::Mul, mul, vmul_u8, "neon");
helpers::unsafe_map_unary_op!(u8x8, SIMDPopcount, popcount_simd, vcnt_u8, "neon");
macros::aarch64_define_fma!(u8x8, vmla_u8);

macros::aarch64_define_cmp!(u8x8, vceq_u8, (vmvn_u8), vclt_u8, vcle_u8, vcgt_u8, vcge_u8);
Expand Down Expand Up @@ -92,4 +93,5 @@ mod tests {

// Bit ops
test_utils::ops::test_bitops!(u8x8, 0xd62d8de09f82ed4e, test_neon());
test_utils::ops::test_popcount!(u8x8, 0xac222b463efd782c, test_neon());
}
10 changes: 9 additions & 1 deletion diskann-wide/src/arch/x86_64/v4/i16x16_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use crate::{
bitmask::BitMask,
constant::Const,
helpers,
traits::{SIMDAbs, SIMDMulAdd, SIMDVector},
traits::{SIMDAbs, SIMDMulAdd, SIMDPopcount, SIMDVector},
};

///////////////////
Expand Down Expand Up @@ -47,6 +47,13 @@ helpers::unsafe_map_binary_op!(i16x16, std::ops::Add, add, _mm256_add_epi16, "av
helpers::unsafe_map_binary_op!(i16x16, std::ops::Sub, sub, _mm256_sub_epi16, "avx2");
helpers::unsafe_map_binary_op!(i16x16, std::ops::Mul, mul, _mm256_mullo_epi16, "avx2");
helpers::unsafe_map_unary_op!(i16x16, SIMDAbs, abs_simd, _mm256_abs_epi16, "avx2");
helpers::unsafe_map_unary_op!(
i16x16,
SIMDPopcount,
popcount_simd,
_mm256_popcnt_epi16,
"avx512bitalg,avx512vl"
);

helpers::unsafe_map_binary_op!(i16x16, std::ops::BitAnd, bitand, _mm256_and_si256, "avx2");
helpers::unsafe_map_binary_op!(i16x16, std::ops::BitOr, bitor, _mm256_or_si256, "avx2");
Expand Down Expand Up @@ -142,4 +149,5 @@ mod test_x86_i16 {

// Bit ops
test_utils::ops::test_bitops!(i16x16, 0xba0be356b04d6427, V4::new_checked_uncached());
test_utils::ops::test_popcount!(i16x16, 0x781e87035cbf3527, V4::new_checked_uncached());
}
10 changes: 9 additions & 1 deletion diskann-wide/src/arch/x86_64/v4/i16x32_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use crate::{
bitmask::BitMask,
constant::Const,
helpers,
traits::{SIMDAbs, SIMDMulAdd, SIMDVector},
traits::{SIMDAbs, SIMDMulAdd, SIMDPopcount, SIMDVector},
};

///////////////////
Expand All @@ -33,6 +33,13 @@ helpers::unsafe_map_binary_op!(i16x32, std::ops::Add, add, _mm512_add_epi16, "av
helpers::unsafe_map_binary_op!(i16x32, std::ops::Sub, sub, _mm512_sub_epi16, "avx512bw");
helpers::unsafe_map_binary_op!(i16x32, std::ops::Mul, mul, _mm512_mullo_epi16, "avx512bw");
helpers::unsafe_map_unary_op!(i16x32, SIMDAbs, abs_simd, _mm512_abs_epi16, "avx512bw");
helpers::unsafe_map_unary_op!(
i16x32,
SIMDPopcount,
popcount_simd,
_mm512_popcnt_epi16,
"avx512bitalg"
);

helpers::unsafe_map_binary_op!(
i16x32,
Expand Down Expand Up @@ -126,4 +133,5 @@ mod test_x86_i16 {

// Bit ops
test_utils::ops::test_bitops!(i16x32, 0xba0be356b04d6427, V4::new_checked_uncached());
test_utils::ops::test_popcount!(i16x32, 0xa787d20c8f94b58b, V4::new_checked_uncached());
}
10 changes: 9 additions & 1 deletion diskann-wide/src/arch/x86_64/v4/i16x8_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use crate::{
bitmask::BitMask,
constant::Const,
helpers,
traits::{SIMDAbs, SIMDMulAdd, SIMDVector},
traits::{SIMDAbs, SIMDMulAdd, SIMDPopcount, SIMDVector},
};

///////////////////
Expand All @@ -33,6 +33,13 @@ helpers::unsafe_map_binary_op!(i16x8, std::ops::Add, add, _mm_add_epi16, "sse2")
helpers::unsafe_map_binary_op!(i16x8, std::ops::Sub, sub, _mm_sub_epi16, "sse2");
helpers::unsafe_map_binary_op!(i16x8, std::ops::Mul, mul, _mm_mullo_epi16, "sse2");
helpers::unsafe_map_unary_op!(i16x8, SIMDAbs, abs_simd, _mm_abs_epi16, "ssse3");
helpers::unsafe_map_unary_op!(
i16x8,
SIMDPopcount,
popcount_simd,
_mm_popcnt_epi16,
"avx512bitalg,avx512vl"
);

helpers::unsafe_map_binary_op!(i16x8, std::ops::BitAnd, bitand, _mm_and_si128, "sse2");
helpers::unsafe_map_binary_op!(i16x8, std::ops::BitOr, bitor, _mm_or_si128, "sse2");
Expand Down Expand Up @@ -125,4 +132,5 @@ mod test_x86_i16 {

// Bit ops
test_utils::ops::test_bitops!(i16x8, 0x2dd8796bda1cb89d, V4::new_checked_uncached());
test_utils::ops::test_popcount!(i16x8, 0x6bc496e226618794, V4::new_checked_uncached());
}
13 changes: 12 additions & 1 deletion diskann-wide/src/arch/x86_64/v4/i32x16_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ use crate::{
},
constant::Const,
helpers,
traits::{SIMDAbs, SIMDDotProduct, SIMDMask, SIMDMulAdd, SIMDSelect, SIMDSumTree, SIMDVector},
traits::{
SIMDAbs, SIMDDotProduct, SIMDMask, SIMDMulAdd, SIMDPopcount, SIMDSelect, SIMDSumTree,
SIMDVector,
},
};

/////
Expand All @@ -32,6 +35,13 @@ helpers::unsafe_map_binary_op!(i32x16, std::ops::Add, add, _mm512_add_epi32, "av
helpers::unsafe_map_binary_op!(i32x16, std::ops::Sub, sub, _mm512_sub_epi32, "avx512f");
helpers::unsafe_map_binary_op!(i32x16, std::ops::Mul, mul, _mm512_mullo_epi32, "avx512f");
helpers::unsafe_map_unary_op!(i32x16, SIMDAbs, abs_simd, _mm512_abs_epi32, "avx512f");
helpers::unsafe_map_unary_op!(
i32x16,
SIMDPopcount,
popcount_simd,
_mm512_popcnt_epi32,
"avx512vpopcntdq"
);

helpers::unsafe_map_binary_op!(
i32x16,
Expand Down Expand Up @@ -170,6 +180,7 @@ mod test_x86_i32 {

// Bit ops
test_utils::ops::test_bitops!(i32x16, 0xc5f7d8d8df0b7b6c, V4::new_checked_uncached());
test_utils::ops::test_popcount!(i32x16, 0xc8068253462939e5, V4::new_checked_uncached());

// Dot Products
test_utils::dot_product::test_dot_product!(
Expand Down
10 changes: 9 additions & 1 deletion diskann-wide/src/arch/x86_64/v4/i32x4_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::{
},
constant::Const,
helpers,
traits::{SIMDAbs, SIMDMask, SIMDMulAdd, SIMDVector},
traits::{SIMDAbs, SIMDMask, SIMDMulAdd, SIMDPopcount, SIMDVector},
};

/////
Expand All @@ -32,6 +32,13 @@ helpers::unsafe_map_binary_op!(i32x4, std::ops::Add, add, _mm_add_epi32, "sse2")
helpers::unsafe_map_binary_op!(i32x4, std::ops::Sub, sub, _mm_sub_epi32, "sse2");
helpers::unsafe_map_binary_op!(i32x4, std::ops::Mul, mul, _mm_mullo_epi32, "sse4.1");
helpers::unsafe_map_unary_op!(i32x4, SIMDAbs, abs_simd, _mm_abs_epi32, "ssse3");
helpers::unsafe_map_unary_op!(
i32x4,
SIMDPopcount,
popcount_simd,
_mm_popcnt_epi32,
"avx512vpopcntdq,avx512vl"
);

helpers::unsafe_map_binary_op!(i32x4, std::ops::BitAnd, bitand, _mm_and_si128, "sse2");
helpers::unsafe_map_binary_op!(i32x4, std::ops::BitOr, bitor, _mm_or_si128, "sse2");
Expand Down Expand Up @@ -109,4 +116,5 @@ mod test_x86_i32 {

// Bit ops
test_utils::ops::test_bitops!(i32x4, 0x763fc44f8f7cd40c, V4::new_checked_uncached());
test_utils::ops::test_popcount!(i32x4, 0x6b756a0a75b4f2d6, V4::new_checked_uncached());
}
13 changes: 12 additions & 1 deletion diskann-wide/src/arch/x86_64/v4/i32x8_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ use crate::{
},
constant::Const,
helpers,
traits::{SIMDAbs, SIMDDotProduct, SIMDMask, SIMDMulAdd, SIMDSelect, SIMDSumTree, SIMDVector},
traits::{
SIMDAbs, SIMDDotProduct, SIMDMask, SIMDMulAdd, SIMDPopcount, SIMDSelect, SIMDSumTree,
SIMDVector,
},
};

/////
Expand All @@ -41,6 +44,13 @@ helpers::unsafe_map_binary_op!(i32x8, std::ops::Add, add, _mm256_add_epi32, "avx
helpers::unsafe_map_binary_op!(i32x8, std::ops::Sub, sub, _mm256_sub_epi32, "avx2");
helpers::unsafe_map_binary_op!(i32x8, std::ops::Mul, mul, _mm256_mullo_epi32, "avx2");
helpers::unsafe_map_unary_op!(i32x8, SIMDAbs, abs_simd, _mm256_abs_epi32, "avx2");
helpers::unsafe_map_unary_op!(
i32x8,
SIMDPopcount,
popcount_simd,
_mm256_popcnt_epi32,
"avx512vpopcntdq,avx512vl"
);

helpers::unsafe_map_binary_op!(i32x8, std::ops::BitAnd, bitand, _mm256_and_si256, "avx2");
helpers::unsafe_map_binary_op!(i32x8, std::ops::BitOr, bitor, _mm256_or_si256, "avx2");
Expand Down Expand Up @@ -167,6 +177,7 @@ mod test_x86_i32 {

// Bit ops
test_utils::ops::test_bitops!(i32x8, 0xc5f7d8d8df0b7b6c, V4::new_checked_uncached());
test_utils::ops::test_popcount!(i32x8, 0xb24fb02ef70f7345, V4::new_checked_uncached());

// Dot Products
test_utils::dot_product::test_dot_product!(
Expand Down
10 changes: 9 additions & 1 deletion diskann-wide/src/arch/x86_64/v4/i8x16_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::{
},
constant::Const,
helpers,
traits::{SIMDAbs, SIMDMask, SIMDMulAdd, SIMDVector},
traits::{SIMDAbs, SIMDMask, SIMDMulAdd, SIMDPopcount, SIMDVector},
};

//////////////////
Expand All @@ -31,6 +31,13 @@ macros::x86_retarget!(i8x16 => v3::i8x16);
helpers::unsafe_map_binary_op!(i8x16, std::ops::Add, add, _mm_add_epi8, "sse2");
helpers::unsafe_map_binary_op!(i8x16, std::ops::Sub, sub, _mm_sub_epi8, "sse2");
helpers::unsafe_map_unary_op!(i8x16, SIMDAbs, abs_simd, _mm_abs_epi8, "ssse3");
helpers::unsafe_map_unary_op!(
i8x16,
SIMDPopcount,
popcount_simd,
_mm_popcnt_epi8,
"avx512bitalg,avx512vl"
);

impl std::ops::Mul for i8x16 {
type Output = Self;
Expand Down Expand Up @@ -134,4 +141,5 @@ mod test_x86_i8 {

// Bit ops
test_utils::ops::test_bitops!(i8x16, 0xeb7bb4da5b84ebbe, V4::new_checked_uncached());
test_utils::ops::test_popcount!(i8x16, 0x9d61a6aa25b322cc, V4::new_checked_uncached());
}
10 changes: 9 additions & 1 deletion diskann-wide/src/arch/x86_64/v4/i8x32_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::{
},
constant::Const,
helpers,
traits::{SIMDAbs, SIMDMask, SIMDMulAdd, SIMDVector},
traits::{SIMDAbs, SIMDMask, SIMDMulAdd, SIMDPopcount, SIMDVector},
};

//////////////////
Expand Down Expand Up @@ -59,6 +59,13 @@ impl std::ops::Mul for i8x32 {
helpers::unsafe_map_binary_op!(i8x32, std::ops::Add, add, _mm256_add_epi8, "avx2");
helpers::unsafe_map_binary_op!(i8x32, std::ops::Sub, sub, _mm256_sub_epi8, "avx2");
helpers::unsafe_map_unary_op!(i8x32, SIMDAbs, abs_simd, _mm256_abs_epi8, "avx2");
helpers::unsafe_map_unary_op!(
i8x32,
SIMDPopcount,
popcount_simd,
_mm256_popcnt_epi8,
"avx512bitalg,avx512vl"
);

helpers::unsafe_map_binary_op!(i8x32, std::ops::BitAnd, bitand, _mm256_and_si256, "avx2");
helpers::unsafe_map_binary_op!(i8x32, std::ops::BitOr, bitor, _mm256_or_si256, "avx2");
Expand Down Expand Up @@ -158,4 +165,5 @@ mod test_x86_i8 {

// Bit ops
test_utils::ops::test_bitops!(i8x32, 0xd62d8de09f82ed4e, V4::new_checked_uncached());
test_utils::ops::test_popcount!(i8x32, 0xdc54b21bedc25f46, V4::new_checked_uncached());
}
10 changes: 9 additions & 1 deletion diskann-wide/src/arch/x86_64/v4/i8x64_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::{
},
constant::Const,
helpers,
traits::{SIMDAbs, SIMDMask, SIMDMulAdd, SIMDVector},
traits::{SIMDAbs, SIMDMask, SIMDMulAdd, SIMDPopcount, SIMDVector},
};

//////////////////
Expand All @@ -39,6 +39,13 @@ impl std::ops::Mul for i8x64 {
helpers::unsafe_map_binary_op!(i8x64, std::ops::Add, add, _mm512_add_epi8, "avx512bw");
helpers::unsafe_map_binary_op!(i8x64, std::ops::Sub, sub, _mm512_sub_epi8, "avx512bw");
helpers::unsafe_map_unary_op!(i8x64, SIMDAbs, abs_simd, _mm512_abs_epi8, "avx512bw");
helpers::unsafe_map_unary_op!(
i8x64,
SIMDPopcount,
popcount_simd,
_mm512_popcnt_epi8,
"avx512bitalg"
);

helpers::unsafe_map_binary_op!(i8x64, std::ops::BitAnd, bitand, _mm512_and_si512, "avx512f");
helpers::unsafe_map_binary_op!(i8x64, std::ops::BitOr, bitor, _mm512_or_si512, "avx512f");
Expand Down Expand Up @@ -131,4 +138,5 @@ mod test_x86_i8 {

// Bit ops
test_utils::ops::test_bitops!(i8x64, 0xd62d8de09f82ed4e, V4::new_checked_uncached());
test_utils::ops::test_popcount!(i8x64, 0x50971ea8ed24cedd, V4::new_checked_uncached());
}
Loading
Loading