我想知道在任何SIMD系列指令中是否可以使用以下内容.
我有一个带有63位有效位的qword输入(从不为负).从LSB开始的每个连续7位是随机对齐到一个字节,左填充为1(除了最重要的非零字节).为了说明,为了清楚起见,我会使用字母.
结果只有有效字节,因此大小为0-9,转换为字节数组.
In: 0|kjihgfe|dcbaZYX|WVUTSRQ|PONMLKJ|IHGFEDC|BAzyxwv|utsrqpo|nmlkjih|gfedcba
Out: 0kjihgfe|1dcbaZYX|1WVUTSRQ|1PONMLKJ|1IHGFEDC|1BAzyxwv|1utsrqpo|1nmlkjih|1gfedcba
Run Code Online (Sandbox Code Playgroud)
大小= 9
In: 00|nmlkjih|gfedcba
Out: |0nmlkjih|1gfedcba
Run Code Online (Sandbox Code Playgroud)
大小= 2
我知道填充是分开的.洗牌调整是我的问题.这可能吗?
编辑2
这是我更新的代码.在单线程Core 2 Duo 2 GHz,64位上获得持续长度输入的持续46 M /秒.
private static int DecodeIS8(long j, ref byte[] result)
{
if (j <= 0)
{
return 0;
}
int size;
// neater code: gives something to break out of
while (true)
{
result[0] = (byte)((j & 0x7F) | 0x80);
size = 0;
j >>= 7;
if (j == 0) break;
result[1] = (byte)((j & 0x7F) | 0x80); …Run Code Online (Sandbox Code Playgroud)