Using the -O2 (the default) switch does several optimizations in the code produced, the most notable being:
Sign extension from byte to long will use EXTB.
Returning of functions will use RTD.
Range checking will generate no run-time calls.
Multiplication will use the long MULS instruction, no runtime library call will be generated.
Division will use the long DIVS instruction, no runtime library call will be generated.