[Megoldva] AVX2 undefined reference to _bextr_u32

 ( answ | 2013. szeptember 26., csütörtök - 23:07 )

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?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

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.

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..

avx-hez kernel tamogatas is kell

--
NetBSD - Simplicity is prerequisite for reliability

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

Megvolt, te mennyit ertel el a cukorcsapkodos doodle-n? :-)
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.

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