gcc inline assembly x86_64 (amd64) regiszterek

http://gcc.gnu.org/onlinedocs/gcc-4.2.2/gcc/Constraints.html#Constraints
http://blogs.sun.com/x86be/entry/gcc_style_asm_inlining_support


__asm__ __volatile__ /*mmap */
 (
                "mov %5,%%r10\n" 
                "mov %6,%%r8\n"  
                "xor %%r9,%%r9\n" 
                "syscall"
                : "=a"(posvect)
                : "a"(SYS_mmap),"D"(0),"S"(bits_length),"d"(PROT_READ),"i"(MAP_SHARED|MAP_POPULATE),"r"(fd)
                : "%rcx","%r11" ,"%r10", "%r8", "%r9"
 );

Hogy a retekbe tudom elmagyarazni az inline csodanak, hogy r10,r8,r9 -ben szeretnem latni a megatott erteket. "%r8"(ERTEK) -formaban mondjuk.

Vagy, hogy __volatile__ nelkul se tegye rossz helyre, az utasitasokat. (nem mindegy mi van a syscall elott es utan)

Ez azert rossz nekem, mert pl. ket ilyen mmap kozott mondjuk r9 erteke nem valtozik, de volatile miatt ujra megadja, nelkule meg nem garantalt a helyes sorrend.

Hozzászólások

hat ugy latszik a volatile kell, mert bugos (vagy hulye) a fordito. azonkivul nem hiszem, hogy meg lehet mondani, hogy r8-ba akarsz valamit, mert a gcc forrasaban (amit az altalad linkelt doksi ir) a gcc/config/i386/constraints.md-ben sincs ilyesmi ugy latom.

ilyen az elet.

- Use the Source Luke ! -

szerintem az a gond, hogy az utolsó regiszter, amibe a fd változódat teszed az 64 bites, a fd változód pedig 32.

welcome to gcc :)

-. . - -... ... -..