Sida 1 av 1

assembler i gcc...

Postat: 08 okt 2007, 14:05
av steqve
Hej!

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
  }
}
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:

Kod: Markera allt

double  square( double x )

{

	asm("finit");

	asm("fld qword ptr [esp+4]");

	asm("fst st(1)");

	asm("fmul");

	asm("ret");

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

SV: assembler i gcc...

Postat: 08 okt 2007, 14:06
av steqve
Juste, makron expanderas inte när koden ligger inom "-fnuttar så jag behöver ett bättre sätt att skriva inline assembler med

SV: assembler i gcc...

Postat: 08 okt 2007, 16:45
av gasol
Jag är inte så haj på inline assembly i GCC (eller någon annan kompilator) men den här sidan kanske kan ge dig lite hjälp http://www.ibiblio.org/gferg/ldp/GCC-In ... HOWTO.html

SV: assembler i gcc...

Postat: 09 okt 2007, 09:21
av steqve
Det där är AT&T syntax, jag har så mycket kod att jag inte är sugen på att skriva om den, utan vill helst kunna använda den som finns. Jag har ju "nästan" lyckats :)