diff options
Diffstat (limited to 'winsup/cygwin/include')
-rw-r--r-- | winsup/cygwin/include/asm/byteorder.h | 24 | ||||
-rw-r--r-- | winsup/cygwin/include/endian.h | 19 | ||||
-rw-r--r-- | winsup/cygwin/include/machine/_endian.h | 45 |
3 files changed, 59 insertions, 29 deletions
diff --git a/winsup/cygwin/include/asm/byteorder.h b/winsup/cygwin/include/asm/byteorder.h index 4f5d7cb59..14529bfa2 100644 --- a/winsup/cygwin/include/asm/byteorder.h +++ b/winsup/cygwin/include/asm/byteorder.h @@ -11,9 +11,8 @@ details. */ #ifndef _I386_BYTEORDER_H #define _I386_BYTEORDER_H -#include <_ansi.h> #include <stdint.h> -#include <bits/endian.h> +#include <machine/endian.h> #ifdef __cplusplus extern "C" { @@ -28,37 +27,16 @@ extern uint16_t ntohs(uint16_t); extern uint32_t htonl(uint32_t); extern uint16_t htons(uint16_t); -_ELIDABLE_INLINE uint32_t __ntohl(uint32_t); -_ELIDABLE_INLINE uint16_t __ntohs(uint16_t); - -_ELIDABLE_INLINE uint32_t -__ntohl(uint32_t x) -{ - __asm__("bswap %0" : "=r" (x) : "0" (x)); - return x; -} - #define __constant_ntohl(x) \ ((uint32_t)((((uint32_t)(x) & 0x000000ffU) << 24) | \ (((uint32_t)(x) & 0x0000ff00U) << 8) | \ (((uint32_t)(x) & 0x00ff0000U) >> 8) | \ (((uint32_t)(x) & 0xff000000U) >> 24))) -_ELIDABLE_INLINE uint16_t -__ntohs(uint16_t x) -{ - __asm__("xchgb %b0,%h0" /* swap bytes */ - : "=Q" (x) - : "0" (x)); - return x; -} - #define __constant_ntohs(x) \ ((uint16_t)((((uint16_t)(x) & 0x00ff) << 8) | \ (((uint16_t)(x) & 0xff00) >> 8))) \ -#define __htonl(x) __ntohl(x) -#define __htons(x) __ntohs(x) #define __constant_htonl(x) __constant_ntohl(x) #define __constant_htons(x) __constant_ntohs(x) diff --git a/winsup/cygwin/include/endian.h b/winsup/cygwin/include/endian.h index 960e61c3d..7ddf0994d 100644 --- a/winsup/cygwin/include/endian.h +++ b/winsup/cygwin/include/endian.h @@ -12,14 +12,21 @@ details. */ #define _ENDIAN_H_ #include <sys/config.h> -#include <sys/cdefs.h> -#include <bits/endian.h> +#include <machine/endian.h> /*#ifdef __USE_BSD*/ -# define LITTLE_ENDIAN __LITTLE_ENDIAN -# define BIG_ENDIAN __BIG_ENDIAN -# define PDP_ENDIAN __PDP_ENDIAN -# define BYTE_ORDER __BYTE_ORDER +# ifndef LITTLE_ENDIAN +# define LITTLE_ENDIAN __LITTLE_ENDIAN +# endif +# ifndef BIG_ENDIAN +# define BIG_ENDIAN __BIG_ENDIAN +# endif +# ifndef PDP_ENDIAN +# define PDP_ENDIAN __PDP_ENDIAN +# endif +# ifndef BYTE_ORDER +# define BYTE_ORDER __BYTE_ORDER +# endif /*#endif*/ #if __BYTE_ORDER == __LITTLE_ENDIAN diff --git a/winsup/cygwin/include/machine/_endian.h b/winsup/cygwin/include/machine/_endian.h new file mode 100644 index 000000000..d878cc180 --- /dev/null +++ b/winsup/cygwin/include/machine/_endian.h @@ -0,0 +1,45 @@ +/* machine/_endian.h + + Copyright 2005, 2010, 2011 Red Hat, Inc. + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +#ifndef __MACHINE_ENDIAN_H__ +#error "must be included via <machine/endian.h>" +#endif /* !__MACHINE_ENDIAN_H__ */ + +#include <_ansi.h> +#include <bits/endian.h> + +#define _LITTLE_ENDIAN __LITTLE_ENDIAN +#define _BIG_ENDIAN __BIG_ENDIAN +#define _PDP_ENDIAN __PDP_ENDIAN +#define _BYTE_ORDER __BYTE_ORDER + +#define __machine_host_to_from_network_defined + +_ELIDABLE_INLINE __uint32_t __ntohl(__uint32_t); +_ELIDABLE_INLINE __uint16_t __ntohs(__uint16_t); + +_ELIDABLE_INLINE __uint32_t +__ntohl(__uint32_t _x) +{ + __asm__("bswap %0" : "=r" (_x) : "0" (_x)); + return _x; +} + +_ELIDABLE_INLINE __uint16_t +__ntohs(__uint16_t _x) +{ + __asm__("xchgb %b0,%h0" /* swap bytes */ + : "=Q" (_x) + : "0" (_x)); + return _x; +} + +#define __htonl(_x) __ntohl(_x) +#define __htons(_x) __ntohs(_x) |