6.59.25 SH Built-in Functions

The following built-in functions are supported on the SH1, SH2, SH3 and SH4 families of processors:

— Built-in Function: void __builtin_set_thread_pointer (void *ptr )

Sets the ‘ GBR ’ register to the specified value ptr . This is usually used by system code that manages threads and execution contexts. The compiler normally does not generate code that modifies the contents of ‘ GBR ’ and thus the value is preserved across function calls. Changing the ‘ GBR ’ value in user code must be done with caution, since the compiler might use ‘ GBR ’ in order to access thread local variables.

— Built-in Function: void * __builtin_thread_pointer (void )

Returns the value that is currently set in the ‘ GBR ’ register. Memory loads and stores that use the thread pointer as a base address are turned into ‘ GBR ’ based displacement loads and stores, if possible. For example:

          struct my_tcb
          {
             int a, b, c, d, e;
          };
          
          int get_tcb_value (void)
          {
            // Generate ‘
            mov.l @(8,gbr),r0
          
’ instruction
            return ((my_tcb*)__builtin_thread_pointer ())->c;
          }
          
— Built-in Function: unsigned int __builtin_sh_get_fpscr (void )

Returns the value that is currently set in the ‘ FPSCR ’ register.

— Built-in Function: void __builtin_sh_set_fpscr (unsigned int val )

Sets the ‘ FPSCR ’ register to the specified value val , while preserving the current values of the FR, SZ and PR bits.