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

"Alok kataria" <[email protected]>
Newsgroups gmane.linux.assembly,gmane.comp.gcc.devel
Message-ID <[email protected]>
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;
}
----------------------------------------------------------------------------
This compiles and works fine on a 32 bit system having

$ gcc --version
gcc (GCC) 4.1.1 20061011 (Red Hat 4.1.1-30)
Copyright (C) 2006 Free Software Foundation, Inc.

------------------------------------------------------------------------

But running it on a 64 bit system gives me following errors

$ gcc temp.c
/tmp/cc28kO9v.s: Assembler messages:
/tmp/cc28kO9v.s:57: Error: suffix or operands invalid for `push'
/tmp/cc28kO9v.s:58: Error: suffix or operands invalid for `push'
/tmp/cc28kO9v.s:60: Error: suffix or operands invalid for `pop'
/tmp/cc28kO9v.s:61: Error: suffix or operands invalid for `pop'
/tmp/cc28kO9v.s:62: Error: suffix or operands invalid for `pop'

Gcc version on this box is
$ gcc --version
gcc (GCC) 4.1.0 (SUSE Linux)
Copyright (C) 2006 Free Software Foundation, Inc.

$ file `which gcc`
/usr/bin/gcc: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV),
for GNU/Linux 2.6.4, dynamically linked (uses shared libs), for
GNU/Linux 2.6.4, stripped

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.

Please let me know,

Thanks & Regards,
Alok

P.S. Please keep me cc'ed as i am not part of this list.
-
To unsubscribe from this list: send the line "unsubscribe linux-assembly" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.