[Libre-soc-bugs] [Bug 755] add grev instruction (OP_GREV)
bugzilla-daemon at libre-soc.org
bugzilla-daemon at libre-soc.org
Tue Jan 18 12:36:04 GMT 2022
https://bugs.libre-soc.org/show_bug.cgi?id=755
--- Comment #25 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
(In reply to Jacob Lifshay from comment #24)
> Added grev to BitManipTestCase, also had to spend a bunch of time fixing
> bugs in the pseudo-code and working around bugs in the simulator...
you've accidentally requested RC in the CSV file for this instruction,
which inherently and automatically requests OE as well. that's a bug
in the CSV file, not the simulator.
> (I don't
> want to spend the time right now to solve #765).
that should be closed as INVALID.
> I added a log2 helper function .. I figured that's probably fine
it isn't. anything that's added requires a formal discussion and
to go through an OpenPOWER ISA Working Group Request For Change (RFC)
process.
> because I
> designed it to assert if the input isn't an integer power of 2, so its
> function is basically always totally obvious imho.
"obvious" is not a criteria that will satisfy the OPF ISA WG. they have
a defined set of procedures and processes that have to be gone through,
including but not limited to providing the text that is to go into the
Power ISA Specification.
> It's needed so I can
> properly index into a field where I need the lsb log2(XLEN) or log2(XLEN/2)
> bits,
in this particular case, because it is log2 of a constant that is already
pre-defined, there is an alternative: define a constant XLENLOG2 and
XLEN2LOG2.
this should go into the bugreport discussing and formally proposing
adding log2 as an alternative, so that if there is a decision on it
the reasons are fully available and can be placed directly into the RFC.
> and OpenPower *loves* MSB0, making it extra annoying:
>
> just look at this mess:
> grevw's pseudo-code:
> result <- [0] * (XLEN / 2)
> a <- (RA)[XLEN/2:XLEN-1]
> b <- EXTZ64(RB)
> do i = 0 to XLEN / 2 - 1
> idx <- b[64-log2(XLEN/2):63] ^ i
> result[i] <- a[idx]
> RT <- ([0] * (XLEN / 2)) || result
yyep. looks fairly annoyingly normal. can i suggest instead
a <- (RA)[XLEN/2:XLEN-1]
b <- (RB)[64-log2(XLEN/2):XLEN-1]
and then:
idx <- b ^ i
--
You are receiving this mail because:
You are on the CC list for the bug.
More information about the libre-soc-bugs
mailing list