blob: 53fc7dc756081d05c860b1f81df728d86aabe13d [file] [log] [blame]
/* Copyright (c) 2010 The Regents of the University of California
* Barret Rhoden <brho@cs.berkeley.edu>
* See LICENSE for details.
*
* Endian #def and byte_swapping functions */
#pragma once
#include <ros/common.h>
#include <arch/types.h>
static inline uint16_t byte_swap16(uint16_t x)
{
return (uint16_t)(x << 8 | x >> 8);
}
static inline uint32_t byte_swap32(uint32_t x)
{
/* the + denotes both output and input */
asm volatile("bswap %0" : "+r"(x));
return x;
}
static inline uint64_t byte_swap64(uint64_t x)
{
return (uint64_t)(((uint64_t)byte_swap32(x & 0xffffffff) << 32) |
(byte_swap32(x >> 32)));
}