Skip to content

Commit 0067ebd

Browse files
authored
Merge pull request #461 from quake/quake/opt-cmp-0-test
perf: optimize cmp zero and jump with test
2 parents e768fd9 + 13b0d3c commit 0067ebd

File tree

1 file changed

+21
-21
lines changed

1 file changed

+21
-21
lines changed

src/machine/asm/execute_x64.S

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@
193193
shr $CKB_VM_ASM_MEMORY_FRAME_SHIFTS, TEMP1; \
194194
movq TEMP1, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_LAST_READ_FRAME(MACHINE); \
195195
movzbl CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_FRAMES(MACHINE, TEMP1), TEMP2d; \
196-
cmp $0, TEMP2d; \
196+
test TEMP2d, TEMP2d; \
197197
jne 1f; \
198198
movb $1, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_FRAMES(MACHINE, TEMP1); \
199199
PREPCALL; \
@@ -207,7 +207,7 @@
207207
subq $1, TEMP1; \
208208
shr $CKB_VM_ASM_MEMORY_FRAME_SHIFTS, TEMP1; \
209209
movzbl CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_FRAMES(MACHINE, TEMP1), TEMP2d; \
210-
cmp $0, TEMP2d; \
210+
test TEMP2d, TEMP2d; \
211211
jne 2f; \
212212
movb $1, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_FRAMES(MACHINE, TEMP1);\
213213
PREPCALL; \
@@ -283,7 +283,7 @@
283283
movq TEMP1, TEMP2; \
284284
shr $CKB_VM_ASM_MEMORY_FRAME_PAGE_SHIFTS, TEMP1; \
285285
movzbl CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_FRAMES(MACHINE, TEMP1), temp_regd; \
286-
cmp $0, temp_regd; \
286+
test temp_regd, temp_regd; \
287287
jne 1f; \
288288
movb $1, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_FRAMES(MACHINE, TEMP1); \
289289
PREPCALL; \
@@ -312,7 +312,7 @@
312312
movb TEMP2b, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_FLAGS(MACHINE, TEMP1); \
313313
shr $CKB_VM_ASM_MEMORY_FRAME_PAGE_SHIFTS, TEMP1; \
314314
movzbl CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_FRAMES(MACHINE, TEMP1), temp_regd; \
315-
cmp $0, temp_regd; \
315+
test temp_regd, temp_regd; \
316316
jne 2f; \
317317
movb $1, CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_FRAMES(MACHINE, TEMP1); \
318318
PREPCALL; \
@@ -441,7 +441,7 @@ ckb_vm_x64_execute:
441441
cmp %rcx, %rdx
442442
jne .exit_trace
443443
movzbl CKB_VM_ASM_TRACE_OFFSET_LENGTH(TRACE), %edx
444-
cmp $0, %rdx
444+
test %rdx, %rdx
445445
je .exit_trace
446446
movq CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES(MACHINE), %rax
447447
addq CKB_VM_ASM_TRACE_OFFSET_CYCLES(TRACE), %rax
@@ -462,7 +462,7 @@ ckb_vm_x64_execute:
462462
.p2align 3
463463
.prepare_trace:
464464
movzbl 0(PAUSE), %eax
465-
cmp $0, %rax
465+
test %rax, %rax
466466
jnz .exit_pause
467467
LOAD_PC(%rax, %eax, %rcx, %ecx, TEMP3d)
468468
shr $2, %eax
@@ -473,7 +473,7 @@ ckb_vm_x64_execute:
473473
cmp %rcx, %rdx
474474
jne .exit_trace
475475
movzbl CKB_VM_ASM_TRACE_OFFSET_LENGTH(TRACE), %edx
476-
cmp $0, %rdx
476+
test %rdx, %rdx
477477
je .exit_trace
478478
movq CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_CYCLES(MACHINE), %rax
479479
addq CKB_VM_ASM_TRACE_OFFSET_CYCLES(TRACE), %rax
@@ -609,7 +609,7 @@ ckb_vm_x64_execute:
609609
jne .div_branch1
610610
jmp .div_branch3
611611
.div_branch1:
612-
cmp $0, RS2r
612+
test RS2r, RS2r
613613
jne .div_branch2
614614
movq $UINT64_MAX, RS1
615615
jmp .div_branch3
@@ -626,7 +626,7 @@ ckb_vm_x64_execute:
626626
.CKB_VM_ASM_LABEL_OP_DIVU:
627627
DECODE_R
628628
movq REGISTER_ADDRESS(RS2r), RS2r
629-
cmp $0, RS2r
629+
test RS2r, RS2r
630630
jne .divu_branch1
631631
WRITE_RD_VALUE($UINT64_MAX, RS2r)
632632
NEXT_INST
@@ -646,7 +646,7 @@ ckb_vm_x64_execute:
646646
DECODE_R
647647
movq REGISTER_ADDRESS(RS2r), RS2r
648648
mov RS2rd, RS2rd
649-
cmp $0, RS2r
649+
test RS2r, RS2r
650650
jne .divuw_branch1
651651
WRITE_RD_VALUE($UINT64_MAX, RS2r)
652652
NEXT_INST
@@ -678,7 +678,7 @@ ckb_vm_x64_execute:
678678
jne .divw_branch1
679679
jmp .divw_branch3
680680
.divw_branch1:
681-
cmp $0, RS2r
681+
test RS2r, RS2r
682682
jne .divw_branch2
683683
movq $UINT64_MAX, RS1
684684
jmp .divw_branch3
@@ -983,7 +983,7 @@ ckb_vm_x64_execute:
983983
xorq RS1, RS1
984984
jmp .rem_branch3
985985
.rem_branch1:
986-
cmp $0, RS2r
986+
test RS2r, RS2r
987987
jne .rem_branch2
988988
jmp .rem_branch3
989989
.rem_branch2:
@@ -999,7 +999,7 @@ ckb_vm_x64_execute:
999999
.CKB_VM_ASM_LABEL_OP_REMU:
10001000
DECODE_R
10011001
movq REGISTER_ADDRESS(RS2r), RS2r
1002-
cmp $0, RS2r
1002+
test RS2r, RS2r
10031003
jne .remu_branch2
10041004
movq REGISTER_ADDRESS(RS1), RS1
10051005
WRITE_RD(RS1)
@@ -1020,7 +1020,7 @@ ckb_vm_x64_execute:
10201020
DECODE_R
10211021
movq REGISTER_ADDRESS(RS2r), RS2r
10221022
mov RS2rd, RS2rd
1023-
cmp $0, RS2r
1023+
test RS2r, RS2r
10241024
jne .remuw_branch2
10251025
movq REGISTER_ADDRESS(RS1), RS1
10261026
movslq RS1d, RS1
@@ -1055,7 +1055,7 @@ ckb_vm_x64_execute:
10551055
xorq RS1, RS1
10561056
jmp .remw_branch3
10571057
.remw_branch1:
1058-
cmp $0, RS2r
1058+
test RS2r, RS2r
10591059
jne .remw_branch2
10601060
jmp .remw_branch3
10611061
.remw_branch2:
@@ -1696,7 +1696,7 @@ ckb_vm_x64_execute:
16961696
.CKB_VM_ASM_LABEL_OP_CLZ:
16971697
DECODE_R
16981698
movq REGISTER_ADDRESS(RS1), RS1
1699-
cmp $0, RS1
1699+
test RS1, RS1
17001700
je .clz_branch
17011701
bsr RS1, RS1
17021702
neg RS1
@@ -1710,7 +1710,7 @@ ckb_vm_x64_execute:
17101710
.CKB_VM_ASM_LABEL_OP_CLZW:
17111711
DECODE_R
17121712
movq REGISTER_ADDRESS(RS1), RS1
1713-
cmp $0, RS1d
1713+
test RS1d, RS1d
17141714
je .clzw_branch
17151715
bsr RS1d, RS1d
17161716
neg RS1
@@ -1807,7 +1807,7 @@ ckb_vm_x64_execute:
18071807
.CKB_VM_ASM_LABEL_OP_CTZ:
18081808
DECODE_R
18091809
movq REGISTER_ADDRESS(RS1), RS1
1810-
cmp $0, RS1
1810+
test RS1, RS1
18111811
je .ctz_branch
18121812
bsf RS1, RS1
18131813
WRITE_RD(RS1)
@@ -1819,7 +1819,7 @@ ckb_vm_x64_execute:
18191819
.CKB_VM_ASM_LABEL_OP_CTZW:
18201820
DECODE_R
18211821
movq REGISTER_ADDRESS(RS1), RS1
1822-
cmp $0, RS1d
1822+
test RS1d, RS1d
18231823
je .ctzw_branch
18241824
bsf RS1d, RS1d
18251825
WRITE_RD(RS1)
@@ -2221,7 +2221,7 @@ ckb_vm_x64_execute:
22212221
xorq TEMP1, TEMP1
22222222
jmp .wide_div_branch3
22232223
.wide_div_branch1:
2224-
cmp $0, RS2r
2224+
test RS2r, RS2r
22252225
jne .wide_div_branch2
22262226
movq RS1, TEMP1
22272227
movq $UINT64_MAX, RS1
@@ -2242,7 +2242,7 @@ ckb_vm_x64_execute:
22422242
DECODE_R4
22432243
movq REGISTER_ADDRESS(RS1), RS1
22442244
movq REGISTER_ADDRESS(RS2r), RS2r
2245-
cmp $0, RS2r
2245+
test RS2r, RS2r
22462246
jne .wide_divu_branch1
22472247
WRITE_RS3(RS1)
22482248
WRITE_RD_VALUE($UINT64_MAX, RS2r)

0 commit comments

Comments
 (0)