@@ -285,31 +285,28 @@ void asm_x64_mov_r64_to_mem64(asm_x64_t *as, int src_r64, int dest_r64, int dest
285285}
286286
287287void asm_x64_mov_mem8_to_r64zx (asm_x64_t * as , int src_r64 , int src_disp , int dest_r64 ) {
288- assert (src_r64 < 8 );
289- if (dest_r64 < 8 ) {
288+ if (src_r64 < 8 && dest_r64 < 8 ) {
290289 asm_x64_write_byte_2 (as , 0x0f , OPCODE_MOVZX_RM8_TO_R64 );
291290 } else {
292- asm_x64_write_byte_3 (as , REX_PREFIX | REX_R , 0x0f , OPCODE_MOVZX_RM8_TO_R64 );
291+ asm_x64_write_byte_3 (as , REX_PREFIX | REX_R_FROM_R64 ( dest_r64 ) | REX_B_FROM_R64 ( src_r64 ) , 0x0f , OPCODE_MOVZX_RM8_TO_R64 );
293292 }
294293 asm_x64_write_r64_disp (as , dest_r64 , src_r64 , src_disp );
295294}
296295
297296void asm_x64_mov_mem16_to_r64zx (asm_x64_t * as , int src_r64 , int src_disp , int dest_r64 ) {
298- assert (src_r64 < 8 );
299- if (dest_r64 < 8 ) {
297+ if (src_r64 < 8 && dest_r64 < 8 ) {
300298 asm_x64_write_byte_2 (as , 0x0f , OPCODE_MOVZX_RM16_TO_R64 );
301299 } else {
302- asm_x64_write_byte_3 (as , REX_PREFIX | REX_R , 0x0f , OPCODE_MOVZX_RM16_TO_R64 );
300+ asm_x64_write_byte_3 (as , REX_PREFIX | REX_R_FROM_R64 ( dest_r64 ) | REX_B_FROM_R64 ( src_r64 ) , 0x0f , OPCODE_MOVZX_RM16_TO_R64 );
303301 }
304302 asm_x64_write_r64_disp (as , dest_r64 , src_r64 , src_disp );
305303}
306304
307305void asm_x64_mov_mem32_to_r64zx (asm_x64_t * as , int src_r64 , int src_disp , int dest_r64 ) {
308- assert (src_r64 < 8 );
309- if (dest_r64 < 8 ) {
306+ if (src_r64 < 8 && dest_r64 < 8 ) {
310307 asm_x64_write_byte_1 (as , OPCODE_MOV_RM64_TO_R64 );
311308 } else {
312- asm_x64_write_byte_2 (as , REX_PREFIX | REX_R , OPCODE_MOV_RM64_TO_R64 );
309+ asm_x64_write_byte_2 (as , REX_PREFIX | REX_R_FROM_R64 ( dest_r64 ) | REX_B_FROM_R64 ( src_r64 ) , OPCODE_MOV_RM64_TO_R64 );
313310 }
314311 asm_x64_write_r64_disp (as , dest_r64 , src_r64 , src_disp );
315312}
0 commit comments