> Function calls aren't that expensive. They are becoming more> expensive nowadays, because of the cost of cache misses on processors> with horrendously long pipelines and superscalar execution and all> that stuff.

I'm not sure that is correct. Many CPUs have hidden internal return
stacks coupled to their branch prediction so function calls/returns most
often don't require stalls/pipeline flushes. For trace caches, the
calls/returns could possibly be squashed completely out of the stored
trace.