Skip to content

Import the asm! macro from core::arch #1265

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Dec 9, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ jobs:
os: ubuntu-latest
- target: thumbv7em-none-eabihf
os: ubuntu-latest
- target: riscv64gc-unknown-linux-gnu
os: ubuntu-latest

steps:
- uses: actions/checkout@master
Expand Down
10 changes: 10 additions & 0 deletions ci/docker/riscv64gc-unknown-linux-gnu/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM ubuntu:21.10

RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev qemu-user ca-certificates \
gcc-riscv64-linux-gnu libc6-dev-riscv64-cross \
qemu-user

ENV CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_LINKER=riscv64-linux-gnu-gcc \
CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_RUNNER="qemu-riscv64 -L /usr/riscv64-linux-gnu" \
OBJDUMP=riscv64-linux-gnu-objdump
5 changes: 5 additions & 0 deletions ci/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ case ${TARGET} in
export RUSTFLAGS="${RUSTFLAGS} -Ctarget-feature=+neon"
export TARGET_CFLAGS="-mfpu=vfpv3-d16"
;;
# Some of our test dependencies use the deprecated `gcc` crates which
# doesn't detect RISC-V compilers automatically, so do it manually here.
riscv64*)
export TARGET_CC="riscv64-linux-gnu-gcc"
;;
esac

echo "RUSTFLAGS=${RUSTFLAGS}"
Expand Down
2 changes: 1 addition & 1 deletion crates/core_arch/src/aarch64/armclang.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,5 @@ use stdarch_test::assert_instr;
#[rustc_legacy_const_generics(0)]
pub unsafe fn __breakpoint<const VAL: i32>() {
static_assert_imm16!(VAL);
asm!("brk {}", const VAL);
crate::arch::asm!("brk {}", const VAL);
}
2 changes: 1 addition & 1 deletion crates/core_arch/src/arm/armclang.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,5 @@ use stdarch_test::assert_instr;
#[rustc_legacy_const_generics(0)]
pub unsafe fn __breakpoint<const VAL: i32>() {
static_assert_imm8!(VAL);
asm!("bkpt #{}", const VAL);
crate::arch::asm!("bkpt #{}", const VAL);
}
2 changes: 2 additions & 0 deletions crates/core_arch/src/arm_shared/barrier/cp15.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// Reference: ARM11 MPCore Processor Technical Reference Manual (ARM DDI 0360E) Section 3.5 "Summary
// of CP15 instructions"

use crate::arch::asm;

/// Full system is the required shareability domain, reads and writes are the
/// required access types
pub struct SY;
Expand Down
2 changes: 1 addition & 1 deletion crates/core_arch/src/arm_shared/hints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ pub unsafe fn __yield() {
/// will increase execution time.
#[inline(always)]
pub unsafe fn __nop() {
asm!("nop", options(nomem, nostack, preserves_flags));
crate::arch::asm!("nop", options(nomem, nostack, preserves_flags));
}

extern "unadjusted" {
Expand Down
8 changes: 4 additions & 4 deletions crates/core_arch/src/arm_shared/registers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ macro_rules! rsr {
impl super::super::sealed::Rsr for $R {
unsafe fn __rsr(&self) -> u32 {
let r: u32;
asm!(concat!("mrs {},", stringify!($R)), out(reg) r, options(nomem, nostack));
crate::arch::asm!(concat!("mrs {},", stringify!($R)), out(reg) r, options(nomem, nostack));
r
}
}
Expand All @@ -17,7 +17,7 @@ macro_rules! rsrp {
impl super::super::sealed::Rsrp for $R {
unsafe fn __rsrp(&self) -> *const u8 {
let r: *const u8;
asm!(concat!("mrs {},", stringify!($R)), out(reg) r, options(nomem, nostack));
crate::arch::asm!(concat!("mrs {},", stringify!($R)), out(reg) r, options(nomem, nostack));
r
}
}
Expand All @@ -29,7 +29,7 @@ macro_rules! wsr {
($R:ident) => {
impl super::super::sealed::Wsr for $R {
unsafe fn __wsr(&self, value: u32) {
asm!(concat!("msr ", stringify!($R), ", {}"), in(reg) value, options(nomem, nostack));
crate::arch::asm!(concat!("msr ", stringify!($R), ", {}"), in(reg) value, options(nomem, nostack));
}
}
};
Expand All @@ -40,7 +40,7 @@ macro_rules! wsrp {
($R:ident) => {
impl super::super::sealed::Wsrp for $R {
unsafe fn __wsrp(&self, value: *const u8) {
asm!(concat!("msr ", stringify!($R), ", {}"), in(reg) value, options(nomem, nostack));
crate::arch::asm!(concat!("msr ", stringify!($R), ", {}"), in(reg) value, options(nomem, nostack));
}
}
};
Expand Down
5 changes: 4 additions & 1 deletion crates/core_arch/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,10 @@ extern crate std_detect;
#[path = "mod.rs"]
mod core_arch;

pub use self::core_arch::arch;
pub mod arch {
pub use crate::core_arch::arch::*;
pub use core::arch::asm;
}

#[allow(unused_imports)]
use core::{convert, ffi, hint, intrinsics, marker, mem, ops, ptr, sync};
2 changes: 1 addition & 1 deletion crates/core_arch/src/riscv/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
/// 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)) }
unsafe { crate::arch::asm!(".word 0x0100000F", options(nomem, nostack)) }
}
1 change: 1 addition & 0 deletions crates/core_arch/src/x86/avx512bw.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use crate::{
arch::asm,
core_arch::{simd::*, simd_llvm::*, x86::*},
mem::{self, transmute},
ptr,
Expand Down
1 change: 1 addition & 0 deletions crates/core_arch/src/x86/avx512f.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use crate::{
arch::asm,
core_arch::{simd::*, simd_llvm::*, x86::*},
mem::{self, transmute},
ptr,
Expand Down
1 change: 1 addition & 0 deletions crates/core_arch/src/x86/bt.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::arch::asm;
#[cfg(test)]
use stdarch_test::assert_instr;

Expand Down
1 change: 1 addition & 0 deletions crates/core_arch/src/x86/cpuid.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
//! `cpuid` intrinsics
#![allow(clippy::module_name_repetitions)]

use crate::arch::asm;
#[cfg(test)]
use stdarch_test::assert_instr;

Expand Down
2 changes: 2 additions & 0 deletions crates/core_arch/src/x86/eflags.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
//! `i386` intrinsics

use crate::arch::asm;

/// Reads EFLAGS.
///
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__readeflags)
Expand Down
1 change: 1 addition & 0 deletions crates/core_arch/src/x86_64/bt.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use crate::arch::asm;
#[cfg(test)]
use stdarch_test::assert_instr;

Expand Down