svn commit: r232721 - head/sys/x86/include
John Baldwin
jhb at freebsd.org
Tue Mar 20 12:34:14 UTC 2012
On Friday, March 09, 2012 6:48:56 am Tijl Coosemans wrote:
> Author: tijl
> Date: Fri Mar 9 11:48:56 2012
> New Revision: 232721
> URL: http://svn.freebsd.org/changeset/base/232721
>
> Log:
> Clean up x86 endian.h:
> - Remove extern "C". There are no functions with external linkage here.
[1]
> - Rename bswapNN_const(x) to bswapNN_gen(x) to indicate that these macros
> are generic implementations that can take non-constant arguments. [1]
> - Split up __GNUCLIKE_ASM && __GNUCLIKE_BUILTIN_CONSTANT_P and deal with
> each separately.
> - Replace _LP64 with __amd64__ because asm instructions are machine
> dependent, not ABI dependent.
>
> Submitted by: bde [1]
> Reviewed by: bde
BTW, I think I found an old "bug" in this file. The _gen() variants
should only use the _gen() variants of smaller types rather than using
the version that re-checks __build_constant_p() I think. That is:
Index: x86/include/endian.h
===================================================================
--- endian.h (revision 233184)
+++ endian.h (working copy)
@@ -65,9 +65,9 @@
#define __bswap16_gen(x) (__uint16_t)((x) << 8 | (x) >> 8)
#define __bswap32_gen(x) \
- (((__uint32_t)__bswap16(x) << 16) | __bswap16((x) >> 16))
+ (((__uint32_t)__bswap16_gen(x) << 16) | __bswap16_gen((x) >> 16))
#define __bswap64_gen(x) \
- (((__uint64_t)__bswap32(x) << 32) | __bswap32((x) >> 32))
+ (((__uint64_t)__bswap32_gen(x) << 32) | __bswap32_gen((x) >> 32))
#ifdef __GNUCLIKE_BUILTIN_CONSTANT_P
#define __bswap16(x) \
I ran into this while porting the __builtin_constant_p() functionality
over to ia64.
--
John Baldwin
More information about the svn-src-all
mailing list