18c2ecf20Sopenharmony_ci/*
28c2ecf20Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
38c2ecf20Sopenharmony_ci * License.  See the file "COPYING" in the main directory of this archive
48c2ecf20Sopenharmony_ci * for more details.
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * Copyright (C) 1999, 2000, 2003 Ralf Baechle
78c2ecf20Sopenharmony_ci * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci#ifndef _ASM_SIM_H
108c2ecf20Sopenharmony_ci#define _ASM_SIM_H
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#include <asm/asm-offsets.h>
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#define __str2(x) #x
168c2ecf20Sopenharmony_ci#define __str(x) __str2(x)
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci#ifdef CONFIG_32BIT
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci#define save_static_function(symbol)					\
218c2ecf20Sopenharmony_ci__asm__(								\
228c2ecf20Sopenharmony_ci	".text\n\t"							\
238c2ecf20Sopenharmony_ci	".globl\t__" #symbol "\n\t"					\
248c2ecf20Sopenharmony_ci	".align\t2\n\t"							\
258c2ecf20Sopenharmony_ci	".type\t__" #symbol ", @function\n\t"				\
268c2ecf20Sopenharmony_ci	".ent\t__" #symbol ", 0\n__"					\
278c2ecf20Sopenharmony_ci	#symbol":\n\t"							\
288c2ecf20Sopenharmony_ci	".frame\t$29, 0, $31\n\t"					\
298c2ecf20Sopenharmony_ci	"sw\t$16,"__str(PT_R16)"($29)\t\t\t# save_static_function\n\t"	\
308c2ecf20Sopenharmony_ci	"sw\t$17,"__str(PT_R17)"($29)\n\t"				\
318c2ecf20Sopenharmony_ci	"sw\t$18,"__str(PT_R18)"($29)\n\t"				\
328c2ecf20Sopenharmony_ci	"sw\t$19,"__str(PT_R19)"($29)\n\t"				\
338c2ecf20Sopenharmony_ci	"sw\t$20,"__str(PT_R20)"($29)\n\t"				\
348c2ecf20Sopenharmony_ci	"sw\t$21,"__str(PT_R21)"($29)\n\t"				\
358c2ecf20Sopenharmony_ci	"sw\t$22,"__str(PT_R22)"($29)\n\t"				\
368c2ecf20Sopenharmony_ci	"sw\t$23,"__str(PT_R23)"($29)\n\t"				\
378c2ecf20Sopenharmony_ci	"sw\t$30,"__str(PT_R30)"($29)\n\t"				\
388c2ecf20Sopenharmony_ci	"j\t" #symbol "\n\t"						\
398c2ecf20Sopenharmony_ci	".end\t__" #symbol "\n\t"					\
408c2ecf20Sopenharmony_ci	".size\t__" #symbol",. - __" #symbol)
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci#endif /* CONFIG_32BIT */
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci#ifdef CONFIG_64BIT
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci#define save_static_function(symbol)					\
478c2ecf20Sopenharmony_ci__asm__(								\
488c2ecf20Sopenharmony_ci	".text\n\t"							\
498c2ecf20Sopenharmony_ci	".globl\t__" #symbol "\n\t"					\
508c2ecf20Sopenharmony_ci	".align\t2\n\t"							\
518c2ecf20Sopenharmony_ci	".type\t__" #symbol ", @function\n\t"				\
528c2ecf20Sopenharmony_ci	".ent\t__" #symbol ", 0\n__"					\
538c2ecf20Sopenharmony_ci	#symbol":\n\t"							\
548c2ecf20Sopenharmony_ci	".frame\t$29, 0, $31\n\t"					\
558c2ecf20Sopenharmony_ci	"sd\t$16,"__str(PT_R16)"($29)\t\t\t# save_static_function\n\t"	\
568c2ecf20Sopenharmony_ci	"sd\t$17,"__str(PT_R17)"($29)\n\t"				\
578c2ecf20Sopenharmony_ci	"sd\t$18,"__str(PT_R18)"($29)\n\t"				\
588c2ecf20Sopenharmony_ci	"sd\t$19,"__str(PT_R19)"($29)\n\t"				\
598c2ecf20Sopenharmony_ci	"sd\t$20,"__str(PT_R20)"($29)\n\t"				\
608c2ecf20Sopenharmony_ci	"sd\t$21,"__str(PT_R21)"($29)\n\t"				\
618c2ecf20Sopenharmony_ci	"sd\t$22,"__str(PT_R22)"($29)\n\t"				\
628c2ecf20Sopenharmony_ci	"sd\t$23,"__str(PT_R23)"($29)\n\t"				\
638c2ecf20Sopenharmony_ci	"sd\t$30,"__str(PT_R30)"($29)\n\t"				\
648c2ecf20Sopenharmony_ci	"j\t" #symbol "\n\t"						\
658c2ecf20Sopenharmony_ci	".end\t__" #symbol "\n\t"					\
668c2ecf20Sopenharmony_ci	".size\t__" #symbol",. - __" #symbol)
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci#endif /* CONFIG_64BIT */
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_ci#endif /* _ASM_SIM_H */
71