Re: [mpg123-devel] ARM cross compile
Brought to you by:
sobukus
From: Thomas O. <tho...@or...> - 2011-07-21 12:42:09
|
Am Thu, 21 Jul 2011 20:14:42 +0800 schrieb JonY <jo...@us...>: > > using a command like this: ./configure > > --target=arm-none-linux-gnueabi --host=arm-none-linuxgnueabi > > --prefix=/srv/nfs/poky/poky-image-minimal/igep002 > I'm not too clear on ARM asm myself, but --target= is for compilers and > code generators, mpg123 doesn't generate code, so its superfluous. Hm, but it should not hurt. One hint about the concerned ASM code, though. It's a macro defined in src/libmpg123/mpg123lib_intern.h, REAL_MUL_ASM(): # elif defined(OPT_ARM) /* for arm */ # define REAL_MUL_ASM(x, y, radix) \ ({ \ long _x=(x), _y=(y), _mull, _mulh; \ __asm__ ( \ "smull %0, %1, %2, %3 \n\t" \ "mov %0, %0, lsr %4 \n\t" \ "orr %0, %0, %1, lsl %5 \n\t" \ : "=&r" (_mull), "=&r" (_mulh) \ : "%r" (_x), "r" (_y), "M" (radix), "M" (32-(radix)) \ ); \ _mull; \ }) # define REAL_MUL_SCALE_LAYER3_ASM(x, y, radix) \ ({ \ long _x=(x), _y=(y), _radix=(radix), _mull, _mulh, _radix2; \ __asm__ ( \ "smull %0, %1, %3, %4 \n\t" \ "mov %0, %0, lsr %5 \n\t" \ "rsb %2, %5, #32 \n\t" \ "orr %0, %0, %1, lsl %2 \n\t" \ : "=&r" (_mull), "=&r" (_mulh), "=&r" (_radix2) \ : "%r" (_x), "r" (_y), "r" (_radix) \ ); \ _mull; \ }) # endif The concerned one is the first of these two. You can try to get your build done by changing the # elif defined(OPT_ARM) to # elif 0 to disable the definitions, prompting replacement C code. But it would be preferrable to fix this to make the optimized multiplication work again. Anyhow, I second that: > Which version of GCC are you using? Does compiling with -O0 work? If -O0 works, this is a hint at a conflict of register usage bewteen the optimizer and the assembly code ... but then, the guy with the relevant experience on ARM assembly would be Taihei. Alrighty then, Thomas. |