AT&T + bsf



  • Hallo.

    Ich Compiliere mit g++ und will aus performancegünden die bsf funktionenen eines Prozessors nutzen. Soweit ich weiß unterstützt der g++ kein Intel - Assembler sondern nur den AT&T Syntax. Ich habe leider nur noch nie mit dem AT&T Syntax gearbeitet und habe bis jetzt noch nichts dazu gefunden.

    Kennt jemand vielleicht einen Seite zu AT&T oder vielleicht findet sich jemand der eine Kurze Funktion schreibt die mit AT&T Syntax bsf ausfuehrt und den Index des gesetzten Bits zurückliefert. Gibt es kein gesetztes bit soll -1 zurückgeliefert werden.

    In Intel... würde das ja folgendermaßen aussehen:

    int mybsf(int i)
    { __asm
      { bsf eax, dword ptr[i]
        jnz mybsf_end
        mov eax, -1
        mybsf_end:
      }
    }
    

    Danke im Voraus.



  • Den Quelltext von mir kannst du anpassen:

    inline unsigned int mostSignificantSetBit(unsigned int value)
    	{
    #if defined(_MSC_VER)
    		__asm {
    			mov ecx, value
    			bsr eax, ecx
    			inc eax
    		}
    #elif defined(__GNUC__)
    		unsigned int result;
    		__asm__ ("bsrl %0, %1\n"
    				 "incl %1\n"
    				 	: "=r"(result)
    				 	: "0"(value));
    		return result;
    #else
    		unsigned int result = 0;
    		while (value != 0) {
    			++result;
    			value >>= 1;
    		}
    		return result;
    #endif
    	}
    


  • benutz mal die Suchfunktion (auch im "Andere Compiler"-Forum), ich hab schon 1000 mal Links zu dem Thema AT&T und GCC Assembler gepostet 🙄

    http://www-106.ibm.com/developerworks/linux/library/l-ia.html?dwzone=linux
    weitere Links findest du mit der Suchfunktion 🙂

    ansonsten kannst du wohl auch beim 3.3er NASM Assembler per Option aktivieren


Anmelden zum Antworten