     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49

    //! ARMv6 intrinsics.
    //!
    //! The reference is [ARMv6-M Architecture Reference Manual][armv6m].
    //!
    //! [armv6m]:
    //! http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0419c/index.
    //! html

    #[cfg(test)]
    use stdarch_test::assert_instr;

    /// Reverse the order of the bytes.
    #[inline]
    #[cfg_attr(test, assert_instr(rev))]
    pub unsafe fn _rev_u16(x: u16) -> u16 {
        x.swap_bytes() as u16
    }

    /// Reverse the order of the bytes.
    #[inline]
    #[cfg_attr(test, assert_instr(rev))]
    pub unsafe fn _rev_u32(x: u32) -> u32 {
        x.swap_bytes() as u32
    }

    #[cfg(test)]
    mod tests {
        use crate::core_arch::arm::v6;

        #[test]
        fn _rev_u16() {
            unsafe {
                assert_eq!(
                    v6::_rev_u16(0b0000_0000_1111_1111_u16),
                    0b1111_1111_0000_0000_u16
                );
            }
        }

        #[test]
        fn _rev_u32() {
            unsafe {
                assert_eq!(
                    v6::_rev_u32(0b0000_0000_1111_1111_0000_0000_1111_1111_u32),
                    0b1111_1111_0000_0000_1111_1111_0000_0000_u32
                );
            }
        }
    }