[Megoldva] AVX2 undefined reference to _bextr_u32

Fórumok

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

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

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

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