Skip to content

Commit 6866271

Browse files
committed
fix: consistentcy in signatures and other
- format_raw is unsafe everywhere - dropped unused variables from format_unquoted everywhere - fixed "misspell" when avx/sse/neon stuff could call v128's format_raw - checked every hardware I could (except avx512 I have no access too)
1 parent 521eabc commit 6866271

6 files changed

Lines changed: 34 additions & 64 deletions

File tree

src/lib.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ fn format_string(value: &str, dst: &mut [u8]) -> usize {
291291
{
292292
let has_neon = cfg!(target_os = "macos") || std::arch::is_aarch64_feature_detected!("neon");
293293
if has_neon {
294-
unsafe { simd::neon::format_string(value, dst) }
294+
simd::neon::format_string(value, dst)
295295
} else {
296296
simd::v128::format_string(value, dst)
297297
}
@@ -302,13 +302,13 @@ fn format_string(value: &str, dst: &mut [u8]) -> usize {
302302
#[cfg(feature = "avx512")]
303303
{
304304
if is_x86_feature_detected!("avx512f") {
305-
return unsafe { simd::avx512::format_string(value, dst) };
305+
return simd::avx512::format_string(value, dst);
306306
}
307307
}
308308
if is_x86_feature_detected!("avx2") {
309-
unsafe { simd::avx2::format_string(value, dst) }
309+
simd::avx2::format_string(value, dst)
310310
} else if is_x86_feature_detected!("sse2") {
311-
unsafe { simd::sse2::format_string(value, dst) }
311+
simd::sse2::format_string(value, dst)
312312
} else {
313313
simd::v128::format_string(value, dst)
314314
}
@@ -326,9 +326,9 @@ fn format_unquoted(value: &str, dst: &mut [u8]) -> usize {
326326
{
327327
let has_neon = cfg!(target_os = "macos") || std::arch::is_aarch64_feature_detected!("neon");
328328
if has_neon {
329-
unsafe { simd::neon::format_unquoted(value, dst) }
329+
simd::neon::format_unquoted(value, dst)
330330
} else {
331-
simd::v128::format_string(value, dst)
331+
simd::v128::format_unquoted(value, dst)
332332
}
333333
}
334334

@@ -337,21 +337,21 @@ fn format_unquoted(value: &str, dst: &mut [u8]) -> usize {
337337
#[cfg(feature = "avx512")]
338338
{
339339
if is_x86_feature_detected!("avx512f") {
340-
return unsafe { simd::avx512::format_unquote(value, dst) };
340+
return simd::avx512::format_unquoted(value, dst);
341341
}
342342
}
343343
if is_x86_feature_detected!("avx2") {
344-
unsafe { simd::avx2::format_unquoted(value, dst) }
344+
simd::avx2::format_unquoted(value, dst)
345345
} else if is_x86_feature_detected!("sse2") {
346-
unsafe { simd::sse2::format_unquoted(value, dst) }
346+
simd::sse2::format_unquoted(value, dst)
347347
} else {
348348
simd::v128::format_unquoted(value, dst)
349349
}
350350
}
351351

352352
#[cfg(not(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")))]
353353
{
354-
simd::v128::format_string(value, dst)
354+
simd::v128::format_unquoted(value, dst)
355355
}
356356
}
357357

@@ -382,7 +382,7 @@ pub fn escape_unquote(value: &str) -> String {
382382
/// # Panics
383383
///
384384
/// Panics if the buffer is not large enough. Allocate enough capacity for dst,
385-
/// x6 will be enough in the worst case.
385+
/// x6 + 2 will be enough in the worst case.
386386
pub fn escape_into<S: AsRef<str>>(value: S, dst: &mut Vec<u8>) {
387387
let value = value.as_ref();
388388
let old_len = dst.len();

src/simd/avx2.rs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,8 @@ fn escaped_mask(v: Simd256u) -> u32 {
105105
#[inline(always)]
106106
pub fn format_string(value: &str, dst: &mut [u8]) -> usize {
107107
unsafe {
108-
let slice = value.as_bytes();
109108
let mut dptr = dst.as_mut_ptr();
110109
let dstart = dptr;
111-
let mut nb: usize = slice.len();
112110

113111
*dptr = b'"';
114112
dptr = dptr.add(1);
@@ -123,16 +121,12 @@ pub fn format_string(value: &str, dst: &mut [u8]) -> usize {
123121

124122
#[inline(always)]
125123
pub fn format_unquoted(value: &str, dst: &mut [u8]) -> usize {
126-
unsafe {
127-
let slice = value.as_bytes();
128-
let mut dptr = dst.as_mut_ptr();
129-
let dstart = dptr;
130-
let mut nb: usize = slice.len();
124+
let mut dptr = dst.as_mut_ptr();
125+
let dstart = dptr;
131126

132-
dptr = format_raw(value, dptr);
127+
dptr = unsafe { format_raw(value, dptr) };
133128

134-
dptr as usize - dstart as usize
135-
}
129+
dptr as usize - dstart as usize
136130
}
137131

138132
#[target_feature(enable = "avx2")]

src/simd/avx512.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,16 +116,12 @@ pub fn format_string(value: &str, dst: &mut [u8]) -> usize {
116116

117117
#[inline(always)]
118118
pub fn format_unquoted(value: &str, dst: &mut [u8]) -> usize {
119-
unsafe {
120-
let slice = value.as_bytes();
121-
let mut dptr = dst.as_mut_ptr();
122-
let dstart = dptr;
123-
let mut nb: usize = slice.len();
119+
let mut dptr = dst.as_mut_ptr();
120+
let dstart = dptr;
124121

125-
dptr = format_raw(value, dptr);
122+
dptr = unsafe { format_raw(value, dptr) };
126123

127-
dptr as usize - dstart as usize
128-
}
124+
dptr as usize - dstart as usize
129125
}
130126

131127

src/simd/neon.rs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,13 @@ fn escaped_mask(v: Simd128u) -> NeonBits {
113113
#[inline(always)]
114114
pub fn format_string(value: &str, dst: &mut [u8]) -> usize {
115115
unsafe {
116-
let slice = value.as_bytes();
117116
let mut dptr = dst.as_mut_ptr();
118117
let dstart = dptr;
119-
let mut nb: usize = slice.len();
120118

121119
*dptr = b'"';
122120
dptr = dptr.add(1);
123121

124-
dptr = crate::simd::v128::format_raw(value, dptr);
122+
dptr = format_raw(value, dptr);
125123

126124
*dptr = b'"';
127125
dptr = dptr.add(1);
@@ -131,16 +129,12 @@ pub fn format_string(value: &str, dst: &mut [u8]) -> usize {
131129

132130
#[inline(always)]
133131
pub fn format_unquoted(value: &str, dst: &mut [u8]) -> usize {
134-
unsafe {
135-
let slice = value.as_bytes();
136-
let mut dptr = dst.as_mut_ptr();
137-
let dstart = dptr;
138-
let mut nb: usize = slice.len();
132+
let mut dptr = dst.as_mut_ptr();
133+
let dstart = dptr;
139134

140-
dptr = crate::simd::v128::format_raw(value, dptr);
135+
dptr = unsafe { format_raw(value, dptr) };
141136

142-
dptr as usize - dstart as usize
143-
}
137+
dptr as usize - dstart as usize
144138
}
145139

146140
#[target_feature(enable = "neon")]

src/simd/sse2.rs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,13 @@ fn escaped_mask(v: Simd128u) -> u16 {
103103
#[inline(always)]
104104
pub fn format_string(value: &str, dst: &mut [u8]) -> usize {
105105
unsafe {
106-
let slice = value.as_bytes();
107106
let mut dptr = dst.as_mut_ptr();
108107
let dstart = dptr;
109-
let mut nb: usize = slice.len();
110108

111109
*dptr = b'"';
112110
dptr = dptr.add(1);
113111

114-
dptr = crate::simd::v128::format_raw(value, dptr);
112+
dptr = format_raw(value, dptr);
115113

116114
*dptr = b'"';
117115
dptr = dptr.add(1);
@@ -121,24 +119,19 @@ pub fn format_string(value: &str, dst: &mut [u8]) -> usize {
121119

122120
#[inline(always)]
123121
pub fn format_unquoted(value: &str, dst: &mut [u8]) -> usize {
124-
unsafe {
125-
let slice = value.as_bytes();
126-
let mut dptr = dst.as_mut_ptr();
127-
let dstart = dptr;
128-
let mut nb: usize = slice.len();
122+
let mut dptr = dst.as_mut_ptr();
123+
let dstart = dptr;
129124

130-
dptr = crate::simd::v128::format_raw(value, dptr);
125+
dptr = unsafe { format_raw(value, dptr) };
131126

132-
dptr as usize - dstart as usize
133-
}
127+
dptr as usize - dstart as usize
134128
}
135129

136130
#[target_feature(enable = "sse2")]
137131
pub unsafe fn format_raw(value: &str, mut dptr: *mut u8) -> *mut u8 {
138132
unsafe {
139133
let slice = value.as_bytes();
140134
let mut sptr = slice.as_ptr();
141-
let dstart = dptr;
142135
let mut nb: usize = slice.len();
143136

144137
// Process CHUNK (4 * LANES = 64 bytes) at a time

src/simd/v128.rs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,8 @@ fn escaped_mask(v: Simd128u) -> u16 {
119119
#[inline(always)]
120120
pub fn format_string(value: &str, dst: &mut [u8]) -> usize {
121121
unsafe {
122-
let slice = value.as_bytes();
123122
let mut dptr = dst.as_mut_ptr();
124123
let dstart = dptr;
125-
let mut nb: usize = slice.len();
126124

127125
*dptr = b'"';
128126
dptr = dptr.add(1);
@@ -137,20 +135,15 @@ pub fn format_string(value: &str, dst: &mut [u8]) -> usize {
137135

138136
#[inline(always)]
139137
pub fn format_unquoted(value: &str, dst: &mut [u8]) -> usize {
140-
unsafe {
141-
let slice = value.as_bytes();
142-
let mut dptr = dst.as_mut_ptr();
143-
let dstart = dptr;
144-
let mut nb: usize = slice.len();
138+
let mut dptr = dst.as_mut_ptr();
139+
let dstart = dptr;
145140

146-
dptr = format_raw(value, dptr);
141+
dptr = unsafe { format_raw(value, dptr) };
147142

148-
dptr as usize - dstart as usize
149-
}
143+
dptr as usize - dstart as usize
150144
}
151145

152-
153-
pub fn format_raw(value: &str, mut dptr: *mut u8) -> *mut u8 {
146+
pub unsafe fn format_raw(value: &str, mut dptr: *mut u8) -> *mut u8 {
154147
unsafe {
155148
let slice = value.as_bytes();
156149
let mut sptr = slice.as_ptr();

0 commit comments

Comments
 (0)