Am 20.05.2020 um 18:09 schrieb Christo Crause via fpc-devel:
While trying to understand bug 0037121I noticed that the predominant
search algorithm used for finding register names is a binary search
without a match check. My understanding of this algorithm is that it
will always run the maximum iterations for the search space before
terminating. To understand how this is supposed to work I looked at
other target implementations. I realized that this algorithm is used
in all but 2 cases: x86 (in itx86int.pas) which uses (what I consider
to be) a conventional binary search, and mips which uses a linear search.
I don't see a need to have different algorithms for performing what
appears to be the same function (search for a string in a sorted list
of strings), is this correct?
Then, I don't understand why the general search algorithm isn't the
one in itx86int.pas. Is there a compelling reason for preferring the
1st algorithm over the conventional binary search?
Thirdly, each target has its own implementation of findreg_by_XXXname,
is there a reason not to have a single search function shared by all
targets? This may require some renaming of current variable lists
such as gas_regname_index and int_regname_index etc. to a common
convention.
Your thoughts on these questions would be appreciated.
There is a general implementation of the search algorithm in rgbase
which is already used for example by x86/itcpugas.pas as well as
z80/cpubase.pas. So in my opinion the way to go would be to switch the
other targets (as well as x86/itx86int.pas) to use this as well.
Regards,
Sven
_______________________________________________
fpc-devel maillist - [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel