我试图颠倒128位向量(uint16x8)的顺序.
例如,如果我有
a b c d e f g h
Run Code Online (Sandbox Code Playgroud)
我想获得
h g f e d c b a
Run Code Online (Sandbox Code Playgroud)
使用NEON内在函数有一种简单的方法吗?我尝试使用VREV,但它不起作用.
我需要计算与SSE相同的操作:
__m128i result1=_mm_avg_epu8 (upper, lower);
Run Code Online (Sandbox Code Playgroud)
使用NEON,我执行以下操作:
uint8x16_t result1=vhaddq_u8(upper, lower);
Run Code Online (Sandbox Code Playgroud)
结果应该是相同的,但我得到的SSE指令:
91cb c895 aaa3 b0d4 cfc0 c1b0 aac7 b9b9
Run Code Online (Sandbox Code Playgroud)
而使用NEON指令我获得:
91ca c894 a9a2 b0d3 cec0 c1af aac7 b8b8
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这两个结果不同.你能帮助我吗?
我不明白我如何用霓虹灯内在函数来区分 vbit、vbsl 和 vbif。我需要执行 vbit 操作,但是如果我使用内部函数中的 vbslq 指令,我将得不到我想要的。
例如,我有一个这样的源向量:
uint8x16_t source = 39 62 9b 52 34 5b 47 48 47 35 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
目标向量是:
uint8x16_t destination = 0 0 0 0 0 0 0 0 0 0 0 0 c3 c8 c5 d5
Run Code Online (Sandbox Code Playgroud)
我想有这样的输出:
39 62 9b 52 34 5b 47 48 47 35 0 0 c3 c8 c5 d5
Run Code Online (Sandbox Code Playgroud)
这意味着我想从源复制前十个字节并保持其他 6 个不变。我正在使用这个面具:
{0,0,0,0,0,0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
Run Code Online (Sandbox Code Playgroud)
使用 vbslq_u8 的正确方法是什么?