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).