(no commit message)
authorlkcl <lkcl@web>
Sun, 15 May 2022 16:14:14 +0000 (17:14 +0100)
committerIkiWiki <ikiwiki.info>
Sun, 15 May 2022 16:14:14 +0000 (17:14 +0100)
openpower/sv/bitmanip.mdwn

index 52b70aecac3164d7690a6a423362871f7c477a71..a6b421f71aedd1b2e177be234933e5dc489b7327 100644 (file)
@@ -261,6 +261,25 @@ uint_xlen_t intabs(uint_xlen_t rs1, uint_xlen_t rs2) {
 }
 ```
 
+## abs-accumulate
+
+required for the [[sv/av_opcodes]], these are needed for motion estimation.
+both are overwrite on RS.
+
+```
+uint_xlen_t uintabsacc(uint_xlen_t rs, uint_xlen_t ra, uint_xlen_t rb) {
+     return rs + (src1 > src2) ? (src1-src2) : (src2-src1)
+}
+uint_xlen_t intabsacc(uint_xlen_t rs, int_xlen_t ra, int_xlen_t rb) {
+     return rs + (src1 > src2) ? (src1-src2) : (src2-src1)
+}
+```
+
+For SVP64 these use EXTRA2 and allow Twin Elwidths. The reason is so
+that the Register used as an Accumulator (RS) may have its own
+Element Width Override. This allows e.g. a 16 bit accumulator for 8 bit
+differences.
+
 # shift-and-add
 
 Power ISA is missing LD/ST with shift, which is present in both ARM and x86.