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