Skip to content

Commit bc7c7c4

Browse files
committed
Update documentation for unsafe_op_in_unsafe_fn
For the documentation side, we probably want to show the Rust 2024 style.
1 parent 12ce6d5 commit bc7c7c4

File tree

3 files changed

+57
-55
lines changed

3 files changed

+57
-55
lines changed

Diff for: crates/core_arch/src/core_arch_docs.md

+43-41
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ unsafe fn foo_avx2() {
131131
#[cfg(target_arch = "x86_64")]
132132
use std::arch::x86_64::_mm256_add_epi64;
133133
134-
_mm256_add_epi64(...);
134+
unsafe { _mm256_add_epi64(...); }
135135
}
136136
```
137137

@@ -287,47 +287,49 @@ unsafe fn hex_encode_sse41(mut src: &[u8], dst: &mut [u8]) {
287287
#[cfg(target_arch = "x86_64")]
288288
use std::arch::x86_64::*;
289289
290-
let ascii_zero = _mm_set1_epi8(b'0' as i8);
291-
let nines = _mm_set1_epi8(9);
292-
let ascii_a = _mm_set1_epi8((b'a' - 9 - 1) as i8);
293-
let and4bits = _mm_set1_epi8(0xf);
294-
295-
let mut i = 0_isize;
296-
while src.len() >= 16 {
297-
let invec = _mm_loadu_si128(src.as_ptr() as *const _);
298-
299-
let masked1 = _mm_and_si128(invec, and4bits);
300-
let masked2 = _mm_and_si128(_mm_srli_epi64(invec, 4), and4bits);
301-
302-
// return 0xff corresponding to the elements > 9, or 0x00 otherwise
303-
let cmpmask1 = _mm_cmpgt_epi8(masked1, nines);
304-
let cmpmask2 = _mm_cmpgt_epi8(masked2, nines);
305-
306-
// add '0' or the offset depending on the masks
307-
let masked1 = _mm_add_epi8(
308-
masked1,
309-
_mm_blendv_epi8(ascii_zero, ascii_a, cmpmask1),
310-
);
311-
let masked2 = _mm_add_epi8(
312-
masked2,
313-
_mm_blendv_epi8(ascii_zero, ascii_a, cmpmask2),
314-
);
315-
316-
// interleave masked1 and masked2 bytes
317-
let res1 = _mm_unpacklo_epi8(masked2, masked1);
318-
let res2 = _mm_unpackhi_epi8(masked2, masked1);
319-
320-
_mm_storeu_si128(dst.as_mut_ptr().offset(i * 2) as *mut _, res1);
321-
_mm_storeu_si128(
322-
dst.as_mut_ptr().offset(i * 2 + 16) as *mut _,
323-
res2,
324-
);
325-
src = &src[16..];
326-
i += 16;
327-
}
290+
unsafe {
291+
let ascii_zero = _mm_set1_epi8(b'0' as i8);
292+
let nines = _mm_set1_epi8(9);
293+
let ascii_a = _mm_set1_epi8((b'a' - 9 - 1) as i8);
294+
let and4bits = _mm_set1_epi8(0xf);
295+
296+
let mut i = 0_isize;
297+
while src.len() >= 16 {
298+
let invec = _mm_loadu_si128(src.as_ptr() as *const _);
299+
300+
let masked1 = _mm_and_si128(invec, and4bits);
301+
let masked2 = _mm_and_si128(_mm_srli_epi64(invec, 4), and4bits);
302+
303+
// return 0xff corresponding to the elements > 9, or 0x00 otherwise
304+
let cmpmask1 = _mm_cmpgt_epi8(masked1, nines);
305+
let cmpmask2 = _mm_cmpgt_epi8(masked2, nines);
306+
307+
// add '0' or the offset depending on the masks
308+
let masked1 = _mm_add_epi8(
309+
masked1,
310+
_mm_blendv_epi8(ascii_zero, ascii_a, cmpmask1),
311+
);
312+
let masked2 = _mm_add_epi8(
313+
masked2,
314+
_mm_blendv_epi8(ascii_zero, ascii_a, cmpmask2),
315+
);
316+
317+
// interleave masked1 and masked2 bytes
318+
let res1 = _mm_unpacklo_epi8(masked2, masked1);
319+
let res2 = _mm_unpackhi_epi8(masked2, masked1);
320+
321+
_mm_storeu_si128(dst.as_mut_ptr().offset(i * 2) as *mut _, res1);
322+
_mm_storeu_si128(
323+
dst.as_mut_ptr().offset(i * 2 + 16) as *mut _,
324+
res2,
325+
);
326+
src = &src[16..];
327+
i += 16;
328+
}
328329
329-
let i = i as usize;
330-
hex_encode_fallback(src, &mut dst[i * 2..]);
330+
let i = i as usize;
331+
hex_encode_fallback(src, &mut dst[i * 2..]);
332+
}
331333
}
332334
333335
fn hex_encode_fallback(src: &[u8], dst: &mut [u8]) {

Diff for: crates/core_arch/src/x86/mod.rs

+12-12
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ types! {
4747
///
4848
/// # fn main() {
4949
/// # #[target_feature(enable = "sse2")]
50-
/// # unsafe fn foo() {
50+
/// # unsafe fn foo() { unsafe {
5151
/// let all_bytes_zero = _mm_setzero_si128();
5252
/// let all_bytes_one = _mm_set1_epi8(1);
5353
/// let four_i32 = _mm_set_epi32(1, 2, 3, 4);
54-
/// # }
54+
/// # }}
5555
/// # if is_x86_feature_detected!("sse2") { unsafe { foo() } }
5656
/// # }
5757
/// ```
@@ -89,11 +89,11 @@ types! {
8989
///
9090
/// # fn main() {
9191
/// # #[target_feature(enable = "sse")]
92-
/// # unsafe fn foo() {
92+
/// # unsafe fn foo() { unsafe {
9393
/// let four_zeros = _mm_setzero_ps();
9494
/// let four_ones = _mm_set1_ps(1.0);
9595
/// let four_floats = _mm_set_ps(1.0, 2.0, 3.0, 4.0);
96-
/// # }
96+
/// # }}
9797
/// # if is_x86_feature_detected!("sse") { unsafe { foo() } }
9898
/// # }
9999
/// ```
@@ -131,11 +131,11 @@ types! {
131131
///
132132
/// # fn main() {
133133
/// # #[target_feature(enable = "sse")]
134-
/// # unsafe fn foo() {
134+
/// # unsafe fn foo() { unsafe {
135135
/// let two_zeros = _mm_setzero_pd();
136136
/// let two_ones = _mm_set1_pd(1.0);
137137
/// let two_floats = _mm_set_pd(1.0, 2.0);
138-
/// # }
138+
/// # }}
139139
/// # if is_x86_feature_detected!("sse") { unsafe { foo() } }
140140
/// # }
141141
/// ```
@@ -177,11 +177,11 @@ types! {
177177
///
178178
/// # fn main() {
179179
/// # #[target_feature(enable = "avx")]
180-
/// # unsafe fn foo() {
180+
/// # unsafe fn foo() { unsafe {
181181
/// let all_bytes_zero = _mm256_setzero_si256();
182182
/// let all_bytes_one = _mm256_set1_epi8(1);
183183
/// let eight_i32 = _mm256_set_epi32(1, 2, 3, 4, 5, 6, 7, 8);
184-
/// # }
184+
/// # }}
185185
/// # if is_x86_feature_detected!("avx") { unsafe { foo() } }
186186
/// # }
187187
/// ```
@@ -219,11 +219,11 @@ types! {
219219
///
220220
/// # fn main() {
221221
/// # #[target_feature(enable = "avx")]
222-
/// # unsafe fn foo() {
222+
/// # unsafe fn foo() { unsafe {
223223
/// let eight_zeros = _mm256_setzero_ps();
224224
/// let eight_ones = _mm256_set1_ps(1.0);
225225
/// let eight_floats = _mm256_set_ps(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
226-
/// # }
226+
/// # }}
227227
/// # if is_x86_feature_detected!("avx") { unsafe { foo() } }
228228
/// # }
229229
/// ```
@@ -261,11 +261,11 @@ types! {
261261
///
262262
/// # fn main() {
263263
/// # #[target_feature(enable = "avx")]
264-
/// # unsafe fn foo() {
264+
/// # unsafe fn foo() { unsafe {
265265
/// let four_zeros = _mm256_setzero_pd();
266266
/// let four_ones = _mm256_set1_pd(1.0);
267267
/// let four_floats = _mm256_set_pd(1.0, 2.0, 3.0, 4.0);
268-
/// # }
268+
/// # }}
269269
/// # if is_x86_feature_detected!("avx") { unsafe { foo() } }
270270
/// # }
271271
/// ```

Diff for: crates/core_arch/src/x86/sse41.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -177,13 +177,13 @@ pub unsafe fn _mm_blend_ps<const IMM4: i32>(a: __m128, b: __m128) -> __m128 {
177177
/// # fn main() {
178178
/// # if is_x86_feature_detected!("sse4.1") {
179179
/// # #[target_feature(enable = "sse4.1")]
180-
/// # unsafe fn worker() {
180+
/// # unsafe fn worker() { unsafe {
181181
/// let mut float_store = vec![1.0, 1.0, 2.0, 3.0];
182182
/// let simd_floats = _mm_set_ps(2.5, 5.0, 7.5, 10.0);
183183
/// let x: i32 = _mm_extract_ps::<2>(simd_floats);
184184
/// float_store.push(f32::from_bits(x as u32));
185185
/// assert_eq!(float_store, vec![1.0, 1.0, 2.0, 3.0, 5.0]);
186-
/// # }
186+
/// # }}
187187
/// # unsafe { worker() }
188188
/// # }
189189
/// # }

0 commit comments

Comments
 (0)