Skip to content

Commit 15c04c8

Browse files
committed
Fix x86
Signed-off-by: Heinz N. Gies <[email protected]>
1 parent e872158 commit 15c04c8

File tree

7 files changed

+38
-32
lines changed

7 files changed

+38
-32
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: 7 additions & 6 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

@@ -8,15 +8,16 @@ use std::arch::x86_64 as arch;
88
#[cfg(target_arch = "x86")]
99
use arch::{
1010
__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,
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_loadu_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
@@ -426,7 +426,8 @@ type ParseStrFn = for<'invoke, 'de> unsafe fn(
426426
any(target_arch = "x86_64", target_arch = "x86"),
427427
))]
428428
type FindStructuralBitsFn = unsafe fn(
429-
input: &[u8],
429+
input: &AlignedBuf,
430+
len: usize,
430431
structural_indexes: &mut Vec<u32>,
431432
) -> std::result::Result<(), ErrorType>;
432433

@@ -698,7 +699,8 @@ impl<'de> Deserializer<'de> {
698699
any(target_arch = "x86_64", target_arch = "x86"),
699700
))]
700701
pub(crate) unsafe fn find_structural_bits(
701-
input: &[u8],
702+
input: &AlignedBuf,
703+
len: usize,
702704
structural_indexes: &mut Vec<u32>,
703705
) -> std::result::Result<(), ErrorType> {
704706
use std::sync::atomic::{AtomicPtr, Ordering};
@@ -722,16 +724,17 @@ impl<'de> Deserializer<'de> {
722724

723725
#[cfg_attr(not(feature = "no-inline"), inline)]
724726
unsafe fn get_fastest(
725-
input: &[u8],
727+
input: &AlignedBuf,
728+
len: usize,
726729
structural_indexes: &mut Vec<u32>,
727730
) -> core::result::Result<(), error::ErrorType> {
728731
let fun = get_fastest_available_implementation();
729732
FN.store(fun as FnRaw, Ordering::Relaxed);
730-
(fun)(input, structural_indexes)
733+
(fun)(input, len, structural_indexes)
731734
}
732735

733736
let fun = FN.load(Ordering::Relaxed);
734-
mem::transmute::<FnRaw, FindStructuralBitsFn>(fun)(input, structural_indexes)
737+
mem::transmute::<FnRaw, FindStructuralBitsFn>(fun)(input, len, structural_indexes)
735738
}
736739

737740
#[cfg(not(any(
@@ -747,7 +750,8 @@ impl<'de> Deserializer<'de> {
747750
)))]
748751
#[cfg_attr(not(feature = "no-inline"), inline)]
749752
pub(crate) unsafe fn find_structural_bits(
750-
input: &[u8],
753+
input: &AlignedBuf,
754+
len: usize,
751755
structural_indexes: &mut Vec<u32>,
752756
) -> std::result::Result<(), ErrorType> {
753757
// This is a nasty hack, we don't have a chunked implementation for native rust
@@ -757,16 +761,17 @@ impl<'de> Deserializer<'de> {
757761
Err(_) => return Err(ErrorType::InvalidUtf8),
758762
};
759763
#[cfg(not(feature = "portable"))]
760-
Self::_find_structural_bits::<impls::native::SimdInput>(input, structural_indexes)
764+
Self::_find_structural_bits::<impls::native::SimdInput>(input, len, structural_indexes)
761765
}
762766

763767
#[cfg(all(feature = "portable", not(feature = "runtime-detection")))]
764768
#[cfg_attr(not(feature = "no-inline"), inline)]
765769
pub(crate) unsafe fn find_structural_bits(
766-
input: &[u8],
770+
input: &AlignedBuf,
771+
len: usize,
767772
structural_indexes: &mut Vec<u32>,
768773
) -> std::result::Result<(), ErrorType> {
769-
Self::_find_structural_bits::<impls::portable::SimdInput>(input, structural_indexes)
774+
Self::_find_structural_bits::<impls::portable::SimdInput>(input, len, structural_indexes)
770775
}
771776

772777
#[cfg(all(
@@ -776,10 +781,11 @@ impl<'de> Deserializer<'de> {
776781
))]
777782
#[cfg_attr(not(feature = "no-inline"), inline)]
778783
pub(crate) unsafe fn find_structural_bits(
779-
input: &[u8],
784+
input: &AlignedBuf,
785+
len: usize,
780786
structural_indexes: &mut Vec<u32>,
781787
) -> std::result::Result<(), ErrorType> {
782-
Self::_find_structural_bits::<impls::avx2::SimdInput>(input, structural_indexes)
788+
Self::_find_structural_bits::<impls::avx2::SimdInput>(input, len, structural_indexes)
783789
}
784790

785791
#[cfg(all(
@@ -790,10 +796,11 @@ impl<'de> Deserializer<'de> {
790796
))]
791797
#[cfg_attr(not(feature = "no-inline"), inline)]
792798
pub(crate) unsafe fn find_structural_bits(
793-
input: &[u8],
799+
input: &AlignedBuf,
800+
len: usize,
794801
structural_indexes: &mut Vec<u32>,
795802
) -> std::result::Result<(), ErrorType> {
796-
Self::_find_structural_bits::<impls::sse42::SimdInput>(input, structural_indexes)
803+
Self::_find_structural_bits::<impls::sse42::SimdInput>(input, len, structural_indexes)
797804
}
798805

799806
#[cfg(all(target_arch = "aarch64", not(feature = "portable")))]
@@ -809,10 +816,11 @@ impl<'de> Deserializer<'de> {
809816
#[cfg(all(target_feature = "simd128", not(feature = "portable")))]
810817
#[cfg_attr(not(feature = "no-inline"), inline)]
811818
pub(crate) unsafe fn find_structural_bits(
812-
input: &[u8],
819+
input: &AlignedBuf,
820+
len: usize,
813821
structural_indexes: &mut Vec<u32>,
814822
) -> std::result::Result<(), ErrorType> {
815-
Self::_find_structural_bits::<impls::simd128::SimdInput>(input, structural_indexes)
823+
Self::_find_structural_bits::<impls::simd128::SimdInput>(input, len, structural_indexes)
816824
}
817825
}
818826

0 commit comments

Comments
 (0)