[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