Blame view

lib/clz_ctz.c 1.3 KB
4df87bb7b   Chanho Min   lib: add weak clz...
1
2
3
4
5
6
7
8
  /*
   * lib/clz_ctz.c
   *
   * Copyright (C) 2013 Chanho Min <chanho.min@lge.com>
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
3c516cdd0   Rashika Kheria   lib/clz_ctz.c: ad...
9
10
11
   * The functions in this file aren't called directly, but are required by
   * GCC builtins such as __builtin_ctz, and therefore they can't be removed
   * despite appearing unreferenced in kernel source.
4df87bb7b   Chanho Min   lib: add weak clz...
12
13
14
15
16
17
   *
   * __c[lt]z[sd]i2 can be overridden by linking arch-specific versions.
   */
  
  #include <linux/export.h>
  #include <linux/kernel.h>
3c516cdd0   Rashika Kheria   lib/clz_ctz.c: ad...
18
  int __weak __ctzsi2(int val);
4df87bb7b   Chanho Min   lib: add weak clz...
19
20
21
22
23
  int __weak __ctzsi2(int val)
  {
  	return __ffs(val);
  }
  EXPORT_SYMBOL(__ctzsi2);
3c516cdd0   Rashika Kheria   lib/clz_ctz.c: ad...
24
  int __weak __clzsi2(int val);
4df87bb7b   Chanho Min   lib: add weak clz...
25
26
27
28
29
  int __weak __clzsi2(int val)
  {
  	return 32 - fls(val);
  }
  EXPORT_SYMBOL(__clzsi2);
3c516cdd0   Rashika Kheria   lib/clz_ctz.c: ad...
30
31
  int __weak __clzdi2(long val);
  int __weak __ctzdi2(long val);
4df87bb7b   Chanho Min   lib: add weak clz...
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
  #if BITS_PER_LONG == 32
  
  int __weak __clzdi2(long val)
  {
  	return 32 - fls((int)val);
  }
  EXPORT_SYMBOL(__clzdi2);
  
  int __weak __ctzdi2(long val)
  {
  	return __ffs((u32)val);
  }
  EXPORT_SYMBOL(__ctzdi2);
  
  #elif BITS_PER_LONG == 64
  
  int __weak __clzdi2(long val)
  {
  	return 64 - fls64((u64)val);
  }
  EXPORT_SYMBOL(__clzdi2);
  
  int __weak __ctzdi2(long val)
  {
  	return __ffs64((u64)val);
  }
  EXPORT_SYMBOL(__ctzdi2);
  
  #else
  #error BITS_PER_LONG not 32 or 64
  #endif