(a: &[u64], b: &[u64], out: &mut [u64])
| 209 | |
| 210 | #[cfg(target_arch = "aarch64")] |
| 211 | fn neon_or(a: &[u64], b: &[u64], out: &mut [u64]) { |
| 212 | use std::arch::aarch64::*; |
| 213 | let len = a.len().min(b.len()).min(out.len()); |
| 214 | let chunks = len / 2; |
| 215 | for i in 0..chunks { |
| 216 | let va = unsafe { vld1q_u64(a.as_ptr().add(i * 2)) }; |
| 217 | let vb = unsafe { vld1q_u64(b.as_ptr().add(i * 2)) }; |
| 218 | let result = unsafe { vorrq_u64(va, vb) }; |
| 219 | unsafe { vst1q_u64(out.as_mut_ptr().add(i * 2), result) }; |
| 220 | } |
| 221 | for i in (chunks * 2)..len { |
| 222 | let va = if i < a.len() { a[i] } else { 0 }; |
| 223 | let vb = if i < b.len() { b[i] } else { 0 }; |
| 224 | out[i] = va | vb; |
| 225 | } |
| 226 | } |
| 227 | |
| 228 | #[cfg(test)] |
| 229 | mod tests { |
nothing calls this directly
no test coverage detected