LCOV - code coverage report
Current view: top level - usr/include/x86 - endian.h (source / functions) Hit Total Coverage
Test: cov.info Lines: 0 2 0.0 %
Date: 2015-08-15 Functions: 0 1 0.0 %

          Line data    Source code
       1             : /*-
       2             :  * Copyright (c) 1987, 1991 Regents of the University of California.
       3             :  * All rights reserved.
       4             :  *
       5             :  * Redistribution and use in source and binary forms, with or without
       6             :  * modification, are permitted provided that the following conditions
       7             :  * are met:
       8             :  * 1. Redistributions of source code must retain the above copyright
       9             :  *    notice, this list of conditions and the following disclaimer.
      10             :  * 2. Redistributions in binary form must reproduce the above copyright
      11             :  *    notice, this list of conditions and the following disclaimer in the
      12             :  *    documentation and/or other materials provided with the distribution.
      13             :  * 4. Neither the name of the University nor the names of its contributors
      14             :  *    may be used to endorse or promote products derived from this software
      15             :  *    without specific prior written permission.
      16             :  *
      17             :  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
      18             :  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      19             :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      20             :  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
      21             :  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      22             :  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      23             :  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      24             :  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      25             :  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      26             :  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      27             :  * SUCH DAMAGE.
      28             :  *
      29             :  *      @(#)endian.h    7.8 (Berkeley) 4/3/91
      30             :  * $FreeBSD: head/sys/x86/include/endian.h 233684 2012-03-29 23:31:48Z dim $
      31             :  */
      32             : 
      33             : #ifndef _MACHINE_ENDIAN_H_
      34             : #define _MACHINE_ENDIAN_H_
      35             : 
      36             : #include <sys/cdefs.h>
      37             : #include <sys/_types.h>
      38             : 
      39             : /*
      40             :  * Define the order of 32-bit words in 64-bit words.
      41             :  */
      42             : #define _QUAD_HIGHWORD 1
      43             : #define _QUAD_LOWWORD 0
      44             : 
      45             : /*
      46             :  * Definitions for byte order, according to byte significance from low
      47             :  * address to high.
      48             :  */
      49             : #define _LITTLE_ENDIAN  1234    /* LSB first: i386, vax */
      50             : #define _BIG_ENDIAN     4321    /* MSB first: 68000, ibm, net */
      51             : #define _PDP_ENDIAN     3412    /* LSB first in word, MSW first in long */
      52             : 
      53             : #define _BYTE_ORDER     _LITTLE_ENDIAN
      54             : 
      55             : /*
      56             :  * Deprecated variants that don't have enough underscores to be useful in more
      57             :  * strict namespaces.
      58             :  */
      59             : #if __BSD_VISIBLE
      60             : #define LITTLE_ENDIAN   _LITTLE_ENDIAN
      61             : #define BIG_ENDIAN      _BIG_ENDIAN
      62             : #define PDP_ENDIAN      _PDP_ENDIAN
      63             : #define BYTE_ORDER      _BYTE_ORDER
      64             : #endif
      65             : 
      66             : #define __bswap16_gen(x)        (__uint16_t)((x) << 8 | (x) >> 8)
      67             : #define __bswap32_gen(x)                \
      68             :         (((__uint32_t)__bswap16((x) & 0xffff) << 16) | __bswap16((x) >> 16))
      69             : #define __bswap64_gen(x)                \
      70             :         (((__uint64_t)__bswap32((x) & 0xffffffff) << 32) | __bswap32((x) >> 32))
      71             : 
      72             : #ifdef __GNUCLIKE_BUILTIN_CONSTANT_P
      73             : #define __bswap16(x)                            \
      74             :         ((__uint16_t)(__builtin_constant_p(x) ? \
      75             :             __bswap16_gen((__uint16_t)(x)) : __bswap16_var(x)))
      76             : #define __bswap32(x)                    \
      77             :         (__builtin_constant_p(x) ?      \
      78             :             __bswap32_gen((__uint32_t)(x)) : __bswap32_var(x))
      79             : #define __bswap64(x)                    \
      80             :         (__builtin_constant_p(x) ?      \
      81             :             __bswap64_gen((__uint64_t)(x)) : __bswap64_var(x))
      82             : #else
      83             : /* XXX these are broken for use in static initializers. */
      84             : #define __bswap16(x)    __bswap16_var(x)
      85             : #define __bswap32(x)    __bswap32_var(x)
      86             : #define __bswap64(x)    __bswap64_var(x)
      87             : #endif
      88             : 
      89             : /* These are defined as functions to avoid multiple evaluation of x. */
      90             : 
      91             : static __inline __uint16_t
      92           0 : __bswap16_var(__uint16_t _x)
      93             : {
      94             : 
      95           0 :         return (__bswap16_gen(_x));
      96             : }
      97             : 
      98             : static __inline __uint32_t
      99             : __bswap32_var(__uint32_t _x)
     100             : {
     101             : 
     102             : #ifdef __GNUCLIKE_ASM
     103             :         __asm("bswap %0" : "+r" (_x));
     104             :         return (_x);
     105             : #else
     106             :         return (__bswap32_gen(_x));
     107             : #endif
     108             : }
     109             : 
     110             : static __inline __uint64_t
     111             : __bswap64_var(__uint64_t _x)
     112             : {
     113             : 
     114             : #if defined(__amd64__) && defined(__GNUCLIKE_ASM)
     115             :         __asm("bswap %0" : "+r" (_x));
     116             :         return (_x);
     117             : #else
     118             :         /*
     119             :          * It is important for the optimizations that the following is not
     120             :          * really generic, but expands to 2 __bswap32_var()'s.
     121             :          */
     122             :         return (__bswap64_gen(_x));
     123             : #endif
     124             : }
     125             : 
     126             : #define __htonl(x)      __bswap32(x)
     127             : #define __htons(x)      __bswap16(x)
     128             : #define __ntohl(x)      __bswap32(x)
     129             : #define __ntohs(x)      __bswap16(x)
     130             : 
     131             : #endif /* !_MACHINE_ENDIAN_H_ */

Generated by: LCOV version 1.10