1*fae548d3Szrj /* Interface to byteswapping functions. 2*fae548d3Szrj Copyright (C) 2006-2020 Free Software Foundation, Inc. 3*fae548d3Szrj 4*fae548d3Szrj This file is part of libctf. 5*fae548d3Szrj 6*fae548d3Szrj libctf is free software; you can redistribute it and/or modify it under 7*fae548d3Szrj the terms of the GNU General Public License as published by the Free 8*fae548d3Szrj Software Foundation; either version 3, or (at your option) any later 9*fae548d3Szrj version. 10*fae548d3Szrj 11*fae548d3Szrj This program is distributed in the hope that it will be useful, but 12*fae548d3Szrj WITHOUT ANY WARRANTY; without even the implied warranty of 13*fae548d3Szrj MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14*fae548d3Szrj See the GNU General Public License for more details. 15*fae548d3Szrj 16*fae548d3Szrj You should have received a copy of the GNU General Public License 17*fae548d3Szrj along with this program; see the file COPYING. If not see 18*fae548d3Szrj <http://www.gnu.org/licenses/>. */ 19*fae548d3Szrj 20*fae548d3Szrj #ifndef _CTF_SWAP_H 21*fae548d3Szrj #define _CTF_SWAP_H 22*fae548d3Szrj 23*fae548d3Szrj #include "config.h" 24*fae548d3Szrj #include <stdint.h> 25*fae548d3Szrj 26*fae548d3Szrj #ifdef HAVE_BYTESWAP_H 27*fae548d3Szrj #include <byteswap.h> 28*fae548d3Szrj #else 29*fae548d3Szrj 30*fae548d3Szrj /* Provide our own versions of the byteswap functions. */ 31*fae548d3Szrj static inline uint16_t bswap_16(uint16_t v)32*fae548d3Szrjbswap_16 (uint16_t v) 33*fae548d3Szrj { 34*fae548d3Szrj return ((v >> 8) & 0xff) | ((v & 0xff) << 8); 35*fae548d3Szrj } 36*fae548d3Szrj 37*fae548d3Szrj static inline uint32_t bswap_32(uint32_t v)38*fae548d3Szrjbswap_32 (uint32_t v) 39*fae548d3Szrj { 40*fae548d3Szrj return ( ((v & 0xff000000) >> 24) 41*fae548d3Szrj | ((v & 0x00ff0000) >> 8) 42*fae548d3Szrj | ((v & 0x0000ff00) << 8) 43*fae548d3Szrj | ((v & 0x000000ff) << 24)); 44*fae548d3Szrj } 45*fae548d3Szrj 46*fae548d3Szrj inline uint64_t bswap_identity_64(uint64_t v)47*fae548d3Szrjbswap_identity_64 (uint64_t v) 48*fae548d3Szrj { 49*fae548d3Szrj return v; 50*fae548d3Szrj } 51*fae548d3Szrj 52*fae548d3Szrj static inline uint64_t bswap_64(uint64_t v)53*fae548d3Szrjbswap_64 (uint64_t v) 54*fae548d3Szrj { 55*fae548d3Szrj return ( ((v & 0xff00000000000000ULL) >> 56) 56*fae548d3Szrj | ((v & 0x00ff000000000000ULL) >> 40) 57*fae548d3Szrj | ((v & 0x0000ff0000000000ULL) >> 24) 58*fae548d3Szrj | ((v & 0x000000ff00000000ULL) >> 8) 59*fae548d3Szrj | ((v & 0x00000000ff000000ULL) << 8) 60*fae548d3Szrj | ((v & 0x0000000000ff0000ULL) << 24) 61*fae548d3Szrj | ((v & 0x000000000000ff00ULL) << 40) 62*fae548d3Szrj | ((v & 0x00000000000000ffULL) << 56)); 63*fae548d3Szrj } 64*fae548d3Szrj #endif /* !defined(HAVE_BYTESWAP_H) */ 65*fae548d3Szrj 66*fae548d3Szrj #endif /* !defined(_CTF_SWAP_H) */ 67