On 4/5/2006 at 12:03 PM Don Y wrote:
Most modern compilers for "big" machines.
But yes, I
do miss having access to the carry bit, but the level of
code
> I'm writing nowadays has made that less of an issue.
Some machine don't have a carry bit, so there's nothing to access.
IMOHO, the biggest problem with HLL's versus assembly is when an
architecture provides for a very useful instruction, but said instruction
doesn't exactly fit into the language. For example, the MMX instrtuctions
on the Pentium aren't terribly accessible from most Cs. So they're
implemented as intrinsics at best--and at that point, you might as well be
writing assembly.
On the other hand, HLLs are very useful for automatically selecting
instructions and optimizing them. I don't know what real-world gains are
made by realing the gain from the fact that LOOP is slower on a 486 than a
DEC CX, JNZ pair, but it's nice not to have to code for it. On the other
hand, few C compilers can generate parallel versions of the same subroutine
and say "If I'm running on machne that supports <fill in the blank
feature>, I'll just use the other version. I've got lots of x86 assembly
code that does just that when its determined that MMX is present or 386+
(32 bit registers) is available. The speed improvements in some cases can
be substantial.
One pleasure of a good optimizer is clever removal of invariants from the
inside of a loop. It allows one to write what one means without worrying
that the implementation is inefficient.
Does anyone know of any optimizing assemblers ? That is, ones that will
move instructions around for optimum scheduling?
Cheers,
Chuck