xref: /openbmc/linux/arch/openrisc/include/asm/bitops/fls.h (revision 58e0166a4772aaeb10c9b0f6d59f19099d2047df)
1*58e0166aSJonas Bonn /*
2*58e0166aSJonas Bonn  * OpenRISC Linux
3*58e0166aSJonas Bonn  *
4*58e0166aSJonas Bonn  * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
5*58e0166aSJonas Bonn  *
6*58e0166aSJonas Bonn  * This program is free software; you can redistribute it and/or modify
7*58e0166aSJonas Bonn  * it under the terms of the GNU General Public License as published by
8*58e0166aSJonas Bonn  * the Free Software Foundation; either version 2 of the License, or
9*58e0166aSJonas Bonn  * (at your option) any later version.
10*58e0166aSJonas Bonn  */
11*58e0166aSJonas Bonn 
12*58e0166aSJonas Bonn #ifndef __ASM_OPENRISC_FLS_H
13*58e0166aSJonas Bonn #define __ASM_OPENRISC_FLS_H
14*58e0166aSJonas Bonn 
15*58e0166aSJonas Bonn 
16*58e0166aSJonas Bonn #ifdef CONFIG_OPENRISC_HAVE_INST_FL1
17*58e0166aSJonas Bonn 
18*58e0166aSJonas Bonn static inline int fls(int x)
19*58e0166aSJonas Bonn {
20*58e0166aSJonas Bonn 	int ret;
21*58e0166aSJonas Bonn 
22*58e0166aSJonas Bonn 	__asm__ ("l.fl1 %0,%1"
23*58e0166aSJonas Bonn 		 : "=r" (ret)
24*58e0166aSJonas Bonn 		 : "r" (x));
25*58e0166aSJonas Bonn 
26*58e0166aSJonas Bonn 	return ret;
27*58e0166aSJonas Bonn }
28*58e0166aSJonas Bonn 
29*58e0166aSJonas Bonn #else
30*58e0166aSJonas Bonn #include <asm-generic/bitops/fls.h>
31*58e0166aSJonas Bonn #endif
32*58e0166aSJonas Bonn 
33*58e0166aSJonas Bonn #endif /* __ASM_OPENRISC_FLS_H */
34