gpt4 book ai didi

将内联汇编从 Intel 语法转换为 AT&T 语法

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:05 24 4
gpt4 key购买 nike

下面的代码使用 SSE 将数组 arr1arr2 相乘,并将结果放入 arr3。数组有 count 个元素。 arr1arr2arr3 的类型为 float*。问题是编译器不支持 Intel 语法。这段代码在 AT&T 语法中看起来如何?

编译器是 GCC 4.4.7。

__asm__ volatile (
".intel_syntax noprefix \n\t"
"loop: \n\t"
"movups xmm0, [eax+edx] \n\t"
"movups xmm1, [ebx+edx] \n\t"
"mulps xmm0, xmm1 \n\t"
"movups [ecx+edx], xmm0 \n\t"
"sub edx, 16 \n\t"
"jnz loop \n\t"
:
: "a"(arr1), "b"(arr2), "c"(arr3), "d"(count)
: "xmm0", "xmm1"
);

最佳答案

__asm__ volatile (
"loop: \n\t"
"subq $0x10, %%rdx \n\t"
"movups (%%rax,%%rdx), %%xmm0 \n\t"
"movups (%%rbx,%%rdx), %%xmm1 \n\t"
"mulps %%xmm1, %%xmm0 \n\t"
"movups %%xmm0, (%%rcx,%%rdx) \n\t"
"jnz loop \n\t"
:
: "a"(arr1), "b"(arr2), "c"(arr3), "d"(count)
: "xmm0", "xmm1"
);

arr1arr2arr3是8字节指针,count是8字节整数,所以寄存器是r_x

关于将内联汇编从 Intel 语法转换为 AT&T 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20870040/

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