Skip to content

Commit

Permalink
Add RISC-V platform and PAUSE instruction (#1262)
Browse files Browse the repository at this point in the history
  • Loading branch information
luojia65 committed Dec 5, 2021
1 parent 18cc733 commit 43b4556
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 0 deletions.
1 change: 1 addition & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ jobs:
- arm-unknown-linux-gnueabihf
- armv7-unknown-linux-gnueabihf
- aarch64-unknown-linux-gnu
- riscv64gc-unknown-linux-gnu
- powerpc64le-unknown-linux-gnu
- mips-unknown-linux-gnu
- mips64-unknown-linux-gnuabi64
Expand Down
2 changes: 2 additions & 0 deletions crates/core_arch/src/core_arch_docs.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ others at:
* [`x86_64`]
* [`arm`]
* [`aarch64`]
* [`riscv`]
* [`mips`]
* [`mips64`]
* [`powerpc`]
Expand All @@ -196,6 +197,7 @@ others at:
[`x86_64`]: x86_64/index.html
[`arm`]: arm/index.html
[`aarch64`]: aarch64/index.html
[`riscv`]: riscv/index.html
[`mips`]: mips/index.html
[`mips64`]: mips64/index.html
[`powerpc`]: powerpc/index.html
Expand Down
14 changes: 14 additions & 0 deletions crates/core_arch/src/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,16 @@ pub mod arch {
pub use crate::core_arch::aarch64::*;
}

/// Platform-specific intrinsics for the `riscv` platform.
///
/// See the [module documentation](../index.html) for more details.
#[cfg(any(target_arch = "riscv32", target_arch = "riscv64", doc))]
#[doc(cfg(any(target_arch = "riscv32", target_arch = "riscv64")))]
#[unstable(feature = "stdsimd", issue = "27731")]
pub mod riscv {
pub use crate::core_arch::riscv::*;
}

/// Platform-specific intrinsics for the `wasm32` platform.
///
/// This module provides intrinsics specific to the WebAssembly
Expand Down Expand Up @@ -251,6 +261,10 @@ mod aarch64;
#[doc(cfg(any(target_arch = "arm")))]
mod arm;

#[cfg(any(target_arch = "riscv32", target_arch = "riscv64", doc))]
#[doc(cfg(any(target_arch = "riscv32", target_arch = "riscv64")))]
mod riscv;

#[cfg(any(target_family = "wasm", doc))]
#[doc(cfg(target_family = "wasm"))]
mod wasm32;
Expand Down
10 changes: 10 additions & 0 deletions crates/core_arch/src/riscv/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
//! RISC-V intrinsics

/// Generates the `PAUSE` instruction
///
/// The PAUSE instruction is a HINT that indicates the current hart's rate of instruction retirement
/// should be temporarily reduced or paused. The duration of its effect must be bounded and may be zero.
#[inline]
pub fn pause() {
unsafe { asm!(".word 0x0100000F", options(nomem, nostack)) }
}

0 comments on commit 43b4556

Please sign in to comment.