xref: /OK3568_Linux_fs/kernel/arch/mips/include/asm/sim.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * This file is subject to the terms and conditions of the GNU General Public
3*4882a593Smuzhiyun  * License.  See the file "COPYING" in the main directory of this archive
4*4882a593Smuzhiyun  * for more details.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright (C) 1999, 2000, 2003 Ralf Baechle
7*4882a593Smuzhiyun  * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun #ifndef _ASM_SIM_H
10*4882a593Smuzhiyun #define _ASM_SIM_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <asm/asm-offsets.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #define __str2(x) #x
16*4882a593Smuzhiyun #define __str(x) __str2(x)
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #ifdef CONFIG_32BIT
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define save_static_function(symbol)					\
21*4882a593Smuzhiyun __asm__(								\
22*4882a593Smuzhiyun 	".text\n\t"							\
23*4882a593Smuzhiyun 	".globl\t__" #symbol "\n\t"					\
24*4882a593Smuzhiyun 	".align\t2\n\t"							\
25*4882a593Smuzhiyun 	".type\t__" #symbol ", @function\n\t"				\
26*4882a593Smuzhiyun 	".ent\t__" #symbol ", 0\n__"					\
27*4882a593Smuzhiyun 	#symbol":\n\t"							\
28*4882a593Smuzhiyun 	".frame\t$29, 0, $31\n\t"					\
29*4882a593Smuzhiyun 	"sw\t$16,"__str(PT_R16)"($29)\t\t\t# save_static_function\n\t"	\
30*4882a593Smuzhiyun 	"sw\t$17,"__str(PT_R17)"($29)\n\t"				\
31*4882a593Smuzhiyun 	"sw\t$18,"__str(PT_R18)"($29)\n\t"				\
32*4882a593Smuzhiyun 	"sw\t$19,"__str(PT_R19)"($29)\n\t"				\
33*4882a593Smuzhiyun 	"sw\t$20,"__str(PT_R20)"($29)\n\t"				\
34*4882a593Smuzhiyun 	"sw\t$21,"__str(PT_R21)"($29)\n\t"				\
35*4882a593Smuzhiyun 	"sw\t$22,"__str(PT_R22)"($29)\n\t"				\
36*4882a593Smuzhiyun 	"sw\t$23,"__str(PT_R23)"($29)\n\t"				\
37*4882a593Smuzhiyun 	"sw\t$30,"__str(PT_R30)"($29)\n\t"				\
38*4882a593Smuzhiyun 	"j\t" #symbol "\n\t"						\
39*4882a593Smuzhiyun 	".end\t__" #symbol "\n\t"					\
40*4882a593Smuzhiyun 	".size\t__" #symbol",. - __" #symbol)
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun #endif /* CONFIG_32BIT */
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun #ifdef CONFIG_64BIT
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define save_static_function(symbol)					\
47*4882a593Smuzhiyun __asm__(								\
48*4882a593Smuzhiyun 	".text\n\t"							\
49*4882a593Smuzhiyun 	".globl\t__" #symbol "\n\t"					\
50*4882a593Smuzhiyun 	".align\t2\n\t"							\
51*4882a593Smuzhiyun 	".type\t__" #symbol ", @function\n\t"				\
52*4882a593Smuzhiyun 	".ent\t__" #symbol ", 0\n__"					\
53*4882a593Smuzhiyun 	#symbol":\n\t"							\
54*4882a593Smuzhiyun 	".frame\t$29, 0, $31\n\t"					\
55*4882a593Smuzhiyun 	"sd\t$16,"__str(PT_R16)"($29)\t\t\t# save_static_function\n\t"	\
56*4882a593Smuzhiyun 	"sd\t$17,"__str(PT_R17)"($29)\n\t"				\
57*4882a593Smuzhiyun 	"sd\t$18,"__str(PT_R18)"($29)\n\t"				\
58*4882a593Smuzhiyun 	"sd\t$19,"__str(PT_R19)"($29)\n\t"				\
59*4882a593Smuzhiyun 	"sd\t$20,"__str(PT_R20)"($29)\n\t"				\
60*4882a593Smuzhiyun 	"sd\t$21,"__str(PT_R21)"($29)\n\t"				\
61*4882a593Smuzhiyun 	"sd\t$22,"__str(PT_R22)"($29)\n\t"				\
62*4882a593Smuzhiyun 	"sd\t$23,"__str(PT_R23)"($29)\n\t"				\
63*4882a593Smuzhiyun 	"sd\t$30,"__str(PT_R30)"($29)\n\t"				\
64*4882a593Smuzhiyun 	"j\t" #symbol "\n\t"						\
65*4882a593Smuzhiyun 	".end\t__" #symbol "\n\t"					\
66*4882a593Smuzhiyun 	".size\t__" #symbol",. - __" #symbol)
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun #endif /* CONFIG_64BIT */
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun #endif /* _ASM_SIM_H */
71