Given the movsxd instruction on the x86-64 architecture (see: movsxd)
The instructions:
MOVSXD r16, r/m16
and
MOVSXD r32, r/m32
receive source & destination operands of the same sizes. As far as I understand, there's no point for sign extension in these cases. If I'm wrong please explain why. Otherwise, why do these variations exist?