gpt4 book ai didi

c - C代码中的SSE2指令

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:42 25 4
gpt4 key购买 nike

我正在尝试对 C 代码进行逆向工程,但是我无法真正理解这部分汇编。我知道它是 SSE 扩展的一部分。然而,有些东西确实与我在 x86 指令中习惯的不同。

static int sad16_sse2(void *v, uint8_t *blk2, uint8_t *blk1, int stride, int h)
{
int ret;
__asm__ volatile(
"pxor %%xmm6, %%xmm6 \n\t"
ASMALIGN(4)
"1: \n\t"
"movdqu (%1), %%xmm0 \n\t"
"movdqu (%1, %3), %%xmm1 \n\t"
"psadbw (%2), %%xmm0 \n\t"
"psadbw (%2, %3), %%xmm1 \n\t"
"paddw %%xmm0, %%xmm6 \n\t"
"paddw %%xmm1, %%xmm6 \n\t"
"lea (%1,%3,2), %1 \n\t"
"lea (%2,%3,2), %2 \n\t"
"sub $2, %0 \n\t"
" jg 1b \n\t"
: "+r" (h), "+r" (blk1), "+r" (blk2)
: "r" ((x86_reg)stride)
);
__asm__ volatile(
"movhlps %%xmm6, %%xmm0 \n\t"
"paddw %%xmm0, %%xmm6 \n\t"
"movd %%xmm6, %0 \n\t"
: "=r"(ret)
);
return ret;
}

%1、%2 和 %3 是什么? (%1,%2,%3) 是什么意思?另外,“+r”、“-r”、“=r”是什么意思?

最佳答案

你会想看看这个 GCC Inline Asssembly HOWTO .

百分号数字是指令操作数。

关于c - C代码中的SSE2指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com