X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/43866e378188c25dd1e2208016ab3cbeb086ae6c..3e170ce000f1506b7b5d2c5c7faec85ceabb573d:/osfmk/i386/endian.h diff --git a/osfmk/i386/endian.h b/osfmk/i386/endian.h index 0f802c36a..248519588 100644 --- a/osfmk/i386/endian.h +++ b/osfmk/i386/endian.h @@ -1,16 +1,19 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ - * - * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. + * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. + * compliance with the License. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * unlawful or unlicensed copies of an Apple operating system, or to + * circumvent, violate, or enable the circumvention or violation of, any + * terms of an Apple operating system software license agreement. + * + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER @@ -20,7 +23,7 @@ * Please see the License for the specific language governing rights and * limitations under the License. * - * @APPLE_LICENSE_HEADER_END@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * @OSF_COPYRIGHT@ @@ -43,36 +46,44 @@ /* * Macros for network/external number representation conversion. - */ - -unsigned short ntohs(unsigned short), htons(unsigned short); -unsigned long ntohl(unsigned long), htonl(unsigned long); - -/* * Use GNUC support to inline the byteswappers. */ -extern __inline__ +#if !defined(ntohs) +static __inline__ unsigned short ntohs(unsigned short); +static __inline__ unsigned short ntohs(unsigned short w_int) { - register unsigned short w = w_int; - __asm__ volatile("xchgb %h1,%b1" : "=q" (w) : "0" (w)); - return (w); /* zero-extend for compat */ + return ((w_int << 8) | (w_int >> 8)); } +#endif +#if !defined(htons) +unsigned short htons(unsigned short); #define htons ntohs +#endif -extern __inline__ +#if !defined(ntohl) +static __inline__ unsigned long ntohl(unsigned long); +static __inline__ unsigned long ntohl(register unsigned long value) { +#if defined(__clang__) + return (unsigned long)__builtin_bswap32((unsigned int)value); +#else register unsigned long l = value; __asm__ volatile("bswap %0" : "=r" (l) : "0" (l)); return l; +#endif } +#endif +#if !defined(htonl) +unsigned long htonl(unsigned long); #define htonl ntohl +#endif #define NTOHL(x) (x) = ntohl((unsigned long)x) #define NTOHS(x) (x) = ntohs((unsigned short)x)