[英]Convert inline-assembly from Intel to AT&T syntax
下面的代碼使用SSE將數組arr1
與arr2
相乘,並將結果放入arr3
。 數組具有count
元素。 arr1
, arr2
和arr3
類型為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"
);
arr1
, arr2
和arr3
是8字節指針,而count是8字節整數,因此寄存器是r_x
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.