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)