Date By Fred
Un bureau avec des livres ouverts

... ou "vive les docs !"

Prenons par exemple le bout de code suivant :

#include <iostream>

#include <stdint.h>
int main(){
    uint64_t result63;
    uint64_t shift63=63;
    result63 = (1L<<shift63)-1;

    uint64_t result64;
    uint64_t shift64=64;
    result64 = (1L<<shift64)-1;

    uint64_t result65;
    uint64_t shift65=65;
    result65 = (1L<<shift65)-1;

    std::cout<<std::hex<<result63<<std::endl;
    std::cout<<std::hex<<result64<<std::endl;
    std::cout<<std::hex<<result65<<std::endl;
    return 0;
}

On pourrait s'attendre à avoir des masks de 63 bits, 64 bits et 1 bit, au moins sur une machine 64bits (x86-64 intel en l'occurrence)...

Or...

$ g++ toto.cpp -o toto && ./toto
7fffffffffffffff
0    (<- FAIL )
1

Je vous laisse bosser un peu, et découvrir par vous même la fourbitude de certains ingés intel (ou zoomer sur la photo pour la solution, la ref. intel est à la bonne page) !

N'empêche, on a pas compris le pourquoi de cette limitation dans l'implémentation de l'opcode concerné... Si quelqu'un a une idée, faites signe !


Comments

comments powered by Disqus