This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.25-403-g9cd3049


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  9cd30491dd6d9d4c5e9372d7a5c75f78f3a11260 (commit)
      from  30cb625a21bc7ad450fdc45d1f682e2b27c353de (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=9cd30491dd6d9d4c5e9372d7a5c75f78f3a11260

commit 9cd30491dd6d9d4c5e9372d7a5c75f78f3a11260
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Jun 5 08:28:01 2017 -0700

    x86: Add macros to implement ifunce selection in C
    
    These macros are used to implement ifunc selection in C.  To implement
    an ifunc function, foo, which returns the address of __foo_sse2 or
    __foo_avx2:
    
       __foo_avx2:
    
       #define foo __redirect_foo
       #define __foo __redirect___foo
       #include <foo.h>
       #undef foo
       #undef __foo
       #define SYMBOL_NAME foo
       #include <init-arch.h>
    
       extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
       extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2) attribute_hidden;
    
       static inline void *
       foo_selector (void)
       {
         if (use AVX2)
          return OPTIMIZE (avx2);
    
         return OPTIMIZE (sse2);
       }
    
       libc_ifunc_redirected (__redirect_foo, foo, foo_selector ());
    
    	* sysdeps/x86/init-arch.h (PASTER1): New.
    	(EVALUATOR1): Likewise.
    	(PASTER2): Likewise.
    	(EVALUATOR2): Likewise.
    	(REDIRECT_NAME): Likewise.
    	(OPTIMIZE): Likewise.
    	(IFUNC_SELECTOR): Likewise.

diff --git a/ChangeLog b/ChangeLog
index 5a70bf1..0ebfcf9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2017-06-05  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+	    H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/x86/init-arch.h (PASTER1): New.
+	(EVALUATOR1): Likewise.
+	(PASTER2): Likewise.
+	(EVALUATOR2): Likewise.
+	(REDIRECT_NAME): Likewise.
+	(OPTIMIZE): Likewise.
+	(IFUNC_SELECTOR): Likewise.
+
 2017-06-05  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* sysdeps/x86_64/strlen.S (PMINU): New.
diff --git a/sysdeps/x86/init-arch.h b/sysdeps/x86/init-arch.h
index 6cbc16b..15d3f09 100644
--- a/sysdeps/x86/init-arch.h
+++ b/sysdeps/x86/init-arch.h
@@ -21,6 +21,46 @@
 # include <ldsodefs.h>
 #endif
 
+/* These macros are used to implement ifunc selection in C.  To implement
+   an ifunc function, foo, which returns the address of __foo_sse2 or
+   __foo_avx2:
+
+   #define foo __redirect_foo
+   #define __foo __redirect___foo
+   #include <foo.h>
+   #undef foo
+   #undef __foo
+   #define SYMBOL_NAME foo
+   #include <init-arch.h>
+
+   extern __typeof (REDIRECT_NAME) OPTIMIZE (sse2) attribute_hidden;
+   extern __typeof (REDIRECT_NAME) OPTIMIZE (avx2) attribute_hidden;
+
+   static inline void *
+   foo_selector (void)
+   {
+     if (use AVX2)
+      return OPTIMIZE (avx2);
+
+     return OPTIMIZE (sse2);
+   }
+
+   libc_ifunc_redirected (__redirect_foo, foo, foo_selector ());
+
+*/
+
+#define PASTER1(x,y)	x##_##y
+#define EVALUATOR1(x,y)	PASTER1 (x,y)
+#define PASTER2(x,y)	__##x##_##y
+#define EVALUATOR2(x,y)	PASTER2 (x,y)
+
+/* Basically set '__redirect_<symbol>' to use as type definition,
+   '__<symbol>_<variant>' as the optimized implementation and
+   '<symbol>_ifunc_selector' as the IFUNC selector.  */
+#define REDIRECT_NAME	EVALUATOR1 (__redirect, SYMBOL_NAME)
+#define OPTIMIZE(name)	EVALUATOR2 (SYMBOL_NAME, name)
+#define IFUNC_SELECTOR	EVALUATOR1 (SYMBOL_NAME, ifunc_selector)
+
 #ifndef __x86_64__
 /* Due to the reordering and the other nifty extensions in i686, it is
    not really good to use heavily i586 optimized code on an i686.  It's

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog               |   11 +++++++++++
 sysdeps/x86/init-arch.h |   40 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+), 0 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]