#![allow(clippy::indexing_slicing)]
#[cfg(target_arch = "riscv32")]
use core::arch::riscv32::{sha256sig0, sha256sig1, sha256sum0, sha256sum1};
#[cfg(target_arch = "riscv64")]
use core::arch::riscv64::{sha256sig0, sha256sig1, sha256sum0, sha256sum1};
use super::BLOCK_LEN;
#[inline(always)]
fn sum0(x: u32) -> u32 {
unsafe { sha256sum0(x) }
}
#[inline(always)]
fn sum1(x: u32) -> u32 {
unsafe { sha256sum1(x) }
}
#[inline(always)]
fn sig0(x: u32) -> u32 {
unsafe { sha256sig0(x) }
}
#[inline(always)]
fn sig1(x: u32) -> u32 {
unsafe { sha256sig1(x) }
}
#[target_feature(enable = "zknh")]
pub(crate) unsafe fn compress_blocks_zknh(state: &mut [u32; 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());
}