assemble.c: Don't drop rex prefix from instruction itself
authorCyrill Gorcunov <gorcunov@gmail.com>
Sun, 4 May 2014 20:30:58 +0000 (00:30 +0400)
committerH. Peter Anvin <hpa@zytor.com>
Mon, 5 May 2014 18:20:17 +0000 (11:20 -0700)
commitaa29b1d93f5a927c76aeee3d9e0830874015e7df
treec9158abbe0b89ec55b9dde24e54dd99c04d2c0de
parent429beab924958b75b91606f9b2da354804ca6eb5
assemble.c: Don't drop rex prefix from instruction itself

emit_rex is supposed to write REX prefix into output stream
if needed, but we happen to drop it off on a first write
which breaks REX required instructions if TIMES directive
is used.

For example the code like

| times 4 movq xmm11, xmm11

compiles into

0000000000000000 <.text>:
|   0: f3 45 0f 7e db        movq   %xmm11,%xmm11
|   5: f3 0f 7e db           movq   %xmm3,%xmm3
|   9: f3 0f 7e db           movq   %xmm3,%xmm3
|   d: f3 0f 7e db           movq   %xmm3,%xmm3

instead of proper

0000000000000000 <.text>:
|   0: f3 45 0f 7e db        movq   %xmm11,%xmm11
|   5: f3 45 0f 7e db        movq   %xmm11,%xmm11
|   a: f3 45 0f 7e db        movq   %xmm11,%xmm11
|   f: f3 45 0f 7e db        movq   %xmm11,%xmm11

http://bugzilla.nasm.us/show_bug.cgi?id=3392278

Reported-by: Javier <elpochodelagente@gmail.com>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
assemble.c