Hi there, Nobody seems to know about this in gcc-help, so, there I go:
-------- Forwarded Message -------- From: David Fernandez <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Subject: i686 architecture behaviour in gcc Date: Tue, 21 Feb 2006 17:08:32 +0000 Hi there, Can anyone explain why has been chosen that -march=i686 makes the compiler change the normal behaviour, and zero-expand unsigned short parameters into 32-bit registers by all means? E.g. void __attribute(( regparm(2) )) myoutl( d, p ) { asm(" outl %0,(%w1) \n" : : "a" (d), "d" (p) ); } assembled with gcc -Os -fomit-frame-pointer -march=i586 ... gives us outl %eax,(%dx) ret but changing "-march=i686" gives us movzwl %dx,%edx outl %eax,(%dx) ret Is it a bug, or had any developer a good reason to do so? David