#![allow(clippy::indexing_slicing)]
#[cfg(target_arch = "riscv64")]
use core::arch::riscv64::{sha512sig0, sha512sig1, sha512sum0, sha512sum1};
use super::BLOCK_LEN;
#[inline(always)]
fn sum0(x: u64) -> u64 {
unsafe { sha512sum0(x) }
}
#[inline(always)]
fn sum1(x: u64) -> u64 {
unsafe { sha512sum1(x) }
}
#[inline(always)]
fn sig0(x: u64) -> u64 {
unsafe { sha512sig0(x) }
}
#[inline(always)]
fn sig1(x: u64) -> u64 {
unsafe { sha512sig1(x) }
}
#[target_feature(enable = "zknh")]
pub(crate) unsafe fn compress_blocks_zknh(state: &mut [u64; 8], blocks: &[u8]) {
debug_assert_eq!(blocks.len() % BLOCK_LEN, 0);
let mut chunks = blocks.chunks_exact(BLOCK_LEN);
for chunk in &mut chunks {
let block = unsafe { &*(chunk.as_ptr() as *const [u8; BLOCK_LEN]) };
super::compress_block_with(state, block, sum0, sum1, sig0, sig1);
}
debug_assert!(chunks.remainder().is_empty());
}