Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 4 additions & 48 deletions src/machine/asm/execute_aarch64.S
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,7 @@ ckb_vm_x64_execute:
ldr TEMP4, [TRACE, CKB_VM_ASM_TRACE_OFFSET_ADDRESS]
cmp TEMP4, TEMP3
bne .exit_trace
.trace_loaded:
ldr TEMP3w, [TRACE, CKB_VM_ASM_TRACE_OFFSET_LENGTH]
cmp TEMP3w, 0
beq .exit_trace
Expand Down Expand Up @@ -351,59 +352,14 @@ ckb_vm_x64_execute:
.CKB_VM_ASM_LABEL_OP_CUSTOM_ASM_TRACE_JUMP:
/* Load current instruction as the full trace address */
ldr TRACE, [INST_ARGS, -16]
/* Prefetch trace info for the consecutive block, pc is in TEMP3 now */
prfm pldl3keep, [TRACE, CKB_VM_ASM_TRACE_OFFSET_THREADS]
ldr TEMP4, [MACHINE, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_PC]
ldr TEMP3w, [TRACE, CKB_VM_ASM_TRACE_OFFSET_LENGTH]
cmp TEMP3w, 0
beq .exit_trace
ldr TEMP2, [MACHINE, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES]
ldr TEMP1, [TRACE, CKB_VM_ASM_TRACE_OFFSET_CYCLES]
add TEMP2, TEMP2, TEMP1
cmp TEMP2, TEMP1
bcc .exit_cycles_overflow
ldr TEMP1, [MACHINE, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_MAX_CYCLES]
cmp TEMP2, TEMP1
bhi .exit_max_cycles_exceeded
str TEMP2, [MACHINE, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES]
add TEMP3, TEMP3, TEMP4
str TEMP3, [MACHINE, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_PC]
add INST_PC, TRACE, CKB_VM_ASM_TRACE_OFFSET_THREADS
add INST_ARGS, INST_PC, 8
NEXT_INST
ldr TEMP4, [TRACE, CKB_VM_ASM_TRACE_OFFSET_ADDRESS]
b .trace_loaded
.prepare_trace:
ldr TEMP2, [INVOKE_DATA, CKB_VM_ASM_INVOKE_DATA_OFFSET_PAUSE]
ldarb TEMP2w, [TEMP2]
cmp TEMP2, ZERO_VALUE
bne .exit_pause
LOAD_PC(TEMP2, TEMP2w, TEMP3, TEMP3w, TEMP4w)
lsr TEMP2, TEMP2, 2
ldr TEMP1, [INVOKE_DATA, CKB_VM_ASM_INVOKE_DATA_OFFSET_FIXED_TRACE_MASK]
and TEMP2, TEMP2, TEMP1
mov TEMP1, CKB_VM_ASM_FIXED_TRACE_STRUCT_SIZE
mul TEMP2, TEMP2, TEMP1
ldr TRACE, [INVOKE_DATA, CKB_VM_ASM_INVOKE_DATA_OFFSET_FIXED_TRACES]
add TRACE, TRACE, TEMP2
ldr TEMP4, [TRACE, CKB_VM_ASM_TRACE_OFFSET_ADDRESS]
cmp TEMP4, TEMP3
bne .exit_trace
ldr TEMP3w, [TRACE, CKB_VM_ASM_TRACE_OFFSET_LENGTH]
cmp TEMP3w, 0
beq .exit_trace
ldr TEMP2, [MACHINE, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES]
ldr TEMP1, [TRACE, CKB_VM_ASM_TRACE_OFFSET_CYCLES]
add TEMP2, TEMP2, TEMP1
cmp TEMP2, TEMP1
bcc .exit_cycles_overflow
ldr TEMP1, [MACHINE, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_MAX_CYCLES]
cmp TEMP2, TEMP1
bhi .exit_max_cycles_exceeded
str TEMP2, [MACHINE, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES]
add TEMP3, TEMP3, TEMP4
str TEMP3, [MACHINE, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_PC]
add INST_PC, TRACE, CKB_VM_ASM_TRACE_OFFSET_THREADS
add INST_ARGS, INST_PC, 8
NEXT_INST
b .CKB_VM_ASM_LABEL_OP_CUSTOM_TRACE_END
.CKB_VM_ASM_LABEL_OP_ADDI:
DECODE_I
ldr RS1, REGISTER_ADDRESS(RS1)
Expand Down
40 changes: 3 additions & 37 deletions src/machine/asm/execute_x64.S
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,7 @@ ckb_vm_x64_execute:
movq CKB_VM_ASM_TRACE_OFFSET_ADDRESS(TRACE), %rdx
cmp %rcx, %rdx
jne .exit_trace
.trace_loaded:
mov CKB_VM_ASM_TRACE_OFFSET_LENGTH(TRACE), %edx
test %rdx, %rdx
je .exit_trace
Expand All @@ -467,49 +468,14 @@ ckb_vm_x64_execute:
.CKB_VM_ASM_LABEL_OP_CUSTOM_ASM_TRACE_JUMP:
/* Load current instruction as the full trace address */
movq -16(INST_ARGS), TRACE
/* Prefetch trace info for the consecutive block */
prefetcht2 CKB_VM_ASM_TRACE_OFFSET_THREADS(TRACE)
mov CKB_VM_ASM_TRACE_OFFSET_LENGTH(TRACE), %edx
movq CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES(MACHINE), %rax
addq CKB_VM_ASM_TRACE_OFFSET_CYCLES(TRACE), %rax
jc .exit_cycles_overflow
cmp CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_MAX_CYCLES(MACHINE), %rax
ja .exit_max_cycles_exceeded
movq %rax, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES(MACHINE)
addq %rdx, PC_ADDRESS
lea CKB_VM_ASM_TRACE_OFFSET_THREADS(TRACE), INST_PC
mov INST_PC, INST_ARGS
add $8, INST_ARGS
NEXT_INST
jmp .trace_loaded
.p2align 3
.prepare_trace:
movq CKB_VM_ASM_INVOKE_DATA_OFFSET_PAUSE(INVOKE_DATA), %rax
movzbl 0(%rax), %eax
test %rax, %rax
jnz .exit_pause
LOAD_PC(%rax, %eax, %rcx, %ecx, TEMP3d)
shr $2, %eax
andq CKB_VM_ASM_INVOKE_DATA_OFFSET_FIXED_TRACE_MASK(INVOKE_DATA), %rax
imul $CKB_VM_ASM_FIXED_TRACE_STRUCT_SIZE, %eax
movq CKB_VM_ASM_INVOKE_DATA_OFFSET_FIXED_TRACES(INVOKE_DATA), TRACE
addq %rax, TRACE
movq CKB_VM_ASM_TRACE_OFFSET_ADDRESS(TRACE), %rdx
cmp %rcx, %rdx
jne .exit_trace
mov CKB_VM_ASM_TRACE_OFFSET_LENGTH(TRACE), %edx
test %rdx, %rdx
je .exit_trace
movq CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES(MACHINE), %rax
addq CKB_VM_ASM_TRACE_OFFSET_CYCLES(TRACE), %rax
jc .exit_cycles_overflow
cmp CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_MAX_CYCLES(MACHINE), %rax
ja .exit_max_cycles_exceeded
movq %rax, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES(MACHINE)
addq %rdx, PC_ADDRESS
lea CKB_VM_ASM_TRACE_OFFSET_THREADS(TRACE), INST_PC
mov INST_PC, INST_ARGS
add $8, INST_ARGS
NEXT_INST
jmp .CKB_VM_ASM_LABEL_OP_CUSTOM_TRACE_END
.p2align 3
.CKB_VM_ASM_LABEL_OP_ADDI:
DECODE_I
Expand Down