/* pre-.hidden libgcc compatibility
   Copyright (C) 2002 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, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */

	.file	"libgcc-compat.S"

#include <shlib-compat.h>

#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_6)

#define __ashldi3_v_glibc20	INTUSE (__ashldi3)
#define __ashrdi3_v_glibc20	INTUSE (__ashrdi3)
#define __lshrdi3_v_glibc20	INTUSE (__lshrdi3)
#define __cmpdi2_v_glibc20	INTUSE (__cmpdi2)
#define __ucmpdi2_v_glibc20	INTUSE (__ucmpdi2)
#define __fixdfdi_v_glibc20	INTUSE (__fixdfdi)
#define __fixsfdi_v_glibc20	INTUSE (__fixsfdi)
#define __fixunsdfdi_v_glibc20	INTUSE (__fixunsdfdi)
#define __fixunssfdi_v_glibc20	INTUSE (__fixunssfdi)
#define __floatdidf_v_glibc20	INTUSE (__floatdidf)
#define __floatdisf_v_glibc20	INTUSE (__floatdisf)

	.symver __ashldi3_v_glibc20,__ashldi3@GLIBC_2.0
	.symver __ashrdi3_v_glibc20,__ashrdi3@GLIBC_2.0
	.symver __lshrdi3_v_glibc20,__lshrdi3@GLIBC_2.0
	.symver __cmpdi2_v_glibc20,__cmpdi2@GLIBC_2.0
	.symver __ucmpdi2_v_glibc20,__ucmpdi2@GLIBC_2.0
	.symver __fixdfdi_v_glibc20,__fixdfdi@GLIBC_2.0
	.symver __fixunsdfdi_v_glibc20,__fixunsdfdi@GLIBC_2.0
	.symver __fixsfdi_v_glibc20,__fixsfdi@GLIBC_2.0
	.symver __fixunssfdi_v_glibc20,__fixunssfdi@GLIBC_2.0
	.symver __floatdidf_v_glibc20,__floatdidf@GLIBC_2.0
	.symver __floatdisf_v_glibc20,__floatdisf@GLIBC_2.0

#ifdef HAVE_DOT_HIDDEN
	.hidden __ashldi3
	.hidden __ashrdi3
	.hidden __lshrdi3
	.hidden __cmpdi2
	.hidden __ucmpdi2
	.hidden __fixdfdi
	.hidden __fixsfdi
	.hidden __fixunsdfdi
	.hidden __fixunssfdi
	.hidden __floatdidf
	.hidden __floatdisf
#endif

	.section	".text"

	.align 2
	.globl __ashldi3_v_glibc20
	.type	__ashldi3_v_glibc20,@function
__ashldi3_v_glibc20:
	b __ashldi3@local
.Lfe5:
	.size	__ashldi3_v_glibc20,.Lfe5-__ashldi3_v_glibc20
	.align 2
	.globl __ashrdi3_v_glibc20
	.type	__ashrdi3_v_glibc20,@function
__ashrdi3_v_glibc20:
	b __ashrdi3@local
.Lfe6:
	.size	__ashrdi3_v_glibc20,.Lfe6-__ashrdi3_v_glibc20
	.align 2
	.globl __lshrdi3_v_glibc20
	.type	__lshrdi3_v_glibc20,@function
__lshrdi3_v_glibc20:
	b __lshrdi3@local
.Lfe7:
	.size	__lshrdi3_v_glibc20,.Lfe7-__lshrdi3_v_glibc20
	.align 2
	.globl __cmpdi2_v_glibc20
	.type	__cmpdi2_v_glibc20,@function
__cmpdi2_v_glibc20:
	b __cmpdi2@local
.Lfe8:
	.size	__cmpdi2_v_glibc20,.Lfe8-__cmpdi2_v_glibc20
	.align 2
	.globl __ucmpdi2_v_glibc20
	.type	__ucmpdi2_v_glibc20,@function
__ucmpdi2_v_glibc20:
	b __ucmpdi2@local
.Lfe9:
	.size	__ucmpdi2_v_glibc20,.Lfe9-__ucmpdi2_v_glibc20
	.align 2
	.globl __fixdfdi_v_glibc20
	.type	__fixdfdi_v_glibc20,@function
__fixdfdi_v_glibc20:
	b __fixdfdi@local
.Lfe10:
	.size	__fixdfdi_v_glibc20,.Lfe10-__fixdfdi_v_glibc20
	.align 2
	.globl __fixunsdfdi_v_glibc20
	.type	__fixunsdfdi_v_glibc20,@function
__fixunsdfdi_v_glibc20:
	b __fixunsdfdi@local
.Lfe11:
	.size	__fixunsdfdi_v_glibc20,.Lfe11-__fixunsdfdi_v_glibc20
	.align 2
	.globl __fixsfdi_v_glibc20
	.type	__fixsfdi_v_glibc20,@function
__fixsfdi_v_glibc20:
	b __fixsfdi@local
.Lfe12:
	.size	__fixsfdi_v_glibc20,.Lfe12-__fixsfdi_v_glibc20
	.align 2
	.globl __fixunssfdi_v_glibc20
	.type	__fixunssfdi_v_glibc20,@function
__fixunssfdi_v_glibc20:
	b __fixunssfdi@local
.Lfe13:
	.size	__fixunssfdi_v_glibc20,.Lfe13-__fixunssfdi_v_glibc20
	.align 2
	.globl __floatdidf_v_glibc20
	.type	__floatdidf_v_glibc20,@function
__floatdidf_v_glibc20:
	b __floatdidf@local
.Lfe14:
	.size	__floatdidf_v_glibc20,.Lfe14-__floatdidf_v_glibc20
	.align 2
	.globl __floatdisf_v_glibc20
	.type	__floatdisf_v_glibc20,@function
__floatdisf_v_glibc20:
	b __floatdisf@local
.Lfe15:
	.size	__floatdisf_v_glibc20,.Lfe15-__floatdisf_v_glibc20

#endif
