mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
add a bootstrap variant of naked_asm
This commit is contained in:
parent
76ed7a1fa4
commit
20c0067528
@ -3,6 +3,9 @@
|
||||
#[allow(unused_imports)]
|
||||
#[stable(feature = "simd_arch", since = "1.27.0")]
|
||||
pub use crate::core_arch::arch::*;
|
||||
#[unstable(feature = "naked_functions", issue = "90957")]
|
||||
#[cfg(bootstrap)]
|
||||
pub use crate::naked_asm;
|
||||
|
||||
/// Inline assembly.
|
||||
///
|
||||
@ -17,6 +20,37 @@ pub macro asm("assembly template", $(operands,)* $(options($(option),*))?) {
|
||||
/* compiler built-in */
|
||||
}
|
||||
|
||||
/// Inline assembly used in combination with `#[naked]` functions.
|
||||
///
|
||||
/// Refer to [Rust By Example] for a usage guide and the [reference] for
|
||||
/// detailed information about the syntax and available options.
|
||||
///
|
||||
/// [Rust By Example]: https://doc.rust-lang.org/nightly/rust-by-example/unsafe/asm.html
|
||||
/// [reference]: https://doc.rust-lang.org/nightly/reference/inline-assembly.html
|
||||
#[unstable(feature = "naked_functions", issue = "90957")]
|
||||
#[macro_export]
|
||||
#[cfg(bootstrap)]
|
||||
macro_rules! naked_asm {
|
||||
([$last:expr], [$($pushed:expr),*]) => {
|
||||
#[cfg(any(target_arch = "x86_64", target_arch = "x86"))]
|
||||
{
|
||||
core::arch::asm!($($pushed),*, options(att_syntax, noreturn))
|
||||
}
|
||||
#[cfg(not(any(target_arch = "x86_64", target_arch = "x86")))]
|
||||
{
|
||||
core::arch::asm!($($pushed),* , $last, options(noreturn))
|
||||
}
|
||||
};
|
||||
|
||||
([$first:expr $(, $rest:expr)*], [$($pushed:expr),*]) => {
|
||||
naked_asm!([$($rest),*], [$($pushed,)* $first]);
|
||||
};
|
||||
|
||||
($($expr:expr),* $(,)?) => {
|
||||
naked_asm!([$($expr),*], []);
|
||||
};
|
||||
}
|
||||
|
||||
/// Inline assembly used in combination with `#[naked]` functions.
|
||||
///
|
||||
/// Refer to [Rust By Example] for a usage guide and the [reference] for
|
||||
|
Loading…
Reference in New Issue
Block a user