(a: &[u64], b: &[u64], out: &mut [u64])
| 105 | #[cfg(target_arch = "x86_64")] |
| 106 | #[target_feature(enable = "avx512f")] |
| 107 | unsafe fn avx512_or_inner(a: &[u64], b: &[u64], out: &mut [u64]) { |
| 108 | use std::arch::x86_64::*; |
| 109 | unsafe { |
| 110 | let len = a.len().min(b.len()).min(out.len()); |
| 111 | let chunks = len / 8; |
| 112 | for i in 0..chunks { |
| 113 | let va = _mm512_loadu_si512(a.as_ptr().add(i * 8).cast()); |
| 114 | let vb = _mm512_loadu_si512(b.as_ptr().add(i * 8).cast()); |
| 115 | let result = _mm512_or_si512(va, vb); |
| 116 | _mm512_storeu_si512(out.as_mut_ptr().add(i * 8).cast(), result); |
| 117 | } |
| 118 | for i in (chunks * 8)..len { |
| 119 | let va = if i < a.len() { a[i] } else { 0 }; |
| 120 | let vb = if i < b.len() { b[i] } else { 0 }; |
| 121 | out[i] = va | vb; |
| 122 | } |
| 123 | } |
| 124 | } |
| 125 | |
| 126 | #[cfg(target_arch = "x86_64")] |
| 127 | fn avx512_or(a: &[u64], b: &[u64], out: &mut [u64]) { |
no test coverage detected