-O3 bei gcc gibt probleme mit inline assembler
-
ich hab ein kleines problem mit dem gcc. der code da unten lässt sich ansich kompilieren... sobald man aber beim gcc mit -O3 kompiliert inlined er die funktion und erstellt aber auch eine normale funktion. dann meint der assembler das lable "lbl" sei mehrfach vorhanden (stimmt ja eigentlich auch).
was kann man da machen?void add_array(int *A, int *B, int size) { int *Aend = A+size; int *Bend = B+size; int *Aend8 = A+(size-size%8); asm (".align 4\n\t" "lbl:\n\t" /* ein par mmx instruktionen */ "addl $64, %%esi\n\t" "addl $64, %%edi\n\t" "cmpl %0, %%edi\n\t" "jne lbl\n\t" "emms\n\t" : /* no output */ :"r" (Aend8), "D" (A), "S" (B) :"%mm0", "%mm1", "%mm2", "%mm3","%mm4", "%mm5", "%mm6", "%mm7" ); for(;Aend8<Aend;++Aend8,++Bend) *Aend+=*Bend; } int main() { static int A[1024*1024], B[1024*1024]; int i; for(i=0;i<1024*1024;++i) { A[i] = rand(); B[i] = rand(); } add_array(&A[0],&B[0],1024*1024); }
-
Ist diese Funktionsdefinition in eine Klassendeklaration eingeschlossen? Wenn nämlich eine Funktionsdefinition in eine Klassendeklaration eingeschlossen ist, wird der Code dieser Funktion automatisch als inline übersetzt, wenn dies möglich ist.
-
nix klassen nur c
und ich will ja eigentich nicht verhindern das er inlined sondern es muss doch irgend eine möglichkeit geben solche namenskonfilkte zu verhindern. es kann ja nicht sein das man immer solche probleme hat sobald man inline assembler in ner funktion benutzt.