[MPlayer-users] Impossible operand error compiling for strongarm

Christopher L clearchris at hotmail.com
Tue Feb 3 15:55:39 CET 2009



> On Mon, Feb 02, 2009 at 10:22:55PM -0600, Christopher L wrote:
>> 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.
> 
> What gave you that idea?

http://www.ethernut.de/en/documents/arm-inline-asm.html

ARM GCC Inline Assembler Cookbook
+
                    
                    Read-write operand (not supported by inline assembler)
                    

I have seen it mentioned elsewhere also.

>> 2)  gcc uses "AT&T" syntax which is "operation source destination"
> 
> "AT&T-syntax" only exists for x86, so it sure can't use that for ARM. It
> uses whatever the gnu assembler uses, searching for "GNU assembler ARM"
> should find enough tutorials.

http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s3

GCC, the GNU C Compiler for Linux, uses AT&T/UNIX assembly syntax.
...
The  direction  of the operands in AT&T syntax is opposite to that of Intel. In Intel syntax the first operand is the  destination, and the second operand is the source whereas in AT&T syntax the first operand is the sourceand the second operand is the destination. ie, 

>> #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));

I'd be surprised if it were the number of registers because I also read somewhere that you really don't run into issues unless you approach 10.





More information about the MPlayer-users mailing list