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