From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/1709 Path: news.gmane.org!not-for-mail From: Isaac Dunham Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH/RFC] __inline for C89 compilers (take 3?) Date: Thu, 23 Aug 2012 20:31:09 -0700 Message-ID: <20120823203109.1b365e0a@newbook> References: <12609.132.241.65.179.1345698455.squirrel@lavabit.com> <503622B4.8020506@barfooze.de> <20120823123453.GO27715@brightrain.aerifal.cx> <20120823172519.39f899b6@newbook> <20120824020749.GU27715@brightrain.aerifal.cx> <20120824023425.GV27715@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/bZJ+50QZhfpkCBDvixZ23Nv" X-Trace: ger.gmane.org 1345779095 29061 80.91.229.3 (24 Aug 2012 03:31:35 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 24 Aug 2012 03:31:35 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-1710-gllmg-musl=m.gmane.org@lists.openwall.com Fri Aug 24 05:31:35 2012 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1T4kcP-0003Bq-OQ for gllmg-musl@plane.gmane.org; Fri, 24 Aug 2012 05:31:34 +0200 Original-Received: (qmail 22323 invoked by uid 550); 24 Aug 2012 03:31:31 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 22311 invoked from network); 24 Aug 2012 03:31:30 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=lavabit; d=lavabit.com; b=Ar4uqt9IhRZAMYPIdjQhGDevYjtxGORZjAlVBIQlOAHp/6Bh1luynW8bskrvoqI9HbTWyjroGr9kXYn3+kbq+zR0i3zzBlIUl5UVJQZvANrOjyjqhmQiDDjX28MBddwumDLshBzLooT9trepFiu6ftvKISRsVE2jo6fBEAuqUuM=; h=Date:From:To:Subject:Message-ID:In-Reply-To:References:X-Mailer:Mime-Version:Content-Type; In-Reply-To: <20120824023425.GV27715@brightrain.aerifal.cx> X-Mailer: Claws Mail 3.7.4 (GTK+ 2.20.1; i486-pc-linux-gnu) Xref: news.gmane.org gmane.linux.lib.musl.general:1709 Archived-At: --MP_/bZJ+50QZhfpkCBDvixZ23Nv Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline On Thu, 23 Aug 2012 22:34:25 -0400 Rich Felker wrote: > On Thu, Aug 23, 2012 at 10:07:49PM -0400, Rich Felker wrote: > #if __STDC_VERSION__ < 199901L && defined(__GNUC__) > #define inline __inline > #define restrict __restrict > #elif __STDC_VERSION__ < 199901L > #define inline > #define restrict > #endif > #if __STDC_VERSION__ >= 199901L > #define __inline inline > #define __restrict restrict > #endif > > added near the top of headers that need to use inline and/or restrict. > > The former version has the benefit that the "inline" and "restrict" > keywords can be used as-is later in the header, without any __ > uglification. The latter version has the benefit that it's fewer lines > of spam, does not explicitly refer to "GNU C", and .. This patch takes the second approach. It will clean up include/{math,byteswap,endian}.h, and make syscall.h somewhat more portable. As far as I could tell, restrict is not used in any of these headers. Please comment. Isaac Dunham --MP_/bZJ+50QZhfpkCBDvixZ23Nv Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=inline.diff diff --git a/arch/arm/bits/syscall.h b/arch/arm/bits/syscall.h index 9932c9e..1c9f436 100644 --- a/arch/arm/bits/syscall.h +++ b/arch/arm/bits/syscall.h @@ -1,3 +1,7 @@ +#if (__STDC_VERSION__ >= 199901L) +#define __inline inline +#endif + #define __SYSCALL_LL_E(x) \ ((union { long long ll; long l[2]; }){ .ll = x }).l[0], \ ((union { long long ll; long l[2]; }){ .ll = x }).l[1] @@ -7,37 +11,37 @@ long (__syscall)(long, ...); -static inline long __syscall0(long n) +static __inline long __syscall0(long n) { return (__syscall)(n); } -static inline long __syscall1(long n, long a) +static __inline long __syscall1(long n, long a) { return (__syscall)(n, a); } -static inline long __syscall2(long n, long a, long b) +static __inline long __syscall2(long n, long a, long b) { return (__syscall)(n, a, b); } -static inline long __syscall3(long n, long a, long b, long c) +static __inline long __syscall3(long n, long a, long b, long c) { return (__syscall)(n, a, b, c); } -static inline long __syscall4(long n, long a, long b, long c, long d) +static __inline long __syscall4(long n, long a, long b, long c, long d) { return (__syscall)(n, a, b, c, d); } -static inline long __syscall5(long n, long a, long b, long c, long d, long e) +static __inline long __syscall5(long n, long a, long b, long c, long d, long e) { return (__syscall)(n, a, b, c, d, e); } -static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) +static __inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) { return (__syscall)(n, a, b, c, d, e, f); } diff --git a/arch/i386/bits/syscall.h b/arch/i386/bits/syscall.h index 4b574e9..12e0da2 100644 --- a/arch/i386/bits/syscall.h +++ b/arch/i386/bits/syscall.h @@ -1,3 +1,7 @@ +#if (__STDC_VERSION__ >= 199901L) +#define __inline inline +#endif + #define __SYSCALL_LL_E(x) \ ((union { long long ll; long l[2]; }){ .ll = x }).l[0], \ ((union { long long ll; long l[2]; }){ .ll = x }).l[1] @@ -5,7 +9,7 @@ #define __SYSCALL_SSLEN 8 -static inline long __syscall0(long __n) +static __inline long __syscall0(long __n) { unsigned long __ret; __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n) : "memory"); @@ -14,42 +18,42 @@ static inline long __syscall0(long __n) #ifndef __PIC__ -static inline long __syscall1(long __n, long __a1) +static __inline long __syscall1(long __n, long __a1) { unsigned long __ret; __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1) : "memory"); return __ret; } -static inline long __syscall2(long __n, long __a1, long __a2) +static __inline long __syscall2(long __n, long __a1, long __a2) { unsigned long __ret; __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2) : "memory"); return __ret; } -static inline long __syscall3(long __n, long __a1, long __a2, long __a3) +static __inline long __syscall3(long __n, long __a1, long __a2, long __a3) { unsigned long __ret; __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2), "d"(__a3) : "memory"); return __ret; } -static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4) +static __inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4) { unsigned long __ret; __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2), "d"(__a3), "S"(__a4) : "memory"); return __ret; } -static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5) +static __inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5) { unsigned long __ret; __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(__n), "b"(__a1), "c"(__a2), "d"(__a3), "S"(__a4), "D"(__a5) : "memory"); return __ret; } -static inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6) +static __inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6) { unsigned long __ret; __asm__ __volatile__ ("pushl %7 ; pushl %%ebp ; mov 4(%%esp),%%ebp ; int $128 ; popl %%ebp ; popl %%ecx" @@ -59,7 +63,7 @@ static inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __ #else -static inline long __syscall1(long __n, long __a1) +static __inline long __syscall1(long __n, long __a1) { unsigned long __ret; __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx" @@ -67,7 +71,7 @@ static inline long __syscall1(long __n, long __a1) return __ret; } -static inline long __syscall2(long __n, long __a1, long __a2) +static __inline long __syscall2(long __n, long __a1, long __a2) { unsigned long __ret; __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx" @@ -75,7 +79,7 @@ static inline long __syscall2(long __n, long __a1, long __a2) return __ret; } -static inline long __syscall3(long __n, long __a1, long __a2, long __a3) +static __inline long __syscall3(long __n, long __a1, long __a2, long __a3) { unsigned long __ret; __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx" @@ -83,7 +87,7 @@ static inline long __syscall3(long __n, long __a1, long __a2, long __a3) return __ret; } -static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4) +static __inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4) { unsigned long __ret; __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx" @@ -92,7 +96,7 @@ static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __ } #if 0 -static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5) +static __inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5) { unsigned long __ret; __asm__ __volatile__ ("pushl %2 ; pushl %%ebx ; mov 4(%%esp),%%ebx ; int $128 ; popl %%ebx ; popl %%ecx" @@ -100,13 +104,13 @@ static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __ return __ret; } #else -static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5) +static __inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5) { return (__syscall)(__n, __a1, __a2, __a3, __a4, __a5); } #endif -static inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6) +static __inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6) { return (__syscall)(__n, __a1, __a2, __a3, __a4, __a5, __a6); } diff --git a/arch/mips/bits/syscall.h b/arch/mips/bits/syscall.h index 6c51bab..f5e2e39 100644 --- a/arch/mips/bits/syscall.h +++ b/arch/mips/bits/syscall.h @@ -1,3 +1,7 @@ +#if (__STDC_VERSION__ >= 199901L) +#define __inline inline +#endif + #define __SYSCALL_LL_E(x) \ ((union { long long ll; long l[2]; }){ .ll = x }).l[0], \ ((union { long long ll; long l[2]; }){ .ll = x }).l[1] @@ -7,37 +11,37 @@ long (__syscall)(long, ...); -static inline long __syscall0(long n) +static __inline long __syscall0(long n) { return (__syscall)(n); } -static inline long __syscall1(long n, long a) +static __inline long __syscall1(long n, long a) { return (__syscall)(n, a); } -static inline long __syscall2(long n, long a, long b) +static __inline long __syscall2(long n, long a, long b) { return (__syscall)(n, a, b); } -static inline long __syscall3(long n, long a, long b, long c) +static __inline long __syscall3(long n, long a, long b, long c) { return (__syscall)(n, a, b, c); } -static inline long __syscall4(long n, long a, long b, long c, long d) +static __inline long __syscall4(long n, long a, long b, long c, long d) { return (__syscall)(n, a, b, c, d); } -static inline long __syscall5(long n, long a, long b, long c, long d, long e) +static __inline long __syscall5(long n, long a, long b, long c, long d, long e) { return (__syscall)(n, a, b, c, d, e); } -static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) +static __inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) { return (__syscall)(n, a, b, c, d, e, f); } diff --git a/arch/x86_64/bits/syscall.h b/arch/x86_64/bits/syscall.h index 567cfcb..e69d386 100644 --- a/arch/x86_64/bits/syscall.h +++ b/arch/x86_64/bits/syscall.h @@ -1,23 +1,27 @@ +#if (__STDC_VERSION__ >= 199901L) +#define __inline inline +#endif + #define __SYSCALL_LL_E(x) (x) #define __SYSCALL_LL_O(x) (x) #define __SYSCALL_SSLEN 8 -static inline long __syscall0(long __n) +static __inline long __syscall0(long __n) { unsigned long __ret; __asm__ __volatile__ ("syscall" : "=a"(__ret) : "a"(__n) : "rcx", "r11", "memory"); return __ret; } -static inline long __syscall1(long __n, long __a1) +static __inline long __syscall1(long __n, long __a1) { unsigned long __ret; __asm__ __volatile__ ("syscall" : "=a"(__ret) : "a"(__n), "D"(__a1) : "rcx", "r11", "memory"); return __ret; } -static inline long __syscall2(long __n, long __a1, long __a2) +static __inline long __syscall2(long __n, long __a1, long __a2) { unsigned long __ret; __asm__ __volatile__ ("syscall" : "=a"(__ret) : "a"(__n), "D"(__a1), "S"(__a2) @@ -25,7 +29,7 @@ static inline long __syscall2(long __n, long __a1, long __a2) return __ret; } -static inline long __syscall3(long __n, long __a1, long __a2, long __a3) +static __inline long __syscall3(long __n, long __a1, long __a2, long __a3) { unsigned long __ret; __asm__ __volatile__ ("syscall" : "=a"(__ret) : "a"(__n), "D"(__a1), "S"(__a2), @@ -33,7 +37,7 @@ static inline long __syscall3(long __n, long __a1, long __a2, long __a3) return __ret; } -static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4) +static __inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __a4) { unsigned long __ret; register long __r10 __asm__("r10") = __a4; @@ -42,7 +46,7 @@ static inline long __syscall4(long __n, long __a1, long __a2, long __a3, long __ return __ret; } -static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5) +static __inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __a4, long __a5) { unsigned long __ret; register long __r10 __asm__("r10") = __a4; @@ -52,7 +56,7 @@ static inline long __syscall5(long __n, long __a1, long __a2, long __a3, long __ return __ret; } -static inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6) +static __inline long __syscall6(long __n, long __a1, long __a2, long __a3, long __a4, long __a5, long __a6) { unsigned long __ret; register long __r10 __asm__("r10") = __a4; diff --git a/include/byteswap.h b/include/byteswap.h index 8689cd5..a20e9d0 100644 --- a/include/byteswap.h +++ b/include/byteswap.h @@ -3,26 +3,21 @@ #include -#if __STDC_VERSION__ >= 199901L -inline +#if (__STDC_VERSION__ >= 199901L) +#define __inline inline #endif -static uint16_t __bswap_16(uint16_t __x) + +__inline static uint16_t __bswap_16(uint16_t __x) { return __x<<8 | __x>>8; } -#if __STDC_VERSION__ >= 199901L -inline -#endif -static uint32_t __bswap_32(uint32_t __x) +__inline static uint32_t __bswap_32(uint32_t __x) { return __x>>24 | __x>>8&0xff00 | __x<<8&0xff0000 | __x<<24; } -#if __STDC_VERSION__ >= 199901L -inline -#endif -static uint64_t __bswap_64(uint64_t __x) +__inline static uint64_t __bswap_64(uint64_t __x) { return __bswap_32(__x)+0ULL<<32 | __bswap_32(__x>>32); } diff --git a/include/endian.h b/include/endian.h index 41ca171..f92e0ee 100644 --- a/include/endian.h +++ b/include/endian.h @@ -1,6 +1,10 @@ #ifndef _ENDIAN_H #define _ENDIAN_H +#if (__STDC_VERSION__ >= 199901L) +#define __inline inline +#endif + #define __LITTLE_ENDIAN 1234 #define __BIG_ENDIAN 4321 #define __PDP_ENDIAN 3412 @@ -20,26 +24,17 @@ #include -#if __STDC_VERSION__ >= 199901L -inline -#endif -static uint16_t __bswap16(uint16_t __x) +__inline static uint16_t __bswap16(uint16_t __x) { return __x<<8 | __x>>8; } -#if __STDC_VERSION__ >= 199901L -inline -#endif -static uint32_t __bswap32(uint32_t __x) +__inline static uint32_t __bswap32(uint32_t __x) { return __x>>24 | __x>>8&0xff00 | __x<<8&0xff0000 | __x<<24; } -#if __STDC_VERSION__ >= 199901L -inline -#endif -static uint64_t __bswap64(uint64_t __x) +__inline static uint64_t __bswap64(uint64_t __x) { return __bswap32(__x)+0ULL<<32 | __bswap32(__x>>32); } diff --git a/include/math.h b/include/math.h index 2fdcb7b..2d10979 100644 --- a/include/math.h +++ b/include/math.h @@ -5,6 +5,10 @@ extern "C" { #endif +#if (__STDC_VERSION__ >= 199901L) +#define __inline inline +#endif + #define __NEED_float_t #define __NEED_double_t #define __NEED___uint16_t @@ -83,10 +87,7 @@ int __signbitl(long double); #define isunordered(x,y) (isnan((x)) ? ((void)(y),1) : isnan((y))) -#if __STDC_VERSION__ >= 199901L -inline -#endif -static int __isrel(long double __x, long double __y, int __rel) +__inline static int __isrel(long double __x, long double __y, int __rel) { if (isunordered(__x, __y)) return 0; if (__rel==-2) return __x < __y; --MP_/bZJ+50QZhfpkCBDvixZ23Nv--