If you ask me, ISO/IEC 18037 is close to useless (at least, if it's the document which is also known as WG14 N1021).
- the fractional types are nice, but inconsistent. Why should a 'short fract' have fewer bits than 'short int'?
- named address spaces: wouldn't it be much more useful to define a general mechanism to place things in sections? This would also help Unix people.
- it still doesn't have a useful C-to-asm interface. The most useful interface I've seen so far is gcc's.
Hence, what I've seen implemented so far all looks a little different. Fortunately, they implement gcc's asm extensions, at least partially :-)
What optimization could be applicable to a piece of code which initializes few registers and then jumps to a label?
A question that comes up for me is: if I write 'SP = expression', can I use a complex expression? What if the compiler decides it needs to spill some temporaries onto the stack? (and what if it does that only under specific circumstances, like a special set of runtime checks enabled? During my still short life, I've already seen quite some code that breaks even if you turn on optimisation, because suddenly the compiler notices that the delay loops actually don't do anything.)
Hence if I want a specific assembler sequence in the program, I write it in assembler. Startup code is one such case. And, hey, those three instructions won't kill you. But of course, I'll try to get into the high-level language as fast as possible. Actually, my current boot loader (final code size somewhere below 2k) even contains some C++ modules :-) But its tight main loop (decompression+decryption) would probably have been impossible to write in a compiled language.
Stefan