| /* DO NOT EDIT THIS FILE. |
| |
| It has been auto-edited by fixincludes from: |
| |
| "fixinc/tests/inc/sys/byteorder.h" |
| |
| This had to be done to correct non-standard usages in the |
| original, manufacturer supplied header file. */ |
| |
| #ifndef _SYS_BYTEORDER_H |
| #define _SYS_BYTEORDER_H |
| |
| /* Functions to convert `short' and `long' quantities from host byte order |
| to (internet) network byte order (i.e. big-endian). |
| |
| Written by Ron Guilmette (rfg@ncd.com). |
| |
| This isn't actually used by GCC. It is installed by fixinc.svr4. |
| |
| For big-endian machines these functions are essentially no-ops. |
| |
| For little-endian machines, we define the functions using specialized |
| asm sequences in cases where doing so yields better code (e.g. i386). */ |
| |
| #if !defined (__GNUC__) && !defined (__GNUG__) |
| #error You lose! This file is only useful with GNU compilers. |
| #endif |
| |
| #ifndef __BYTE_ORDER__ |
| /* Byte order defines. These are as defined on UnixWare 1.1, but with |
| double underscores added at the front and back. */ |
| #define __LITTLE_ENDIAN__ 1234 |
| #define __BIG_ENDIAN__ 4321 |
| #define __PDP_ENDIAN__ 3412 |
| #endif |
| |
| #ifdef __STDC__ |
| static __inline__ unsigned long htonl (unsigned long); |
| static __inline__ unsigned short htons (unsigned int); |
| static __inline__ unsigned long ntohl (unsigned long); |
| static __inline__ unsigned short ntohs (unsigned int); |
| #endif /* defined (__STDC__) */ |
| |
| #if defined (__i386__) |
| |
| #ifndef __BYTE_ORDER__ |
| #define __BYTE_ORDER__ __LITTLE_ENDIAN__ |
| #endif |
| |
| /* Convert a host long to a network long. */ |
| |
| /* We must use a new-style function definition, so that this will also |
| be valid for C++. */ |
| static __inline__ unsigned long |
| htonl (unsigned long __arg) |
| { |
| register unsigned long __result; |
| |
| __asm__ ("xchg%B0 %b0,%h0 |
| ror%L0 $16,%0 |
| xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg)); |
| return __result; |
| } |
| |
| /* Convert a host short to a network short. */ |
| |
| static __inline__ unsigned short |
| htons (unsigned int __arg) |
| { |
| register unsigned short __result; |
| |
| __asm__ ("xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg)); |
| return __result; |
| } |
| |
| #elif ((defined (__i860__) && !defined (__i860_big_endian__)) \ |
| || defined (__ns32k__) || defined (__vax__) \ |
| || defined (__spur__) || defined (__arm__)) |
| |
| #ifndef __BYTE_ORDER__ |
| #define __BYTE_ORDER__ __LITTLE_ENDIAN__ |
| #endif |
| |
| /* For other little-endian machines, using C code is just as efficient as |
| using assembly code. */ |
| |
| /* Convert a host long to a network long. */ |
| |
| static __inline__ unsigned long |
| htonl (unsigned long __arg) |
| { |
| register unsigned long __result; |
| |
| __result = (__arg >> 24) & 0x000000ff; |
| __result |= (__arg >> 8) & 0x0000ff00; |
| __result |= (__arg << 8) & 0x00ff0000; |
| __result |= (__arg << 24) & 0xff000000; |
| return __result; |
| } |
| |
| /* Convert a host short to a network short. */ |
| |
| static __inline__ unsigned short |
| htons (unsigned int __arg) |
| { |
| register unsigned short __result; |
| |
| __result = (__arg << 8) & 0xff00; |
| __result |= (__arg >> 8) & 0x00ff; |
| return __result; |
| } |
| |
| #else /* must be a big-endian machine */ |
| |
| #ifndef __BYTE_ORDER__ |
| #define __BYTE_ORDER__ __BIG_ENDIAN__ |
| #endif |
| |
| /* Convert a host long to a network long. */ |
| |
| static __inline__ unsigned long |
| htonl (unsigned long __arg) |
| { |
| return __arg; |
| } |
| |
| /* Convert a host short to a network short. */ |
| |
| static __inline__ unsigned short |
| htons (unsigned int __arg) |
| { |
| return __arg; |
| } |
| |
| #endif /* big-endian */ |
| |
| /* Convert a network long to a host long. */ |
| |
| static __inline__ unsigned long |
| ntohl (unsigned long __arg) |
| { |
| return htonl (__arg); |
| } |
| |
| /* Convert a network short to a host short. */ |
| |
| static __inline__ unsigned short |
| ntohs (unsigned int __arg) |
| { |
| return htons (__arg); |
| } |
| #endif |