|
1 | 1 | #![forbid(unsafe_code)] |
2 | 2 | //! Which SIMD intrinsics are callable from SAFE code on rustc 1.98.1, per arch. |
| 3 | +//! |
| 4 | +//! Nothing here is an API and nothing calls these functions: the OBSERVABLE |
| 5 | +//! is whether `cargo check` accepts or rejects each arm (E0133), so they are |
| 6 | +//! crate-private and the dead-code lint is silenced rather than satisfied by |
| 7 | +//! fake callers or doc examples that would have to be `#[cfg]`-gated per arch. |
| 8 | +#![allow(dead_code)] |
3 | 9 | #[cfg(target_arch = "aarch64")] |
4 | 10 | pub mod a64 { |
5 | 11 | use core::arch::aarch64::*; |
6 | 12 | /// A: plain fn, baseline-feature intrinsic (neon). |
7 | 13 | #[cfg(probe_a)] |
8 | | - pub fn plain_neon(a: uint32x4_t, b: uint32x4_t) -> uint32x4_t { vandq_u32(a, b) } |
| 14 | + pub(crate) fn plain_neon(a: uint32x4_t, b: uint32x4_t) -> uint32x4_t { vandq_u32(a, b) } |
9 | 15 | /// B: annotated fn, same call. |
10 | 16 | #[target_feature(enable = "neon")] |
11 | | - pub fn annotated_neon(a: uint32x4_t, b: uint32x4_t) -> uint32x4_t { vandq_u32(a, b) } |
| 17 | + pub(crate) fn annotated_neon(a: uint32x4_t, b: uint32x4_t) -> uint32x4_t { vandq_u32(a, b) } |
12 | 18 | /// C: plain fn calling the annotated SAFE fn. |
13 | 19 | #[cfg(probe_c)] |
14 | | - pub fn plain_calls_annotated(a: uint32x4_t, b: uint32x4_t) -> uint32x4_t { annotated_neon(a, b) } |
| 20 | + pub(crate) fn plain_calls_annotated(a: uint32x4_t, b: uint32x4_t) -> uint32x4_t { annotated_neon(a, b) } |
15 | 21 | } |
16 | 22 | #[cfg(target_arch = "x86_64")] |
17 | 23 | pub mod x86 { |
18 | 24 | use core::arch::x86_64::*; |
19 | 25 | /// A: plain fn, sse2 (baseline for x86_64). |
20 | 26 | #[cfg(probe_a)] |
21 | | - pub fn plain_sse2(a: __m128i, b: __m128i) -> __m128i { _mm_and_si128(a, b) } |
| 27 | + pub(crate) fn plain_sse2(a: __m128i, b: __m128i) -> __m128i { _mm_and_si128(a, b) } |
22 | 28 | /// A2: plain fn, avx2 (baseline only under -Ctarget-cpu=x86-64-v3). |
23 | 29 | #[cfg(probe_a2)] |
24 | | - pub fn plain_avx2(a: __m256i, b: __m256i) -> __m256i { _mm256_and_si256(a, b) } |
| 30 | + pub(crate) fn plain_avx2(a: __m256i, b: __m256i) -> __m256i { _mm256_and_si256(a, b) } |
25 | 31 | /// A3: plain fn, avx512f ternarylogic (baseline only under x86-64-v4). |
26 | 32 | #[cfg(probe_a3)] |
27 | | - pub fn plain_avx512(a: __m512i, b: __m512i, c: __m512i) -> __m512i { _mm512_ternarylogic_epi64::<0x96>(a, b, c) } |
| 33 | + pub(crate) fn plain_avx512(a: __m512i, b: __m512i, c: __m512i) -> __m512i { _mm512_ternarylogic_epi64::<0x96>(a, b, c) } |
28 | 34 | /// B: annotated fn. |
29 | 35 | #[target_feature(enable = "avx2")] |
30 | | - pub fn annotated_avx2(a: __m256i, b: __m256i) -> __m256i { _mm256_and_si256(a, b) } |
| 36 | + pub(crate) fn annotated_avx2(a: __m256i, b: __m256i) -> __m256i { _mm256_and_si256(a, b) } |
31 | 37 | /// C: plain fn calling annotated safe fn. |
32 | 38 | #[cfg(probe_c)] |
33 | | - pub fn plain_calls_annotated(a: __m256i, b: __m256i) -> __m256i { annotated_avx2(a, b) } |
| 39 | + pub(crate) fn plain_calls_annotated(a: __m256i, b: __m256i) -> __m256i { annotated_avx2(a, b) } |
34 | 40 | } |
35 | 41 | #[cfg(target_arch = "wasm32")] |
36 | 42 | pub mod w { |
37 | 43 | use core::arch::wasm32::*; |
38 | 44 | /// A: plain fn, simd128 intrinsic. |
39 | 45 | #[cfg(probe_a)] |
40 | | - pub fn plain_wasm(a: v128, b: v128) -> v128 { v128_and(a, b) } |
| 46 | + pub(crate) fn plain_wasm(a: v128, b: v128) -> v128 { v128_and(a, b) } |
41 | 47 | } |
0 commit comments