Skip to content

Commit

Permalink
Adding support for byte swap (16/32-bit).
Browse files Browse the repository at this point in the history
  • Loading branch information
mikaelpatel committed Apr 3, 2013
1 parent 15bbab3 commit 4247d75
Showing 1 changed file with 37 additions and 0 deletions.
37 changes: 37 additions & 0 deletions Cosa/Types.h
Original file line number Diff line number Diff line change
Expand Up @@ -150,5 +150,42 @@ struct iovec_t {
#define MERGE(var, line) CONCAT(var, line)
#define UNIQUE(var) MERGE(var, __LINE__)

/**
* Swap bytes in 16-bit integer
* @param[in] value to byte swap.
* @return new value.
*/
inline int16_t
swap(int16_t value)
{
asm volatile("mov __tmp_reg__, %A0" "\n\t"
"mov %A0, %B0" "\n\t"
"mov %B0, __tmp_reg__" "\n\t"
: "=r" (value)
: "0" (value)
);
return (value);
}

/**
* Swap bytes in 32-bit integer
* @param[in] value to byte swap.
* @return new value.
*/
inline int32_t
swap(int32_t value)
{
asm volatile("mov __tmp_reg__, %A0" "\n\t"
"mov %A0, %D0" "\n\t"
"mov %D0, __tmp_reg__" "\n\t"
"mov __tmp_reg__, %B0" "\n\t"
"mov %B0, %C0" "\n\t"
"mov %C0, __tmp_reg__" "\n\t"
: "=r" (value)
: "0" (value)
);
return (value);
}

#endif

0 comments on commit 4247d75

Please sign in to comment.