What is this benchmark testing? It is testing the C-compiler generated code. It does not test the libraries.
With games the point is clear. The reason why z88dk is almost exclusively used for games written in C is because it has an asm sprite library in it. If you wrote this library in C, it would be maybe four times slower or more. If the game operated at, say, 17 frames per second then under a C-equivalent it might operate at 4 frames per second which would be unacceptable.
In other words, the asm library is required. With that asm library in place, most execution time is spent in the fast asm and the slow C code is only used for the logic. But because the slow C code is only a small portion of the game loop, it's ok to use C for that part.
The same applies to everything else. You want most execution time to be spent in asm code not the much slower C code. This can only happen if programmers use the library code and if there is a large amount of library code available for all situations.
A benchmark for small systems needs to compare speed and size based on how the compiler is used on small systems.
Asm libraries not only affect speed but also code size. Something like Fuzix is written in pure C which has one powerful advantage and one powerful disadvantage. The advantage is that Fuzix can easily be ported between different machines and processors. Right now Fuzix can be compiled for 6502, 6809 and z80 targets. The disadvantage is that the compiled C is much larger than an asm equivalent. The 40k footprint on the z80 does not leave much room for applications.
We can look at a few small bits of library code that z88dk and Fuzix have in common:
[свернуть]