Skip to content

Commit f49d47c

Browse files
committed
py/asmx64: Support use of top 8 regs in src_r64 argument.
Signed-off-by: Damien George <damien@micropython.org>
1 parent 04927df commit f49d47c

File tree

1 file changed

+6
-9
lines changed

1 file changed

+6
-9
lines changed

py/asmx64.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

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

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

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

Comments
 (0)