4e62ab0ba3
From-SVN: r35134
153 lines
3.6 KiB
C
153 lines
3.6 KiB
C
/* 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
|