mirror of
https://github.com/rust-lang/rust.git
synced 2025-12-03 08:09:02 +00:00
79 lines
3.5 KiB
Rust
79 lines
3.5 KiB
Rust
#![doc = include_str!("../../stdarch/crates/core_arch/src/core_arch_docs.md")]
|
|
|
|
#[allow(
|
|
// some targets don't have anything to reexport, which
|
|
// makes the `pub use` unused and unreachable, allow
|
|
// both lints as to not have `#[cfg]`s
|
|
//
|
|
// cf. https://github.com/rust-lang/rust/pull/116033#issuecomment-1760085575
|
|
unused_imports,
|
|
unreachable_pub
|
|
)]
|
|
#[stable(feature = "simd_arch", since = "1.27.0")]
|
|
pub use crate::core_arch::arch::*;
|
|
|
|
/// Inline assembly.
|
|
///
|
|
/// 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
|
|
#[stable(feature = "asm", since = "1.59.0")]
|
|
#[rustc_builtin_macro]
|
|
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
|
|
#[stable(feature = "naked_functions", since = "1.88.0")]
|
|
#[rustc_builtin_macro]
|
|
pub macro naked_asm("assembly template", $(operands,)* $(options($(option),*))?) {
|
|
/* compiler built-in */
|
|
}
|
|
|
|
/// Module-level inline assembly.
|
|
///
|
|
/// 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
|
|
#[stable(feature = "global_asm", since = "1.59.0")]
|
|
#[rustc_builtin_macro]
|
|
pub macro global_asm("assembly template", $(operands,)* $(options($(option),*))?) {
|
|
/* compiler built-in */
|
|
}
|
|
|
|
/// Compiles to a target-specific software breakpoint instruction or equivalent.
|
|
///
|
|
/// This will typically abort the program. It may result in a core dump, and/or the system logging
|
|
/// debug information. Additional target-specific capabilities may be possible depending on
|
|
/// debuggers or other tooling; in particular, a debugger may be able to resume execution.
|
|
///
|
|
/// If possible, this will produce an instruction sequence that allows a debugger to resume *after*
|
|
/// the breakpoint, rather than resuming *at* the breakpoint; however, the exact behavior is
|
|
/// target-specific and debugger-specific, and not guaranteed.
|
|
///
|
|
/// If the target platform does not have any kind of debug breakpoint instruction, this may compile
|
|
/// to a trapping instruction (e.g. an undefined instruction) instead, or to some other form of
|
|
/// target-specific abort that may or may not support convenient resumption.
|
|
///
|
|
/// The precise behavior and the precise instruction generated are not guaranteed, except that in
|
|
/// normal execution with no debug tooling involved this will not continue executing.
|
|
///
|
|
/// - On x86 targets, this produces an `int3` instruction.
|
|
/// - On aarch64 targets, this produces a `brk #0xf000` instruction.
|
|
// When stabilizing this, update the comment on `core::intrinsics::breakpoint`.
|
|
#[unstable(feature = "breakpoint", issue = "133724")]
|
|
#[inline(always)]
|
|
pub fn breakpoint() {
|
|
core::intrinsics::breakpoint();
|
|
}
|