home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / byteorder.h < prev    next >
C/C++ Source or Header  |  2004-01-30  |  2KB  |  104 lines

  1. /* asm/byteorder.h
  2.  
  3.    Copyright 1996, 1998, 2001 Red Hat, Inc.
  4.  
  5. This file is part of Cygwin.
  6.  
  7. This software is a copyrighted work licensed under the terms of the
  8. Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
  9. details. */
  10.  
  11. #ifndef _I386_BYTEORDER_H
  12. #define _I386_BYTEORDER_H
  13.  
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17.  
  18. #if 0
  19. #undef ntohl
  20. #undef ntohs
  21. #undef htonl
  22. #undef htons
  23. #endif
  24.  
  25. #ifndef __LITTLE_ENDIAN
  26. #define __LITTLE_ENDIAN 1234
  27. #endif
  28.  
  29. #ifndef __LITTLE_ENDIAN_BITFIELD
  30. #define __LITTLE_ENDIAN_BITFIELD
  31. #endif
  32.  
  33. #if 1
  34. extern unsigned long int    ntohl(unsigned long int);
  35. extern unsigned short int    ntohs(unsigned short int);
  36. extern unsigned long int    htonl(unsigned long int);
  37. extern unsigned short int    htons(unsigned short int);
  38.  
  39. extern __inline__ unsigned long int    __ntohl(unsigned long int);
  40. extern __inline__ unsigned short int    __ntohs(unsigned short int);
  41. extern __inline__ unsigned long int    __constant_ntohl(unsigned long int);
  42. extern __inline__ unsigned short int    __constant_ntohs(unsigned short int);
  43.  
  44. extern __inline__ unsigned long int
  45. __ntohl(unsigned long int x)
  46. {
  47.     __asm__("xchgb %b0,%h0\n\t"    /* swap lower bytes    */
  48.         "rorl $16,%0\n\t"    /* swap words        */
  49.         "xchgb %b0,%h0"        /* swap higher bytes    */
  50.         :"=q" (x)
  51.         : "0" (x));
  52.     return x;
  53. }
  54.  
  55. #define __constant_ntohl(x) \
  56.     ((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \
  57.                  (((unsigned long int)(x) & 0x0000ff00U) <<  8) | \
  58.                  (((unsigned long int)(x) & 0x00ff0000U) >>  8) | \
  59.                  (((unsigned long int)(x) & 0xff000000U) >> 24)))
  60.  
  61. extern __inline__ unsigned short int
  62. __ntohs(unsigned short int x)
  63. {
  64.     __asm__("xchgb %b0,%h0"        /* swap bytes        */
  65.         : "=q" (x)
  66.         :  "0" (x));
  67.     return x;
  68. }
  69.  
  70. #define __constant_ntohs(x) \
  71.     ((unsigned short int)((((unsigned short int)(x) & 0x00ff) << 8) | \
  72.                   (((unsigned short int)(x) & 0xff00) >> 8))) \
  73.  
  74. #define __htonl(x) __ntohl(x)
  75. #define __htons(x) __ntohs(x)
  76. #define __constant_htonl(x) __constant_ntohl(x)
  77. #define __constant_htons(x) __constant_ntohs(x)
  78.  
  79. #ifdef  __OPTIMIZE__
  80. #  define ntohl(x) \
  81. (__builtin_constant_p((long)(x)) ? \
  82.  __constant_ntohl((x)) : \
  83.  __ntohl((x)))
  84. #  define ntohs(x) \
  85. (__builtin_constant_p((short)(x)) ? \
  86.  __constant_ntohs((x)) : \
  87.  __ntohs((x)))
  88. #  define htonl(x) \
  89. (__builtin_constant_p((long)(x)) ? \
  90.  __constant_htonl((x)) : \
  91.  __htonl((x)))
  92. #  define htons(x) \
  93. (__builtin_constant_p((short)(x)) ? \
  94.  __constant_htons((x)) : \
  95.  __htons((x)))
  96. #endif
  97. #endif
  98.  
  99. #ifdef __cplusplus
  100. }
  101. #endif
  102.  
  103. #endif
  104.