Witam wszystkich serdecznie,
Mam problem podczas linkowania ze wstawką asemblerową.
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)