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

Reply via email to