Skip to content

Commit 94e4bd4

Browse files
committed
py/asmx64: Support all 16 regs in reg to memory move instructions.
1 parent 46fc7a3 commit 94e4bd4

1 file changed

Lines changed: 6 additions & 9 deletions

File tree

py/asmx64.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -325,31 +325,28 @@ void asm_x64_mov_r64_r64(asm_x64_t *as, int dest_r64, int src_r64) {
325325
}
326326

327327
void 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

337336
void 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

347345
void 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

Comments
 (0)