/*      $NetBSD: ashiftrt.S,v 1.7 2009/01/07 22:15:18 uwe Exp $ */

/*-
* Copyright (C) 1999 Tsubai Masanari.  All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
*    derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <machine/asm.h>


#ifdef __ELF__
       .hidden __ashiftrt_r4_0
       .hidden __ashiftrt_r4_1
       .hidden __ashiftrt_r4_2
       .hidden __ashiftrt_r4_3
       .hidden __ashiftrt_r4_4
       .hidden __ashiftrt_r4_5
       .hidden __ashiftrt_r4_6
       .hidden __ashiftrt_r4_7
       .hidden __ashiftrt_r4_8
       .hidden __ashiftrt_r4_9
       .hidden __ashiftrt_r4_10
       .hidden __ashiftrt_r4_11
       .hidden __ashiftrt_r4_12
       .hidden __ashiftrt_r4_13
       .hidden __ashiftrt_r4_14
       .hidden __ashiftrt_r4_15
       .hidden __ashiftrt_r4_16
       .hidden __ashiftrt_r4_17
       .hidden __ashiftrt_r4_18
       .hidden __ashiftrt_r4_19
       .hidden __ashiftrt_r4_20
       .hidden __ashiftrt_r4_21
       .hidden __ashiftrt_r4_22
       .hidden __ashiftrt_r4_23
       .hidden __ashiftrt_r4_24
       .hidden __ashiftrt_r4_25
       .hidden __ashiftrt_r4_26
       .hidden __ashiftrt_r4_27
       .hidden __ashiftrt_r4_28
       .hidden __ashiftrt_r4_29
       .hidden __ashiftrt_r4_30
       .hidden __ashiftrt_r4_31
#endif  /* __ELF__ */


NENTRY(__ashiftrt_r4_31)
       shll    r4
       rts
        subc   r4, r4

ALTENTRY(__ashiftrt_r4_30)
       shar    r4

ALTENTRY(__ashiftrt_r4_29)
       shar    r4

ALTENTRY(__ashiftrt_r4_28)
       shar    r4

ALTENTRY(__ashiftrt_r4_27)
       shar    r4

ALTENTRY(__ashiftrt_r4_26)
       shar    r4

ALTENTRY(__ashiftrt_r4_25)
       shar    r4

ALTENTRY(__ashiftrt_r4_24)
       shlr16  r4
       shlr8   r4
       rts
        exts.b r4, r4

ALTENTRY(__ashiftrt_r4_23)
       shar    r4

ALTENTRY(__ashiftrt_r4_22)
       shar    r4

ALTENTRY(__ashiftrt_r4_21)
       shar    r4

ALTENTRY(__ashiftrt_r4_20)
       shar    r4

ALTENTRY(__ashiftrt_r4_19)
       shar    r4

ALTENTRY(__ashiftrt_r4_18)
       shar    r4

ALTENTRY(__ashiftrt_r4_17)
       shar    r4

ALTENTRY(__ashiftrt_r4_16)
       shlr16  r4
       rts
        exts.w r4, r4

ALTENTRY(__ashiftrt_r4_15)
       swap.w  r4, r4
       cmp/pz  r4
       bf/s    1f
        exts.w r4, r4
       rts
        shll   r4
1:
       sett
       rts
        rotcl  r4

ALTENTRY(__ashiftrt_r4_14)
       shar    r4

ALTENTRY(__ashiftrt_r4_13)
       shar    r4

ALTENTRY(__ashiftrt_r4_12)
       shar    r4

ALTENTRY(__ashiftrt_r4_11)
       shar    r4

ALTENTRY(__ashiftrt_r4_10)
       shar    r4

ALTENTRY(__ashiftrt_r4_9)
       shar    r4

ALTENTRY(__ashiftrt_r4_8)
       shar    r4

ALTENTRY(__ashiftrt_r4_7)
       shar    r4

ALTENTRY(__ashiftrt_r4_6)
       shar    r4

ALTENTRY(__ashiftrt_r4_5)
       shar    r4

ALTENTRY(__ashiftrt_r4_4)
       shar    r4

ALTENTRY(__ashiftrt_r4_3)
       shar    r4

ALTENTRY(__ashiftrt_r4_2)
       shar    r4

ALTENTRY(__ashiftrt_r4_1)
       rts
        shar   r4

ALTENTRY(__ashiftrt_r4_0)
       rts
        nop