[fpc-devel] Policy on platform-specific compiler code
J. Gareth Moreton
gareth at moreton-family.com
Fri Oct 16 10:14:31 CEST 2020
Before I go optimising the wrong thing, I have a question to ask.
What's the policy on platform-specific assembly language in the
compiler, or any code designed to run on a specific (source) platform
(and using a more generic implementation otherwise via $ifdef)? I ask
because I have a faster algorithm for "calc_divconst_magic_unsigned" in
'compiler/cgutils.pas', but it's only able to work because it can take
advantage of the x86 DIV instruction using RDX:RAX (or EDX:EAX) as a
double-wide dividend. It is somewhat faster than what currently exists
because of the lack of a loop whose iteration count is proportional to
log2(d), where d is the desired divisor (in other words, it's slower the
bigger the divisor is, whereas my algorithm is constant speed).
Speaking of "calc_divconst_magic_unsigned", exactly what is the function
doing? I'm guessing it's something akin to Newton-Raphson division, but
there's no comments on documentation explaining which algorithm is being
used (although I can appreciate what "magic_add" is just from my own
experiences). On a related note, its partner function,
"calc_divconst_magic_signed", uses 'assert' rather than an internal
error, which is a bit against the code guidelines, right?
Gareth aka. Kit
This email has been checked for viruses by Avast antivirus software.
More information about the fpc-devel