Sziasztok!
Próbálok írni egy programot, ami AVX2-őt használ (Intel Haswell).
A fejlesztői gépemben nincsen ilyen processzor, így a fordított programot Intel SDE-vel szeretném futtatni. Azonban a teszt kódom le sem fordul.
gcc -o test0 -march=core-avx2 test0.c
Hiba: test0.c:(.text+0x118): undefined reference to `_bextr_u32'
MMX, SSE instrukciókat is kipróbáltam, azok hiba nélkül fordulnak.
Mit tegyek? Már egy egyszerű instrukció készlet kiegészítés is cross compilationnak számít és fordítanom kell magamnak egy binutils-t és gcc-t?
- 6681 megtekintés
Hozzászólások
Azonban a teszt kódom le sem fordul
Kicsit a'rnyalna'm a hibau"zenet alapjan: lefordulni lefordul, "csak" osszelinkelni nem tudod (ha -c opciot megadod, akkor *.o-t valoszinuleg tudsz belole csinalni).
Ilyen arch-on me'g nem dolgoztam de a cross compile-nak feltetele hogy a megfelelo" libek (_start-ot tartalmazo *.o, pl) is a rendszeren legyenek es a gcc tudja is hogy mirol van szo. Azaz a libc megfelelo" verzioja az adott arch-on is rendelkezesre kell hogy alljon. Ezt vagy megszerzed eleve binarisan (ha vki elore csomagoltad) vagy forditod, szintugy.
- A hozzászóláshoz be kell jelentkezni
Koszi szepen, akkor keresek vagy forditok magamnak.
Igen pontatlanul irtam, csak nem linkelodik. De itt felmerul meg egy kerdes: ennek elvileg egy opkodra kellene fordulnia (nem valos funkcio hivas, ha csak nem szimulaljuk egy sajat libbel). Ezt hogyan oldja meg a linker? Tehat e mogott az adott archon egy _asm_ (..) resznek kellene csak lennie..
- A hozzászóláshoz be kell jelentkezni
avx-hez kernel tamogatas is kell
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
gugel megvolt-e?
2013-06-28 Kirill Yukhin
* config/i386/bmiintrin.h (_bextr_u32): New.
(_bextr_u64): Ditto.
a fordito ujabb-e, mint ez?
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
Megvolt, te mennyit ertel el a cukorcsapkodos doodle-n? :-)
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Nagyon köszönöm a segítséget!
Ez volt a probléma.
A legújabb GCC release-t használtam (4.8.1), amit május 31-én adtak ki.
Azonban a patch június 28-án érkezett..
Lehúztam a GCC trunk-öt SVN-ről, kicseréltem a bmiintrin.h-t a 4.8.1-ben és most tökéletesen fordul a program és megjelenik az új instrukció is.
Nem gondoltam volna, hogy egy több mint 2 éve ismert utasítást csak most implementálnak a GCC-ben.
Egy kis CPU pornó is kerüljön ide:
$ gcc -S -march=core-avx2 test0.c
$ grep bextr test0.s
bextr %edx, %eax, %eax
$ ./test0
Illegal instruction (core dumped)
$ ./sde64 -- ~/test0
7
- A hozzászóláshoz be kell jelentkezni