@@ -67,7 +67,7 @@ impl PixelFormat for RGBPixel {
6767 // Since we should always make sure the RGB payload occupies the logic lower bits
6868 // thus, this type purning should work for both LE and BE CPUs
6969 #[ rustfmt:: skip]
70- let ( p1, p2, p3) : ( u64 , u64 , u64 ) = unsafe {
70+ let [ p1, p2, p3] : [ u64 ; 3 ] = unsafe {
7171 std:: mem:: transmute ( [
7272 u16:: from ( r) , u16:: from ( b) , u16:: from ( g) , u16:: from ( r) , // QW1
7373 u16:: from ( b) , u16:: from ( g) , u16:: from ( r) , u16:: from ( b) , // QW2
@@ -76,7 +76,7 @@ impl PixelFormat for RGBPixel {
7676 } ;
7777
7878 #[ rustfmt:: skip]
79- let ( q1, q2, q3) : ( u64 , u64 , u64 ) = unsafe {
79+ let [ q1, q2, q3] : [ u64 ; 3 ] = unsafe {
8080 std:: mem:: transmute ( [
8181 u16:: from ( g) , u16:: from ( r) , u16:: from ( b) , u16:: from ( g) , // QW1
8282 u16:: from ( r) , u16:: from ( b) , u16:: from ( g) , u16:: from ( r) , // QW2
@@ -94,8 +94,8 @@ impl PixelFormat for RGBPixel {
9494 let start_ptr = & mut dst[ start * Self :: PIXEL_SIZE ] as * mut u8 as * mut [ u8 ; 24 ] ;
9595 let slice = unsafe { std:: slice:: from_raw_parts_mut ( start_ptr, ( count - 1 ) / 8 ) } ;
9696 for p in slice. iter_mut ( ) {
97- let ptr = p as * mut [ u8 ; 24 ] as * mut ( u64 , u64 , u64 ) ;
98- let ( d1, d2, d3) = unsafe { * ptr } ;
97+ let ptr = p as * mut [ u8 ; 24 ] as * mut [ u64 ; 3 ] ;
98+ let [ d1, d2, d3] = unsafe { ptr. read_unaligned ( ) } ;
9999 let ( mut h1, mut h2, mut h3) = ( ( d1 >> 8 ) & M , ( d2 >> 8 ) & M , ( d3 >> 8 ) & M ) ;
100100 let ( mut l1, mut l2, mut l3) = ( d1 & M , d2 & M , d3 & M ) ;
101101
@@ -120,7 +120,7 @@ impl PixelFormat for RGBPixel {
120120 }
121121
122122 unsafe {
123- * ptr = ( h1 | l1, h2 | l2, h3 | l3) ;
123+ ptr. write_unaligned ( [ h1 | l1, h2 | l2, h3 | l3] ) ;
124124 }
125125 }
126126
@@ -207,14 +207,14 @@ impl PixelFormat for RGBPixel {
207207 // TODO: Consider using AVX instructions when possible
208208 let ptr = p as * mut [ u8 ; 24 ] as * mut u64 ;
209209 unsafe {
210- let ( d1, d2, d3) : ( u64 , u64 , u64 ) = std:: mem:: transmute ( [
210+ let [ d1, d2, d3] : [ u64 ; 3 ] = std:: mem:: transmute ( [
211211 r, g, b, r, g, b, r, g, // QW1
212212 b, r, g, b, r, g, b, r, // QW2
213213 g, b, r, g, b, r, g, b, // QW3
214214 ] ) ;
215- * ptr = d1 ;
216- * ptr. offset ( 1 ) = d2 ;
217- * ptr. offset ( 2 ) = d3 ;
215+ ptr. write_unaligned ( d1 ) ;
216+ ptr. offset ( 1 ) . write_unaligned ( d2 ) ;
217+ ptr. offset ( 2 ) . write_unaligned ( d3 ) ;
218218 }
219219 }
220220
0 commit comments