diff options
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/system-arm.h | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/firmware/target/arm/system-arm.h b/firmware/target/arm/system-arm.h index 0608f50a02..e77b786866 100644 --- a/firmware/target/arm/system-arm.h +++ b/firmware/target/arm/system-arm.h | |||
@@ -90,7 +90,7 @@ static inline void restore_interrupt(int cpsr) | |||
90 | /* ARM_ARCH version section for architecture*/ | 90 | /* ARM_ARCH version section for architecture*/ |
91 | 91 | ||
92 | #if ARM_ARCH >= 6 | 92 | #if ARM_ARCH >= 6 |
93 | static inline uint16_t swap16(uint16_t value) | 93 | static inline uint16_t swap16_hw(uint16_t value) |
94 | /* | 94 | /* |
95 | result[15..8] = value[ 7..0]; | 95 | result[15..8] = value[ 7..0]; |
96 | result[ 7..0] = value[15..8]; | 96 | result[ 7..0] = value[15..8]; |
@@ -102,7 +102,7 @@ static inline uint16_t swap16(uint16_t value) | |||
102 | return retval; | 102 | return retval; |
103 | } | 103 | } |
104 | 104 | ||
105 | static inline uint32_t swap32(uint32_t value) | 105 | static inline uint32_t swap32_hw(uint32_t value) |
106 | /* | 106 | /* |
107 | result[31..24] = value[ 7.. 0]; | 107 | result[31..24] = value[ 7.. 0]; |
108 | result[23..16] = value[15.. 8]; | 108 | result[23..16] = value[15.. 8]; |
@@ -116,7 +116,7 @@ static inline uint32_t swap32(uint32_t value) | |||
116 | return retval; | 116 | return retval; |
117 | } | 117 | } |
118 | 118 | ||
119 | static inline uint32_t swap_odd_even32(uint32_t value) | 119 | static inline uint32_t swap_odd_even32_hw(uint32_t value) |
120 | { | 120 | { |
121 | /* | 121 | /* |
122 | result[31..24],[15.. 8] = value[23..16],[ 7.. 0] | 122 | result[31..24],[15.. 8] = value[23..16],[ 7.. 0] |
@@ -190,7 +190,7 @@ static inline int disable_interrupt_save(int mask) | |||
190 | 190 | ||
191 | #else /* ARM_ARCH < 6 */ | 191 | #else /* ARM_ARCH < 6 */ |
192 | 192 | ||
193 | static inline uint16_t swap16(uint16_t value) | 193 | static inline uint16_t swap16_hw(uint16_t value) |
194 | /* | 194 | /* |
195 | result[15..8] = value[ 7..0]; | 195 | result[15..8] = value[ 7..0]; |
196 | result[ 7..0] = value[15..8]; | 196 | result[ 7..0] = value[15..8]; |
@@ -199,7 +199,7 @@ static inline uint16_t swap16(uint16_t value) | |||
199 | return (value >> 8) | (value << 8); | 199 | return (value >> 8) | (value << 8); |
200 | } | 200 | } |
201 | 201 | ||
202 | static inline uint32_t swap32(uint32_t value) | 202 | static inline uint32_t swap32_hw(uint32_t value) |
203 | /* | 203 | /* |
204 | result[31..24] = value[ 7.. 0]; | 204 | result[31..24] = value[ 7.. 0]; |
205 | result[23..16] = value[15.. 8]; | 205 | result[23..16] = value[15.. 8]; |
@@ -218,7 +218,7 @@ static inline uint32_t swap32(uint32_t value) | |||
218 | return value; | 218 | return value; |
219 | } | 219 | } |
220 | 220 | ||
221 | static inline uint32_t swap_odd_even32(uint32_t value) | 221 | static inline uint32_t swap_odd_even32_hw(uint32_t value) |
222 | { | 222 | { |
223 | /* | 223 | /* |
224 | result[31..24],[15.. 8] = value[23..16],[ 7.. 0] | 224 | result[31..24],[15.. 8] = value[23..16],[ 7.. 0] |
@@ -272,4 +272,16 @@ static inline int disable_interrupt_save(int mask) | |||
272 | 272 | ||
273 | #endif /* ARM_ARCH */ | 273 | #endif /* ARM_ARCH */ |
274 | 274 | ||
275 | static inline uint32_t swaw32_hw(uint32_t value) | ||
276 | { | ||
277 | /* | ||
278 | result[31..16] = value[15.. 0]; | ||
279 | result[15.. 0] = value[31..16]; | ||
280 | */ | ||
281 | uint32_t retval; | ||
282 | asm volatile ("mov %0, %1, ror #16" : | ||
283 | "=r"(retval) : "r"(value)); | ||
284 | return retval; | ||
285 | } | ||
286 | |||
275 | #endif /* SYSTEM_ARM_H */ | 287 | #endif /* SYSTEM_ARM_H */ |