인텔이라면 MSC만 빼면 결국 컴파일러 최적화에 따라 대동소이한 어셈 코드가 나온다.
명시적이라면 링크에 있는 다음 코드를 쓰는 것이 좀 더 직관적이다.
#if !defined(__clang__) && (defined(__x86_64__) || defined(__i386__))
#ifdef __MSC_VER
#include <intrin.h>
#else
#include <x86intrin.h> // Not just <immintrin.h> for compilers other than icc
#endif
rotwidth_t rotl_x86_intrinsic(rotwidth_t x, unsigned n) {
//return __builtin_ia32_rorhi(x, 7); // 16-bit rotate, GNU C
return _rotl(x, n); // gcc, icc, msvc. Intel-defined. Clang doesn't have this?
//return __rold(x, n); // gcc, icc.
// can't find anything for clang?
}
#endif
비트 시프트가 생각보다 중요한 세상이 되었다.
왜?
비밀..