157Fermer159
spectrasLe 12/09/2007 à 15:47
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)