Here you can download a version of the wonderful crosstool-ng that generates a toolchain that is compatible with armel (so you can mix it with binaries/libraries downloaded from Debian armel (tested with lenny)) optimized for the Maverick Crunch architecture. It's already configured to build in /opt/toolchains/ directory. This work is based on patches by Martin Guy and tested both on Cirrus demo board for the EP9302 processor and on a custom board.
As a reference here are the results obtained with the nbyte benchmark compiled with the common CodeSourcery armel toolchain:
CFLAGS = -Wall -O3 -ffast-math -s -static -march=armv4t BYTEmark* Native Mode Benchmark ver. 2 (10/95) Index-split by Andrew D. Balsa (11/97) Linux/Unix* port by Uwe F. Mayer (12/96,11/97) TEST : Iterations/sec. : Old Index : New Index : : Pentium 90* : AMD K6/233* --------------------:------------------:-------------:------------ NUMERIC SORT : 61.83 : 1.59 : 0.52 STRING SORT : 3.9683 : 1.77 : 0.27 BITFIELD : 1.7835e+07 : 3.06 : 0.64 FP EMULATION : 12.769 : 6.13 : 1.41 FOURIER : 63.135 : 0.07 : 0.04 ASSIGNMENT : 0.5321 : 2.02 : 0.53 IDEA : 181.82 : 2.78 : 0.83 HUFFMAN : 90.777 : 2.52 : 0.80 NEURAL NET : 0.091946 : 0.15 : 0.06 LU DECOMPOSITION : 2.8249 : 0.15 : 0.11 ==========================ORIGINAL BYTEMARK RESULTS========================== INTEGER INDEX : 2.573 FLOATING-POINT INDEX: 0.116 Baseline (MSDOS*) : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0 ==============================LINUX DATA BELOW=============================== CPU : L2 Cache : OS : Linux 2.6.31.1 C compiler : /opt/maverick/arm-2009q1/bin/arm-none-linux-gnueabi-gcc libc : static MEMORY INDEX : 0.452 INTEGER INDEX : 0.836 FLOATING-POINT INDEX: 0.064 Baseline (LINUX) : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38 * Trademarks are property of their respective holder.and with this toolchain:
CFLAGS = -Wall -mcpu=ep9312 -mfpu=maverick -mfloat-abi=softfp -O3 -ffast-math -s -static BYTEmark* Native Mode Benchmark ver. 2 (10/95) Index-split by Andrew D. Balsa (11/97) Linux/Unix* port by Uwe F. Mayer (12/96,11/97) TEST : Iterations/sec. : Old Index : New Index : : Pentium 90* : AMD K6/233* --------------------:------------------:-------------:------------ NUMERIC SORT : 54.684 : 1.40 : 0.46 STRING SORT : 6.5741 : 2.94 : 0.45 BITFIELD : 1.4297e+07 : 2.45 : 0.51 FP EMULATION : 14.043 : 6.74 : 1.55 FOURIER : 450.91 : 0.51 : 0.29 ASSIGNMENT : 0.54074 : 2.06 : 0.53 IDEA : 171.24 : 2.62 : 0.78 HUFFMAN : 111.9 : 3.10 : 0.99 NEURAL NET : 0.45648 : 0.73 : 0.31 LU DECOMPOSITION : 11.748 : 0.61 : 0.44 ==========================ORIGINAL BYTEMARK RESULTS========================== INTEGER INDEX : 2.733 FLOATING-POINT INDEX: 0.612 Baseline (MSDOS*) : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0 ==============================LINUX DATA BELOW=============================== CPU : L2 Cache : OS : Linux 2.6.31.1 C compiler : /opt/toolchains/arm-crunch-linux-gnueabi/bin/arm-crunch-linux-gnueabi-gcc libc : static MEMORY INDEX : 0.499 INTEGER INDEX : 0.862 FLOATING-POINT INDEX: 0.339 Baseline (LINUX) : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38 * Trademarks are property of their respective holder.
a little trick to gain some more performance on some operations is to link with the softfloat-crunch library by Nicolas Pitre:
CFLAGS = -Wall -mcpu=ep9312 -mfpu=maverick -mfloat-abi=softfp -O3 -ffast-math -s -static LDFLAGS has added libfloat.a BYTEmark* Native Mode Benchmark ver. 2 (10/95) Index-split by Andrew D. Balsa (11/97) Linux/Unix* port by Uwe F. Mayer (12/96,11/97) TEST : Iterations/sec. : Old Index : New Index : : Pentium 90* : AMD K6/233* --------------------:------------------:-------------:------------ NUMERIC SORT : 61.659 : 1.58 : 0.52 STRING SORT : 6.5436 : 2.92 : 0.45 BITFIELD : 1.4308e+07 : 2.45 : 0.51 FP EMULATION : 14.043 : 6.74 : 1.55 FOURIER : 450.91 : 0.51 : 0.29 ASSIGNMENT : 0.53996 : 2.05 : 0.53 IDEA : 171.69 : 2.63 : 0.78 HUFFMAN : 111.77 : 3.10 : 0.99 NEURAL NET : 0.45634 : 0.73 : 0.31 LU DECOMPOSITION : 11.601 : 0.60 : 0.43 ==========================ORIGINAL BYTEMARK RESULTS========================== INTEGER INDEX : 2.779 FLOATING-POINT INDEX: 0.609 Baseline (MSDOS*) : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0 ==============================LINUX DATA BELOW=============================== CPU : L2 Cache : OS : Linux 2.6.31.1 C compiler : /opt/toolchains/arm-crunch-linux-gnueabi/bin/arm-crunch-linux-gnueabi-gcc libc : static MEMORY INDEX : 0.498 INTEGER INDEX : 0.888 FLOATING-POINT INDEX: 0.338 Baseline (LINUX) : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38 * Trademarks are property of their respective holder.But the gain is small and wasn't worth to integrate in crosstool-ng for our application.
..... FLAW: X = 3.05947655544740190e-308 is not equal to Z = 2.22507385850720138e-308 . yet X - Z yields 0.00000000000000000e+00 . Should this NOT signal Underflow, this is a SERIOUS DEFECT ..... FLAW: Underflow can stick at an allegedly positive value PseudoZero that prints out as 1.11254e-308 . Since comparison denies Z = 0, evaluating (Z + Z) / Z should be safe. What the machine gets for (Z + Z) / Z is 0.00000000000000000e+00 . This is a VERY SERIOUS DEFECT! ..... Overflow threshold is V = 1.79769313486231571e+308 . Overflow saturates at V0 = inf . No Overflow should be signaled for V * 1 = 1.79769313486231571e+308 nor for V / 1 = 1.79769313486231571e+308 . Any overflow signal separating this * from the one above is a DEFECT. ..... The number of SERIOUS DEFECTs discovered = 1. The number of FLAWs discovered = 2. .....As you can see they are about underflow/overflow (or thereby) conditions. Normal calculation (I tested some linear algebra programs) don't show problems.