Skip to content

Commit 25d4830

Browse files
authored
perf: reduce alignment overhead for small inputs (#16)
1 parent ec09483 commit 25d4830

File tree

2 files changed

+460
-483
lines changed

2 files changed

+460
-483
lines changed

src/lib.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,19 @@ pub fn escape<S: AsRef<str>>(input: S) -> String {
127127
result.push(b'"');
128128
let s = input.as_ref();
129129
let bytes = s.as_bytes();
130+
let len = bytes.len();
130131
// Runtime CPU feature detection for x86_64
131-
if is_x86_feature_detected!("avx512f") && is_x86_feature_detected!("avx512bw") {
132+
if is_x86_feature_detected!("avx512f")
133+
&& is_x86_feature_detected!("avx512bw")
134+
&& len >= x86::LOOP_SIZE_AVX512
135+
{
132136
unsafe { x86::escape_avx512(bytes, &mut result) }
133-
} else if is_x86_feature_detected!("avx2") {
137+
} else if is_x86_feature_detected!("avx2") && len >= x86::LOOP_SIZE_AVX2 {
134138
unsafe { x86::escape_avx2(bytes, &mut result) }
135-
} else if is_x86_feature_detected!("sse2") {
139+
} else if is_x86_feature_detected!("sse2")
140+
&& /* if len < 128, no need to use simd */
141+
len >= x86::LOOP_SIZE_AVX2
142+
{
136143
unsafe { x86::escape_sse2(bytes, &mut result) }
137144
} else {
138145
escape_inner(bytes, &mut result);

0 commit comments

Comments
 (0)