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