@@ -275,21 +275,21 @@ unsafe fn analyze_source_file_sse2(
275
275
let ptr = src_bytes. as_ptr ( ) as * const __m128i ;
276
276
// We don't know if the pointer is aligned to 16 bytes, so we
277
277
// 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) ) } ;
279
279
280
280
// For character in the chunk, see if its byte value is < 0, which
281
281
// 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 ) ) } ;
283
283
// 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) } ;
285
285
286
286
// If the bit mask is all zero, we only have ASCII chars here:
287
287
if multibyte_mask == 0 {
288
288
assert ! ( intra_chunk_offset == 0 ) ;
289
289
290
290
// 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) } ;
293
293
294
294
if newlines_mask != 0 {
295
295
// All control characters are newlines, record them
@@ -349,8 +349,8 @@ unsafe fn analyze_source_file_sse2(
349
349
unsafe fn move_mask ( v : std:: arch:: aarch64:: uint8x16_t ) -> u64 {
350
350
use std:: arch:: aarch64:: * ;
351
351
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 ) }
354
354
}
355
355
356
356
#[ target_feature( enable = "neon" ) ]
@@ -368,7 +368,7 @@ unsafe fn analyze_source_file_neon(
368
368
369
369
let chunk_count = src. len ( ) / CHUNK_SIZE ;
370
370
371
- let newline = vdupq_n_s8 ( b'\n' as i8 ) ;
371
+ let newline = unsafe { vdupq_n_s8 ( b'\n' as i8 ) } ;
372
372
373
373
// This variable keeps track of where we should start decoding a
374
374
// chunk. If a multi-byte character spans across chunk boundaries,
@@ -378,21 +378,21 @@ unsafe fn analyze_source_file_neon(
378
378
379
379
for chunk_index in 0 ..chunk_count {
380
380
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 ) ) } ;
382
382
383
383
// For character in the chunk, see if its byte value is < 0, which
384
384
// 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) } ;
386
386
// 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) } ;
388
388
389
389
// If the bit mask is all zero, we only have ASCII chars here:
390
390
if multibyte_mask == 0 {
391
391
assert ! ( intra_chunk_offset == 0 ) ;
392
392
393
393
// 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) } ;
396
396
397
397
// If the bit mask is not all zero, there are newlines in this chunk.
398
398
if newlines_mask != 0 {
0 commit comments