use macros instead of inline functions in shgetc.h
authorRich Felker <dalias@aerifal.cx>
Fri, 13 Apr 2012 07:59:36 +0000 (03:59 -0400)
committerRich Felker <dalias@aerifal.cx>
Fri, 13 Apr 2012 07:59:36 +0000 (03:59 -0400)
at -Os optimization level, gcc refuses to inline these functions even
though the inlined code would roughly the same size as the function
call, and much faster. the easy solution is to make them into macros.

src/internal/shgetc.h

index 3434cdaa132e197c36753c9efea8907066345e5f..0543cb0dc5493fbd0a644832eee122021081eb4a 100644 (file)
@@ -3,23 +3,7 @@
 void __shlim(FILE *, off_t);
 int __shgetc(FILE *);
 
-static inline off_t shcnt(FILE *f)
-{
-       return f->shcnt + (f->rpos - f->rend);
-}
-
-static inline void shlim(FILE *f, off_t lim)
-{
-       __shlim(f, lim);
-}
-
-static inline int shgetc(FILE *f)
-{
-       if (f->rpos < f->shend) return *f->rpos++;
-       return __shgetc(f);
-}
-
-static inline void shunget(FILE *f)
-{
-       if (f->rend) f->rpos--;
-}
+#define shcnt(f) ((f)->shcnt + ((f)->rpos - (f)->rend))
+#define shlim(f, lim) __shlim((f), (lim))
+#define shgetc(f) (((f)->rpos < (f)->shend) ? *(f)->rpos++ : __shgetc(f))
+#define shunget(f) ((f)->rend ? (void)(f)->rpos-- : (void)0)