@@ -275,21 +275,21 @@ unsafe fn analyze_source_file_sse2(
275275 let ptr = src_bytes. as_ptr ( ) as * const __m128i ;
276276 // We don't know if the pointer is aligned to 16 bytes, so we
277277 // use `loadu`, which supports unaligned loading.
278- let chunk = _mm_loadu_si128 ( ptr. add ( chunk_index) ) ;
278+ let chunk = unsafe { _mm_loadu_si128 ( ptr. add ( chunk_index) ) } ;
279279
280280 // For character in the chunk, see if its byte value is < 0, which
281281 // indicates that it's part of a UTF-8 char.
282- let multibyte_test = _mm_cmplt_epi8 ( chunk, _mm_set1_epi8 ( 0 ) ) ;
282+ let multibyte_test = unsafe { _mm_cmplt_epi8 ( chunk, _mm_set1_epi8 ( 0 ) ) } ;
283283 // Create a bit mask from the comparison results.
284- let multibyte_mask = _mm_movemask_epi8 ( multibyte_test) ;
284+ let multibyte_mask = unsafe { _mm_movemask_epi8 ( multibyte_test) } ;
285285
286286 // If the bit mask is all zero, we only have ASCII chars here:
287287 if multibyte_mask == 0 {
288288 assert ! ( intra_chunk_offset == 0 ) ;
289289
290290 // Check for newlines in the chunk
291- let newlines_test = _mm_cmpeq_epi8 ( chunk, _mm_set1_epi8 ( b'\n' as i8 ) ) ;
292- let newlines_mask = _mm_movemask_epi8 ( newlines_test) ;
291+ let newlines_test = unsafe { _mm_cmpeq_epi8 ( chunk, _mm_set1_epi8 ( b'\n' as i8 ) ) } ;
292+ let newlines_mask = unsafe { _mm_movemask_epi8 ( newlines_test) } ;
293293
294294 if newlines_mask != 0 {
295295 // All control characters are newlines, record them
@@ -349,8 +349,8 @@ unsafe fn analyze_source_file_sse2(
349349unsafe fn move_mask ( v : std:: arch:: aarch64:: uint8x16_t ) -> u64 {
350350 use std:: arch:: aarch64:: * ;
351351
352- let nibble_mask = vshrn_n_u16 ( vreinterpretq_u16_u8 ( v) , 4 ) ;
353- vget_lane_u64 ( vreinterpret_u64_u8 ( nibble_mask) , 0 )
352+ let nibble_mask = unsafe { vshrn_n_u16 ( vreinterpretq_u16_u8 ( v) , 4 ) } ;
353+ unsafe { vget_lane_u64 ( vreinterpret_u64_u8 ( nibble_mask) , 0 ) }
354354}
355355
356356#[ target_feature( enable = "neon" ) ]
@@ -368,7 +368,7 @@ unsafe fn analyze_source_file_neon(
368368
369369 let chunk_count = src. len ( ) / CHUNK_SIZE ;
370370
371- let newline = vdupq_n_s8 ( b'\n' as i8 ) ;
371+ let newline = unsafe { vdupq_n_s8 ( b'\n' as i8 ) } ;
372372
373373 // This variable keeps track of where we should start decoding a
374374 // chunk. If a multi-byte character spans across chunk boundaries,
@@ -378,21 +378,21 @@ unsafe fn analyze_source_file_neon(
378378
379379 for chunk_index in 0 ..chunk_count {
380380 let ptr = src_bytes. as_ptr ( ) as * const i8 ;
381- let chunk = vld1q_s8 ( ptr. add ( chunk_index * CHUNK_SIZE ) ) ;
381+ let chunk = unsafe { vld1q_s8 ( ptr. add ( chunk_index * CHUNK_SIZE ) ) } ;
382382
383383 // For character in the chunk, see if its byte value is < 0, which
384384 // indicates that it's part of a UTF-8 char.
385- let multibyte_test = vcltzq_s8 ( chunk) ;
385+ let multibyte_test = unsafe { vcltzq_s8 ( chunk) } ;
386386 // Create a bit mask from the comparison results.
387- let multibyte_mask = move_mask ( multibyte_test) ;
387+ let multibyte_mask = unsafe { move_mask ( multibyte_test) } ;
388388
389389 // If the bit mask is all zero, we only have ASCII chars here:
390390 if multibyte_mask == 0 {
391391 assert ! ( intra_chunk_offset == 0 ) ;
392392
393393 // Check for newlines in the chunk
394- let newlines_test = vceqq_s8 ( chunk, newline) ;
395- let mut newlines_mask = move_mask ( newlines_test) ;
394+ let newlines_test = unsafe { vceqq_s8 ( chunk, newline) } ;
395+ let mut newlines_mask = unsafe { move_mask ( newlines_test) } ;
396396
397397 // If the bit mask is not all zero, there are newlines in this chunk.
398398 if newlines_mask != 0 {
0 commit comments