forked from NUDT-compiler/nudt-compiler-cpp
parent
bcb7093a52
commit
79700151e4
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #3
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,392 @@
|
||||
.data
|
||||
.globl a
|
||||
.p2align 2
|
||||
a:
|
||||
.word 3
|
||||
.globl b
|
||||
.p2align 2
|
||||
b:
|
||||
.word 5
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
adrp x13, b
|
||||
ldr w8, [x13, #:lo12:b]
|
||||
mov w9, #5
|
||||
add w8, w9, w8
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #5
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,385 @@
|
||||
.data
|
||||
.globl a
|
||||
.p2align 2
|
||||
a:
|
||||
.zero 400
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #0
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,532 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #224
|
||||
stp x23, x19, [sp, #0]
|
||||
stp x21, x22, [sp, #16]
|
||||
str x20, [sp, #32]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov x10, x29
|
||||
sub x10, x10, #32
|
||||
mov w9, #0
|
||||
str w9, [x10]
|
||||
mov x8, #4
|
||||
add x8, x10, x8
|
||||
str w9, [x8]
|
||||
mov x8, #8
|
||||
add x8, x10, x8
|
||||
str w9, [x8]
|
||||
mov x8, #12
|
||||
add x8, x10, x8
|
||||
str w9, [x8]
|
||||
mov x8, #16
|
||||
add x8, x10, x8
|
||||
str w9, [x8]
|
||||
mov x8, #20
|
||||
add x8, x10, x8
|
||||
str w9, [x8]
|
||||
mov x8, #24
|
||||
add x8, x10, x8
|
||||
str w9, [x8]
|
||||
mov x8, #28
|
||||
add x8, x10, x8
|
||||
str w9, [x8]
|
||||
mov x12, x29
|
||||
sub x12, x12, #64
|
||||
mov w22, #1
|
||||
str w22, [x12]
|
||||
mov x8, #4
|
||||
add x8, x12, x8
|
||||
mov w21, #2
|
||||
str w21, [x8]
|
||||
mov x8, #8
|
||||
add x8, x12, x8
|
||||
mov w20, #3
|
||||
str w20, [x8]
|
||||
mov x8, #12
|
||||
add x8, x12, x8
|
||||
mov w11, #4
|
||||
str w11, [x8]
|
||||
mov x8, #16
|
||||
add x8, x12, x8
|
||||
mov w19, #5
|
||||
str w19, [x8]
|
||||
mov x8, #20
|
||||
add x8, x12, x8
|
||||
mov w17, #6
|
||||
str w17, [x8]
|
||||
mov x8, #24
|
||||
add x8, x12, x8
|
||||
mov w16, #7
|
||||
str w16, [x8]
|
||||
mov x8, #28
|
||||
add x8, x12, x8
|
||||
mov w15, #8
|
||||
str w15, [x8]
|
||||
mov x12, x29
|
||||
sub x12, x12, #96
|
||||
str w22, [x12]
|
||||
mov x8, #4
|
||||
add x8, x12, x8
|
||||
str w21, [x8]
|
||||
mov x8, #8
|
||||
add x8, x12, x8
|
||||
str w20, [x8]
|
||||
mov x8, #12
|
||||
add x8, x12, x8
|
||||
str w11, [x8]
|
||||
mov x8, #16
|
||||
add x8, x12, x8
|
||||
str w19, [x8]
|
||||
mov x8, #20
|
||||
add x8, x12, x8
|
||||
str w17, [x8]
|
||||
mov x8, #24
|
||||
add x8, x12, x8
|
||||
str w16, [x8]
|
||||
mov x8, #28
|
||||
add x8, x12, x8
|
||||
str w15, [x8]
|
||||
mov x23, x29
|
||||
sub x23, x23, #128
|
||||
str w22, [x23]
|
||||
mov x8, #4
|
||||
add x8, x23, x8
|
||||
str w21, [x8]
|
||||
mov x8, #8
|
||||
add x8, x23, x8
|
||||
str w20, [x8]
|
||||
mov x8, #12
|
||||
add x8, x23, x8
|
||||
str w9, [x8]
|
||||
mov x8, #16
|
||||
add x8, x23, x8
|
||||
str w19, [x8]
|
||||
mov x8, #20
|
||||
add x8, x23, x8
|
||||
str w9, [x8]
|
||||
mov x8, #24
|
||||
add x8, x23, x8
|
||||
str w16, [x8]
|
||||
mov x8, #28
|
||||
add x8, x23, x8
|
||||
str w15, [x8]
|
||||
mov x8, #20
|
||||
add x8, x23, x8
|
||||
ldr w8, [x8]
|
||||
mov x21, x29
|
||||
sub x21, x21, #160
|
||||
str w8, [x21]
|
||||
mov x8, #20
|
||||
add x8, x12, x8
|
||||
ldr w8, [x8]
|
||||
mov x9, #4
|
||||
add x9, x21, x9
|
||||
str w8, [x9]
|
||||
mov x8, #8
|
||||
add x8, x21, x8
|
||||
str w20, [x8]
|
||||
mov x8, #12
|
||||
add x8, x21, x8
|
||||
str w11, [x8]
|
||||
mov x8, #16
|
||||
add x8, x21, x8
|
||||
str w19, [x8]
|
||||
mov x8, #20
|
||||
add x8, x21, x8
|
||||
str w17, [x8]
|
||||
mov x8, #24
|
||||
add x8, x21, x8
|
||||
str w16, [x8]
|
||||
mov x8, #28
|
||||
add x8, x21, x8
|
||||
str w15, [x8]
|
||||
mov x8, #28
|
||||
add x8, x21, x8
|
||||
ldr w9, [x8]
|
||||
ldr w8, [x21]
|
||||
add w9, w9, w8
|
||||
mov x8, #4
|
||||
add x8, x21, x8
|
||||
ldr w8, [x8]
|
||||
add w9, w9, w8
|
||||
mov x8, #16
|
||||
add x8, x10, x8
|
||||
ldr w8, [x8]
|
||||
add w8, w9, w8
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldp x23, x19, [sp, #0]
|
||||
ldp x21, x22, [sp, #16]
|
||||
ldr x20, [sp, #32]
|
||||
add sp, sp, #224
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,535 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #224
|
||||
stp x19, x21, [sp, #0]
|
||||
stp x20, x22, [sp, #16]
|
||||
str x23, [sp, #32]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov x10, x29
|
||||
sub x10, x10, #160
|
||||
mov w21, #1
|
||||
str w21, [x10]
|
||||
mov x8, #4
|
||||
add x8, x10, x8
|
||||
mov w19, #2
|
||||
str w19, [x8]
|
||||
mov x8, #8
|
||||
add x8, x10, x8
|
||||
mov w11, #3
|
||||
str w11, [x8]
|
||||
mov x8, #12
|
||||
add x8, x10, x8
|
||||
mov w16, #4
|
||||
str w16, [x8]
|
||||
mov x8, #16
|
||||
add x8, x10, x8
|
||||
mov w12, #0
|
||||
str w12, [x8]
|
||||
mov x8, #20
|
||||
add x8, x10, x8
|
||||
str w12, [x8]
|
||||
mov x8, #24
|
||||
add x8, x10, x8
|
||||
mov w15, #7
|
||||
str w15, [x8]
|
||||
mov x8, #28
|
||||
add x8, x10, x8
|
||||
str w12, [x8]
|
||||
mov x9, x29
|
||||
sub x9, x9, #32
|
||||
str w12, [x9]
|
||||
mov x8, #4
|
||||
add x8, x9, x8
|
||||
str w12, [x8]
|
||||
mov x8, #8
|
||||
add x8, x9, x8
|
||||
str w12, [x8]
|
||||
mov x8, #12
|
||||
add x8, x9, x8
|
||||
str w12, [x8]
|
||||
mov x8, #16
|
||||
add x8, x9, x8
|
||||
str w12, [x8]
|
||||
mov x8, #20
|
||||
add x8, x9, x8
|
||||
str w12, [x8]
|
||||
mov x8, #24
|
||||
add x8, x9, x8
|
||||
str w12, [x8]
|
||||
mov x8, #28
|
||||
add x8, x9, x8
|
||||
str w12, [x8]
|
||||
mov x9, x29
|
||||
sub x9, x9, #64
|
||||
str w21, [x9]
|
||||
mov x8, #4
|
||||
add x8, x9, x8
|
||||
str w19, [x8]
|
||||
mov x8, #8
|
||||
add x8, x9, x8
|
||||
str w11, [x8]
|
||||
mov x8, #12
|
||||
add x8, x9, x8
|
||||
str w16, [x8]
|
||||
mov x8, #16
|
||||
add x8, x9, x8
|
||||
mov w17, #5
|
||||
str w17, [x8]
|
||||
mov x8, #20
|
||||
add x8, x9, x8
|
||||
mov w20, #6
|
||||
str w20, [x8]
|
||||
mov x8, #24
|
||||
add x8, x9, x8
|
||||
str w15, [x8]
|
||||
mov x8, #28
|
||||
add x8, x9, x8
|
||||
mov w22, #8
|
||||
str w22, [x8]
|
||||
mov x23, x29
|
||||
sub x23, x23, #96
|
||||
str w21, [x23]
|
||||
mov x8, #4
|
||||
add x8, x23, x8
|
||||
str w19, [x8]
|
||||
mov x8, #8
|
||||
add x8, x23, x8
|
||||
str w11, [x8]
|
||||
mov x8, #12
|
||||
add x8, x23, x8
|
||||
str w12, [x8]
|
||||
mov x8, #16
|
||||
add x8, x23, x8
|
||||
str w17, [x8]
|
||||
mov x8, #20
|
||||
add x8, x23, x8
|
||||
str w12, [x8]
|
||||
mov x8, #24
|
||||
add x8, x10, x8
|
||||
ldr w10, [x8]
|
||||
mov x8, #24
|
||||
add x8, x23, x8
|
||||
str w10, [x8]
|
||||
mov x8, #28
|
||||
add x8, x23, x8
|
||||
str w22, [x8]
|
||||
mov x8, #20
|
||||
add x8, x23, x8
|
||||
ldr w8, [x8]
|
||||
mov x10, x29
|
||||
sub x10, x10, #128
|
||||
str w8, [x10]
|
||||
mov x8, #20
|
||||
add x8, x9, x8
|
||||
ldr w8, [x8]
|
||||
mov x9, #4
|
||||
add x9, x10, x9
|
||||
str w8, [x9]
|
||||
mov x8, #8
|
||||
add x8, x10, x8
|
||||
str w11, [x8]
|
||||
mov x8, #12
|
||||
add x8, x10, x8
|
||||
str w16, [x8]
|
||||
mov x8, #16
|
||||
add x8, x10, x8
|
||||
str w17, [x8]
|
||||
mov x8, #20
|
||||
add x8, x10, x8
|
||||
str w20, [x8]
|
||||
mov x8, #24
|
||||
add x8, x10, x8
|
||||
str w15, [x8]
|
||||
mov x8, #28
|
||||
add x8, x10, x8
|
||||
str w22, [x8]
|
||||
mov x8, #28
|
||||
add x8, x10, x8
|
||||
ldr w9, [x8]
|
||||
ldr w8, [x10]
|
||||
add w9, w9, w8
|
||||
mov x8, #4
|
||||
add x8, x10, x8
|
||||
ldr w8, [x8]
|
||||
add w9, w9, w8
|
||||
mov x8, #24
|
||||
add x8, x23, x8
|
||||
ldr w8, [x8]
|
||||
add w8, w9, w8
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldp x19, x21, [sp, #0]
|
||||
ldp x20, x22, [sp, #16]
|
||||
ldr x23, [sp, #32]
|
||||
add sp, sp, #224
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,389 @@
|
||||
.data
|
||||
.globl a
|
||||
.p2align 2
|
||||
a:
|
||||
.word 10
|
||||
.globl b
|
||||
.p2align 2
|
||||
b:
|
||||
.word 5
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #5
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #5
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,393 @@
|
||||
.data
|
||||
.globl a
|
||||
.p2align 2
|
||||
a:
|
||||
.word 0
|
||||
.word 1
|
||||
.word 2
|
||||
.word 3
|
||||
.word 4
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
adrp x8, a
|
||||
add x8, x8, :lo12:a
|
||||
mov x9, #16
|
||||
add x8, x8, x9
|
||||
ldr w8, [x8]
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,634 @@
|
||||
.data
|
||||
.globl a
|
||||
.p2align 2
|
||||
a:
|
||||
.word 0
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl func
|
||||
.p2align 2
|
||||
func:
|
||||
.L.func.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #18439
|
||||
movk w0, #3710, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, w0
|
||||
mov w9, #1
|
||||
sub w8, w8, w9
|
||||
mov w0, w8
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #10
|
||||
adrp x13, a
|
||||
str w8, [x13, #:lo12:a]
|
||||
adrp x13, a
|
||||
ldr w8, [x13, #:lo12:a]
|
||||
mov w0, w8
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #18439
|
||||
movk w1, #3710, lsl #16
|
||||
bl __bolt_call
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
.L.main.1:
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #18439
|
||||
movk w0, #3710, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w9, w0
|
||||
mov w8, #1
|
||||
sub w8, w9, w8
|
||||
mov w0, w8
|
||||
.L.main.2:
|
||||
mov w8, w0
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,620 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl defn
|
||||
.p2align 2
|
||||
defn:
|
||||
.L.defn.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #48582
|
||||
movk w0, #36322, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #4
|
||||
mov w0, w8
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #48582
|
||||
movk w1, #36322, lsl #16
|
||||
bl __bolt_call
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
.L.main.1:
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #48582
|
||||
movk w0, #36322, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #4
|
||||
mov w0, w8
|
||||
.L.main.2:
|
||||
mov w8, w0
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #9
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,385 @@
|
||||
.data
|
||||
.globl a
|
||||
.p2align 2
|
||||
a:
|
||||
.word 10
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #15
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,385 @@
|
||||
.data
|
||||
.globl a
|
||||
.p2align 2
|
||||
a:
|
||||
.word 10
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #-8
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #8
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #50
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,385 @@
|
||||
.data
|
||||
.globl a
|
||||
.p2align 2
|
||||
a:
|
||||
.word 5
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #25
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #2
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,385 @@
|
||||
.data
|
||||
.globl a
|
||||
.p2align 2
|
||||
a:
|
||||
.word 10
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #2
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #3
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #1
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -0,0 +1,930 @@
|
||||
.data
|
||||
.globl arr
|
||||
.p2align 2
|
||||
arr:
|
||||
.word 1
|
||||
.word 2
|
||||
.word 33
|
||||
.word 4
|
||||
.word 5
|
||||
.word 6
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #0
|
||||
mov w9, w8
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
movz w2, #1
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
.L.main.1:
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #1
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w10, #6
|
||||
cmp w8, w10
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #1
|
||||
movz w2, #2
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
b.lt .L.main.2
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #1
|
||||
movz w2, #3
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
b .L.main.3
|
||||
.L.main.2:
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #2
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
adrp x11, arr
|
||||
add x11, x11, :lo12:arr
|
||||
sxtw x10, w8
|
||||
lsl x10, x10, #2
|
||||
add x10, x11, x10
|
||||
ldr w10, [x10]
|
||||
add w9, w9, w10
|
||||
mov w10, #1
|
||||
add w8, w8, w10
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #2
|
||||
movz w2, #1
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
b .L.main.1
|
||||
.L.main.3:
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #3
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w0, w9
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #40
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #24
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #40
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -0,0 +1,919 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w9, #0
|
||||
mov w8, #0
|
||||
cmp w9, w8
|
||||
cset w9, eq
|
||||
cmp w9, w8
|
||||
cset w9, eq
|
||||
sub w9, w8, w9
|
||||
mov w8, #0
|
||||
cmp w9, w8
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
movz w2, #1
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
b.ne .L.main.1
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
movz w2, #2
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
b .L.main.2
|
||||
.L.main.1:
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #1
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #-1
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #1
|
||||
movz w2, #3
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
b .L.main.3
|
||||
.L.main.2:
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #2
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #0
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #2
|
||||
movz w2, #3
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
.L.main.3:
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #3
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,997 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w9, #0
|
||||
mov w8, #0
|
||||
cmp w9, w8
|
||||
cset w9, eq
|
||||
cmp w9, w8
|
||||
cset w9, eq
|
||||
sub w9, w8, w9
|
||||
mov w8, #0
|
||||
cmp w9, w8
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
movz w2, #1
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
b.ne .L.main.1
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
movz w2, #2
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
b .L.main.2
|
||||
.L.main.1:
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #1
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #-1
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #1
|
||||
movz w2, #3
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
b .L.main.3
|
||||
.L.main.2:
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #2
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #4
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #2
|
||||
movz w2, #3
|
||||
bl __bolt_edge
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
.L.main.3:
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #3
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w0, w8
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #31583
|
||||
movk w1, #24626, lsl #16
|
||||
bl __bolt_call
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
bl putint
|
||||
mov w8, #0
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #21
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #5
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #15
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,381 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #88
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
@ -0,0 +1,537 @@
|
||||
.data
|
||||
.globl __bolt_profile_enabled
|
||||
.p2align 2
|
||||
__bolt_profile_enabled:
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.p2align 2
|
||||
main:
|
||||
.L.main.0:
|
||||
stp x29, x30, [sp, #-16]!
|
||||
mov x29, sp
|
||||
sub sp, sp, #32
|
||||
str x19, [sp, #0]
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #0
|
||||
bl __bolt_block
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
mov w8, #-1
|
||||
mov w0, w8
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #31583
|
||||
movk w1, #24626, lsl #16
|
||||
bl __bolt_call
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
bl putint
|
||||
mov w8, #71
|
||||
mov w0, w8
|
||||
sub sp, sp, #768
|
||||
stp x0, x1, [sp, #0]
|
||||
stp x2, x3, [sp, #16]
|
||||
stp x4, x5, [sp, #32]
|
||||
stp x6, x7, [sp, #48]
|
||||
stp x8, x9, [sp, #64]
|
||||
stp x10, x11, [sp, #80]
|
||||
stp x12, x13, [sp, #96]
|
||||
stp x14, x15, [sp, #112]
|
||||
stp x16, x17, [sp, #128]
|
||||
stp x18, x19, [sp, #144]
|
||||
stp x20, x21, [sp, #160]
|
||||
stp x22, x23, [sp, #176]
|
||||
stp x24, x25, [sp, #192]
|
||||
stp x26, x27, [sp, #208]
|
||||
stp x28, x29, [sp, #224]
|
||||
str x30, [sp, #240]
|
||||
stp q0, q1, [sp, #256]
|
||||
stp q2, q3, [sp, #288]
|
||||
stp q4, q5, [sp, #320]
|
||||
stp q6, q7, [sp, #352]
|
||||
stp q8, q9, [sp, #384]
|
||||
stp q10, q11, [sp, #416]
|
||||
stp q12, q13, [sp, #448]
|
||||
stp q14, q15, [sp, #480]
|
||||
stp q16, q17, [sp, #512]
|
||||
stp q18, q19, [sp, #544]
|
||||
stp q20, q21, [sp, #576]
|
||||
stp q22, q23, [sp, #608]
|
||||
stp q24, q25, [sp, #640]
|
||||
stp q26, q27, [sp, #672]
|
||||
stp q28, q29, [sp, #704]
|
||||
stp q30, q31, [sp, #736]
|
||||
mrs x9, nzcv
|
||||
str x9, [sp, #248]
|
||||
movz w0, #57864
|
||||
movk w0, #60048, lsl #16
|
||||
movz w1, #31583
|
||||
movk w1, #24626, lsl #16
|
||||
bl __bolt_call
|
||||
ldr x9, [sp, #248]
|
||||
msr nzcv, x9
|
||||
ldp q30, q31, [sp, #736]
|
||||
ldp q28, q29, [sp, #704]
|
||||
ldp q26, q27, [sp, #672]
|
||||
ldp q24, q25, [sp, #640]
|
||||
ldp q22, q23, [sp, #608]
|
||||
ldp q20, q21, [sp, #576]
|
||||
ldp q18, q19, [sp, #544]
|
||||
ldp q16, q17, [sp, #512]
|
||||
ldp q14, q15, [sp, #480]
|
||||
ldp q12, q13, [sp, #448]
|
||||
ldp q10, q11, [sp, #416]
|
||||
ldp q8, q9, [sp, #384]
|
||||
ldp q6, q7, [sp, #352]
|
||||
ldp q4, q5, [sp, #320]
|
||||
ldp q2, q3, [sp, #288]
|
||||
ldp q0, q1, [sp, #256]
|
||||
ldr x30, [sp, #240]
|
||||
ldp x28, x29, [sp, #224]
|
||||
ldp x26, x27, [sp, #208]
|
||||
ldp x24, x25, [sp, #192]
|
||||
ldp x22, x23, [sp, #176]
|
||||
ldp x20, x21, [sp, #160]
|
||||
ldp x18, x19, [sp, #144]
|
||||
ldp x16, x17, [sp, #128]
|
||||
ldp x14, x15, [sp, #112]
|
||||
ldp x12, x13, [sp, #96]
|
||||
ldp x10, x11, [sp, #80]
|
||||
ldp x8, x9, [sp, #64]
|
||||
ldp x6, x7, [sp, #48]
|
||||
ldp x4, x5, [sp, #32]
|
||||
ldp x2, x3, [sp, #16]
|
||||
ldp x0, x1, [sp, #0]
|
||||
add sp, sp, #768
|
||||
bl putint
|
||||
mov w8, #0
|
||||
mov w0, w8
|
||||
mov w19, w0
|
||||
bl __bolt_dump_profile
|
||||
mov w0, w19
|
||||
ldr x19, [sp, #0]
|
||||
add sp, sp, #32
|
||||
ldp x29, x30, [sp], #16
|
||||
ret
|
||||
|
||||
.bss
|
||||
.p2align 2
|
||||
.globl __bolt_block_table
|
||||
__bolt_block_table:
|
||||
.zero 786432
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_edge_table
|
||||
__bolt_edge_table:
|
||||
.zero 4194304
|
||||
|
||||
.p2align 4
|
||||
.globl __bolt_call_table
|
||||
__bolt_call_table:
|
||||
.zero 4194304
|
||||
|
||||
.section .rodata
|
||||
.p2align 2
|
||||
__bolt_profile_path:
|
||||
.asciz "bolt.prof"
|
||||
.p2align 2
|
||||
__bolt_profile_header:
|
||||
.ascii "BOLT"
|
||||
.word 1
|
||||
|
||||
.text
|
||||
.globl __bolt_block
|
||||
.p2align 2
|
||||
__bolt_block:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w1, w1, #1
|
||||
movz w3, #403
|
||||
movk w3, #256, lsl #16
|
||||
mul w4, w2, w3
|
||||
eor w4, w4, w1
|
||||
and w4, w4, #65535
|
||||
adrp x5, __bolt_block_table
|
||||
add x5, x5, :lo12:__bolt_block_table
|
||||
1:
|
||||
add x6, x5, x4, lsl #3
|
||||
add x6, x6, x4, lsl #2
|
||||
ldr w7, [x6]
|
||||
cbz w7, 2f
|
||||
ldr w8, [x6, #4]
|
||||
cmp w7, w2
|
||||
b.ne 4f
|
||||
cmp w8, w1
|
||||
b.ne 4f
|
||||
ldr w9, [x6, #8]
|
||||
add w9, w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
2:
|
||||
str w2, [x6]
|
||||
str w1, [x6, #4]
|
||||
mov w9, #1
|
||||
str w9, [x6, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
4:
|
||||
add w4, w4, #1
|
||||
and w4, w4, #65535
|
||||
b 1b
|
||||
|
||||
.globl __bolt_edge
|
||||
.p2align 2
|
||||
__bolt_edge:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w4, w2, #1
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w5, #403
|
||||
movk w5, #256, lsl #16
|
||||
mul w6, w2, w5
|
||||
eor w6, w6, w3
|
||||
mul w6, w6, w5
|
||||
eor w6, w6, w4
|
||||
and w6, w6, #262143
|
||||
adrp x7, __bolt_edge_table
|
||||
add x7, x7, :lo12:__bolt_edge_table
|
||||
5:
|
||||
add x8, x7, x6, lsl #4
|
||||
ldr w9, [x8]
|
||||
cbz w9, 6f
|
||||
ldr w10, [x8, #4]
|
||||
ldr w11, [x8, #8]
|
||||
cmp w9, w2
|
||||
b.ne 8f
|
||||
cmp w10, w3
|
||||
b.ne 8f
|
||||
cmp w11, w4
|
||||
b.ne 8f
|
||||
ldr w12, [x8, #12]
|
||||
add w12, w12, #1
|
||||
str w12, [x8, #12]
|
||||
7:
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
6:
|
||||
str w2, [x8]
|
||||
str w3, [x8, #4]
|
||||
str w4, [x8, #8]
|
||||
mov w12, #1
|
||||
str w12, [x8, #12]
|
||||
b 7b
|
||||
8:
|
||||
add w6, w6, #1
|
||||
and w6, w6, #262143
|
||||
b 5b
|
||||
|
||||
.globl __bolt_call
|
||||
.p2align 2
|
||||
__bolt_call:
|
||||
stp x29, x30, [sp, #-32]!
|
||||
mov x29, sp
|
||||
add w2, w0, #1
|
||||
add w3, w1, #1
|
||||
movz w4, #403
|
||||
movk w4, #256, lsl #16
|
||||
mul w5, w2, w4
|
||||
eor w5, w5, w3
|
||||
and w5, w5, #262143
|
||||
adrp x6, __bolt_call_table
|
||||
add x6, x6, :lo12:__bolt_call_table
|
||||
14:
|
||||
add x7, x6, x5, lsl #4
|
||||
ldr w8, [x7]
|
||||
cbz w8, 15f
|
||||
ldr w9, [x7, #4]
|
||||
cmp w8, w2
|
||||
b.ne 16f
|
||||
cmp w9, w3
|
||||
b.ne 16f
|
||||
ldr w10, [x7, #8]
|
||||
add w10, w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
15:
|
||||
str w2, [x7]
|
||||
str w3, [x7, #4]
|
||||
mov w10, #1
|
||||
str w10, [x7, #8]
|
||||
ldp x29, x30, [sp], #32
|
||||
ret
|
||||
16:
|
||||
add w5, w5, #1
|
||||
and w5, w5, #262143
|
||||
b 14b
|
||||
|
||||
.globl __bolt_dump_profile
|
||||
.p2align 2
|
||||
__bolt_dump_profile:
|
||||
stp x29, x30, [sp, #-112]!
|
||||
mov x29, sp
|
||||
stp x19, x20, [sp, #16]
|
||||
stp x21, x22, [sp, #32]
|
||||
stp x23, x24, [sp, #48]
|
||||
add x25, x29, #64
|
||||
adrp x1, __bolt_profile_path
|
||||
add x1, x1, :lo12:__bolt_profile_path
|
||||
mov x0, #-100
|
||||
mov x2, #577
|
||||
mov x3, #420
|
||||
mov x8, #56
|
||||
svc #0
|
||||
mov x19, x0
|
||||
cmp x19, #0
|
||||
b.lt 9f
|
||||
adrp x1, __bolt_profile_header
|
||||
add x1, x1, :lo12:__bolt_profile_header
|
||||
mov x0, x19
|
||||
mov x2, #8
|
||||
mov x8, #64
|
||||
svc #0
|
||||
movz w20, #0
|
||||
movk w20, #1, lsl #16
|
||||
movz w21, #0
|
||||
movk w21, #4, lsl #16
|
||||
adrp x22, __bolt_block_table
|
||||
add x22, x22, :lo12:__bolt_block_table
|
||||
adrp x23, __bolt_edge_table
|
||||
add x23, x23, :lo12:__bolt_edge_table
|
||||
mov w24, #0
|
||||
10:
|
||||
cmp w24, w20
|
||||
b.ge 11f
|
||||
add x0, x22, x24, lsl #3
|
||||
add x0, x0, x24, lsl #2
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_block_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #1
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_block_next:
|
||||
add w24, w24, #1
|
||||
b 10b
|
||||
11:
|
||||
mov w24, #0
|
||||
12:
|
||||
cmp w24, w21
|
||||
b.ge 13f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_edge_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
ldr w4, [x0, #12]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
sub w3, w3, #1
|
||||
mov w5, #2
|
||||
str w5, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
str w3, [x25, #12]
|
||||
str w4, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_edge_next:
|
||||
add w24, w24, #1
|
||||
b 12b
|
||||
13:
|
||||
adrp x23, __bolt_call_table
|
||||
add x23, x23, :lo12:__bolt_call_table
|
||||
mov w24, #0
|
||||
17:
|
||||
cmp w24, w21
|
||||
b.ge 18f
|
||||
add x0, x23, x24, lsl #4
|
||||
ldr w1, [x0]
|
||||
cbz w1, .Lbolt_dump_call_next
|
||||
ldr w2, [x0, #4]
|
||||
ldr w3, [x0, #8]
|
||||
sub w1, w1, #1
|
||||
sub w2, w2, #1
|
||||
mov w4, #3
|
||||
str w4, [x25]
|
||||
str w1, [x25, #4]
|
||||
str w2, [x25, #8]
|
||||
mov w4, #0
|
||||
str w4, [x25, #12]
|
||||
str w3, [x25, #16]
|
||||
mov x0, x19
|
||||
mov x1, x25
|
||||
mov x2, #20
|
||||
mov x8, #64
|
||||
svc #0
|
||||
.Lbolt_dump_call_next:
|
||||
add w24, w24, #1
|
||||
b 17b
|
||||
18:
|
||||
mov x0, x19
|
||||
mov x8, #57
|
||||
svc #0
|
||||
9:
|
||||
ldp x23, x24, [sp, #48]
|
||||
ldp x21, x22, [sp, #32]
|
||||
ldp x19, x20, [sp, #16]
|
||||
ldp x29, x30, [sp], #112
|
||||
ret
|
||||
|
||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue