Skip to content

Commit 6daeb66

Browse files
GrigorenkoPVAmanieu
authored andcommitted
use addr_of!
1 parent fb7df64 commit 6daeb66

File tree

4 files changed

+51
-48
lines changed

4 files changed

+51
-48
lines changed

crates/core_arch/src/x86/avx.rs

+28-27
Original file line numberDiff line numberDiff line change
@@ -1432,7 +1432,7 @@ pub unsafe fn _mm256_loadu_pd(mem_addr: *const f64) -> __m256d {
14321432
let mut dst = _mm256_undefined_pd();
14331433
ptr::copy_nonoverlapping(
14341434
mem_addr as *const u8,
1435-
&mut dst as *mut __m256d as *mut u8,
1435+
ptr::addr_of_mut!(dst) as *mut u8,
14361436
mem::size_of::<__m256d>(),
14371437
);
14381438
dst
@@ -1464,7 +1464,7 @@ pub unsafe fn _mm256_loadu_ps(mem_addr: *const f32) -> __m256 {
14641464
let mut dst = _mm256_undefined_ps();
14651465
ptr::copy_nonoverlapping(
14661466
mem_addr as *const u8,
1467-
&mut dst as *mut __m256 as *mut u8,
1467+
ptr::addr_of_mut!(dst) as *mut u8,
14681468
mem::size_of::<__m256>(),
14691469
);
14701470
dst
@@ -1521,7 +1521,7 @@ pub unsafe fn _mm256_loadu_si256(mem_addr: *const __m256i) -> __m256i {
15211521
let mut dst = _mm256_undefined_si256();
15221522
ptr::copy_nonoverlapping(
15231523
mem_addr as *const u8,
1524-
&mut dst as *mut __m256i as *mut u8,
1524+
ptr::addr_of_mut!(dst) as *mut u8,
15251525
mem::size_of::<__m256i>(),
15261526
);
15271527
dst
@@ -3065,6 +3065,7 @@ extern "C" {
30653065
#[cfg(test)]
30663066
mod tests {
30673067
use crate::hint::black_box;
3068+
use crate::ptr;
30683069
use stdarch_test::simd_test;
30693070

30703071
use crate::core_arch::x86::*;
@@ -3903,7 +3904,7 @@ mod tests {
39033904
#[simd_test(enable = "avx")]
39043905
unsafe fn test_mm256_load_pd() {
39053906
let a = _mm256_setr_pd(1., 2., 3., 4.);
3906-
let p = &a as *const _ as *const f64;
3907+
let p = ptr::addr_of!(a) as *const f64;
39073908
let r = _mm256_load_pd(p);
39083909
let e = _mm256_setr_pd(1., 2., 3., 4.);
39093910
assert_eq_m256d(r, e);
@@ -3913,14 +3914,14 @@ mod tests {
39133914
unsafe fn test_mm256_store_pd() {
39143915
let a = _mm256_setr_pd(1., 2., 3., 4.);
39153916
let mut r = _mm256_undefined_pd();
3916-
_mm256_store_pd(&mut r as *mut _ as *mut f64, a);
3917+
_mm256_store_pd(ptr::addr_of_mut!(r) as *mut f64, a);
39173918
assert_eq_m256d(r, a);
39183919
}
39193920

39203921
#[simd_test(enable = "avx")]
39213922
unsafe fn test_mm256_load_ps() {
39223923
let a = _mm256_setr_ps(4., 3., 2., 5., 8., 9., 64., 50.);
3923-
let p = &a as *const _ as *const f32;
3924+
let p = ptr::addr_of!(a) as *const f32;
39243925
let r = _mm256_load_ps(p);
39253926
let e = _mm256_setr_ps(4., 3., 2., 5., 8., 9., 64., 50.);
39263927
assert_eq_m256(r, e);
@@ -3930,7 +3931,7 @@ mod tests {
39303931
unsafe fn test_mm256_store_ps() {
39313932
let a = _mm256_setr_ps(4., 3., 2., 5., 8., 9., 64., 50.);
39323933
let mut r = _mm256_undefined_ps();
3933-
_mm256_store_ps(&mut r as *mut _ as *mut f32, a);
3934+
_mm256_store_ps(ptr::addr_of_mut!(r) as *mut f32, a);
39343935
assert_eq_m256(r, a);
39353936
}
39363937

@@ -3947,7 +3948,7 @@ mod tests {
39473948
unsafe fn test_mm256_storeu_pd() {
39483949
let a = _mm256_set1_pd(9.);
39493950
let mut r = _mm256_undefined_pd();
3950-
_mm256_storeu_pd(&mut r as *mut _ as *mut f64, a);
3951+
_mm256_storeu_pd(ptr::addr_of_mut!(r) as *mut f64, a);
39513952
assert_eq_m256d(r, a);
39523953
}
39533954

@@ -3964,14 +3965,14 @@ mod tests {
39643965
unsafe fn test_mm256_storeu_ps() {
39653966
let a = _mm256_set1_ps(9.);
39663967
let mut r = _mm256_undefined_ps();
3967-
_mm256_storeu_ps(&mut r as *mut _ as *mut f32, a);
3968+
_mm256_storeu_ps(ptr::addr_of_mut!(r) as *mut f32, a);
39683969
assert_eq_m256(r, a);
39693970
}
39703971

39713972
#[simd_test(enable = "avx")]
39723973
unsafe fn test_mm256_load_si256() {
39733974
let a = _mm256_setr_epi64x(1, 2, 3, 4);
3974-
let p = &a as *const _;
3975+
let p = ptr::addr_of!(a);
39753976
let r = _mm256_load_si256(p);
39763977
let e = _mm256_setr_epi64x(1, 2, 3, 4);
39773978
assert_eq_m256i(r, e);
@@ -3981,14 +3982,14 @@ mod tests {
39813982
unsafe fn test_mm256_store_si256() {
39823983
let a = _mm256_setr_epi64x(1, 2, 3, 4);
39833984
let mut r = _mm256_undefined_si256();
3984-
_mm256_store_si256(&mut r as *mut _, a);
3985+
_mm256_store_si256(ptr::addr_of_mut!(r), a);
39853986
assert_eq_m256i(r, a);
39863987
}
39873988

39883989
#[simd_test(enable = "avx")]
39893990
unsafe fn test_mm256_loadu_si256() {
39903991
let a = _mm256_setr_epi64x(1, 2, 3, 4);
3991-
let p = &a as *const _;
3992+
let p = ptr::addr_of!(a);
39923993
let r = _mm256_loadu_si256(black_box(p));
39933994
let e = _mm256_setr_epi64x(1, 2, 3, 4);
39943995
assert_eq_m256i(r, e);
@@ -3998,7 +3999,7 @@ mod tests {
39983999
unsafe fn test_mm256_storeu_si256() {
39994000
let a = _mm256_set1_epi8(9);
40004001
let mut r = _mm256_undefined_si256();
4001-
_mm256_storeu_si256(&mut r as *mut _, a);
4002+
_mm256_storeu_si256(ptr::addr_of_mut!(r), a);
40024003
assert_eq_m256i(r, a);
40034004
}
40044005

@@ -4017,7 +4018,7 @@ mod tests {
40174018
let mut r = _mm256_set1_pd(0.);
40184019
let mask = _mm256_setr_epi64x(0, !0, 0, !0);
40194020
let a = _mm256_setr_pd(1., 2., 3., 4.);
4020-
_mm256_maskstore_pd(&mut r as *mut _ as *mut f64, mask, a);
4021+
_mm256_maskstore_pd(ptr::addr_of_mut!(r) as *mut f64, mask, a);
40214022
let e = _mm256_setr_pd(0., 2., 0., 4.);
40224023
assert_eq_m256d(r, e);
40234024
}
@@ -4037,7 +4038,7 @@ mod tests {
40374038
let mut r = _mm_set1_pd(0.);
40384039
let mask = _mm_setr_epi64x(0, !0);
40394040
let a = _mm_setr_pd(1., 2.);
4040-
_mm_maskstore_pd(&mut r as *mut _ as *mut f64, mask, a);
4041+
_mm_maskstore_pd(ptr::addr_of_mut!(r) as *mut f64, mask, a);
40414042
let e = _mm_setr_pd(0., 2.);
40424043
assert_eq_m128d(r, e);
40434044
}
@@ -4057,7 +4058,7 @@ mod tests {
40574058
let mut r = _mm256_set1_ps(0.);
40584059
let mask = _mm256_setr_epi32(0, !0, 0, !0, 0, !0, 0, !0);
40594060
let a = _mm256_setr_ps(1., 2., 3., 4., 5., 6., 7., 8.);
4060-
_mm256_maskstore_ps(&mut r as *mut _ as *mut f32, mask, a);
4061+
_mm256_maskstore_ps(ptr::addr_of_mut!(r) as *mut f32, mask, a);
40614062
let e = _mm256_setr_ps(0., 2., 0., 4., 0., 6., 0., 8.);
40624063
assert_eq_m256(r, e);
40634064
}
@@ -4077,7 +4078,7 @@ mod tests {
40774078
let mut r = _mm_set1_ps(0.);
40784079
let mask = _mm_setr_epi32(0, !0, 0, !0);
40794080
let a = _mm_setr_ps(1., 2., 3., 4.);
4080-
_mm_maskstore_ps(&mut r as *mut _ as *mut f32, mask, a);
4081+
_mm_maskstore_ps(ptr::addr_of_mut!(r) as *mut f32, mask, a);
40814082
let e = _mm_setr_ps(0., 2., 0., 4.);
40824083
assert_eq_m128(r, e);
40834084
}
@@ -4115,7 +4116,7 @@ mod tests {
41154116
17, 18, 19, 20, 21, 22, 23, 24,
41164117
25, 26, 27, 28, 29, 30, 31, 32,
41174118
);
4118-
let p = &a as *const _;
4119+
let p = ptr::addr_of!(a);
41194120
let r = _mm256_lddqu_si256(black_box(p));
41204121
#[rustfmt::skip]
41214122
let e = _mm256_setr_epi8(
@@ -4131,7 +4132,7 @@ mod tests {
41314132
unsafe fn test_mm256_stream_si256() {
41324133
let a = _mm256_setr_epi64x(1, 2, 3, 4);
41334134
let mut r = _mm256_undefined_si256();
4134-
_mm256_stream_si256(&mut r as *mut _, a);
4135+
_mm256_stream_si256(ptr::addr_of_mut!(r), a);
41354136
assert_eq_m256i(r, a);
41364137
}
41374138

@@ -4144,7 +4145,7 @@ mod tests {
41444145
let a = _mm256_set1_pd(7.0);
41454146
let mut mem = Memory { data: [-1.0; 4] };
41464147

4147-
_mm256_stream_pd(&mut mem.data[0] as *mut f64, a);
4148+
_mm256_stream_pd(ptr::addr_of_mut!(mem.data[0]), a);
41484149
for i in 0..4 {
41494150
assert_eq!(mem.data[i], get_m256d(a, i));
41504151
}
@@ -4159,7 +4160,7 @@ mod tests {
41594160
let a = _mm256_set1_ps(7.0);
41604161
let mut mem = Memory { data: [-1.0; 8] };
41614162

4162-
_mm256_stream_ps(&mut mem.data[0] as *mut f32, a);
4163+
_mm256_stream_ps(ptr::addr_of_mut!(mem.data[0]), a);
41634164
for i in 0..8 {
41644165
assert_eq!(mem.data[i], get_m256(a, i));
41654166
}
@@ -4807,7 +4808,7 @@ mod tests {
48074808
1, 2, 3, 4, 5, 6, 7, 8,
48084809
9, 10, 11, 12, 13, 14, 15, 16,
48094810
);
4810-
let r = _mm256_loadu2_m128i(&hi as *const _ as *const _, &lo as *const _ as *const _);
4811+
let r = _mm256_loadu2_m128i(ptr::addr_of!(hi) as *const _, ptr::addr_of!(lo) as *const _);
48114812
#[rustfmt::skip]
48124813
let e = _mm256_setr_epi8(
48134814
1, 2, 3, 4, 5, 6, 7, 8,
@@ -4824,8 +4825,8 @@ mod tests {
48244825
let mut hi = _mm_undefined_ps();
48254826
let mut lo = _mm_undefined_ps();
48264827
_mm256_storeu2_m128(
4827-
&mut hi as *mut _ as *mut f32,
4828-
&mut lo as *mut _ as *mut f32,
4828+
ptr::addr_of_mut!(hi) as *mut f32,
4829+
ptr::addr_of_mut!(lo) as *mut f32,
48294830
a,
48304831
);
48314832
assert_eq_m128(hi, _mm_setr_ps(5., 6., 7., 8.));
@@ -4838,8 +4839,8 @@ mod tests {
48384839
let mut hi = _mm_undefined_pd();
48394840
let mut lo = _mm_undefined_pd();
48404841
_mm256_storeu2_m128d(
4841-
&mut hi as *mut _ as *mut f64,
4842-
&mut lo as *mut _ as *mut f64,
4842+
ptr::addr_of_mut!(hi) as *mut f64,
4843+
ptr::addr_of_mut!(lo) as *mut f64,
48434844
a,
48444845
);
48454846
assert_eq_m128d(hi, _mm_setr_pd(3., 4.));
@@ -4857,7 +4858,7 @@ mod tests {
48574858
);
48584859
let mut hi = _mm_undefined_si128();
48594860
let mut lo = _mm_undefined_si128();
4860-
_mm256_storeu2_m128i(&mut hi as *mut _, &mut lo as *mut _, a);
4861+
_mm256_storeu2_m128i(ptr::addr_of_mut!(hi), ptr::addr_of_mut!(lo), a);
48614862
#[rustfmt::skip]
48624863
let e_hi = _mm_setr_epi8(
48634864
17, 18, 19, 20, 21, 22, 23, 24,

crates/core_arch/src/x86/sse.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -1167,7 +1167,7 @@ pub unsafe fn _mm_loadu_ps(p: *const f32) -> __m128 {
11671167
let mut dst = _mm_undefined_ps();
11681168
ptr::copy_nonoverlapping(
11691169
p as *const u8,
1170-
&mut dst as *mut __m128 as *mut u8,
1170+
ptr::addr_of_mut!(dst) as *mut u8,
11711171
mem::size_of::<__m128>(),
11721172
);
11731173
dst
@@ -1300,7 +1300,7 @@ pub unsafe fn _mm_store_ps(p: *mut f32, a: __m128) {
13001300
#[stable(feature = "simd_x86", since = "1.27.0")]
13011301
pub unsafe fn _mm_storeu_ps(p: *mut f32, a: __m128) {
13021302
ptr::copy_nonoverlapping(
1303-
&a as *const __m128 as *const u8,
1303+
ptr::addr_of!(a) as *const u8,
13041304
p as *mut u8,
13051305
mem::size_of::<__m128>(),
13061306
);
@@ -1448,7 +1448,7 @@ pub unsafe fn _mm_sfence() {
14481448
)]
14491449
pub unsafe fn _mm_getcsr() -> u32 {
14501450
let mut result = 0_i32;
1451-
stmxcsr(&mut result as *mut _ as *mut i8);
1451+
stmxcsr(ptr::addr_of_mut!(result) as *mut i8);
14521452
result as u32
14531453
}
14541454

@@ -1598,7 +1598,7 @@ pub unsafe fn _mm_getcsr() -> u32 {
15981598
note = "see `_mm_setcsr` documentation - use inline assembly instead"
15991599
)]
16001600
pub unsafe fn _mm_setcsr(val: u32) {
1601-
ldmxcsr(&val as *const _ as *const i8);
1601+
ldmxcsr(ptr::addr_of!(val) as *const i8);
16021602
}
16031603

16041604
/// See [`_mm_setcsr`](fn._mm_setcsr.html)
@@ -2018,7 +2018,7 @@ pub unsafe fn _mm_stream_ps(mem_addr: *mut f32, a: __m128) {
20182018

20192019
#[cfg(test)]
20202020
mod tests {
2021-
use crate::{hint::black_box, mem::transmute};
2021+
use crate::{hint::black_box, mem::transmute, ptr};
20222022
use std::{boxed, f32::NAN};
20232023
use stdarch_test::simd_test;
20242024

@@ -3132,14 +3132,14 @@ mod tests {
31323132
#[simd_test(enable = "sse")]
31333133
unsafe fn test_mm_load_ss() {
31343134
let a = 42.0f32;
3135-
let r = _mm_load_ss(&a as *const f32);
3135+
let r = _mm_load_ss(ptr::addr_of!(a));
31363136
assert_eq_m128(r, _mm_setr_ps(42.0, 0.0, 0.0, 0.0));
31373137
}
31383138

31393139
#[simd_test(enable = "sse")]
31403140
unsafe fn test_mm_load1_ps() {
31413141
let a = 42.0f32;
3142-
let r = _mm_load1_ps(&a as *const f32);
3142+
let r = _mm_load1_ps(ptr::addr_of!(a));
31433143
assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0));
31443144
}
31453145

@@ -3198,7 +3198,7 @@ mod tests {
31983198
#[simd_test(enable = "sse2")]
31993199
unsafe fn test_mm_loadu_si64() {
32003200
let a = _mm_setr_epi64x(5, 6);
3201-
let r = _mm_loadu_si64(&a as *const _ as *const _);
3201+
let r = _mm_loadu_si64(ptr::addr_of!(a) as *const _);
32023202
assert_eq_m128i(r, _mm_setr_epi64x(5, 0));
32033203
}
32043204

@@ -3428,7 +3428,7 @@ mod tests {
34283428
let a = _mm_set1_ps(7.0);
34293429
let mut mem = Memory { data: [-1.0; 4] };
34303430

3431-
_mm_stream_ps(&mut mem.data[0] as *mut f32, a);
3431+
_mm_stream_ps(ptr::addr_of_mut!(mem.data[0]), a);
34323432
for i in 0..4 {
34333433
assert_eq!(mem.data[i], get_m128(a, i));
34343434
}

0 commit comments

Comments
 (0)