[Libre-soc-bugs] [Bug 550] binutils support needed for svp64

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Sat Jan 8 15:34:58 GMT 2022


https://bugs.libre-soc.org/show_bug.cgi?id=550

--- Comment #69 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
(In reply to dmitry.selyutin from comment #68)

> OK, so we both agree that there must be at least _some_ array, even if this
> array contains only uint64_t (I doubt, though: there must be at least
> something which binds svp64 entry and ppc opcode, be it instruction name or
> opcode itself).

errr oh yes, you're right: instruction name (as an ascii string) followed
by uint64_t.  doh.

> > there should not be a list of 10,000 entries like in binutils,
> > that would be insane and also tie the codegenerator to the state
> > of binutils.
> 
> 283 entries totally. :-)

fuuun

> > my thoughts here were to have an empty (0x0) value in the binutils
> > table (struct ppc_something) QTY 10,000 and, deep breath, when
> > creating the hashtable in binutils to at that
> > time *also* make a lookup for the corresponding
> > svp64 entry and fill in the empty field.
> 
> I thought of standalone hash but I think that's mostly implementation detail.

true.  my thoughts there were that the lexicographical O(N) trick during
actual creating of the ppc_something binutils hashtree would avoid the
need for a standalone hash.

and, also, avoid the CPU cycles of double hashtree lookups, which has
to be taken into consideration due to the sheer overwhelming size of
executables these days.

> > the 10000 binutils entries and the 200-or-so svp64 
> > entries are in strict alphabetical order then the LEFT JOIN
> > algorithm is O(N) because a lexicographic comparison can
> > simply increment each list index by one.
> 
> PPC entries are alphabetically ordered, inevitably, so will be ours due to
> the same rationale. :-) 

ah superb.  so yes, a LEFT-JOIN style trick relying on lexicographic order
would work.  the only thing being, names need to match without the "o"
"." and "o." on them (or, re-create those names).

> There's no comparison or sorting yet in Python, but
> yes, this is needed. Again, not sure if we need to touch existing structures
> by adding the pointer, I'd rather prefer a separate stuff to keep the code
> as decoupled as possible.

high performance in binutils is essential, and having double hashtable lookups
would likely raise legitimate complaints.

plus, by doing a LEFT-JOIN-like merge, that is only done once [and is
pretty optimal as long as the two lists are pre-sorted], whereas double
hashtable lookups are on every single instruction.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the libre-soc-bugs mailing list