Thanks for the explanation everyone. I suppose it was my fault for interpreting "have to" as an absolute requirement rather than a preferred method.
[1] inlining, calls to static functions and whole program optimization do give the compilers freedom to pick a different calling convention of course.