What am I missing?
This doesn't take many cycles, but it does take some. While a GOTO is just a jump.
In GCC/MSVC will only (attempt to) inline what you mark as inline. Then MSVC has a keyword which forces inlining. Unless you set a flag which tells the compiler to inline what ever it wants. But that being said Microsoft has a non-POSIX x64 ABI designed to allow better in-lining.
How inlining works starts to dive pretty deep into the compiler rabbit hole.
[0]: https://gcc.gnu.org/onlinedocs/gcc/Inline.html [1]: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
Interprocedural register allocation can work better than inlining too, because it keeps the code size smaller, and direct calls have almost no speed penalty.
(If you want to be glib, complain about misplaced FP perhaps?)
Not sure why.
But might be something related, eg like they are talking about a state machine in the description somewhere, and give at most one return per state, or something like that?