Subject: Re: CVS commit: src/lib/libc/arch/x86_64/sys
To: Jaromir Dolecek <jdolecek@netbsd.org>
From: Frank van der Linden <fvdl@wasabisystems.com>
List: source-changes
Date: 03/16/2003 12:36:53
On Sat, Mar 15, 2003 at 04:04:24PM +0100, Jaromir Dolecek wrote:
> Does movl really zero extend? According to 80386 docs I read recently,
> movb/movw don't touch the upper part of the resiter, i.e. for example
> movb $1, %al wouldn't change %ah part and leave old contents there.
> Is x86_64 different, and does it zero the upper part of register instead?

In long (64 bit) mode:

	* movw and movb touch the lower 16 and 8 bits, respectively,
	  to be backward compatible.
	* movl gets zero-extended (upper 32 bits are zeroed out)
	* movq does the full 64 bits. For immediate movq instructions,
	  there is only a 32 bit value in the instruction, which gets
	  sign-extended.
	* The exception to the above is movabsq imm,reg which does have
	  a full 64 bit immediate value

- Frank