Frage zu einigen Intrinsics beim VS 2010 C++ (__ull_rshift)



  • Hallo, ich habe in der Dokumentation vom VS 2010 C+ folgende Intrinsic Funktion gesehen:

    unsigned __int64 __ull_rshift( 
       unsigned __int64 mask,  
       int nBit 
    );
    /*
       on x64, shifts a 64-bit value specified by the first parameter to the right by a number of bits specified by the second parameter.
    */
    

    Warum braucht man dafür ein intrinsic? Sollte folgender Code nicht den exakt gleichen Code erzeugen, da es sich um eine low/bit-level funktion handelt?

    unsigned __int64 mask;
    mask >> n;
    

    Was könnte die intrinsic daran noch optimieren?



  • Im Prinzip ist das egal.



  • Wenn der "nBit" Wert größer als die Bitanzahl ist (also 32 bei x86 und 64 bei x64), so wird *keine* Warnung erzeugt sondern der Wert wird "Modulo" 32 bzw. 64 genommen.


Anmelden zum Antworten