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.