Skip to content

Commit eee0945

Browse files
committed
perf: optimize register increment by replacing mov + add with lea
1 parent 5303f6c commit eee0945

File tree

1 file changed

+9
-18
lines changed

1 file changed

+9
-18
lines changed

src/machine/asm/execute_x64.S

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,7 @@
203203
CALL_INITED_MEMORY; \
204204
POSTCALL; \
205205
1: \
206-
movq address_reg, TEMP1; \
207-
addq $length, TEMP1; \
206+
leaq length(address_reg), TEMP1; \
208207
subq $1, TEMP1; \
209208
shr $CKB_VM_ASM_MEMORY_FRAME_SHIFTS, TEMP1; \
210209
movq CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_FRAMES_PTR(MACHINE), TEMP3; \
@@ -225,8 +224,7 @@
225224
movq CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_LAST_READ_FRAME(MACHINE), TEMP2; \
226225
cmp TEMP2, TEMP1; \
227226
jne 3f; \
228-
movq address_reg, TEMP2; \
229-
addq $length, TEMP2; \
227+
leaq length(address_reg), TEMP2; \
230228
shr $CKB_VM_ASM_MEMORY_FRAME_SHIFTS, TEMP2; \
231229
cmp TEMP2, TEMP1; \
232230
je 2f; \
@@ -245,8 +243,7 @@
245243
movq CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_LAST_READ_FRAME(MACHINE), TEMP2; \
246244
cmp TEMP2, TEMP1; \
247245
jne 3f; \
248-
movq address_reg, TEMP2; \
249-
addq $length, TEMP2; \
246+
leaq length(address_reg), TEMP2; \
250247
shr $CKB_VM_ASM_MEMORY_FRAME_SHIFTS, TEMP2; \
251248
cmp TEMP2, TEMP1; \
252249
je 2f; \
@@ -265,8 +262,7 @@
265262
movq CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_LAST_WRITE_PAGE(MACHINE), TEMP2; \
266263
cmp TEMP2, TEMP1; \
267264
jne 3f;\
268-
movq address_reg, TEMP2; \
269-
addq $length, TEMP2; \
265+
leaq length(address_reg), TEMP2; \
270266
shr $CKB_VM_ASM_RISCV_PAGE_SHIFTS, TEMP2; \
271267
cmp TEMP2, TEMP1; \
272268
je 2f;\
@@ -297,11 +293,9 @@
297293
CALL_INITED_MEMORY; \
298294
POSTCALL; \
299295
1: \
300-
movq TEMP2, TEMP1; \
301-
addq $1, TEMP1; \
296+
leaq 1(TEMP2), TEMP1; \
302297
shl $CKB_VM_ASM_RISCV_PAGE_SHIFTS, TEMP1; \
303-
movq address_reg, TEMP3; \
304-
addq $length, TEMP3; \
298+
leaq length(address_reg), TEMP3; \
305299
cmp TEMP1, TEMP3; \
306300
jbe 2f; \
307301
shr $CKB_VM_ASM_RISCV_PAGE_SHIFTS, TEMP1; \
@@ -460,8 +454,7 @@ ckb_vm_x64_execute:
460454
movq CKB_VM_ASM_INVOKE_DATA_OFFSET_FIXED_TRACES(INVOKE_DATA), %rdx
461455
prefetcht2 0(%rdx, %rax)
462456
lea CKB_VM_ASM_TRACE_OFFSET_THREADS(TRACE), INST_PC
463-
mov INST_PC, INST_ARGS
464-
add $8, INST_ARGS
457+
lea 8(INST_PC), INST_ARGS
465458
NEXT_INST
466459
.p2align 3
467460
.CKB_VM_ASM_LABEL_OP_CUSTOM_ASM_TRACE_JUMP:
@@ -478,8 +471,7 @@ ckb_vm_x64_execute:
478471
movq %rax, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES(MACHINE)
479472
addq %rdx, PC_ADDRESS
480473
lea CKB_VM_ASM_TRACE_OFFSET_THREADS(TRACE), INST_PC
481-
mov INST_PC, INST_ARGS
482-
add $8, INST_ARGS
474+
lea 8(INST_PC), INST_ARGS
483475
NEXT_INST
484476
.p2align 3
485477
.prepare_trace:
@@ -507,8 +499,7 @@ ckb_vm_x64_execute:
507499
movq %rax, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES(MACHINE)
508500
addq %rdx, PC_ADDRESS
509501
lea CKB_VM_ASM_TRACE_OFFSET_THREADS(TRACE), INST_PC
510-
mov INST_PC, INST_ARGS
511-
add $8, INST_ARGS
502+
lea 8(INST_PC), INST_ARGS
512503
NEXT_INST
513504
.p2align 3
514505
.CKB_VM_ASM_LABEL_OP_ADDI:

0 commit comments

Comments
 (0)