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