1- use std:: arch:: x86_64:: * ;
1+ use std:: { arch:: x86_64:: * , mem :: MaybeUninit } ;
22
33use aoc_runner_derive:: aoc;
44
@@ -21,11 +21,8 @@ static LUT: [u32; 4] = [0, 0xFF, 0xFF_FF, 0xFF_FF_FF];
2121unsafe fn part1_inner ( s : & [ u8 ] ) -> u64 {
2222 let mut sum = 0 ;
2323
24- static mut KEYS : [ u64 ; 256 ] = unsafe { std:: mem:: transmute ( [ 0u8 ; 256 * 8 ] ) } ;
25- static mut HOLES : [ u64 ; 256 ] = unsafe { std:: mem:: transmute ( [ 0u8 ; 256 * 8 ] ) } ;
26-
27- let keys = & mut * ( & raw mut KEYS ) ;
28- let holes = & mut * ( & raw mut HOLES ) ;
24+ let mut keys: [ MaybeUninit < u64 > ; 256 ] = [ MaybeUninit :: uninit ( ) ; 256 ] ;
25+ let mut holes: [ MaybeUninit < u64 > ; 256 ] = [ MaybeUninit :: uninit ( ) ; 256 ] ;
2926
3027 let mut keys_i = 0 ;
3128 let mut holes_i = 0 ;
@@ -131,15 +128,15 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
131128 msb = in( ymm_reg) _mm256_set1_epi8( 0x80u8 as i8 ) ,
132129 zero = in( ymm_reg) _mm256_set1_epi64x( 0 ) ,
133130 lut = in( reg) LUT . as_ptr( ) ,
134- os = in( reg) holes,
131+ os = in( reg) holes. as_ptr ( ) ,
135132 max_i = in( reg) holes_i,
136133 sum = inout( reg) sum,
137134 i = out( reg) _,
138135 t = out( reg) _,
139136 vt = out( ymm_reg) _,
140137 options( nostack) ,
141138 ) ;
142- * keys. get_unchecked_mut ( keys_i) = d + 0x7A7A7A7A7A ;
139+ keys. get_unchecked_mut ( keys_i) . write ( d + 0x7A7A7A7A7A ) ;
143140 keys_i += 1 ;
144141 } else {
145142 std:: arch:: asm!(
@@ -210,15 +207,15 @@ unsafe fn part1_inner(s: &[u8]) -> u64 {
210207 msb = in( ymm_reg) _mm256_set1_epi8( 0x80u8 as i8 ) ,
211208 zero = in( ymm_reg) _mm256_set1_epi64x( 0 ) ,
212209 lut = in( reg) LUT . as_ptr( ) ,
213- os = in( reg) keys,
210+ os = in( reg) keys. as_ptr ( ) ,
214211 max_i = in( reg) keys_i,
215212 sum = inout( reg) sum,
216213 i = out( reg) _,
217214 t = out( reg) _,
218215 vt = out( ymm_reg) _,
219216 options( nostack) ,
220217 ) ;
221- * holes. get_unchecked_mut ( holes_i) = d + 0x7A7A7A7A7A ;
218+ holes. get_unchecked_mut ( holes_i) . write ( d + 0x7A7A7A7A7A ) ;
222219 holes_i += 1 ;
223220 }
224221
0 commit comments