From: "J.A. Magallón" <jamagallon@able.es>
To: vda@port.imtp.ilyichevsk.odessa.ua
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: Some functions are not inlined by gcc 3.2, resulting code is ugly
Date: Wed, 13 Nov 2002 02:28:54 +0100 [thread overview]
Message-ID: <20021113012854.GA1806@werewolf.able.es> (raw)
In-Reply-To: <200211031928.gA3JSSp29136@Port.imtp.ilyichevsk.odessa.ua>; from vda@port.imtp.ilyichevsk.odessa.ua on Mon, Nov 04, 2002 at 01:20:25 +0100
On 2002.11.04 Denis Vlasenko wrote:
[...]
> __constant_c_and_count_memset *has to* be inlined.
> There is large switch statement which meant to be optimized out.
> It does optimize out *only if* count is compile-time constant.
I also got tons of __copy_to_user and __copy_from_user in 2.4.
Do not show in 2.5 ?
This i what I applied to my 2.4 tree:
diff -urN linux-2.5.45.orig/include/linux/compiler.h linux-2.5.45fix/include/linux/compiler.h
--- linux-2.5.45.orig/include/linux/compiler.h Wed Oct 30 22:43:05 2002
+++ linux-2.5.45fix/include/linux/compiler.h Sun Nov 3 15:19:20 2002
@@ -13,4 +13,12 @@
#define likely(x) __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)
+/* GCC 3 (and probably earlier, I'm not sure) can be told to always inline
+ a function. */
+#if __GNUC__ < 3
+#define force_inline inline
+#else
+#define force_inline inline __attribute__ ((always_inline))
+#endif
+
#endif /* __LINUX_COMPILER_H */
diff -urN linux-2.5.45.orig/include/asm-i386/string.h linux-2.5.45fix/include/asm-i386/string.h
--- linux-2.5.45.orig/include/asm-i386/string.h Wed Oct 30 22:43:46 2002
+++ linux-2.5.45fix/include/asm-i386/string.h Sun Nov 3 15:58:08 2002
@@ -3,6 +3,7 @@
#ifdef __KERNEL__
#include <linux/config.h>
+#include <linux/compiler.h>
/*
* On a 486 or Pentium, we are better off not using the
* byte string operations. But on a 386 or a PPro the
@@ -218,7 +219,7 @@
* This looks horribly ugly, but the compiler can optimize it totally,
* as the count is constant.
*/
-static inline void * __constant_memcpy(void * to, const void * from, size_t n)
+static force_inline void * __constant_memcpy(void * to, const void * from, size_t n)
{
switch (n) {
case 0:
@@ -453,7 +454,7 @@
* This looks horribly ugly, but the compiler can optimize it totally,
* as we by now know that both pattern and count is constant..
*/
-static inline void * __constant_c_and_count_memset(void * s, unsigned long pattern, size_t count)
+static force_inline void * __constant_c_and_count_memset(void * s, unsigned long pattern, size_t count)
{
switch (count) {
case 0:
--- linux/include/asm-i386/uaccess.h.orig 2002-11-13 01:27:42.000000000 +0100
+++ linux/include/asm-i386/uaccess.h 2002-11-13 01:30:04.000000000 +0100
@@ -543,7 +543,7 @@
unsigned long __generic_copy_to_user(void *, const void *, unsigned long);
unsigned long __generic_copy_from_user(void *, const void *, unsigned long);
-static inline unsigned long
+static force_inline unsigned long
__constant_copy_to_user(void *to, const void *from, unsigned long n)
{
prefetch(from);
@@ -552,7 +552,7 @@
return n;
}
-static inline unsigned long
+static force_inline unsigned long
__constant_copy_from_user(void *to, const void *from, unsigned long n)
{
if (access_ok(VERIFY_READ, from, n))
@@ -562,14 +562,14 @@
return n;
}
-static inline unsigned long
+static force_inline unsigned long
__constant_copy_to_user_nocheck(void *to, const void *from, unsigned long n)
{
__constant_copy_user(to,from,n);
return n;
}
-static inline unsigned long
+static force_inline unsigned long
__constant_copy_from_user_nocheck(void *to, const void *from, unsigned long n)
{
__constant_copy_user_zeroing(to,from,n);
--
J.A. Magallon <jamagallon@able.es> \ Software is like sex:
werewolf.able.es \ It's better when it's free
Mandrake Linux release 9.1 (Cooker) for i586
Linux 2.4.20-rc1-jam2 (gcc 3.2 (Mandrake Linux 9.1 3.2-3mdk))
next prev parent reply other threads:[~2002-11-13 1:22 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-11-03 16:17 Some functions are not inlined by gcc 3.2, resulting code is ugly Denis Vlasenko
2002-11-03 16:17 ` Jussi Laako
2002-11-04 0:17 ` Denis Vlasenko
2002-11-03 21:28 ` Jussi Laako
2002-11-04 16:00 ` Denis Vlasenko
2002-11-03 18:14 ` Denis Vlasenko
2002-11-03 15:23 ` Martin J. Bligh
2002-11-04 0:23 ` Denis Vlasenko
2002-11-03 15:37 ` Jakub Jelinek
2002-11-03 16:21 ` Alan Cox
2002-11-04 0:20 ` Denis Vlasenko
2002-11-03 20:28 ` Alan Cox
2002-11-04 16:08 ` Denis Vlasenko
2002-11-13 1:28 ` J.A. Magallón [this message]
2002-11-13 11:54 ` Denis Vlasenko
2002-11-13 12:48 ` Denis Vlasenko
2002-11-04 1:21 ` Robert Love
2002-11-04 13:41 ` Alan Cox
2002-11-04 22:44 ` Werner Almesberger
2002-11-04 16:04 ` Denis Vlasenko
2002-11-04 11:39 ` Jakub Jelinek
2002-11-13 0:10 ` J.A. Magallón
2002-11-13 12:04 ` Denis Vlasenko
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=20021113012854.GA1806@werewolf.able.es \
--to=jamagallon@able.es \
--cc=linux-kernel@vger.kernel.org \
--cc=vda@port.imtp.ilyichevsk.odessa.ua \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.