Ruby: sparc.c Source File

Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)

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*********************************************************************/
12void
13rb_sparc_flush_register_windows(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}
rb_sparc_flush_register_windows
void rb_sparc_flush_register_windows(void)
Definition: sparc.c:13