aegis-dos-protection/test/libdpdk_dummy/include/rte_byteorder.h
2021-10-23 16:53:40 +02:00

62 lines
1.9 KiB
C

#pragma once
#include <stdint.h>
#define rte_cpu_to_be_16(x) rte_bswap16(x)
#define rte_be_to_cpu_16(x) rte_bswap16(x)
#define rte_cpu_to_be_32(x) rte_bswap32(x)
#define rte_be_to_cpu_32(x) rte_bswap32(x)
#define rte_bswap16(x) \
((uint16_t)(__builtin_constant_p(x) ? rte_constant_bswap16(x) \
: rte_arch_bswap16(x)))
#define rte_bswap32(x) \
((uint32_t)(__builtin_constant_p(x) ? rte_constant_bswap32(x) \
: rte_arch_bswap32(x)))
typedef uint16_t rte_be16_t;
typedef uint32_t rte_be32_t;
/**
* An internal function to swap bytes in a
* 16-bit value.
*
* It is used by rte_bswap16() when the
* value is constant. Do not use this
* function directly; rte_bswap16() is
* preferred.
*/
static inline uint16_t rte_constant_bswap16(uint16_t x) {
return (uint16_t)(((x & 0x00ffU) << 8) | ((x & 0xff00U) >> 8));
}
/**
* An internal function to swap bytes in a 32-bit value.
*
* It is used by rte_bswap32() when the value is constant. Do not use
* this function directly; rte_bswap32() is preferred.
*/
static inline uint32_t rte_constant_bswap32(uint32_t x) {
return ((x & 0x000000ffUL) << 24) | ((x & 0x0000ff00UL) << 8) |
((x & 0x00ff0000UL) >> 8) | ((x & 0xff000000UL) >> 24);
}
static inline uint16_t rte_arch_bswap16(uint16_t _x) {
uint16_t x = _x;
asm volatile("xchgb %b[x1],%h[x2]" : [ x1 ] "=Q"(x) : [ x2 ] "0"(x));
return x;
}
/*
* An architecture-optimized byte swap for a 32-bit value.
*
* Do not use this function directly. The preferred function is rte_bswap32().
*/
static inline uint32_t rte_arch_bswap32(uint32_t _x) {
uint32_t x = _x;
asm volatile("bswap %[x]" : [ x ] "+r"(x));
return x;
}