(no commit message)
authorlkcl <lkcl@web>
Tue, 26 Jan 2021 04:16:35 +0000 (04:16 +0000)
committerIkiWiki <ikiwiki.info>
Tue, 26 Jan 2021 04:16:35 +0000 (04:16 +0000)
openpower/sv/bitmanip.mdwn

index 6ba7fa24c959aaca957c469c7dc13250f83df899..0138f9e568afbf0caf46b455634cbed277458569 100644 (file)
@@ -492,6 +492,40 @@ if __name__ == "__main__":
     print("{:02x}".format(multGF2(0b10000000, 0b10000011)))
 ```
 
+gf invert
+
+```
+def gf_degree(a) :
+  res = 0
+  a >>= 1
+  while (a != 0) :
+    a >>= 1;
+    res += 1;
+  return res
+
+def gf_invert(a, mod=0x1B) :
+  v = mod
+  g1 = 1
+  g2 = 0
+  j = gf_degree(a) - 8
+
+  while (a != 1) :
+    if (j < 0) :
+      a, v = v, a
+      g1, g2 = g2, g1
+      j = -j
+
+    a ^= v << j
+    g1 ^= g2 << j
+
+    a %= 256  # Emulating 8-bit overflow
+    g1 %= 256 # Emulating 8-bit overflow
+
+    j = gf_degree(a) - gf_degree(v)
+
+  return g1
+```
+
 # crc
 
 * <https://stackoverflow.com/questions/21171733/calculating-constants-for-crc32-using-pclmulqdq>