Ruby 2.0.0p247(2013-06-27revision41674)

- Main Page
- Modules
- Data Structures
- Files

- File List
- Globals

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
13 rb_sparc_flush_register_windows(void)
14 {
15 asm
16 #ifdef __GNUC__
17 __volatile__
18 #endif
19
20 /* This condition should be in sync with one in configure.in */
21 #if defined(__sparcv9) || defined(__sparc_v9__) || defined(__arch64__)
22 # ifdef __GNUC__
23 ("flushw" : : : "%o7")
24 # else
25 ("flushw")
26 # endif /* __GNUC__ */
27 #else
28 ("ta 0x03")
29 #endif
30 ;
31 }
32