Skip to main content

ab_riscv_interpreter/rv32/b/zbb/
rv32_zbb_helpers.rs

1//! Opaque helpers for Zbb extension
2
3#[inline(always)]
4#[doc(hidden)]
5pub fn orc_b(src: u32) -> u32 {
6    // TODO: Miri is excluded because corresponding intrinsic is not implemented there
7    cfg_select! {
8        all(not(miri), target_arch = "riscv32", target_feature = "zbb") => {
9            // SAFETY: Compile-time checked for supported feature
10            unsafe { core::arch::riscv32::orc_b(src as usize) as u32 }
11        }
12        _ => {{
13            let mut bytes = src.to_le_bytes();
14            for byte in &mut bytes {
15                *byte = if *byte != 0 { 0xFF } else { 0 };
16            }
17            u32::from_le_bytes(bytes)
18        }}
19    }
20}