From 1c6a1dc740a8414be6c9b1101354fe9a8974ff13 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Mon, 29 Sep 2014 22:44:18 +0100
Subject: [PATCH] py: Allow x86-64 to mov r16 to rm16 with extended src reg.

Fixes bug with x86-64 viper ptr16.
---
 py/asmx64.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/py/asmx64.c b/py/asmx64.c
index 3f111781f..bca825b3c 100644
--- a/py/asmx64.c
+++ b/py/asmx64.c
@@ -311,9 +311,12 @@ void asm_x64_mov_r8_to_disp(asm_x64_t *as, int src_r64, int dest_r64, int dest_d
 }
 
 void asm_x64_mov_r16_to_disp(asm_x64_t *as, int src_r64, int dest_r64, int dest_disp) {
-    assert(src_r64 < 8);
     assert(dest_r64 < 8);
-    asm_x64_write_byte_2(as, OP_SIZE_PREFIX, OPCODE_MOV_R64_TO_RM64);
+    if (src_r64 < 8) {
+        asm_x64_write_byte_2(as, OP_SIZE_PREFIX, OPCODE_MOV_R64_TO_RM64);
+    } else {
+        asm_x64_write_byte_3(as, OP_SIZE_PREFIX, REX_PREFIX | REX_R, OPCODE_MOV_R64_TO_RM64);
+    }
     asm_x64_write_r64_disp(as, src_r64, dest_r64, dest_disp);
 }
 
-- 
GitLab