root/arch/i386/include/endian.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: endian.h,v 1.15 2007/05/29 18:18:20 tom Exp $ */
    2 
    3 /*-
    4  * Copyright (c) 1997 Niklas Hallqvist.  All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  *
   15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   25  */
   26 
   27 #ifndef _I386_ENDIAN_H_
   28 #define _I386_ENDIAN_H_
   29 
   30 #ifdef __GNUC__
   31 
   32 #define __swap32md(x) ({                                                \
   33         u_int32_t __swap32md_x = (x);                                   \
   34                                                                         \
   35         __asm ("bswap %1" : "+r" (__swap32md_x));                       \
   36         __swap32md_x;                                                   \
   37 })
   38 
   39 #define __swap64md(x) ({                                                \
   40         u_int64_t __swap64md_x = (x);                                   \
   41                                                                         \
   42         (u_int64_t)__swap32md(__swap64md_x >> 32) |                     \
   43             (u_int64_t)__swap32md(__swap64md_x & 0xffffffff) << 32;     \
   44 })
   45 #define __swap16md(x) ({                                                \
   46         u_int16_t __swap16md_x = (x);                                   \
   47                                                                         \
   48         __asm ("rorw $8, %w1" : "+r" (__swap16md_x));                   \
   49         __swap16md_x;                                                   \
   50 })
   51 
   52 /* Tell sys/endian.h we have MD variants of the swap macros.  */
   53 #define MD_SWAP
   54 
   55 #endif  /* __GNUC__ */
   56 
   57 #define _BYTE_ORDER _LITTLE_ENDIAN
   58 #include <sys/endian.h>
   59 
   60 #endif /* _I386_ENDIAN_H_ */

/* [<][>][^][v][top][bottom][index][help] */