[Libre-soc-isa] [Bug 1056] questions and feedback (v2) on OPF RFC ls010
bugzilla-daemon at libre-soc.org
bugzilla-daemon at libre-soc.org
Thu May 25 13:26:42 BST 2023
https://bugs.libre-soc.org/show_bug.cgi?id=1056
--- Comment #12 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
(In reply to Paul Mackerras from comment #5)
> "SVP64 encoding features" section:
>
> At this point, what readers need to understand is the following:
>
> * SVP64 instructions are always prefixed (64 bit) instructions.
there aren't any SVP64 instructions. there *really is* only
"32-bit Prefix followed by any Scalar 32-bit instruction".
it is absolutely prohibited to Prefix an UNDEFINED 32-bit word,
and it is absolutely prohibited to assume that just because
any given UNDEFINED 32-bit word has a prefix in front of it,
it can be ALLOCATED a new meaning.
i go over this in more detail here:
https://libre-soc.org/openpower/sv/rfc/ls001/
"Example Legal Encodings and RESERVED spaces"
> * The prefix word controls various aspects of the vectorisation, and is
> defined below in this section.
> * The suffix word is either a defined word instruction,
it is *always* a Defined-word-instruction, where that DWI **MUST**
have the exact same definition as if it had no prefix at all
(caveat: bar the niggles on elwidth).
i.e.: all operands MUST NOT change meaning, just because of prefixing
let us take addi as an example (because of paddi)
See Public v3.1 I 3.3.9 p76
here is the operands:
addi:
DWI : PO=14 RT RA SI
paddi:
Prefix: PO=1 R si0
Suffix: PO=14 RT RA si1
here is the RTL:
if “addi” then
RT ← (RA|0) + EXTS64(SI)
if “paddi” & R=0 then
RT ← (RA|0) + EXTS64(si0||si1)
if “paddi” & R=1 then
RT ← CIA + EXTS64(si0||si1)
what ABSOLUTELY MUST NOT HAPPEN is:
else if “sv.addi” then
RT ← 55 * (RA|0) + EXTS64(SI) << 5 + 99
and even more insane and damaging:
else if “sv.addi” then # actually redefined as multiply
RT ← (RA|0) * EXTS64(SOME_TOTALLY_DIFFERENT_OPERAND)
it should not really even be necessary to put this into the addi spec:
SVPrefix: PO=9 (24-bit RM)
Suffix : PO=14 (RT RA SI)
why not? *because there is no change*: it is prohibited!
think about it. if it was allowed, then even the spec goes
haywire. pages and pages of:
addi: {PO14} DWI addi
DWI : PO=14 (RT RA SI)
paddi: uses {PO1-PO14} but still "addi" (in effect)
Prefix: PO=1 ( R si0)
Suffix: PO=14 (RT RA si1)
sv.somethingelseentirely {PO9-PO14} conflicts with addi?? WTF????
SVPrefix: PO=9 (then 24-bit RM)
Suffix : PO=14 (RT RA differentoperand) XYZ99-Form
total nightmare just from a spec-writing perspective,
as well as damaging Decode.
the only things you are "allowed" to do is to extend the reg numbers.
i do appreciate that given that PO1 does in fact "change" immediate
operands (si0 || si1), flipping from using SI to instead using
split-field si0-si1, it seems like i am freaking out, but i really
*really* don't want to hit the Power ISA Spec with 200+ changes
to the RTL and instruction definitions.
if you really really are asking for split fields to be introduced
for RT, RA, RS, RB, BA, BFA, FRS, FRC, BT (basically everything)
then i feel the entire suite - over 200 {PO9-DWI}s - should be
autogenerated.
--
You are receiving this mail because:
You are on the CC list for the bug.
More information about the Libre-SOC-ISA
mailing list