Linkowanie wstawki asemblerowej z C - coś nie działa
: 10 sie 2014, 11:42
Witam wszystkich serdecznie,
Mam problem podczas linkowania ze wstawką asemblerową.
System zwraca mi błędy typu:
W tym przypadku zmienne te przekazywane są jako argumenty funkcji, a asembler ich kompletnie nie widzi. Zresztą podobnie jest ze zmiennymi zadeklarowanymi w ciele funkcji (np. C0x0000000000000001).
Co należy poprawić?
W załączeniu przesyłam pełny kod. (Do kompilacji na Linux 32-bit ale na 64-bit też jak ktoś zechce da się urichomić - zachodzi tam tylko brak zgodności typów)
Mam problem podczas linkowania ze wstawką asemblerową.
Kod: Zaznacz cały
int faa8x64a(void *dat1, void *dat2, int leng)
{
const unsigned long long int C0x0000000000000001 = 0x0000000000000001;
const unsigned long long int C0x0000000100000000 = 0x0000000100000000;
const unsigned long long int C0x0606060606060606 = 0x0606060606060606;
const unsigned long long int C0x0F0F0F0F0F0F0F0F = 0x0F0F0F0F0F0F0F0F;
const unsigned long long int C0x76F6F6F676F6F6F6 = 0x76F6F6F676F6F6F6;
const unsigned long long int C0x7FFFFFFF7FFFFFFF = 0x7FFFFFFF7FFFFFFF;
unsigned long long int flag = 0xFFFFFFFFFFFFFFFF;
asm("mov $leng, %edx");
asm("mov ($dat1), %edi");
asm("mov %edx, %esi");
asm("add %edi, %edx");
asm("add %edi, %esi");
asm("sub $32, %edx");
asm("mov ($dat2), %ebx");
asm("mov $0, %eax");
asm("pxor %mm7, %mm7");
asm("nop");
asm("nop");
asm("nop");
...
System zwraca mi błędy typu:
engine6.cpp:(.text+0x6a): undefined reference to $leng'
engine6.cpp:(.text+0x70): undefined reference to $dat1'
engine6.cpp:(.text+0x7f): undefined reference to `$dat2'
W tym przypadku zmienne te przekazywane są jako argumenty funkcji, a asembler ich kompletnie nie widzi. Zresztą podobnie jest ze zmiennymi zadeklarowanymi w ciele funkcji (np. C0x0000000000000001).
Co należy poprawić?
W załączeniu przesyłam pełny kod. (Do kompilacji na Linux 32-bit ale na 64-bit też jak ktoś zechce da się urichomić - zachodzi tam tylko brak zgodności typów)