Re: "Error: suffix or operands invalid for `push'" on 64bit boxes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[ redirect to gcc-help.  Not appropriate for gcc ]

Alok kataria writes:
 > Hi,
 > 
 > I was trying some inline assembly with  gcc.
 > 
 > Running the assembly program on 64 bit system ( with 64bit gcc
 > version) gives errors of the form
 > 
 > /tmp/cc28kO9v.s: Assembler messages:
 > /tmp/cc28kO9v.s:57: Error: suffix or operands invalid for `push'
 > 
 > But the same thing on 32bit runs perfectly fine.
 > 
 > Here is the detailed report.
 > -----------------------------------------------------
 > Following is the program that i tried :
 > 
 > /* The important part is the temp function */
 > 
 > 
 > #include <stdio.h>
 > 
 > int f1 (int a)
 > {
 >         return a+5;
 > }
 > 
 > void f2 (int lock, int a)
 > {
 >         printf("\nans = %d\n", lock + a);
 > }
 > 
 > 
 > #define temp(lock) \
 >         asm volatile (  " push $0\n\t" \
 >                         " call f1\n\t" \
 >                         " push %0\n\t" \
 >                         " push %%eax\n\t" \
 >                         " call f2\n\t" \
 >                         " pop %%eax\n\t" \
 >                         " pop %%eax\n\t" \
 >                         " pop %%eax": : "r" (lock) : "memory", "%eax");
 > 
 > 
 > int main ()
 > {
 >         int lock = 10;
 >         temp (lock);
 >         return 0;
 > }

> I tried compiling this on a EM64t as well as on Opteron boxes and see
 > the same problem.
 > 
 > Is this a GCC problem, or anything wrong with my program.

x86-64 has a different assembly langauge and a different ABI.

On x86-64 your program should be written more like

        xorl    %%edi, %%edi
        call    f1
        movl    %0, %%edi
        movl    %%eax, %%esi
        call    f2
 
with clobbers where appropriate.

Andrew.
-
To unsubscribe from this list: send the line "unsubscribe linux-assembly" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies]     [Security]     [Linux C Programming]     [Linux for Hams]     [DCCP]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux