@@ -17,9 +17,13 @@ const KEPT_BITS: i8 = 0b011;
1717unsafe fn part1_inner ( s : & [ u8 ] ) -> u64 {
1818 let mut sum = 0 ;
1919
20- let mut keys = [ MaybeUninit :: < __m256i > :: uninit ( ) ; 512 ] ;
20+ static mut KEYS : [ __m256i ; 512 ] = unsafe { std:: mem:: transmute ( [ 0u8 ; 512 * 32 ] ) } ;
21+ static mut HOLES : [ __m256i ; 512 ] = unsafe { std:: mem:: transmute ( [ 0u8 ; 512 * 32 ] ) } ;
22+
23+ let keys = & mut * ( & raw mut KEYS ) ;
24+ let holes = & mut * ( & raw mut HOLES ) ;
25+
2126 let mut keys_i = 0 ;
22- let mut holes = [ MaybeUninit :: < __m256i > :: uninit ( ) ; 512 ] ;
2327 let mut holes_i = 0 ;
2428
2529 let mut i = 0 ;
@@ -46,7 +50,7 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
4650
4751 if is_key {
4852 for i in 0 ..holes_i {
49- let o = holes. get_unchecked ( i) . assume_init_read ( ) ;
53+ let o = * holes. get_unchecked ( i) ;
5054 let collisions = _mm256_cmpeq_epi8 ( d, o) ;
5155 let collisions = _mm256_movemask_epi8 ( collisions) ;
5256 sum += ( collisions == 0 ) as u64 ;
@@ -62,11 +66,11 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
6266 0 , 0 , 0 , 0 , 0 , -1 , -1 , -1 ,
6367 ) ,
6468 ) ;
65- keys. get_unchecked_mut ( keys_i) . write ( d ) ;
69+ * keys. get_unchecked_mut ( keys_i) = d ;
6670 keys_i += 1 ;
6771 } else {
6872 for i in 0 ..keys_i {
69- let o = keys. get_unchecked ( i) . assume_init_read ( ) ;
73+ let o = * keys. get_unchecked ( i) ;
7074 let collisions = _mm256_cmpeq_epi8 ( d, o) ;
7175 let collisions = _mm256_movemask_epi8 ( collisions) ;
7276 sum += ( collisions == 0 ) as u64 ;
@@ -82,7 +86,7 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
8286 0 , 0 , 0 , 0 , 0 , -1 , -1 , -1 ,
8387 ) ,
8488 ) ;
85- holes. get_unchecked_mut ( holes_i) . write ( d ) ;
89+ * holes. get_unchecked_mut ( holes_i) = d ;
8690 holes_i += 1 ;
8791 }
8892
0 commit comments