From: lkcl Date: Sun, 26 Jun 2022 18:36:08 +0000 (+0100) Subject: (no commit message) X-Git-Tag: opf_rfc_ls005_v1~1510 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1fe5b2fd446f66691eb4c24db11bb704cfae1fd7;p=libreriscv.git --- diff --git a/openpower/sv/svp64/appendix.mdwn b/openpower/sv/svp64/appendix.mdwn index fbc3f1e83..9c7ab862c 100644 --- a/openpower/sv/svp64/appendix.mdwn +++ b/openpower/sv/svp64/appendix.mdwn @@ -262,6 +262,49 @@ The following schedule for srcstep and dststep will occur: Here, both srcstep and dststep remain in lockstep because sz=dz=1 +# Twin Predication + +This is a novel concept that allows predication to be applied to a single +source and a single dest register. The following types of traditional +Vector operations may be encoded with it, *without requiring explicit +opcodes to do so* + +* VSPLAT (a single scalar distributed across a vector) +* VEXTRACT (like LLVM IR [`extractelement`](https://releases.llvm.org/11.0.0/docs/LangRef.html#extractelement-instruction)) +* VINSERT (like LLVM IR [`insertelement`](https://releases.llvm.org/11.0.0/docs/LangRef.html#insertelement-instruction)) +* VCOMPRESS (like LLVM IR [`llvm.masked.compressstore.*`](https://releases.llvm.org/11.0.0/docs/LangRef.html#llvm-masked-compressstore-intrinsics)) +* VEXPAND (like LLVM IR [`llvm.masked.expandload.*`](https://releases.llvm.org/11.0.0/docs/LangRef.html#llvm-masked-expandload-intrinsics)) + +Those patterns (and more) may be applied to: + +* mv (the usual way that V\* ISA operations are created) +* exts\* sign-extension +* rwlinm and other RS-RA shift operations (**note**: excluding + those that take RA as both a src and dest. These are not + 1-src 1-dest, they are 2-src, 1-dest) +* LD and ST (treating AGEN as one source) +* FP fclass, fsgn, fneg, fabs, fcvt, frecip, fsqrt etc. +* Condition Register ops mfcr, mtcr and other similar + +This is a huge list that creates extremely powerful combinations, +particularly given that one of the predicate options is `(1< - -This is a novel concept that allows predication to be applied to a single -source and a single dest register. The following types of traditional -Vector operations may be encoded with it, *without requiring explicit -opcodes to do so* - -* VSPLAT (a single scalar distributed across a vector) -* VEXTRACT (like LLVM IR [`extractelement`](https://releases.llvm.org/11.0.0/docs/LangRef.html#extractelement-instruction)) -* VINSERT (like LLVM IR [`insertelement`](https://releases.llvm.org/11.0.0/docs/LangRef.html#insertelement-instruction)) -* VCOMPRESS (like LLVM IR [`llvm.masked.compressstore.*`](https://releases.llvm.org/11.0.0/docs/LangRef.html#llvm-masked-compressstore-intrinsics)) -* VEXPAND (like LLVM IR [`llvm.masked.expandload.*`](https://releases.llvm.org/11.0.0/docs/LangRef.html#llvm-masked-expandload-intrinsics)) - -Those patterns (and more) may be applied to: - -* mv (the usual way that V\* ISA operations are created) -* exts\* sign-extension -* rwlinm and other RS-RA shift operations (**note**: excluding - those that take RA as both a src and dest. These are not - 1-src 1-dest, they are 2-src, 1-dest) -* LD and ST (treating AGEN as one source) -* FP fclass, fsgn, fneg, fabs, fcvt, frecip, fsqrt etc. -* Condition Register ops mfcr, mtcr and other similar - -This is a huge list that creates extremely powerful combinations, -particularly given that one of the predicate options is `(1<