|
|
1.1 root 1: #ifndef _I386_BYTEORDER_H
2: #define _I386_BYTEORDER_H
3:
4: #undef ntohl
5: #undef ntohs
6: #undef htonl
7: #undef htons
8:
9: #ifndef __LITTLE_ENDIAN
10: #define __LITTLE_ENDIAN 1234
11: #endif
12:
13: #ifndef __LITTLE_ENDIAN_BITFIELD
14: #define __LITTLE_ENDIAN_BITFIELD
15: #endif
16:
17: /* For avoiding bswap on i386 */
18: #ifdef __KERNEL__
19: #include <linux/config.h>
20: #endif
21:
22: extern unsigned long int ntohl(unsigned long int);
23: extern unsigned short int ntohs(unsigned short int);
24: extern unsigned long int htonl(unsigned long int);
25: extern unsigned short int htons(unsigned short int);
26:
27: extern __inline__ unsigned long int __ntohl(unsigned long int);
28: extern __inline__ unsigned short int __ntohs(unsigned short int);
29: extern __inline__ unsigned long int __constant_ntohl(unsigned long int);
30: extern __inline__ unsigned short int __constant_ntohs(unsigned short int);
31:
32: extern __inline__ unsigned long int
33: __ntohl(unsigned long int x)
34: {
35: #if defined(__KERNEL__) && !defined(CONFIG_M386)
36: __asm__("bswap %0" : "=r" (x) : "0" (x));
37: #else
38: __asm__("xchgb %b0,%h0\n\t" /* swap lower bytes */
39: "rorl $16,%0\n\t" /* swap words */
40: "xchgb %b0,%h0" /* swap higher bytes */
41: :"=q" (x)
42: : "0" (x));
43: #endif
44: return x;
45: }
46:
47: #define __constant_ntohl(x) \
48: ((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \
49: (((unsigned long int)(x) & 0x0000ff00U) << 8) | \
50: (((unsigned long int)(x) & 0x00ff0000U) >> 8) | \
51: (((unsigned long int)(x) & 0xff000000U) >> 24)))
52:
53: extern __inline__ unsigned short int
54: __ntohs(unsigned short int x)
55: {
56: __asm__("xchgb %b0,%h0" /* swap bytes */
57: : "=q" (x)
58: : "0" (x));
59: return x;
60: }
61:
62: #define __constant_ntohs(x) \
63: ((unsigned short int)((((unsigned short int)(x) & 0x00ff) << 8) | \
64: (((unsigned short int)(x) & 0xff00) >> 8))) \
65:
66: #define __htonl(x) __ntohl(x)
67: #define __htons(x) __ntohs(x)
68: #define __constant_htonl(x) __constant_ntohl(x)
69: #define __constant_htons(x) __constant_ntohs(x)
70:
71: #ifdef __OPTIMIZE__
72: # define ntohl(x) \
73: (__builtin_constant_p((long)(x)) ? \
74: __constant_ntohl((x)) : \
75: __ntohl((x)))
76: # define ntohs(x) \
77: (__builtin_constant_p((short)(x)) ? \
78: __constant_ntohs((x)) : \
79: __ntohs((x)))
80: # define htonl(x) \
81: (__builtin_constant_p((long)(x)) ? \
82: __constant_htonl((x)) : \
83: __htonl((x)))
84: # define htons(x) \
85: (__builtin_constant_p((short)(x)) ? \
86: __constant_htons((x)) : \
87: __htons((x)))
88: #endif
89:
90: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.