xref: /netbsd/common/lib/libc/arch/or1k/string/ctz.S (revision 59faaf83)
1*59faaf83Smatt/*	$NetBSD: ctz.S,v 1.1 2014/09/03 19:34:25 matt Exp $ */
2*59faaf83Smatt
3*59faaf83Smatt/*-
4*59faaf83Smatt * Copyright (C) 2001	Martin J. Laubach <mjl@NetBSD.org>
5*59faaf83Smatt * All rights reserved.
6*59faaf83Smatt *
7*59faaf83Smatt * Redistribution and use in source and binary forms, with or without
8*59faaf83Smatt * modification, are permitted provided that the following conditions
9*59faaf83Smatt * are met:
10*59faaf83Smatt * 1. Redistributions of source code must retain the above copyright
11*59faaf83Smatt *    notice, this list of conditions and the following disclaimer.
12*59faaf83Smatt * 2. Redistributions in binary form must reproduce the above copyright
13*59faaf83Smatt *    notice, this list of conditions and the following disclaimer in the
14*59faaf83Smatt *    documentation and/or other materials provided with the distribution.
15*59faaf83Smatt * 3. The name of the author may not be used to endorse or promote products
16*59faaf83Smatt *    derived from this software without specific prior written permission.
17*59faaf83Smatt *
18*59faaf83Smatt * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19*59faaf83Smatt * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20*59faaf83Smatt * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21*59faaf83Smatt * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22*59faaf83Smatt * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23*59faaf83Smatt * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*59faaf83Smatt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*59faaf83Smatt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*59faaf83Smatt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27*59faaf83Smatt * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*59faaf83Smatt */
29*59faaf83Smatt/*----------------------------------------------------------------------*/
30*59faaf83Smatt
31*59faaf83Smatt#include <machine/asm.h>
32*59faaf83Smatt
33*59faaf83Smatt__RCSID("$NetBSD: ctz.S,v 1.1 2014/09/03 19:34:25 matt Exp $")
34*59faaf83Smatt
35*59faaf83SmattENTRY_NP(__ctzsi2)
36*59faaf83Smatt#ifdef _LP64
37*59faaf83Smatt	l.extwz	r3, r3
38*59faaf83Smatt#endif
39*59faaf83Smatt	l.ff1	r11, r3
40*59faaf83Smatt	l.addi	r11, r11, -1
41*59faaf83Smatt	l.jr	lr
42*59faaf83Smatt	l.nop
43*59faaf83SmattEND(__ctzsi2)
44*59faaf83Smatt
45*59faaf83SmattENTRY_NP(__ctzdi2)
46*59faaf83Smatt#ifdef _LP64
47*59faaf83Smatt	l.ff1	r11, r3
48*59faaf83Smatt	l.addi	r11, r11, -1
49*59faaf83Smatt	l.jr	lr
50*59faaf83Smatt	l.nop
51*59faaf83Smatt#else
52*59faaf83Smatt	l.sfeqi	r4, 0
53*59faaf83Smatt	l.bf	1f
54*59faaf83Smatt	l.nop
55*59faaf83Smatt
56*59faaf83Smatt	l.ff1	r11, r4
57*59faaf83Smatt	l.addi	r11, r11, -1
58*59faaf83Smatt	l.jr	lr
59*59faaf83Smatt	l.nop
60*59faaf83Smatt
61*59faaf83Smatt1:	l.sfeqi	r3, 0
62*59faaf83Smatt	l.addi	r12, r0, 64
63*59faaf83Smatt	l.ff1	r11, r3
64*59faaf83Smatt	l.addi	r11, r11, 31
65*59faaf83Smatt	l.cmov	r11, r12, r11
66*59faaf83Smatt	l.jr	lr
67*59faaf83Smatt	l.nop
68*59faaf83Smatt#endif
69*59faaf83SmattEND(__ctzdi2)
70