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.
|