Patchwork [SH] PR 54760 - Document new thread pointer built-ins

login
register
mail settings
Submitter Oleg Endo
Date Oct. 8, 2012, 9:46 p.m.
Message ID <1349732798.21984.49.camel@yam-132-YW-E178-FTW>
Download mbox | patch
Permalink /patch/190142/
State New
Headers show

Comments

Oleg Endo - Oct. 8, 2012, 9:46 p.m.
Hello,

This adds documentation on the new thread pointer built-ins that were
added recently to the SH target.
Tested with 'make info dvi pdf'.
OK?

Cheers,
Oleg

gcc/ChangeLog:

	PR target/54760
	* doc/extend.texi (Target Builtins): Add SH built-in section.
	Document __builtin_thread_pointer and 
	__builtin_set_thread_pointer.
Kaz Kojima - Oct. 9, 2012, 9:30 a.m.
Oleg Endo <oleg.endo@t-online.de> wrote:
> This adds documentation on the new thread pointer built-ins that were
> added recently to the SH target.
> Tested with 'make info dvi pdf'.
> OK?

OK.

Regards,
	kaz

Patch

Index: gcc/doc/extend.texi
===================================================================
--- gcc/doc/extend.texi	(revision 192200)
+++ gcc/doc/extend.texi	(working copy)
@@ -8651,6 +8651,7 @@ 
 * PowerPC Built-in Functions::
 * PowerPC AltiVec/VSX Built-in Functions::
 * RX Built-in Functions::
+* SH Built-in Functions::
 * SPARC VIS Built-in Functions::
 * SPU Built-in Functions::
 * TI C6X Built-in Functions::
@@ -13687,6 +13688,41 @@ 
 @samp{vec_vsx_st} builtins will always generate the VSX @samp{LXVD2X},
 @samp{LXVW4X}, @samp{STXVD2X}, and @samp{STXVW4X} instructions.
 
+@node SH Built-in Functions
+@subsection SH Built-in Functions
+The following built-in functions are supported on the SH1, SH2, SH3 and SH4
+families of processors:
+
+@deftypefn {Built-in Function} {void} __builtin_set_thread_pointer (void *@var{ptr})
+Sets the @samp{GBR} register to the specified value @var{ptr}.  This is usually
+used by system code that manages threads and execution contexts.  The compiler
+normally will not generate code that modifies the contents of @samp{GBR} and
+thus the value is preserved across function calls.  Changing the @samp{GBR}
+value in user code must be done with caution, since the compiler might use
+@samp{GBR} in order to access thread local variables.
+
+@end deftypefn
+
+@deftypefn {Built-in Function} {void *} __builtin_thread_pointer (void)
+Returns the value that is currently set in the @samp{GBR} register.
+Memory loads and stores that use the thread pointer as a base address will be
+turned into @samp{GBR} based displacement loads and stores, if possible.
+For example:
+@smallexample
+struct my_tcb
+@{
+   int a, b, c, d, e;
+@};
+
+int get_tcb_value (void)
+@{
+  // Generate @samp{mov.l @@(8,gbr),r0} instruction
+  return ((my_tcb*)__builtin_thread_pointer ())->c;
+@}
+
+@end smallexample
+@end deftypefn
+
 @node RX Built-in Functions
 @subsection RX Built-in Functions
 GCC supports some of the RX instructions which cannot be expressed in