The following code fragment
extern int foo(unsigned char a);
static inline int bar(a)
unsigned char a;
when compiled with "pcc -O -c" results in the following error
/tmp/ctm.01719a: Assembler messages:
/tmp/ctm.01719a:11: Error: suffix or operands invalid for `movzbl'
and looking at the generated assembler reveals the problem instruction
movzbl %eax, %ecx
I have seen several instances of this (compiling usr.sbin/racoon on NetBSD) and it is always %eax that is objected to. I don't know i386 assembler but I think this source register is not allowed here.
This problem is related to the K&R declaration, also -xtemps, -xinline and -xdeljumps are all required