From: Isaac Dunham <idunham@lavabit.com>
To: musl@lists.openwall.com
Subject: [PATCH/RFC] __inline for C89 compilers (take 3?)
Date: Thu, 23 Aug 2012 20:31:09 -0700 [thread overview]
Message-ID: <20120823203109.1b365e0a@newbook> (raw)
In-Reply-To: <20120824023425.GV27715@brightrain.aerifal.cx>
[-- Attachment #1: Type: text/plain, Size: 1005 bytes --]
On Thu, 23 Aug 2012 22:34:25 -0400
Rich Felker <dalias@aerifal.cx> 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
[-- Attachment #2: inline.diff --]
[-- Type: text/x-patch, Size: 13314 bytes --]
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 <stdint.h>
-#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 <stdint.h>
-#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;
next prev parent reply other threads:[~2012-08-24 3:31 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-23 5:07 compatability: bits/syscall.h requires C99 idunham
2012-08-23 6:11 ` [PATCH] Problem is static inline idunham
2012-08-23 6:20 ` [PATCH 2/1] " idunham
2012-08-23 6:43 ` Szabolcs Nagy
2012-08-23 6:51 ` [PATCH] " Szabolcs Nagy
2012-08-23 12:18 ` Rich Felker
2012-08-23 12:31 ` compatability: bits/syscall.h requires C99 John Spencer
2012-08-23 12:34 ` Rich Felker
2012-08-24 0:25 ` Isaac Dunham
2012-08-24 2:07 ` Rich Felker
2012-08-24 2:34 ` Rich Felker
2012-08-24 3:31 ` Isaac Dunham [this message]
2012-08-24 7:53 ` Szabolcs Nagy
2012-08-30 22:45 ` [PATCH/RFC] inline cleanup/C89 support Isaac Dunham
2012-08-31 8:34 ` Szabolcs Nagy
2012-08-31 19:27 ` Isaac Dunham
2012-09-02 16:51 ` Rich Felker
2012-09-04 15:49 ` philomath
2012-09-04 17:44 ` Rich Felker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120823203109.1b365e0a@newbook \
--to=idunham@lavabit.com \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).