[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/amd64/include/endian.h

Version: -  FREEBSD  -  FREEBSD7  -  FREEBSD71  -  FREEBSD70  -  FREEBSD6  -  FREEBSD64  -  FREEBSD63  -  FREEBSD62  -  FREEBSD61  -  FREEBSD60  -  FREEBSD5  -  FREEBSD55  -  FREEBSD54  -  FREEBSD53  -  FREEBSD52  -  FREEBSD51  -  FREEBSD50  -  FREEBSD4  -  FREEBSD3  -  FREEBSD22  -  linux-2.6  -  linux-2.4.22  -  MK83  -  MK84  -  PLAN9  -  DFBSD  -  NETBSD  -  NETBSD5  -  NETBSD4  -  NETBSD3  -  NETBSD20  -  OPENBSD  -  xnu-517  -  xnu-792  -  xnu-792.6.70  -  xnu-1228  -  OPENSOLARIS  -  minix-3-1-1  -  TRUSTEDBSD-SEBSD  -  FREEBSD-LIBC  -  FREEBSD7-LIBC  -  FREEBSD6-LIBC  -  GLIBC27 
SearchContext: -  none  -  excerpts  -  bigexcerpts 

  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: src/sys/amd64/include/endian.h,v 1.8 2005/03/11 21:46:01 peter Exp $
 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 #ifdef __cplusplus
 40 extern "C" {
 41 #endif
 42 
 43 /*
 44  * Define the order of 32-bit words in 64-bit words.
 45  */
 46 #define _QUAD_HIGHWORD 1
 47 #define _QUAD_LOWWORD 0
 48 
 49 /*
 50  * Definitions for byte order, according to byte significance from low
 51  * address to high.
 52  */
 53 #define _LITTLE_ENDIAN  1234    /* LSB first: i386, vax */
 54 #define _BIG_ENDIAN     4321    /* MSB first: 68000, ibm, net */
 55 #define _PDP_ENDIAN     3412    /* LSB first in word, MSW first in long */
 56 
 57 #define _BYTE_ORDER     _LITTLE_ENDIAN
 58 
 59 /*
 60  * Deprecated variants that don't have enough underscores to be useful in more
 61  * strict namespaces.
 62  */
 63 #if __BSD_VISIBLE
 64 #define LITTLE_ENDIAN   _LITTLE_ENDIAN
 65 #define BIG_ENDIAN      _BIG_ENDIAN
 66 #define PDP_ENDIAN      _PDP_ENDIAN
 67 #define BYTE_ORDER      _BYTE_ORDER
 68 #endif
 69 
 70 #if defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE_BUILTIN_CONSTANT_P)
 71 
 72 #define __word_swap_int_var(x) \
 73 __extension__ ({ register __uint32_t __X = (x); \
 74    __asm ("rorl $16, %0" : "+r" (__X)); \
 75    __X; })
 76 
 77 #ifdef __OPTIMIZE__
 78 
 79 #define __word_swap_int_const(x) \
 80         ((((x) & 0xffff0000) >> 16) | \
 81          (((x) & 0x0000ffff) << 16))
 82 #define __word_swap_int(x) (__builtin_constant_p(x) ? \
 83         __word_swap_int_const(x) : __word_swap_int_var(x))
 84 
 85 #else   /* __OPTIMIZE__ */
 86 
 87 #define __word_swap_int(x) __word_swap_int_var(x)
 88 
 89 #endif  /* __OPTIMIZE__ */
 90 
 91 #define __byte_swap_int_var(x) \
 92 __extension__ ({ register __uint32_t __X = (x); \
 93    __asm ("bswap %0" : "+r" (__X)); \
 94    __X; })
 95 
 96 #ifdef __OPTIMIZE__
 97 
 98 #define __byte_swap_int_const(x) \
 99         ((((x) & 0xff000000) >> 24) | \
100          (((x) & 0x00ff0000) >>  8) | \
101          (((x) & 0x0000ff00) <<  8) | \
102          (((x) & 0x000000ff) << 24))
103 #define __byte_swap_int(x) (__builtin_constant_p(x) ? \
104         __byte_swap_int_const(x) : __byte_swap_int_var(x))
105 
106 #else   /* __OPTIMIZE__ */
107 
108 #define __byte_swap_int(x) __byte_swap_int_var(x)
109 
110 #endif  /* __OPTIMIZE__ */
111 
112 #define __byte_swap_long_var(x) \
113 __extension__ ({ register __uint64_t __X = (x); \
114    __asm ("bswap %0" : "+r" (__X)); \
115    __X; })
116 
117 #ifdef __OPTIMIZE__
118 
119 #define __byte_swap_long_const(x) \
120         (((x >> 56) | \
121          ((x >> 40) & 0xff00) | \
122          ((x >> 24) & 0xff0000) | \
123          ((x >> 8) & 0xff000000) | \
124          ((x << 8) & (0xfful << 32)) | \
125          ((x << 24) & (0xfful << 40)) | \
126          ((x << 40) & (0xfful << 48)) | \
127          ((x << 56))))
128 
129 #define __byte_swap_long(x) (__builtin_constant_p(x) ? \
130         __byte_swap_long_const(x) : __byte_swap_long_var(x))
131 
132 #else   /* __OPTIMIZE__ */
133 
134 #define __byte_swap_long(x) __byte_swap_long_var(x)
135 
136 #endif  /* __OPTIMIZE__ */
137 
138 #define __byte_swap_word_var(x) \
139 __extension__ ({ register __uint16_t __X = (x); \
140    __asm ("xchgb %h0, %b0" : "+Q" (__X)); \
141    __X; })
142 
143 #ifdef __OPTIMIZE__
144 
145 #define __byte_swap_word_const(x) \
146         ((((x) & 0xff00) >> 8) | \
147          (((x) & 0x00ff) << 8))
148 
149 #define __byte_swap_word(x) (__builtin_constant_p(x) ? \
150         __byte_swap_word_const(x) : __byte_swap_word_var(x))
151 
152 #else   /* __OPTIMIZE__ */
153 
154 #define __byte_swap_word(x) __byte_swap_word_var(x)
155 
156 #endif  /* __OPTIMIZE__ */
157 
158 static __inline __uint64_t
159 __bswap64(__uint64_t _x)
160 {
161 
162         return (__byte_swap_long(_x));
163 }
164 
165 static __inline __uint32_t
166 __bswap32(__uint32_t _x)
167 {
168 
169         return (__byte_swap_int(_x));
170 }
171 
172 static __inline __uint16_t
173 __bswap16(__uint16_t _x)
174 {
175 
176         return (__byte_swap_word(_x));
177 }
178 
179 #define __htonl(x)      __bswap32(x)
180 #define __htons(x)      __bswap16(x)
181 #define __ntohl(x)      __bswap32(x)
182 #define __ntohs(x)      __bswap16(x)
183 
184 #else /* !(__GNUCLIKE_ASM && __GNUCLIKE_BUILTIN_CONSTANT_P) */
185 
186 /*
187  * No optimizations are available for this compiler.  Fall back to
188  * non-optimized functions by defining the constant usually used to prevent
189  * redefinition.
190  */
191 #define _BYTEORDER_FUNC_DEFINED
192 
193 #endif /* __GNUCLIKE_ASM && __GNUCLIKE_BUILTIN_CONSTANT_P */
194 
195 #ifdef __cplusplus
196 }
197 #endif
198 
199 #endif /* !_MACHINE_ENDIAN_H_ */
200 

Cache object: 6737e66cc8addbd7a206feca8e72322f


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.