This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Wed, 19 Jan 2005 20:40:06 -0800, Dan Kegel <dank@kegel.com> wrote: > Grant Likely wrote: > > I noticed in the GCC 3.4 release notes that gcc now support the > > MaverickCrunch engine on the Cirrus Logic EP93XX ARM920T devices. It > > also says that multilib support can be enabled for this part by > > editing "gcc/config/arm/t-arm-elf". > > > > However, I understand that crosstool disables multilib so if I want to > > use the MaverickCrunch support in libgcc then I need to build a new > > crosstool target. > > > > I decided to use demo-arm9tdmi.sh and arm9tdmi.dat as a starting point > > for the EP9312 build so I copied them to demo-arm-ep9312.sh and > > arm-ep9312.dat. (I've attached the patch) > > > > The toolchain compiled, and it appears to be building code with crunch > > instructions; could somebody please take a look at what I've done and > > let me know if I'm doing things right? > > Looks reasonable to me (though you can delete the lines from demo-arm-ep9312.sh > for gccs older than 3.4). Now the question is, do the programs it > generates run on an ep9312 system? Anyone have one to test on? > - Dan > I've now gotten a Linux kernel w/ crunch support to run on my eval board so I've been able to confirm that the arm-ep9312-linux-gnu toolchain does generate runnable code. A simple test of floating point instructions confirms that the crunch engine is getting used (as much as a 30x speedup over arm-9tdmi toolchain compiled version). Unfortunatly not all applications work correctly. ubench compiled with crunch support segfaults immediately. Looking at the cirrus errata there are quite a few issues with the crunch engine in current silicon. I don't know if those issues are addressed in gcc 3.4.2. I've attached my test program. Cheers, g.
#include <time.h> #include <stdio.h> #define SAMPLE_BUFFER_SIZE (32) typedef unsigned short u16; typedef float audio_sample_t; void mix(audio_sample_t *src, audio_sample_t *dest, int len, audio_sample_t multiplier) { audio_sample_t *src_end; src_end = src + len; while (src < src_end) { *dest++ += *src++ * multiplier; } } void test_mixing_bandwidth(int delay) { time_t end_time; int i = 0; audio_sample_t mixbuffer[SAMPLE_BUFFER_SIZE*256]; audio_sample_t samplebuffer[SAMPLE_BUFFER_SIZE]; end_time = time(NULL) + delay; while (time(NULL) < end_time) { mix(samplebuffer, mixbuffer, SAMPLE_BUFFER_SIZE, 2); i++; } printf("Processed %i audio frames in %i seconds (%i KB/s)\n", i*SAMPLE_BUFFER_SIZE, delay, i*SAMPLE_BUFFER_SIZE*sizeof(audio_sample_t)/(delay*1000)); } int main(int argc, char **argv) { /* main loop goes here */ test_mixing_bandwidth(5); }
------ Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/ Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |