[MPlayer-users] Impossible operand error compiling for strongarm
Christopher L
clearchris at hotmail.com
Tue Feb 3 05:22:55 CET 2009
I'm trying to fix this problem I'm seeing trying to compile on a strongarm machine. Here's what I see:
cc -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I.. -I.. -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -O4 -pipe -ffast-math -fomit-frame-pointer -D_REENTRANT -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I. -I/usr/local/include/SDL -D_REENTRANT -I/usr/local/include/freetype2 -I/usr/local/include -c -o dsputil.o dsputil.c
dsputil.c: In function `sub_hfyu_median_prediction_c':
arm/mathops.h:107: impossible register constraint in `asm'
arm/mathops.h:107: `asm' needs too many reloads
make[1]: *** [dsputil.o] Error 1
So I go over to the offending line in arm/mathops.h. After reading a few tutorials on assembly, I have found the following.
1) The "+" modifier isn't allowed by gcc in inline assembly.
2) gcc uses "AT&T" syntax which is "operation source destination"
It seems to me that all the parameters are reversed (e.g. on the first line mov %0 %2 should be mov %2 %0, etc), because otherwise this doesn't make any sense.
Could someone give me a sanity check here? Is this function hosed, or do I need to go back and read more about assembly?
Thanks!
#define mid_pred mid_pred
static inline av_const int mid_pred(int a, int b, int c)
{
int m;
__asm__ volatile (
"mov %0, %2 \n\t"
"cmp %1, %2 \n\t"
"movgt %0, %1 \n\t"
"movgt %1, %2 \n\t"
"cmp %1, %3 \n\t"
"movle %1, %3 \n\t"
"cmp %0, %1 \n\t"
"movgt %0, %1 \n\t"
: "=&r"(m), "+r"(a)
: "r"(b), "r"(c));
return m;
}
More information about the MPlayer-users
mailing list