[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