Skip to content

Commit 76c5a43

Browse files
committed
Fix x86
Signed-off-by: Heinz N. Gies <heinz@licenser.net>
1 parent 30b8a4d commit 76c5a43

File tree

7 files changed

+39
-33
lines changed

7 files changed

+39
-33
lines changed

src/impls/avx2/stage1.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
#![allow(dead_code)]
2-
use crate::{static_cast_i32, static_cast_i64, static_cast_u32, Stage1Parse};
2+
use crate::{static_cast_i32, static_cast_i64, static_cast_u32, Stage1Parse, SIMDINPUT_LENGTH};
33
#[cfg(target_arch = "x86")]
44
use std::arch::x86 as arch;
55

66
#[cfg(target_arch = "x86_64")]
77
use std::arch::x86_64 as arch;
88

99
use arch::{
10-
__m256i, _mm256_add_epi32, _mm256_and_si256, _mm256_cmpeq_epi8, _mm256_loadu_si256,
11-
_mm256_max_epu8, _mm256_movemask_epi8, _mm256_set1_epi8, _mm256_set_epi32, _mm256_setr_epi8,
12-
_mm256_setzero_si256, _mm256_shuffle_epi8, _mm256_srli_epi32, _mm256_storeu_si256,
13-
_mm_clmulepi64_si128, _mm_set1_epi8, _mm_set_epi64x,
10+
__m256i, _mm256_add_epi32, _mm256_and_si256, _mm256_cmpeq_epi8, _mm256_load_si256,
11+
_mm256_loadu_si256, _mm256_max_epu8, _mm256_movemask_epi8, _mm256_set1_epi8, _mm256_set_epi32,
12+
_mm256_setr_epi8, _mm256_setzero_si256, _mm256_shuffle_epi8, _mm256_srli_epi32,
13+
_mm256_storeu_si256, _mm_clmulepi64_si128, _mm_set1_epi8, _mm_set_epi64x,
1414
};
1515

1616
macro_rules! low_nibble_mask {

src/impls/native/stage1.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![allow(clippy::cast_lossless, clippy::cast_sign_loss)]
22

3-
use crate::{static_cast_i32, Stage1Parse};
3+
use crate::{static_cast_i32, Stage1Parse, SIMDINPUT_LENGTH};
44

55
type V128 = [u8; 16];
66

src/impls/neon/stage1.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ pub unsafe fn neon_movemask_bulk(
3838

3939
// /NEON-SPECIFIC
4040

41-
//pub const SIMDJSON_PADDING: usize = mem::size_of::<uint8x16_t>() * 4;
42-
//pub const SIMDINPUT_LENGTH: usize = 64;
43-
4441
#[derive(Debug)]
4542
pub(crate) struct SimdInput {
4643
v0: uint8x16_t,

src/impls/portable/stage1.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::simd::{prelude::*, ToBitMask};
22

3-
use crate::{static_cast_i32, Stage1Parse};
3+
use crate::{static_cast_i32, Stage1Parse, SIMDINPUT_LENGTH};
44
#[derive(Debug)]
55
pub(crate) struct SimdInput {
66
v: u8x64,

src/impls/simd128/stage1.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::Stage1Parse;
1+
use crate::{Stage1Parse, SIMDINPUT_LENGTH};
22
use std::arch::wasm32::{
33
i8x16_splat, u32x4, u32x4_add, u32x4_splat, u8x16, u8x16_bitmask, u8x16_eq, u8x16_le,
44
u8x16_shr, u8x16_splat, u8x16_swizzle, v128, v128_and, v128_load, v128_store,

src/impls/sse42/stage1.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{static_cast_i32, static_cast_u32, Stage1Parse};
1+
use crate::{static_cast_i32, static_cast_u32, Stage1Parse, SIMDINPUT_LENGTH};
22
#[cfg(target_arch = "x86")]
33
use std::arch::x86 as arch;
44

@@ -7,16 +7,17 @@ use std::arch::x86_64 as arch;
77

88
#[cfg(target_arch = "x86")]
99
use arch::{
10-
__m128i, _mm_add_epi32, _mm_and_si128, _mm_cmpeq_epi8, _mm_cmpgt_epi8, _mm_loadu_si128,
11-
_mm_max_epu8, _mm_movemask_epi8, _mm_or_si128, _mm_set1_epi8, _mm_set_epi32, _mm_setr_epi8,
12-
_mm_setzero_si128, _mm_shuffle_epi8, _mm_srli_epi32, _mm_storeu_si128, _mm_testz_si128,
10+
__m128i, _mm_add_epi32, _mm_and_si128, _mm_cmpeq_epi8, _mm_cmpgt_epi8, _mm_load_si128,
11+
_mm_loadu_si128, _mm_max_epu8, _mm_movemask_epi8, _mm_or_si128, _mm_set1_epi8, _mm_set_epi32,
12+
_mm_setr_epi8, _mm_setzero_si128, _mm_shuffle_epi8, _mm_srli_epi32, _mm_storeu_si128,
13+
_mm_testz_si128,
1314
};
1415

1516
#[cfg(target_arch = "x86_64")]
1617
use arch::{
17-
__m128i, _mm_add_epi32, _mm_and_si128, _mm_cmpeq_epi8, _mm_loadu_si128, _mm_max_epu8,
18-
_mm_movemask_epi8, _mm_set1_epi8, _mm_set_epi32, _mm_setr_epi8, _mm_setzero_si128,
19-
_mm_shuffle_epi8, _mm_srli_epi32, _mm_storeu_si128,
18+
__m128i, _mm_add_epi32, _mm_and_si128, _mm_cmpeq_epi8, _mm_load_si128, _mm_loadu_si128,
19+
_mm_max_epu8, _mm_movemask_epi8, _mm_set1_epi8, _mm_set_epi32, _mm_setr_epi8,
20+
_mm_setzero_si128, _mm_shuffle_epi8, _mm_srli_epi32, _mm_storeu_si128,
2021
};
2122

2223
macro_rules! low_nibble_mask {

src/lib.rs

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,8 @@ type ParseStrFn = for<'invoke, 'de> unsafe fn(
325325
any(target_arch = "x86_64", target_arch = "x86"),
326326
))]
327327
type FindStructuralBitsFn = unsafe fn(
328-
input: &[u8],
328+
input: &AlignedBuf,
329+
len: usize,
329330
structural_indexes: &mut Vec<u32>,
330331
) -> std::result::Result<(), ErrorType>;
331332

@@ -597,7 +598,8 @@ impl<'de> Deserializer<'de> {
597598
any(target_arch = "x86_64", target_arch = "x86"),
598599
))]
599600
pub(crate) unsafe fn find_structural_bits(
600-
input: &[u8],
601+
input: &AlignedBuf,
602+
len: usize,
601603
structural_indexes: &mut Vec<u32>,
602604
) -> std::result::Result<(), ErrorType> {
603605
use std::sync::atomic::{AtomicPtr, Ordering};
@@ -621,16 +623,17 @@ impl<'de> Deserializer<'de> {
621623

622624
#[cfg_attr(not(feature = "no-inline"), inline)]
623625
unsafe fn get_fastest(
624-
input: &[u8],
626+
input: &AlignedBuf,
627+
len: usize,
625628
structural_indexes: &mut Vec<u32>,
626629
) -> core::result::Result<(), error::ErrorType> {
627630
let fun = get_fastest_available_implementation();
628631
FN.store(fun as FnRaw, Ordering::Relaxed);
629-
(fun)(input, structural_indexes)
632+
(fun)(input, len, structural_indexes)
630633
}
631634

632635
let fun = FN.load(Ordering::Relaxed);
633-
mem::transmute::<FnRaw, FindStructuralBitsFn>(fun)(input, structural_indexes)
636+
mem::transmute::<FnRaw, FindStructuralBitsFn>(fun)(input, len, structural_indexes)
634637
}
635638

636639
#[cfg(not(any(
@@ -646,7 +649,8 @@ impl<'de> Deserializer<'de> {
646649
)))]
647650
#[cfg_attr(not(feature = "no-inline"), inline)]
648651
pub(crate) unsafe fn find_structural_bits(
649-
input: &[u8],
652+
input: &AlignedBuf,
653+
len: usize,
650654
structural_indexes: &mut Vec<u32>,
651655
) -> std::result::Result<(), ErrorType> {
652656
// This is a nasty hack, we don't have a chunked implementation for native rust
@@ -656,16 +660,17 @@ impl<'de> Deserializer<'de> {
656660
Err(_) => return Err(ErrorType::InvalidUtf8),
657661
};
658662
#[cfg(not(feature = "portable"))]
659-
Self::_find_structural_bits::<impls::native::SimdInput>(input, structural_indexes)
663+
Self::_find_structural_bits::<impls::native::SimdInput>(input, len, structural_indexes)
660664
}
661665

662666
#[cfg(all(feature = "portable", not(feature = "runtime-detection")))]
663667
#[cfg_attr(not(feature = "no-inline"), inline)]
664668
pub(crate) unsafe fn find_structural_bits(
665-
input: &[u8],
669+
input: &AlignedBuf,
670+
len: usize,
666671
structural_indexes: &mut Vec<u32>,
667672
) -> std::result::Result<(), ErrorType> {
668-
Self::_find_structural_bits::<impls::portable::SimdInput>(input, structural_indexes)
673+
Self::_find_structural_bits::<impls::portable::SimdInput>(input, len, structural_indexes)
669674
}
670675

671676
#[cfg(all(
@@ -675,10 +680,11 @@ impl<'de> Deserializer<'de> {
675680
))]
676681
#[cfg_attr(not(feature = "no-inline"), inline)]
677682
pub(crate) unsafe fn find_structural_bits(
678-
input: &[u8],
683+
input: &AlignedBuf,
684+
len: usize,
679685
structural_indexes: &mut Vec<u32>,
680686
) -> std::result::Result<(), ErrorType> {
681-
Self::_find_structural_bits::<impls::avx2::SimdInput>(input, structural_indexes)
687+
Self::_find_structural_bits::<impls::avx2::SimdInput>(input, len, structural_indexes)
682688
}
683689

684690
#[cfg(all(
@@ -689,10 +695,11 @@ impl<'de> Deserializer<'de> {
689695
))]
690696
#[cfg_attr(not(feature = "no-inline"), inline)]
691697
pub(crate) unsafe fn find_structural_bits(
692-
input: &[u8],
698+
input: &AlignedBuf,
699+
len: usize,
693700
structural_indexes: &mut Vec<u32>,
694701
) -> std::result::Result<(), ErrorType> {
695-
Self::_find_structural_bits::<impls::sse42::SimdInput>(input, structural_indexes)
702+
Self::_find_structural_bits::<impls::sse42::SimdInput>(input, len, structural_indexes)
696703
}
697704

698705
#[cfg(all(target_arch = "aarch64", not(feature = "portable")))]
@@ -708,10 +715,11 @@ impl<'de> Deserializer<'de> {
708715
#[cfg(all(target_feature = "simd128", not(feature = "portable")))]
709716
#[cfg_attr(not(feature = "no-inline"), inline)]
710717
pub(crate) unsafe fn find_structural_bits(
711-
input: &[u8],
718+
input: &AlignedBuf,
719+
len: usize,
712720
structural_indexes: &mut Vec<u32>,
713721
) -> std::result::Result<(), ErrorType> {
714-
Self::_find_structural_bits::<impls::simd128::SimdInput>(input, structural_indexes)
722+
Self::_find_structural_bits::<impls::simd128::SimdInput>(input, len, structural_indexes)
715723
}
716724
}
717725

0 commit comments

Comments
 (0)