RIP :(
-
Mein i686-apple-darwin10-gcc-4.2.1 optimiert den Aufruf von x und y weg.
-
Tippgeber schrieb:
Das liegt wohl an dem fehlenden static in den Funktionsprototypen. So muss der Compiler ja davon ausgehen, dass die Funktion aus anderen Modulen aufgerufen werden könnte.
wird sie ja auch... aber ich dachte man kann sie trotzdem inlinen, zumindest innerhalb der library
-
Shade Of Mine schrieb:
Mein i686-apple-darwin10-gcc-4.2.1 optimiert den Aufruf von x und y weg.
auch mit -fPIC
das wär ja end geil
-
also ich hab grad den am start... gcc (Debian 4.4.5-8) 4.4.5
-
oO schrieb:
Tippgeber schrieb:
Das liegt wohl an dem fehlenden static in den Funktionsprototypen. So muss der Compiler ja davon ausgehen, dass die Funktion aus anderen Modulen aufgerufen werden könnte.
wird sie ja auch... aber ich dachte man kann sie trotzdem inlinen, zumindest innerhalb der library
sry. meinte compile unit, library sollte eig. erst ab gcc 4.5 mögl. sein - so der plan...
aber wenn das mit -fPIC nicht geht, kann ichs eh vergessen ausser ich mach wieder wie früher ein riesenbaby
-
auch mit -fPIC
das wär ja end geil
und was hat das mit inlining zu tun?
-
piepic schrieb:
auch mit -fPIC
das wär ja end geil
und was hat das mit inlining zu tun?
sind hier nur noch deppen
-
oO schrieb:
Shade Of Mine schrieb:
Mein i686-apple-darwin10-gcc-4.2.1 optimiert den Aufruf von x und y weg.
auch mit -fPIC
das wär ja end geil
Ja.
sowohol beigcc -fPIC -O3 -c test.c -S
als auch
gcc -fpic -O3 -c test.c -S
kommt das als Ergebnis:
_main: LFB5: pushq %rbp LCFI4: movq %rsp, %rbp LCFI5: movl $3, %esi leaq LC0(%rip), %rdi xorl %eax, %eax call _printf xorl %eax, %eax leave ret
$ gcc --version i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3) Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
gut zu wissen, dann wirds auf nem mac signifikant schneller laufen als unter linux
was mich aber ein bischen wundert, weil es die augenscheinlich neuere version unter linux nicht gebacken bekommt... oder geht es bei anderen und nur bei mir nicht
-
also bei mir geht es einfach nicht...
main: .LFB13: .cfi_startproc subq $8, %rsp .cfi_def_cfa_offset 16 xorl %eax, %eax call y@PLT leaq .LC0(%rip), %rdi movq %rax, %rsi xorl %eax, %eax call printf@PLT xorl %eax, %eax addq $8, %rsp ret
wenn die funktion static ist, dann schon:
main: .LFB13: .cfi_startproc leaq .LC0(%rip), %rdi subq $8, %rsp .cfi_def_cfa_offset 16 movl $3, %esi xorl %eax, %eax call printf@PLT xorl %eax, %eax addq $8, %rsp ret .cfi_endproc
aber wie gesagt, das bringt mich nicht weiter, weil dann kann ich gleich den ganzen library käse weglassen