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 Suchfunktionansonsten kannst du wohl auch beim 3.3er NASM Assembler per Option aktivieren