[fpc-devel] inline... and philosophy
J. Gareth Moreton
gareth at moreton-family.com
Sat Nov 9 16:17:05 CET 2019
On 09/11/2019 13:46, Michael Van Canneyt wrote:
> It's never enough:
> http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
>
> Michael.
That level of byte-counting is just plain insanity, even for me! Still,
when it comes to byte-counting, I did do something similar in my first
ever patch for FPC, which was to look for things like "MOV RAX,
4000000000" and replace them with "MOV EAX, 4000000000" to shave off 5
bytes each time (4 bytes if the register is R8-R15 due to the REX
prefix). It actually cut the FPC executable down by about 50 kilobytes
overall. This optimisation works because if you set a 32-bit register
to a particular value, the upper 32 bits are guaranteed to be set to
zero (obviously this only works with values that are less than 2^32).
In regards to small executables though, I remember back in the mid-90s,
I came across a file on a floppy disk named "RESTART.COM". Now, COM
files (don't confuse with the Component Object Model) are super-simple
executables, pretty much containing only machine code with no sections
or headers beyond a signature or two. It was designed to be run from a
batch file and its function was to restart the computer (I think it
called a particular interrupt). The file was something like 28 bytes in
size, if that.
One thing to note though is that going THAT small with an executable is
wasted effort unless you're just trying to show off. Why? The cluster
size on a 1.44 MB floppy disk is 512 bytes, so even if RESTART.COM was
only 28 bytes in size, it took 512 bytes of disk space. Similar issues
occur with hard drive partitions, although the cluster size I believe is
4 KB in most cases.
Gareth aka. Kit
More information about the fpc-devel
mailing list