Tôi đã cố gắng kết hợp bộ mã hóa nội tại SSE2 và bộ ghép nội tuyến trong gcc. Nhưng nếu tôi chỉ định một biến là xmm0/register làm đầu vào thì trong một số trường hợp tôi gặp lỗi trình biên dịch. Ví dụ:Sử dụng cả bộ mã hóa nội tại SSE2 và bộ mã hóa nội tuyến gcc
#include <emmintrin.h>
int main() {
__m128i test = _mm_setzero_si128();
asm ("pxor %%xmm0, %%xmm0" : : "xmm0" (test) :);
}
Khi biên soạn với phiên bản gcc 4.6.1 tôi nhận được:
>gcc asm_xmm.c
asm_xmm.c: In function ‘main’:
asm_xmm.c:10:3: error: matching constraint references invalid operand number
asm_xmm.c:7:5: error: matching constraint references invalid operand number
Điều lạ là trong cùng một trường hợp tôi có các biến đầu vào khác/đăng ký sau đó nó đột nhiên làm việc với xmm0 như đầu vào nhưng không xmm1, vv Và trong trường hợp khác tôi đã có thể chỉ định xmm0-xmm4 nhưng không ở trên. Một chút bối rối/thất vọng về điều này: S
Cảm ơn :)
Bạn là ngôi sao! Cảm ơn :) –