Adding Byte swap instructions support.
authorNathael Pajani <nathael.pajani@ed3l.fr>
Wed, 13 Mar 2013 15:27:08 +0000 (16:27 +0100)
committerNathael Pajani <nathael.pajani@ed3l.fr>
Tue, 8 Nov 2022 16:03:04 +0000 (17:03 +0100)
include/core/lpc_core_cm0.h

index 623f333..1332e76 100644 (file)
@@ -141,6 +141,35 @@ static inline void set_fault_mask(uint32_t mask)
 
 
 
+/*******************************************************************************/
+/*            Byte swap instructions                                           */
+/*******************************************************************************/
+/* Swap bytes of each 16-bit halfword in a 32-bit word, keeping halfword order */
+static inline uint32_t double_byte_swap_16(volatile uint32_t value)
+{
+       uint32_t result = 0;
+       __asm volatile ("rev16 %0, %1" : "=r" (result) : "r" (value));
+       return result;
+}
+/* Change endianness of a 16-bit halfword */
+static inline uint32_t byte_swap_16(volatile uint16_t value)
+{
+       uint32_t result = 0;
+       __asm volatile ("rev16 %0, %1" : "=r" (result) : "r" (value));
+       return (result & 0xFFFF);
+}
+/* Change endianness of a 32-bit word */
+static inline uint32_t byte_swap_32(volatile uint32_t value)
+{
+       uint32_t result = 0;
+       __asm volatile ("rev %0, %1" : "=r" (result) : "r" (value));
+       return result;
+}
+
+
+
+
+
 /*******************************************************************************/
 /*            Interrupts                                                       */
 /*******************************************************************************/