summaryrefslogtreecommitdiffstats
path: root/library/stdarch/crates/core_arch/src/arm/v6.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/stdarch/crates/core_arch/src/arm/v6.rs')
-rw-r--r--library/stdarch/crates/core_arch/src/arm/v6.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/library/stdarch/crates/core_arch/src/arm/v6.rs b/library/stdarch/crates/core_arch/src/arm/v6.rs
new file mode 100644
index 000000000..5df30cd62
--- /dev/null
+++ b/library/stdarch/crates/core_arch/src/arm/v6.rs
@@ -0,0 +1,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
+ );
+ }
+ }
+}