, ,
, . , gcc , enter ( , push rbp/mov rbp, rsp/sub rsp, some_constant ).
/ , xlat loop, , , gcc -Os , . (clang -Oz , IDK, - loop.)
, , gcc , wrmsr. intrinsics (__builtin_...) rdtsc cpuid, "".
x86, GCC ?
gcc. GCC , . ( , , - "" .)
gcc-internals.
x86 (, HTML- . x86 tag wiki) , . , gcc .
. movsx ( ),
long long foo(int x) { return x; }
gcc -O3 ( Godbolt)
movsx rax, edi
ret
cdqe (aka cltq AT & T) rax, gcc eax ( lea).
long long bar(unsigned x) { return (int)(x+1); }
lea eax, [rdi+1]
cdqe
ret
# clang chooses inc edi / movsxd rax, edi
. Matt Godbolt CppCon2017 talk: ? strong > "" GCC/clang?.
, gcc . () ++. shifts/OR, gcc .
C , (, popcnt, / ), - . gcc clang popcnt -mpopcnt (, , -march=haswell), . , . __builtin_popcount(), popcnt, , . _mm_popcnt_u64 is popcnt : , .
, , , x86 !
( , gcc , inline rep cmpsb , , . rep movs/rep stos " " . , gcc lods "" rep.)