I have the following code:
#include <x86intrin.h>
int main() {
    return __rdtsc();
}
And I tried to compile on my machine (Intel i7-6700 CPU) and objdump
g++ -Wall test_tsc.cpp -o test_tsc -march=native -mtune=native -O0 -std=c++20
objdump -M intel -d test_tsc > test_tsc.O0
Then in test_tsc.O0:
0000000000401122 <main>:
  401122:   55                      push   rbp
  401123:   48 89 e5                mov    rbp,rsp
  401126:   0f 31                   rdtsc  
  401128:   48 c1 e2 20             shl    rdx,0x20
  40112c:   48 09 d0                or     rax,rdx
  40112f:   90                      nop
  401130:   5d                      pop    rbp
  401131:   c3                      ret    
  401132:   66 2e 0f 1f 84 00 00    nop    WORD PTR cs:[rax+rax*1+0x0]
  401139:   00 00 00 
  40113c:   0f 1f 40 00             nop    DWORD PTR [rax+0x0]
What do push   rbp and mov    rbp,rsp do?  It seems like they were for saving the stack pointer but then there isn't really a function call.  If g++ consider __rdtsc() a function call, then would there be something like call afterward?
Thanks.
