rename bitmanip_inlines -> bitmanip
authorJacob Lifshay <programmerjake@gmail.com>
Tue, 15 Mar 2022 05:11:13 +0000 (22:11 -0700)
committerJacob Lifshay <programmerjake@gmail.com>
Tue, 15 Mar 2022 05:11:13 +0000 (22:11 -0700)
openpower/sv/bitmanip.mdwn
openpower/sv/bitmanip/cldivrem.py [new file with mode: 0644]
openpower/sv/bitmanip_inlines/cldivrem.py [deleted file]

index d5a059dbb28202321ecc4c2d6230de5bec748083..1f8a21b6ca8c1d83b3205b9bd9302f71f1273e6d 100644 (file)
@@ -632,7 +632,7 @@ temp = clmul((RA), (RB)) ^ (RC)
 `cldivrem` isn't an actual instruction, but is just used in the pseudo-code
 for other instructions.
 
-[[!inline pagenames="openpower/sv/bitmanip_inlines/cldivrem.py" raw="true" feeds="no" actions="yes"]]
+[[!inline pagenames="openpower/sv/bitmanip/cldivrem.py" raw="true" feeds="no" actions="yes"]]
 
 ## `cldiv` Carry-less Division
 
diff --git a/openpower/sv/bitmanip/cldivrem.py b/openpower/sv/bitmanip/cldivrem.py
new file mode 100644 (file)
index 0000000..5bf49b1
--- /dev/null
@@ -0,0 +1,34 @@
+def cldivrem(n, d, width):
+    """ Carry-less Division and Remainder.
+        `n` and `d` are integers, `width` is the number of bits needed to hold
+        each input/output.
+        Returns a tuple `q, r` of the quotient and remainder.
+    """
+    assert d != 0, "TODO: decide what happens on division by zero"
+    assert 0 <= n < 1 << width, f"bad n (doesn't fit in {width}-bit uint)"
+    assert 0 <= d < 1 << width, f"bad d (doesn't fit in {width}-bit uint)"
+    r = n
+    q = 0
+    r_shift = 0
+    d_shift = 0
+    msb = 1 << (width - 1)
+    for _ in range(width):
+        if r & msb:
+            if d & msb:
+                r ^= d
+                q |= 1
+            else:
+                d <<= 1
+                d_shift += 1
+        else:
+            if d & msb:
+                r <<= 1
+                q <<= 1
+                r_shift += 1
+            else:
+                r <<= 1
+                r_shift += 1
+                d <<= 1
+                d_shift += 1
+    r >>= r_shift
+    return q, r
diff --git a/openpower/sv/bitmanip_inlines/cldivrem.py b/openpower/sv/bitmanip_inlines/cldivrem.py
deleted file mode 100644 (file)
index 5bf49b1..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-def cldivrem(n, d, width):
-    """ Carry-less Division and Remainder.
-        `n` and `d` are integers, `width` is the number of bits needed to hold
-        each input/output.
-        Returns a tuple `q, r` of the quotient and remainder.
-    """
-    assert d != 0, "TODO: decide what happens on division by zero"
-    assert 0 <= n < 1 << width, f"bad n (doesn't fit in {width}-bit uint)"
-    assert 0 <= d < 1 << width, f"bad d (doesn't fit in {width}-bit uint)"
-    r = n
-    q = 0
-    r_shift = 0
-    d_shift = 0
-    msb = 1 << (width - 1)
-    for _ in range(width):
-        if r & msb:
-            if d & msb:
-                r ^= d
-                q |= 1
-            else:
-                d <<= 1
-                d_shift += 1
-        else:
-            if d & msb:
-                r <<= 1
-                q <<= 1
-                r_shift += 1
-            else:
-                r <<= 1
-                r_shift += 1
-                d <<= 1
-                d_shift += 1
-    r >>= r_shift
-    return q, r