/* Machine-specific calling sequence for `mcount' profiling function.  MIPS
   Copyright (C) 1996-2014 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library.  If not, see
   <http://www.gnu.org/licenses/>.  */

#include <sgidefs.h>

#define _MCOUNT_DECL(frompc,selfpc) \
static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)

/* Call __mcount with the return PC for our caller,
   and the return PC our caller will return to.  */

#if _MIPS_SIM == _ABIO32

#ifdef __PIC__
# define CPLOAD ".cpload $25;"
# define CPRESTORE ".cprestore 44\n\t"
#else
# define CPLOAD
# define CPRESTORE
#endif

#define MCOUNT asm(\
	".globl _mcount;\n\t" \
	".align 2;\n\t" \
	".set push;\n\t" \
	".set nomips16;\n\t" \
	".type _mcount,@function;\n\t" \
	".ent _mcount\n\t" \
        "_mcount:\n\t" \
        ".frame $sp,44,$31\n\t" \
        ".set noreorder;\n\t" \
        ".set noat;\n\t" \
        CPLOAD \
	"subu $29,$29,48;\n\t" \
	CPRESTORE \
        "sw $4,24($29);\n\t" \
        "sw $5,28($29);\n\t" \
        "sw $6,32($29);\n\t" \
        "sw $7,36($29);\n\t" \
        "sw $2,40($29);\n\t" \
        "sw $1,16($29);\n\t" \
        "sw $31,20($29);\n\t" \
        "move $5,$31;\n\t" \
        "move $4,$1;\n\t" \
        "jal __mcount;\n\t" \
        "nop;\n\t" \
        "lw $4,24($29);\n\t" \
        "lw $5,28($29);\n\t" \
        "lw $6,32($29);\n\t" \
        "lw $7,36($29);\n\t" \
        "lw $2,40($29);\n\t" \
        "lw $31,20($29);\n\t" \
        "lw $1,16($29);\n\t" \
        "addu $29,$29,56;\n\t" \
        "j $31;\n\t" \
        "move $31,$1;\n\t" \
	".end _mcount;\n\t" \
	".set pop");

#else

#ifdef __PIC__
# define CPSETUP ".cpsetup $25, 88, _mcount;"
# define CPRETURN ".cpreturn;"
#else
# define CPSETUP
# define CPRETURN
#endif

#if _MIPS_SIM == _ABIN32
# define PTR_ADDU_STRING "add" /* no u */
# define PTR_SUBU_STRING "sub" /* no u */
#elif _MIPS_SIM == _ABI64
# define PTR_ADDU_STRING "daddu"
# define PTR_SUBU_STRING "dsubu"
#else
# error "Unknown ABI"
#endif

#define MCOUNT asm(\
	".globl _mcount;\n\t" \
	".align 3;\n\t" \
	".set push;\n\t" \
	".set nomips16;\n\t" \
	".type _mcount,@function;\n\t" \
	".ent _mcount\n\t" \
        "_mcount:\n\t" \
        ".frame $sp,88,$31\n\t" \
        ".set noreorder;\n\t" \
        ".set noat;\n\t" \
        PTR_SUBU_STRING " $29,$29,96;\n\t" \
        CPSETUP \
        "sd $4,24($29);\n\t" \
        "sd $5,32($29);\n\t" \
        "sd $6,40($29);\n\t" \
        "sd $7,48($29);\n\t" \
        "sd $8,56($29);\n\t" \
        "sd $9,64($29);\n\t" \
        "sd $10,72($29);\n\t" \
        "sd $11,80($29);\n\t" \
        "sd $2,16($29);\n\t" \
        "sd $1,0($29);\n\t" \
        "sd $31,8($29);\n\t" \
        "move $5,$31;\n\t" \
        "move $4,$1;\n\t" \
        "jal __mcount;\n\t" \
        "nop;\n\t" \
        "ld $4,24($29);\n\t" \
        "ld $5,32($29);\n\t" \
        "ld $6,40($29);\n\t" \
        "ld $7,48($29);\n\t" \
        "ld $8,56($29);\n\t" \
        "ld $9,64($29);\n\t" \
        "ld $10,72($29);\n\t" \
        "ld $11,80($29);\n\t" \
        "ld $2,16($29);\n\t" \
        "ld $31,8($29);\n\t" \
        "ld $1,0($29);\n\t" \
        CPRETURN \
        PTR_ADDU_STRING " $29,$29,96;\n\t" \
        "j $31;\n\t" \
        "move $31,$1;\n\t" \
	".end _mcount;\n\t" \
	".set pop");

#endif
