[fpc-devel] Different versions of register name search algorithms used
pascaldragon at googlemail.com
Thu May 21 17:22:00 CEST 2020
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
> 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.
More information about the fpc-devel