Compile the following with -O and compile fails with "Error: suffix or operands invalid for `movq'". No problem is either __volatile__ or -O removed. Compiles ok with gcc-3.2.3 or gcc-2.96.
Here is the test code: #define mmx_r2m(op,reg,mem) \ __asm__ __volatile__ (#op " %%" #reg ", %0" \ : "=X" (mem) \ : /* nothing */ ) #define movq_r2m(reg,var) mmx_r2m (movq, reg, var) void gcc_fulla_bugs(void) { long long sumtop_accs; movq_r2m( mm0, *(&sumtop_accs) ); } -- Summary: asm volatile optimizes to invalid operands Product: gcc Version: 4.0.1 Status: UNCONFIRMED Severity: major Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jw203198 at hotmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25129