#define _SIG_SET_BINOP(name, op) \
static inline void name(sigset_t *r, const sigset_t *a, const sigset_t *b) \
{ \
+ extern void _NSIG_WORDS_is_unsupported_size(void); \
unsigned long a0, a1, a2, a3, b0, b1, b2, b3; \
- unsigned long i; \
\
- for (i = 0; i < _NSIG_WORDS/4; ++i) { \
- a0 = a->sig[4*i+0]; a1 = a->sig[4*i+1]; \
- a2 = a->sig[4*i+2]; a3 = a->sig[4*i+3]; \
- b0 = b->sig[4*i+0]; b1 = b->sig[4*i+1]; \
- b2 = b->sig[4*i+2]; b3 = b->sig[4*i+3]; \
- r->sig[4*i+0] = op(a0, b0); \
- r->sig[4*i+1] = op(a1, b1); \
- r->sig[4*i+2] = op(a2, b2); \
- r->sig[4*i+3] = op(a3, b3); \
- } \
- switch (_NSIG_WORDS % 4) { \
- case 3: \
- a0 = a->sig[4*i+0]; a1 = a->sig[4*i+1]; a2 = a->sig[4*i+2]; \
- b0 = b->sig[4*i+0]; b1 = b->sig[4*i+1]; b2 = b->sig[4*i+2]; \
- r->sig[4*i+0] = op(a0, b0); \
- r->sig[4*i+1] = op(a1, b1); \
- r->sig[4*i+2] = op(a2, b2); \
- break; \
+ switch (_NSIG_WORDS) { \
+ case 4: \
+ a3 = a->sig[3]; a2 = a->sig[2]; \
+ b3 = b->sig[3]; b2 = b->sig[2]; \
+ r->sig[3] = op(a3, b3); \
+ r->sig[2] = op(a2, b2); \
case 2: \
- a0 = a->sig[4*i+0]; a1 = a->sig[4*i+1]; \
- b0 = b->sig[4*i+0]; b1 = b->sig[4*i+1]; \
- r->sig[4*i+0] = op(a0, b0); \
- r->sig[4*i+1] = op(a1, b1); \
- break; \
+ a1 = a->sig[1]; b1 = b->sig[1]; \
+ r->sig[1] = op(a1, b1); \
case 1: \
- a0 = a->sig[4*i+0]; b0 = b->sig[4*i+0]; \
- r->sig[4*i+0] = op(a0, b0); \
+ a0 = a->sig[0]; b0 = b->sig[0]; \
+ r->sig[0] = op(a0, b0); \
break; \
+ default: \
+ _NSIG_WORDS_is_unsupported_size(); \
} \
}
#define _SIG_SET_OP(name, op) \
static inline void name(sigset_t *set) \
{ \
- unsigned long i; \
+ extern void _NSIG_WORDS_is_unsupported_size(void); \
\
- for (i = 0; i < _NSIG_WORDS/4; ++i) { \
- set->sig[4*i+0] = op(set->sig[4*i+0]); \
- set->sig[4*i+1] = op(set->sig[4*i+1]); \
- set->sig[4*i+2] = op(set->sig[4*i+2]); \
- set->sig[4*i+3] = op(set->sig[4*i+3]); \
- } \
- switch (_NSIG_WORDS % 4) { \
- case 3: set->sig[4*i+2] = op(set->sig[4*i+2]); \
- case 2: set->sig[4*i+1] = op(set->sig[4*i+1]); \
- case 1: set->sig[4*i+0] = op(set->sig[4*i+0]); \
+ switch (_NSIG_WORDS) { \
+ case 4: set->sig[3] = op(set->sig[3]); \
+ set->sig[2] = op(set->sig[2]); \
+ case 2: set->sig[1] = op(set->sig[1]); \
+ case 1: set->sig[0] = op(set->sig[0]); \
+ break; \
+ default: \
+ _NSIG_WORDS_is_unsupported_size(); \
} \
}