123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #![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;
- macro_rules! panic {
- ($($tt:tt)*) => {
- upanic!($($tt)*);
- };
- }
- extern "C" {
- fn __aeabi_memcpy(dest: *mut u8, src: *const u8, n: usize);
- fn __aeabi_memcpy4(dest: *mut u8, src: *const u8, n: usize);
- }
- struct Aligned {
- array: [u8; 8],
- _alignment: [u32; 0],
- }
- impl Aligned {
- fn new(array: [u8; 8]) -> Self {
- Aligned {
- array: array,
- _alignment: [],
- }
- }
- }
- #[test]
- fn memcpy() {
- let mut dest = [0; 4];
- let src = [0xde, 0xad, 0xbe, 0xef];
- for n in 0..dest.len() {
- dest.copy_from_slice(&[0; 4]);
- unsafe { __aeabi_memcpy(dest.as_mut_ptr(), src.as_ptr(), n) }
- assert_eq!(&dest[0..n], &src[0..n])
- }
- }
- #[test]
- fn memcpy4() {
- let mut aligned = Aligned::new([0; 8]);
- let dest = &mut aligned.array;
- let src = [0xde, 0xad, 0xbe, 0xef, 0xba, 0xad, 0xf0, 0x0d];
- for n in 0..dest.len() {
- dest.copy_from_slice(&[0; 8]);
- unsafe { __aeabi_memcpy4(dest.as_mut_ptr(), src.as_ptr(), n) }
- assert_eq!(&dest[0..n], &src[0..n])
- }
- }
|