1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// NOT IMPLEMENTED YET!
// This file is part of the fast_chacha crate, which provides a high-performance
// implementation of the ChaCha20 stream cipher, optimized for various CPU architectures.
/*
* Copyright 2025 sh0rch <sh0rch@iwl.dev>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*!
* RISC-V CPU capabilities detection module for fast_chacha.
*
* This module provides basic infrastructure for detecting and storing
* RISC-V-specific CPU features, primarily for cryptographic optimizations.
*/
use ;
/// Global variable to store RISC-V CPU capabilities bitmask.
///
/// This variable is intended to be accessed from C code as well,
/// hence the `#[no_mangle]` attribute and `pub static mut`.
pub static mut OPENSSL_riscvcap_P: u32 = 0;
/// Atomic flag indicating whether CPU capabilities have been initialized.
///
/// Used to ensure that initialization happens only once in a thread-safe manner.
pub static INITIALIZED: AtomicBool = new;
/// Initializes RISC-V CPU capabilities detection.
///
/// This function is intended to be called once, and is thread-safe.
/// It sets the `INITIALIZED` flag to prevent redundant initialization.
/// Currently, it does not perform actual feature detection, but provides
/// the necessary structure for future extensions.
///
/// # Safety
///
/// This function is `unsafe` because it may modify global state and is
/// expected to be called in low-level initialization contexts.