簡體   English   中英

將內聯匯編從Intel轉換為AT&T語法

[英]Convert inline-assembly from Intel to AT&T syntax

下面的代碼使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM