# [Libre-soc-isa] [Bug 937] instructions for bigint shift and prefix-code encode

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Mon Sep 26 02:48:20 BST 2022

```https://bugs.libre-soc.org/show_bug.cgi?id=937

--- Comment #4 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
(In reply to Jacob Lifshay from comment #2)

>     # shift:
>     shifted0 = [0] * (len(symbols) + 1)
>     for i in range(len(symbols)):
>         shifted0[i + 1] = u64(sym_bits[i] << (start[i] % 64))
>     shifted1 = [0] * (len(symbols) + 1)
>     for i in range(len(symbols)):
>         shifted1[i + 1] = (sym_bits[i] << (start[i] % 64)) >> 64

doubleshifts.

>     # for pedagogical purposes, not needed in final algorithm:
>     # orig_shifted0 = shifted0.copy()
>     # orig_shifted1 = shifted1.copy()
>
>     # xor prefix-sum (can't use bitwise-or because it's not invertible):
>     for i in range(len(symbols)):
>         shifted0[i + 1] ^= shifted0[i]
>     for i in range(len(symbols)):
>         shifted1[i + 1] ^= shifted1[i]

interesting. sorta making sense

>     # scatter or twin-pred:
>     out_to_in_map = [0] * (start[-1] // 64 + 1)
>     for i in range(len(start)):
>         out_to_in_map[start[i] // 64] = i

sv.svstep gets indices, grep examples for "iota".
binary incrementing numbers, turning into unary
bitmask? interesting. oh - easy. shift then or-reduction
(again).  failfirst-cmpi truncates VL to ensure
start[i] no greater than vector len.

--
You are receiving this mail because:
You are on the CC list for the bug.
```