Optimize escape function for small strings
This commit is contained in:
parent
53f0db024c
commit
aea4e02259
|
@ -16,18 +16,20 @@ const VECTOR_ALIGN: usize = VECTOR_BYTES - 1;
|
|||
#[target_feature(enable = "avx2")]
|
||||
pub unsafe fn escape(buffer: &mut Buffer, bytes: &[u8]) {
|
||||
let len = bytes.len();
|
||||
let mut start_ptr = bytes.as_ptr();
|
||||
let end_ptr = start_ptr.add(len);
|
||||
|
||||
if len < VECTOR_BYTES {
|
||||
if len < 16 {
|
||||
naive::escape(buffer, start_ptr, start_ptr, end_ptr);
|
||||
} else {
|
||||
sse2::escape(buffer, bytes);
|
||||
}
|
||||
if len < 8 {
|
||||
let start_ptr = bytes.as_ptr();
|
||||
let end_ptr = start_ptr.add(len);
|
||||
naive::escape(buffer, start_ptr, start_ptr, end_ptr);
|
||||
return;
|
||||
} else if len < VECTOR_BYTES {
|
||||
sse2::escape(buffer, bytes);
|
||||
return;
|
||||
}
|
||||
|
||||
let mut start_ptr = bytes.as_ptr();
|
||||
let end_ptr = start_ptr.add(len);
|
||||
|
||||
let v_independent1 = _mm256_set1_epi8(4);
|
||||
let v_independent2 = _mm256_set1_epi8(2);
|
||||
let v_key1 = _mm256_set1_epi8(0x26);
|
||||
|
|
|
@ -38,6 +38,7 @@ fn contains_key(x: usize) -> bool {
|
|||
contains_zero_byte(z1) || contains_zero_byte(z2)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub unsafe fn escape(buffer: &mut Buffer, bytes: &[u8]) {
|
||||
let len = bytes.len();
|
||||
let mut start_ptr = bytes.as_ptr();
|
||||
|
|
|
@ -17,14 +17,16 @@ const VECTOR_ALIGN: usize = VECTOR_BYTES - 1;
|
|||
#[inline]
|
||||
pub unsafe fn escape(buffer: &mut Buffer, bytes: &[u8]) {
|
||||
let len = bytes.len();
|
||||
let mut start_ptr = bytes.as_ptr();
|
||||
let end_ptr = start_ptr.add(len);
|
||||
|
||||
if bytes.len() < VECTOR_BYTES {
|
||||
if len < VECTOR_BYTES {
|
||||
let start_ptr = bytes.as_ptr();
|
||||
let end_ptr = start_ptr.add(len);
|
||||
naive::escape(buffer, start_ptr, start_ptr, end_ptr);
|
||||
return;
|
||||
}
|
||||
|
||||
let mut start_ptr = bytes.as_ptr();
|
||||
let end_ptr = start_ptr.add(len);
|
||||
|
||||
let v_independent1 = _mm_set1_epi8(4);
|
||||
let v_independent2 = _mm_set1_epi8(2);
|
||||
let v_key1 = _mm_set1_epi8(0x26);
|
||||
|
@ -66,6 +68,8 @@ pub unsafe fn escape(buffer: &mut Buffer, bytes: &[u8]) {
|
|||
escape_aligned(buffer, start_ptr, ptr, end_ptr);
|
||||
}
|
||||
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[inline]
|
||||
pub unsafe fn escape_aligned(
|
||||
buffer: &mut Buffer,
|
||||
mut start_ptr: *const u8,
|
||||
|
|
Loading…
Reference in New Issue