It's time to do some work on you're compiler. It generates the same code it did 20 years ago. I have to do tricks, instead of writing normal portable code, to get it to generate good code or just use inline assembler. This of course is nothing new, I've been telling you this for almost a decade. Keep in mind that all Intel processors are little endian and that you're compiler generates big endian code, why? You should at least offer a compiler switch to select endianness. Why don't you support C++ and MISRA? Oh and BTW IAR does all of the above TODAY! So clearly they haven't been standing still. (Notice who wrote the paper.)
www.eetimes.com/.../The-Inefficiency-of-C--Fact-or-Fiction-
evidently the OP prefer Picasso to DaVinci
There is, today, a tendency to abstract everything so far that the processor becomes irrelevant.
While that, indeed, may be a reasonable approach for very powerful processors (see PS) it will never be so for the small 8 bitters.
Erik
PS do you realize that much of the software (written before 'abstraction') that ran on your old 10MHz XA actually ran faster than the 'abstracted' one running on your 2GHz machine.