assembler i gcc...
Postat: 08 okt 2007, 14:05
Hej!
Följande kod från vill jag kunna skriva i GCC:
naked går tydligen inte att göra i gcc, och efter att ha pratat med utvecklarna så visar det sig att dom inte har några planer alls på att stödja detta. Mycket synd tycker jag.
Nåväl, jag har skickat in -o intelinlined -m i686 som flaggor till kompilatorn så att den skall acceptera att syntaxen är "intel".
Efter konverteringar så ser det ut så här:
Men det här går inte genom kompilatorn. Får följande fel:
Raden med fld qword... : Error: junk 'ptr [esp+4]' after expression
nästa rad: Error: junk '(1)' after expression
nästa rad: Warning: translating to fmulp
Koden kompilerar under windows och fungerar klanderfritt där, så det är inte fel på assemblerkoden, men något med syntaxen gör att gcc inte känner igen den.
Hur kommer jag vidare? Har ca 100 funktioner i olika storlekar med assemblerkod (och nej, majoriteten finns inte i glibc eller liknande).
Följande kod från vill jag kunna skriva i GCC:
Kod: Markera allt
double_t __declspec(naked) square( double_t x )
{
__asm {
finit
fld qword ptr [esp+4]
fst st(1)
fmul
ret
}
}
Nåväl, jag har skickat in -o intelinlined -m i686 som flaggor till kompilatorn så att den skall acceptera att syntaxen är "intel".
Efter konverteringar så ser det ut så här:
Kod: Markera allt
double square( double x )
{
asm("finit");
asm("fld qword ptr [esp+4]");
asm("fst st(1)");
asm("fmul");
asm("ret");
}
Raden med fld qword... : Error: junk 'ptr [esp+4]' after expression
nästa rad: Error: junk '(1)' after expression
nästa rad: Warning: translating to fmulp
Koden kompilerar under windows och fungerar klanderfritt där, så det är inte fel på assemblerkoden, men något med syntaxen gör att gcc inte känner igen den.
Hur kommer jag vidare? Har ca 100 funktioner i olika storlekar med assemblerkod (och nej, majoriteten finns inte i glibc eller liknande).