1217309Snwhitehorn// SPDX-License-Identifier: LGPL-2.1
2217309Snwhitehorn// Definitions taken from glibc for use with older systems, same licensing.
3217309Snwhitehorn#ifndef _CPU_SET_SCHED_PERF_H
4217309Snwhitehorn#define _CPU_SET_SCHED_PERF_H
5217309Snwhitehorn
6217309Snwhitehorn#include <features.h>
7217309Snwhitehorn#include <sched.h>
8217309Snwhitehorn
9217309Snwhitehorn#ifndef CPU_EQUAL
10217309Snwhitehorn#ifndef __CPU_EQUAL_S
11217309Snwhitehorn#if __GNUC_PREREQ (2, 91)
12217309Snwhitehorn# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
13217309Snwhitehorn  (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0)
14217309Snwhitehorn#else
15217309Snwhitehorn# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \
16217309Snwhitehorn  (__extension__							      \
17217309Snwhitehorn   ({ const __cpu_mask *__arr1 = (cpusetp1)->__bits;			      \
18217309Snwhitehorn      const __cpu_mask *__arr2 = (cpusetp2)->__bits;			      \
19217309Snwhitehorn      size_t __imax = (setsize) / sizeof (__cpu_mask);			      \
20217309Snwhitehorn      size_t __i;							      \
21217309Snwhitehorn      for (__i = 0; __i < __imax; ++__i)				      \
22217309Snwhitehorn	if (__arr1[__i] != __arr2[__i])					      \
23217309Snwhitehorn	  break;							      \
24217309Snwhitehorn      __i == __imax; }))
25217309Snwhitehorn#endif
26217309Snwhitehorn#endif // __CPU_EQUAL_S
27217309Snwhitehorn
28217309Snwhitehorn#define CPU_EQUAL(cpusetp1, cpusetp2) \
29217309Snwhitehorn  __CPU_EQUAL_S (sizeof (cpu_set_t), cpusetp1, cpusetp2)
30217309Snwhitehorn#endif // CPU_EQUAL
31217309Snwhitehorn
32217309Snwhitehorn#ifndef CPU_OR
33217309Snwhitehorn#ifndef __CPU_OP_S
34217309Snwhitehorn#define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \
35217309Snwhitehorn  (__extension__							      \
36217309Snwhitehorn   ({ cpu_set_t *__dest = (destset);					      \
37217309Snwhitehorn      const __cpu_mask *__arr1 = (srcset1)->__bits;			      \
38217309Snwhitehorn      const __cpu_mask *__arr2 = (srcset2)->__bits;			      \
39217309Snwhitehorn      size_t __imax = (setsize) / sizeof (__cpu_mask);			      \
40217309Snwhitehorn      size_t __i;							      \
41217309Snwhitehorn      for (__i = 0; __i < __imax; ++__i)				      \
42217309Snwhitehorn	((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i];    \
43217309Snwhitehorn      __dest; }))
44217309Snwhitehorn#endif // __CPU_OP_S
45217309Snwhitehorn
46#define CPU_OR(destset, srcset1, srcset2) \
47  __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, |)
48#endif // CPU_OR
49
50#endif // _CPU_SET_SCHED_PERF_H
51