The ROme OpTimistic Simulator  3.0.0
A General-Purpose Multithreaded Parallel/Distributed Simulation Platform
intrinsics.h
Go to the documentation of this file.
1 
13 #pragma once
14 
24 #define intrinsics_ctz(x) \
25 __extension__({ \
26  __builtin_choose_expr( \
27  __builtin_types_compatible_p(__typeof__ (x), unsigned), \
28  __builtin_ctz(x), \
29  __builtin_choose_expr( \
30  __builtin_types_compatible_p(__typeof__ (x), unsigned long), \
31  __builtin_ctzl(x), \
32  __builtin_choose_expr( \
33  __builtin_types_compatible_p(__typeof__ (x), unsigned long long),\
34  __builtin_ctzll(x), \
35  (void)0))); \
36 })
37 
47 #define intrinsics_clz(x) \
48 __extension__({ \
49  __builtin_choose_expr( \
50  __builtin_types_compatible_p(__typeof__ (x), unsigned), \
51  __builtin_clz(x), \
52  __builtin_choose_expr( \
53  __builtin_types_compatible_p(__typeof__ (x), unsigned long), \
54  __builtin_clzl(x), \
55  __builtin_choose_expr( \
56  __builtin_types_compatible_p(__typeof__ (x), unsigned long long),\
57  __builtin_clzll(x), \
58  (void)0))); \
59 })
60 
70 #define intrinsics_popcount(x) \
71 __extension__({ \
72  __builtin_choose_expr( \
73  __builtin_types_compatible_p(__typeof__ (x), unsigned), \
74  __builtin_popcount(x), \
75  __builtin_choose_expr( \
76  __builtin_types_compatible_p(__typeof__ (x), unsigned long), \
77  __builtin_popcountl(x), \
78  __builtin_choose_expr( \
79  __builtin_types_compatible_p(__typeof__ (x), unsigned long long),\
80  __builtin_popcountll(x), \
81  (void)0))); \
82 })
83