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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
- Follow-Ups:
- Re: "Error: suffix or operands invalid for `push'" on 64bit boxes
- From: Andrew Haley
- Re: "Error: suffix or operands invalid for `push'" on 64bit boxes
- From: Richard Guenther
- Re: "Error: suffix or operands invalid for `push'" on 64bit boxes
- Prev by Date: [Fwd: Re: Reading user input related question]
- Next by Date: Re: "Error: suffix or operands invalid for `push'" on 64bit boxes
- Previous by thread: [Fwd: Re: Reading user input related question]
- Next by thread: Re: "Error: suffix or operands invalid for `push'" on 64bit boxes
- Index(es):