1 /* Copyright (C) 2007 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, write to the Free
16 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
24 __sched_cpucount (size_t setsize
, cpu_set_t
*setp
)
27 for (unsigned int j
= 0; j
< setsize
/ sizeof (__cpu_mask
); ++j
)
29 __cpu_mask l
= setp
->__bits
[j
];
34 l
= (l
& 0x5555555555555555ul
) + ((l
>> 1) & 0x5555555555555555ul
);
35 l
= (l
& 0x3333333333333333ul
) + ((l
>> 2) & 0x3333333333333333ul
);
36 l
= (l
& 0x0f0f0f0f0f0f0f0ful
) + ((l
>> 4) & 0x0f0f0f0f0f0f0f0ful
);
37 l
= (l
& 0x00ff00ff00ff00fful
) + ((l
>> 8) & 0x00ff00ff00ff00fful
);
38 l
= (l
& 0x0000ffff0000fffful
) + ((l
>> 16) & 0x0000ffff0000fffful
);
39 l
= (l
& 0x00000000fffffffful
) + ((l
>> 32) & 0x00000000fffffffful
);
41 l
= (l
& 0x55555555ul
) + ((l
>> 1) & 0x55555555ul
);
42 l
= (l
& 0x33333333ul
) + ((l
>> 2) & 0x33333333ul
);
43 l
= (l
& 0x0f0f0f0ful
) + ((l
>> 4) & 0x0f0f0f0ful
);
44 l
= (l
& 0x00ff00fful
) + ((l
>> 8) & 0x00ff00fful
);
45 l
= (l
& 0x0000fffful
) + ((l
>> 16) & 0x0000fffful
);