162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 362306a36Sopenharmony_ci * License. See the file "COPYING" in the main directory of this archive 462306a36Sopenharmony_ci * for more details. 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 1999, 2000, 2003 Ralf Baechle 762306a36Sopenharmony_ci * Copyright (C) 1999, 2000 Silicon Graphics, Inc. 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci#ifndef _ASM_SIM_H 1062306a36Sopenharmony_ci#define _ASM_SIM_H 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <asm/asm-offsets.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define __str2(x) #x 1662306a36Sopenharmony_ci#define __str(x) __str2(x) 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#ifdef CONFIG_32BIT 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define save_static_function(symbol) \ 2162306a36Sopenharmony_ci__asm__( \ 2262306a36Sopenharmony_ci ".text\n\t" \ 2362306a36Sopenharmony_ci ".globl\t__" #symbol "\n\t" \ 2462306a36Sopenharmony_ci ".align\t2\n\t" \ 2562306a36Sopenharmony_ci ".type\t__" #symbol ", @function\n\t" \ 2662306a36Sopenharmony_ci ".ent\t__" #symbol ", 0\n__" \ 2762306a36Sopenharmony_ci #symbol":\n\t" \ 2862306a36Sopenharmony_ci ".frame\t$29, 0, $31\n\t" \ 2962306a36Sopenharmony_ci "sw\t$16,"__str(PT_R16)"($29)\t\t\t# save_static_function\n\t" \ 3062306a36Sopenharmony_ci "sw\t$17,"__str(PT_R17)"($29)\n\t" \ 3162306a36Sopenharmony_ci "sw\t$18,"__str(PT_R18)"($29)\n\t" \ 3262306a36Sopenharmony_ci "sw\t$19,"__str(PT_R19)"($29)\n\t" \ 3362306a36Sopenharmony_ci "sw\t$20,"__str(PT_R20)"($29)\n\t" \ 3462306a36Sopenharmony_ci "sw\t$21,"__str(PT_R21)"($29)\n\t" \ 3562306a36Sopenharmony_ci "sw\t$22,"__str(PT_R22)"($29)\n\t" \ 3662306a36Sopenharmony_ci "sw\t$23,"__str(PT_R23)"($29)\n\t" \ 3762306a36Sopenharmony_ci "sw\t$30,"__str(PT_R30)"($29)\n\t" \ 3862306a36Sopenharmony_ci "j\t" #symbol "\n\t" \ 3962306a36Sopenharmony_ci ".end\t__" #symbol "\n\t" \ 4062306a36Sopenharmony_ci ".size\t__" #symbol",. - __" #symbol) 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci#endif /* CONFIG_32BIT */ 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci#ifdef CONFIG_64BIT 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci#define save_static_function(symbol) \ 4762306a36Sopenharmony_ci__asm__( \ 4862306a36Sopenharmony_ci ".text\n\t" \ 4962306a36Sopenharmony_ci ".globl\t__" #symbol "\n\t" \ 5062306a36Sopenharmony_ci ".align\t2\n\t" \ 5162306a36Sopenharmony_ci ".type\t__" #symbol ", @function\n\t" \ 5262306a36Sopenharmony_ci ".ent\t__" #symbol ", 0\n__" \ 5362306a36Sopenharmony_ci #symbol":\n\t" \ 5462306a36Sopenharmony_ci ".frame\t$29, 0, $31\n\t" \ 5562306a36Sopenharmony_ci "sd\t$16,"__str(PT_R16)"($29)\t\t\t# save_static_function\n\t" \ 5662306a36Sopenharmony_ci "sd\t$17,"__str(PT_R17)"($29)\n\t" \ 5762306a36Sopenharmony_ci "sd\t$18,"__str(PT_R18)"($29)\n\t" \ 5862306a36Sopenharmony_ci "sd\t$19,"__str(PT_R19)"($29)\n\t" \ 5962306a36Sopenharmony_ci "sd\t$20,"__str(PT_R20)"($29)\n\t" \ 6062306a36Sopenharmony_ci "sd\t$21,"__str(PT_R21)"($29)\n\t" \ 6162306a36Sopenharmony_ci "sd\t$22,"__str(PT_R22)"($29)\n\t" \ 6262306a36Sopenharmony_ci "sd\t$23,"__str(PT_R23)"($29)\n\t" \ 6362306a36Sopenharmony_ci "sd\t$30,"__str(PT_R30)"($29)\n\t" \ 6462306a36Sopenharmony_ci "j\t" #symbol "\n\t" \ 6562306a36Sopenharmony_ci ".end\t__" #symbol "\n\t" \ 6662306a36Sopenharmony_ci ".size\t__" #symbol",. - __" #symbol) 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci#endif /* CONFIG_64BIT */ 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci#endif /* _ASM_SIM_H */ 71