[Speex-dev] ARM w/ assembly & fixed point crash
Zimman, Chris
czimman at bloomberg.com
Wed Sep 29 07:54:36 PDT 2004
I've targeted Speex to run under eCos with Thumb interworking using
arm-elf-gcc 3.3.3
I'd written a small test case to verifiy the operation:
#include <speex/speex.h>
void
speex_test(void)
{
SpeexBits bits;
unsigned int frame_size;
void *enc_state;
float *speex_frame;
cyg_uint64 t1, t2;
int i;
speex_frame = (float *)0x00030000; /* Address of Speex data */
speex_bits_init(&bits);
printf("Initializing Speex encoder...");
enc_state = speex_encoder_init(&speex_nb_mode);
printf("done\n");
printf("Retreiving frame size...");
speex_encoder_ctl(enc_state, SPEEX_GET_FRAME_SIZE, &frame_size);
printf("frame size is %d bytes\n", frame_size);
printf("Encoding...\n");
for(i = 0; i < 100; i++) {
t1 = cyg_current_time();
speex_encode(enc_state, speex_frame, &bits);
t2 = cyg_current_time();
speex_frame += (frame_size / sizeof(speex_frame));
printf("Frame: %d (%lld ticks)\n", i, (t2 - t1));
}
printf("\n");
speex_bits_destroy(&bits);
speex_encoder_destroy(enc_state);
return 0;
}
Compiling with -DFIXED_POINT, or -DFIXED_POINT/-DFIXED_ARM it works
totally fine (in ARM or Thumb mode). Compiling with either of these and
-DARM_ASM seems to cause it to crash.
(gdb) where
#0 0x0004b324 in MULT16_16 (x=0, y=1310) at fixed_arm.h:57
#1 0x00044284 in nb_encode (state=0x86df8, vin=0x7f798, bits=0x7fce4)
at ../src/nb_celp.c:262
#2 0x00053b28 in speex_encode (state=0x86df8, in=0x30000, bits=0x7fce4)
at ../src/speex.c:104
#3 0x0004204c in speex_test (argc=0 '\0', argv=0x81e00) at speex.c:35
#4 0x000417c8 in shelltask (param=0x0) at shelltask.c:143
#5 0x000414a8 in shell (data=0) at shell.c:84
Has anyone else successfully used the ARM_ASM code?
Thanks
--Chris
More information about the Speex-dev
mailing list