@@ -325,31 +325,28 @@ void asm_x64_mov_r64_r64(asm_x64_t *as, int dest_r64, int src_r64) {
325325}
326326
327327void asm_x64_mov_r8_to_mem8 (asm_x64_t * as , int src_r64 , int dest_r64 , int dest_disp ) {
328- assert (dest_r64 < 8 );
329- if (src_r64 < 8 ) {
328+ if (src_r64 < 8 && dest_r64 < 8 ) {
330329 asm_x64_write_byte_1 (as , OPCODE_MOV_R8_TO_RM8 );
331330 } else {
332- asm_x64_write_byte_2 (as , REX_PREFIX | REX_R , OPCODE_MOV_R8_TO_RM8 );
331+ asm_x64_write_byte_2 (as , REX_PREFIX | REX_R_FROM_R64 ( src_r64 ) | REX_B_FROM_R64 ( dest_r64 ) , OPCODE_MOV_R8_TO_RM8 );
333332 }
334333 asm_x64_write_r64_disp (as , src_r64 , dest_r64 , dest_disp );
335334}
336335
337336void asm_x64_mov_r16_to_mem16 (asm_x64_t * as , int src_r64 , int dest_r64 , int dest_disp ) {
338- assert (dest_r64 < 8 );
339- if (src_r64 < 8 ) {
337+ if (src_r64 < 8 && dest_r64 < 8 ) {
340338 asm_x64_write_byte_2 (as , OP_SIZE_PREFIX , OPCODE_MOV_R64_TO_RM64 );
341339 } else {
342- asm_x64_write_byte_3 (as , OP_SIZE_PREFIX , REX_PREFIX | REX_R , OPCODE_MOV_R64_TO_RM64 );
340+ asm_x64_write_byte_3 (as , OP_SIZE_PREFIX , REX_PREFIX | REX_R_FROM_R64 ( src_r64 ) | REX_B_FROM_R64 ( dest_r64 ) , OPCODE_MOV_R64_TO_RM64 );
343341 }
344342 asm_x64_write_r64_disp (as , src_r64 , dest_r64 , dest_disp );
345343}
346344
347345void asm_x64_mov_r32_to_mem32 (asm_x64_t * as , int src_r64 , int dest_r64 , int dest_disp ) {
348- assert (dest_r64 < 8 );
349- if (src_r64 < 8 ) {
346+ if (src_r64 < 8 && dest_r64 < 8 ) {
350347 asm_x64_write_byte_1 (as , OPCODE_MOV_R64_TO_RM64 );
351348 } else {
352- asm_x64_write_byte_2 (as , REX_PREFIX | REX_R , OPCODE_MOV_R64_TO_RM64 );
349+ asm_x64_write_byte_2 (as , REX_PREFIX | REX_R_FROM_R64 ( src_r64 ) | REX_B_FROM_R64 ( dest_r64 ) , OPCODE_MOV_R64_TO_RM64 );
353350 }
354351 asm_x64_write_r64_disp (as , src_r64 , dest_r64 , dest_disp );
355352}
0 commit comments