On Wed, Oct 24, 2007 at 09:36:02AM +0900, Hwang YunSong(??????) wrote: > gcc32 -g -o qemu-system-cris vl.o osdep.o readline.o monitor.o pci.o > console.o loader.o isa_mmio.o cutils.o block.o block-raw.o block-cow.o > block-qcow.o aes.o block-vmdk.o block-cloop.o block-dmg.o block-bochs.o > block-vpc.o block-vvfat.o block-qcow2.o block-parallels.o irq.o i2c.o > smbus.o scsi-disk.o cdrom.o lsi53c895a.o usb.o usb-hub.o usb-linux.o > usb-hid.o usb-ohci.o usb-msd.o usb-wacom.o eeprom93xx.o eepro100.o > ne2000.o pcnet.o rtl8139.o etraxfs.o ptimer.o etraxfs_timer.o > etraxfs_ser.o gdbstub.o sdl.o x_keymap.o vnc.o d3des.o slirp/cksum.o > slirp/if.o slirp/ip_icmp.o slirp/ip_input.o slirp/ip_output.o > slirp/slirp.o slirp/mbuf.o slirp/misc.o slirp/sbuf.o slirp/socket.o > slirp/tcp_input.o slirp/tcp_output.o slirp/tcp_subr.o slirp/tcp_timer.o > slirp/udp.o slirp/bootp.o slirp/debug.o slirp/tftp.o libqemu.a -lm -lz > -lgnutls -L/usr/lib -lSDL -lpthread -lrt -lutil > libqemu.a(helper.o): In function `do_interrupt': > /usr/src/Haansoft/BUILD/qemu/target-cris/helper.c:137: undefined > reference to `__builtin_clz' > libqemu.a(translate-op.o): In function `dyngen_code': > /home/hys545/qemu/cris-softmmu/op.h:1566: undefined reference to > `__builtin_clz' > libqemu.a(op.o): In function `op_lz_T0_T1': > /usr/src/Haansoft/BUILD/qemu/target-cris/op.c:1009: undefined reference > to `__builtin_clz' > collect2: ld returned 1 exit status > Linux localhost.localdomain 2.6.19-10hs #1 Tue Apr 3 11:29:42 KST 2007 > i686 i686 i386 GNU/Linux > Configured with: ../configure --prefix=/usr --mandir=/usr/share/man > --infodir=/usr/share/info --enable-shared --enable-threads=posix > --enable-checking=release --with-system-zlib --enable-__cxa_atexit > --disable-libunwind-exceptions --enable-libgcj-multifile > --enable-languages=c,c++,objc,obj-c++,java,fortran,ada > --enable-java-awt=gtk --disable-dssi --enable-plugin > --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre > --with-cpu=generic --host=i386-Haansoft-linux > Thread model: posix > gcc version 4.1.1 20061120 (Haansoft 4.1.1-41)
Hello, This patch adds a version of clz that does not rely on the builtin from GCC for GCC versions where it's not expected to be available. Test were done with the cris qemu testsuite with gcc version 4.1.2 (Gentoo 4.1.2) and with gcc version 3.3.6 (Gentoo 3.3.6-r1 p1.4, ssp-3.3.6-1.0, pie-8.7.8). You indicate the use of a GCC 4.1.1 which AFAIK should provide the __builtin_clz. I don't know whats going on but from the cmdline (gcc32) one might guess that a GCC 3.2 was used. Could you verify this? If so, this patch will hopefully solve the build problem you see. Best regards -- Edgar E. Iglesias Axis Communications AB diff --git a/target-cris/op.c b/target-cris/op.c index 3ce9888..fbbae5b 100644 --- a/target-cris/op.c +++ b/target-cris/op.c @@ -1006,7 +1006,34 @@ void OPPROTO op_lz_T0_T1 (void) if (T1 == 0) T0 = 32; else +#if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 + { T0 = __builtin_clz(T1); + } +#else + { + /* Binary search for leading zeros. */ + + T0 = 1; + if ((T1 >> 16) == 0) { + T0 = T0 + 16; + T1 = T1 << 16; + } + if ((T1 >> 24) == 0) { + T0 = T0 + 8; + T1 = T1 << 8; + } + if ((T1 >> 28) == 0) { + T0 = T0 + 4; + T1 = T1 << 4; + } + if ((T1 >> 30) == 0) { + T0 = T0 + 2; + T1 = T1 << 2; + } + T0 = T0 - (T1 >> 31); + } +#endif RETURN(); }