Ruby  2.5.0dev(2017-10-22revision60238)
sparc.c
Go to the documentation of this file.
1 /********************************************************************
2  Flush register windows on sparc.
3 
4  This function is in a separate file to prevent inlining. The "flushw"
5  assembler instruction used on sparcv9 flushes all register windows
6  except the current one, so if it is inlined, the current register
7  window of the process executing the instruction will not be flushed
8  correctly.
9 
10  See http://bugs.ruby-lang.org/issues/5244 for discussion.
11 *********************************************************************/
12 void
14 {
15 /*
16  * gcc doesn't provide "asm" keyword if -ansi and the various -std options
17  * are given.
18  * http://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html
19  */
20 #ifndef __GNUC__
21 #define __asm__ asm
22 #endif
23 
24  __asm__
25 #ifdef __GNUC__
26  __volatile__
27 #endif
28 
29 /* This condition should be in sync with one in configure.ac */
30 #if defined(__sparcv9) || defined(__sparc_v9__) || defined(__arch64__)
31 # ifdef __GNUC__
32  ("flushw" : : : "%o7")
33 # else
34  ("flushw")
35 # endif /* __GNUC__ */
36 #else
37  ("ta 0x03")
38 #endif
39  ;
40 }
void rb_sparc_flush_register_windows(void)
Definition: sparc.c:13
#define __asm__