xref: /netbsd/common/lib/libc/arch/or1k/string/clz.S (revision 59faaf83)
1*59faaf83Smatt/*	$NetBSD: clz.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: clz.S,v 1.1 2014/09/03 19:34:25 matt Exp $")
34*59faaf83Smatt
35*59faaf83SmattENTRY_NP(__clzsi2)
36*59faaf83Smatt#ifdef _LP64
37*59faaf83Smatt	l.slli	r3, r3, 32
38*59faaf83Smatt	l.addi	r5, r0, 64
39*59faaf83Smatt#else
40*59faaf83Smatt	l.addi	r5, r0, 32
41*59faaf83Smatt#endif
42*59faaf83Smatt	l.fl1	r11, r3
43*59faaf83Smatt	l.sub	r11, r5, r11
44*59faaf83Smatt	l.jr	lr
45*59faaf83Smatt	l.nop
46*59faaf83SmattEND(__clzsi2)
47*59faaf83Smatt
48*59faaf83SmattENTRY_NP(__clzdi2)
49*59faaf83Smatt#ifdef _LP64
50*59faaf83Smatt	l.addi	r5, r0, 64
51*59faaf83Smatt#else
52*59faaf83Smatt	l.sfeqi	r3, 0
53*59faaf83Smatt	l.bf	1f
54*59faaf83Smatt	l.nop
55*59faaf83Smatt	l.addi	r5, r0, 32
56*59faaf83Smatt#endif
57*59faaf83Smatt	l.fl1	r11, r3
58*59faaf83Smatt	l.sub	r11, r5, r11
59*59faaf83Smatt	l.jr	lr
60*59faaf83Smatt	l.nop
61*59faaf83Smatt#ifndef _LP64
62*59faaf83Smatt1:	l.addi	r5, r0, 64
63*59faaf83Smatt	l.fl1	r11, r4
64*59faaf83Smatt	l.sub	r11, r5, r11
65*59faaf83Smatt	l.jr	lr
66*59faaf83Smatt	l.nop
67*59faaf83Smatt#endif
68*59faaf83SmattEND(__clzdi2)
69