123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- #![cfg(all(
- target_arch = "arm",
- not(any(target_env = "gnu", target_env = "musl")),
- target_os = "linux",
- feature = "mem"
- ))]
- #![feature(compiler_builtins_lib)]
- #![feature(lang_items)]
- #![no_std]
- extern crate compiler_builtins;
- // test runner
- extern crate utest_cortex_m_qemu;
- // overrides `panic!`
- #[macro_use]
- extern crate utest_macros;
- use core::mem;
- macro_rules! panic {
- ($($tt:tt)*) => {
- upanic!($($tt)*);
- };
- }
- extern "C" {
- fn __aeabi_memset4(dest: *mut u8, n: usize, c: u32);
- }
- struct Aligned {
- array: [u8; 8],
- _alignment: [u32; 0],
- }
- impl Aligned {
- fn new(array: [u8; 8]) -> Self {
- Aligned {
- array: array,
- _alignment: [],
- }
- }
- }
- #[test]
- fn zero() {
- let mut aligned = Aligned::new([0u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), 0, c) }
- assert_eq!(*xs, [0; 8]);
- let mut aligned = Aligned::new([1u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), 0, c) }
- assert_eq!(*xs, [1; 8]);
- }
- #[test]
- fn one() {
- let mut aligned = Aligned::new([0u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let n = 1;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0, 0, 0, 0, 0, 0, 0]);
- let mut aligned = Aligned::new([1u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 1, 1, 1, 1, 1, 1, 1]);
- }
- #[test]
- fn two() {
- let mut aligned = Aligned::new([0u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let n = 2;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0, 0, 0, 0, 0, 0]);
- let mut aligned = Aligned::new([1u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 1, 1, 1, 1, 1, 1]);
- }
- #[test]
- fn three() {
- let mut aligned = Aligned::new([0u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let n = 3;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 0, 0, 0, 0, 0]);
- let mut aligned = Aligned::new([1u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 1, 1, 1, 1, 1]);
- }
- #[test]
- fn four() {
- let mut aligned = Aligned::new([0u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let n = 4;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 0xef, 0, 0, 0, 0]);
- let mut aligned = Aligned::new([1u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 0xef, 1, 1, 1, 1]);
- }
- #[test]
- fn five() {
- let mut aligned = Aligned::new([0u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let n = 5;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 0xef, 0xef, 0, 0, 0]);
- let mut aligned = Aligned::new([1u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 0xef, 0xef, 1, 1, 1]);
- }
- #[test]
- fn six() {
- let mut aligned = Aligned::new([0u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let n = 6;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0, 0]);
- let mut aligned = Aligned::new([1u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 1, 1]);
- }
- #[test]
- fn seven() {
- let mut aligned = Aligned::new([0u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let n = 7;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0]);
- let mut aligned = Aligned::new([1u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 1]);
- }
- #[test]
- fn eight() {
- let mut aligned = Aligned::new([0u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let n = 8;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef]);
- let mut aligned = Aligned::new([1u8; 8]);
- assert_eq!(mem::align_of_val(&aligned), 4);
- let xs = &mut aligned.array;
- let c = 0xdeadbeef;
- unsafe { __aeabi_memset4(xs.as_mut_ptr(), n, c) }
- assert_eq!(*xs, [0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef]);
- }
|