@@ -67,7 +67,7 @@ impl PixelFormat for RGBPixel {
67
67
// Since we should always make sure the RGB payload occupies the logic lower bits
68
68
// thus, this type purning should work for both LE and BE CPUs
69
69
#[ rustfmt:: skip]
70
- let ( p1, p2, p3) : ( u64 , u64 , u64 ) = unsafe {
70
+ let [ p1, p2, p3] : [ u64 ; 3 ] = unsafe {
71
71
std:: mem:: transmute ( [
72
72
u16:: from ( r) , u16:: from ( b) , u16:: from ( g) , u16:: from ( r) , // QW1
73
73
u16:: from ( b) , u16:: from ( g) , u16:: from ( r) , u16:: from ( b) , // QW2
@@ -76,7 +76,7 @@ impl PixelFormat for RGBPixel {
76
76
} ;
77
77
78
78
#[ rustfmt:: skip]
79
- let ( q1, q2, q3) : ( u64 , u64 , u64 ) = unsafe {
79
+ let [ q1, q2, q3] : [ u64 ; 3 ] = unsafe {
80
80
std:: mem:: transmute ( [
81
81
u16:: from ( g) , u16:: from ( r) , u16:: from ( b) , u16:: from ( g) , // QW1
82
82
u16:: from ( r) , u16:: from ( b) , u16:: from ( g) , u16:: from ( r) , // QW2
@@ -94,8 +94,8 @@ impl PixelFormat for RGBPixel {
94
94
let start_ptr = & mut dst[ start * Self :: PIXEL_SIZE ] as * mut u8 as * mut [ u8 ; 24 ] ;
95
95
let slice = unsafe { std:: slice:: from_raw_parts_mut ( start_ptr, ( count - 1 ) / 8 ) } ;
96
96
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 ( ) } ;
99
99
let ( mut h1, mut h2, mut h3) = ( ( d1 >> 8 ) & M , ( d2 >> 8 ) & M , ( d3 >> 8 ) & M ) ;
100
100
let ( mut l1, mut l2, mut l3) = ( d1 & M , d2 & M , d3 & M ) ;
101
101
@@ -120,7 +120,7 @@ impl PixelFormat for RGBPixel {
120
120
}
121
121
122
122
unsafe {
123
- * ptr = ( h1 | l1, h2 | l2, h3 | l3) ;
123
+ ptr. write_unaligned ( [ h1 | l1, h2 | l2, h3 | l3] ) ;
124
124
}
125
125
}
126
126
@@ -207,14 +207,14 @@ impl PixelFormat for RGBPixel {
207
207
// TODO: Consider using AVX instructions when possible
208
208
let ptr = p as * mut [ u8 ; 24 ] as * mut u64 ;
209
209
unsafe {
210
- let ( d1, d2, d3) : ( u64 , u64 , u64 ) = std:: mem:: transmute ( [
210
+ let [ d1, d2, d3] : [ u64 ; 3 ] = std:: mem:: transmute ( [
211
211
r, g, b, r, g, b, r, g, // QW1
212
212
b, r, g, b, r, g, b, r, // QW2
213
213
g, b, r, g, b, r, g, b, // QW3
214
214
] ) ;
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 ) ;
218
218
}
219
219
}
220
220
0 commit comments