Date: Mon, 21 Jan 2008 16:01:39 GMT From: Warner Losh <imp@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 133787 for review Message-ID: <200801211601.m0LG1dq5045887@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=133787 Change 133787 by imp@imp_lighthouse on 2008/01/21 16:00:56 Prefer the mips2 endian.h to the JNPR one since it handles both endians. Affected files ... .. //depot/projects/mips2-jnpr/src/sys/mips/include/endian.h#6 integrate Differences ... ==== //depot/projects/mips2-jnpr/src/sys/mips/include/endian.h#6 (text+ko) ==== @@ -1,8 +1,6 @@ -/* From: NetBSD: endian.h,v 1.5 1997/10/09 15:42:19 bouyer Exp */ - /*- - * Copyright (c) 1987, 1991, 1993 - * The Regents of the University of California. All rights reserved. + * Copyright (c) 1987, 1991 Regents of the University of California. + * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -28,16 +26,20 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)endian.h 8.1 (Berkeley) 6/10/93 - * JNPR: endian.h,v 1.8 2007/08/09 11:23:32 katta - * $FreeBSD$ + * @(#)endian.h 7.8 (Berkeley) 4/3/91 + * $FreeBSD: src/sys/amd64/include/endian.h,v 1.8 2005/03/11 21:46:01 peter Exp $ */ #ifndef _MACHINE_ENDIAN_H_ #define _MACHINE_ENDIAN_H_ + #include <sys/cdefs.h> +#include <sys/_types.h> -#ifndef _POSIX_SOURCE +#ifdef __cplusplus +extern "C" { +#endif + /* * Definitions for byte order, according to byte significance from low * address to high. @@ -46,6 +48,12 @@ #define _BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */ #define _PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */ +#ifdef _MIPSEB +#define _BYTE_ORDER _BIG_ENDIAN +#else +#define _BYTE_ORDER _LITTLE_ENDIAN +#endif /* _MIBSEB */ + /* * Deprecated variants that don't have enough underscores to be useful in more * strict namespaces. @@ -57,22 +65,30 @@ #define BYTE_ORDER _BYTE_ORDER #endif -#define _BYTE_ORDER _BIG_ENDIAN +#if defined(__GNUCLIKE_BUILTIN_CONSTANT_P) && defined(__OPTIMIZE__) +#define __is_constant(x) __builtin_constant_p(x) +#else +#define __is_constant(x) 0 +#endif -#ifndef _LOCORE -#ifndef __ASSEMBLER__ -#include <sys/_types.h> -#if defined(__CC_SUPPORTS___INLINE) && defined(__GNUCLIKE_ASM) +#define __bswap16_const(x) (((x) >> 8) | (((x) << 8) & 0xff00)) +#define __bswap32_const(x) (((x) >> 24) | (((x) >> 8) & 0xff00) | \ + (((x) << 8) & 0xff0000) | (((x) << 24) & 0xff000000)) +#define __bswap64_const(x) (((x) >> 56) | (((x) >> 40) & 0xff00) | \ + (((x) >> 24) & 0xff0000) | (((x) >> 8) & 0xff000000) | \ + (((x) << 8) & ((__uint64_t)0xff << 32)) | \ + (((x) << 24) & ((__uint64_t)0xff << 40)) | \ + (((x) << 40) & ((__uint64_t)0xff << 48)) | (((x) << 56))) static __inline __uint16_t -__bswap16(__uint16_t _x) +__bswap16_var(__uint16_t _x) { return ((_x >> 8) | ((_x << 8) & 0xff00)); } static __inline __uint32_t -__bswap32(__uint32_t _x) +__bswap32_var(__uint32_t _x) { return ((_x >> 24) | ((_x >> 8) & 0xff00) | ((_x << 8) & 0xff0000) | @@ -80,7 +96,7 @@ } static __inline __uint64_t -__bswap64(__uint64_t _x) +__bswap64_var(__uint64_t _x) { return ((_x >> 56) | ((_x >> 40) & 0xff00) | ((_x >> 24) & 0xff0000) | @@ -89,43 +105,37 @@ ((_x << 40) & ((__uint64_t)0xff << 48)) | ((_x << 56))); } -__uint32_t __htonl(__uint32_t); -__uint16_t __htons(__uint16_t); -__uint32_t __ntohl(__uint32_t); -__uint16_t __ntohs(__uint16_t); +#define __bswap16(x) (__uint16_t)(__is_constant(x) ? __bswap16_const(x) : \ + __bswap16_var(x)) +#define __bswap32(x) (__uint32_t)(__is_constant(x) ? __bswap32_const(x) : \ + __bswap32_var(x)) +#define __bswap64(x) (__uint64_t)(__is_constant(x) ? __bswap64_const(x) : \ + __bswap64_var(x)) -#else /* !(__CC_SUPPORTS___INLINE && __GNUCLIKE_ASM) */ - +#ifdef _MIPSEB +#define __htonl(x) ((__uint32_t)(x)) +#define __htons(x) ((__uint16_t)(x)) +#define __ntohl(x) ((__uint32_t)(x)) +#define __ntohs(x) ((__uint16_t)(x)) /* - * No optimizations are available for this compiler. Fall back to - * non-optimized functions by defining the constant usually used to prevent - * redefinition. + * Define the order of 32-bit words in 64-bit words. */ -#define _BYTEORDER_FUNC_DEFINED - -#endif /* __CC_SUPPORTS___INLINE && __GNUCLIKE_ASM */ - -#endif /* !__ASSEMBLER__ */ -#endif /* !_LOCORE */ - /* - * Define the order of 32-bit words in 64-bit words. + * XXXMIPS: Additional parentheses to make gcc more happy. */ -#if _BYTE_ORDER == BIG_ENDIAN -#define _QUAD_HIGHWORD 0 -#define _QUAD_LOWWORD 1 -#define __htonl(x) ((__uint32_t)(x)) -#define __htons(x) ((__uint16_t)(x)) -#define __ntohl(x) ((__uint32_t)(x)) -#define __ntohs(x) ((__uint16_t)(x)) +#define _QUAD_HIGHWORD 0 +#define _QUAD_LOWWORD 1 #else -#define _QUAD_HIGHWORD 1 -#define _QUAD_LOWWORD 0 -#define __ntohl(x) (__bswap32(x)) -#define __ntohs(x) (__bswap16(x)) -#define __htonl(x) (__bswap32(x)) -#define __htons(x) (__bswap16(x)) -#endif /* _BYTE_ORDER == BIG_ENDIAN */ +#define _QUAD_HIGHWORD 1 +#define _QUAD_LOWWORD 0 +#define __ntohl(x) (__bswap32((x))) +#define __ntohs(x) (__bswap16((x))) +#define __htonl(x) (__bswap32((x))) +#define __htons(x) (__bswap16((x))) +#endif /* _MIPSEB */ + +#ifdef __cplusplus +} +#endif -#endif /* !_POSIX_SOURCE */ #endif /* !_MACHINE_ENDIAN_H_ */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200801211601.m0LG1dq5045887>