A la limite un bricolage de ce goût doit permettre une manipulation simple, qui sans être au sommet de l'efficacité (surtout le test en fait), a l'avantage d'être clair même sans utiliser d'opérateurs.
static inline void setbit(long & val, int bit) {
__asm__ (
"bset %2,%0"
: "=d" (val)
: "0" (val), "i,d" (bit)
: "cc"
);
}
static inline void clearbit(long & val, int bit) {
__asm__ (
"bclr %2,%0"
: "=d" (val)
: "0" (val), "i,d" (bit)
: "cc"
);
}
static inline char testbit(long val, int bit) {
char result;
__asm__ (
"btst %2,%1\n"
"sne %0"
: "=d" (result)
: "d,m" (val), "i,d" (bit)
: "cc"
);
return result;
}
Je me demande d'ailleurs si tigcc sait optimiser tout seul quelque chose comme x | (1 << fonction()). Si la réponse est non, les fonctions ci-dessus peuvent même avoir une réelle utilité.
(note : j'ai écrit ça parce que je m'emmerdais quelques minutes au boulot - c'est pas testé rien)