mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Start test case for rjmp
regression test
This commit introduces a minimal `![no_core]`-test case running on AVR, that contains the MCWE mentioned in [129301]. The test case itself does not have any assertions yet, but it shows the minimal set an language items necessary within the test case. [129301]: https://github.com/rust-lang/rust/issues/129301#issuecomment-2301399472
This commit is contained in:
parent
17a19e684c
commit
da44e3fdce
62
tests/assembly/avr-rjmp-offsets.rs
Normal file
62
tests/assembly/avr-rjmp-offsets.rs
Normal file
@ -0,0 +1,62 @@
|
||||
//@ compile-flags: -Copt-level=s --target=avr-unknown-gnu-atmega328 -C panic=abort
|
||||
//@ needs-llvm-components: avr
|
||||
//@ assembly-output: emit-asm
|
||||
|
||||
#![feature(
|
||||
no_core,
|
||||
lang_items,
|
||||
intrinsics,
|
||||
rustc_attrs,
|
||||
arbitrary_self_types,
|
||||
asm_experimental_arch
|
||||
)]
|
||||
#![crate_type = "rlib"]
|
||||
#![no_core]
|
||||
|
||||
#[rustc_builtin_macro]
|
||||
macro_rules! asm {
|
||||
() => {};
|
||||
}
|
||||
|
||||
use minicore::ptr;
|
||||
|
||||
// CHECK-LABEL: pin_toggling
|
||||
#[no_mangle]
|
||||
pub fn pin_toggling() {
|
||||
let port_b = 0x25 as *mut u8; // the I/O-address of PORTB
|
||||
loop {
|
||||
unsafe { ptr::write_volatile(port_b, 1) };
|
||||
delay(500_0000);
|
||||
unsafe { ptr::write_volatile(port_b, 2) };
|
||||
delay(500_0000);
|
||||
}
|
||||
}
|
||||
|
||||
#[inline(never)]
|
||||
fn delay(_: u32) {
|
||||
unsafe { asm!("nop") };
|
||||
}
|
||||
|
||||
// FIXME: replace with proper minicore once available (#130693)
|
||||
mod minicore {
|
||||
#[lang = "sized"]
|
||||
pub trait Sized {}
|
||||
|
||||
#[lang = "copy"]
|
||||
pub trait Copy {}
|
||||
impl Copy for u32 {}
|
||||
impl Copy for &u32 {}
|
||||
impl<T: ?Sized> Copy for *mut T {}
|
||||
|
||||
pub mod ptr {
|
||||
#[inline]
|
||||
#[rustc_diagnostic_item = "ptr_write_volatile"]
|
||||
pub unsafe fn write_volatile<T>(dst: *mut T, src: T) {
|
||||
extern "rust-intrinsic" {
|
||||
#[rustc_nounwind]
|
||||
pub fn volatile_store<T>(dst: *mut T, val: T);
|
||||
}
|
||||
unsafe { volatile_store(dst, src) };
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user