From: lkcl Date: Mon, 28 Dec 2020 16:34:10 +0000 (+0000) Subject: (no commit message) X-Git-Tag: convert-csv-opcode-to-binary~756 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b39cfbc6dca1acc5d43486e8d65e04b1829150ff;p=libreriscv.git --- diff --git a/openpower/sv/bitmanip.mdwn b/openpower/sv/bitmanip.mdwn index 5a1dae78c..a5655fcc0 100644 --- a/openpower/sv/bitmanip.mdwn +++ b/openpower/sv/bitmanip.mdwn @@ -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; + + ```