(no commit message)
authorlkcl <lkcl@web>
Mon, 28 Dec 2020 16:34:10 +0000 (16:34 +0000)
committerIkiWiki <ikiwiki.info>
Mon, 28 Dec 2020 16:34:10 +0000 (16:34 +0000)
openpower/sv/bitmanip.mdwn

index 5a1dae78c8a11e4bffa08a77278f6597476ab3d1..a5655fcc08536dac15c1f54c1080ce97be7fe532 100644 (file)
@@ -245,4 +245,38 @@ uint_xlen_t crc32c_b(uint_xlen_t rs1) { return crc32c(rs1, 8); } uint_xlen_t crc
 #if XLEN > 32
 uint_xlen_t crc32_d (uint_xlen_t rs1) { return crc32 (rs1, 64); } uint_xlen_t crc32c_d(uint_xlen_t rs1) { return crc32c(rs1, 64); } #endif
 
+```
+
+# bitmatrix
+
+```
+uint64_t bmatflip(uint64_t rs1) { uint64_t x = rs1;
+}
+x = shfl64(x, 31); x = shfl64(x, 31); x = shfl64(x, 31); return x;
+
+
+uint64_t bmatxor(uint64_t rs1, uint64_t rs2) { // transpose of rs2
+}
+uint64_t rs2t = bmatflip(rs2);
+uint8_t u[8]; // rows of rs1 uint8_t v[8]; // cols of rs2
+for (int i = 0; i < 8; i++) { u[i] = rs1 >> (i*8); v[i] = rs2t >> (i*8);
+}
+uint64_t x = 0;
+for (int i = 0; i < 64; i++) {
+}
+if (pcnt(u[i / 8] & v[i % 8]) & 1) x |= 1LL << i;
+return x;
+uint64_t bmator(uint64_t rs1, uint64_t rs2) { // transpose of rs2
+}
+uint64_t rs2t = bmatflip(rs2);
+uint8_t u[8]; // rows of rs1 uint8_t v[8]; // cols of rs2
+for (int i = 0; i < 8; i++) { u[i] = rs1 >> (i*8); v[i] = rs2t >> (i*8);
+}
+uint64_t x = 0;
+for (int i = 0; i < 64; i++) {
+}
+if ((u[i / 8] & v[i % 8]) != 0) x |= 1LL << i;
+return x;
+
+
 ```