添加了一些说明文档

安峻邑 5 days ago
parent bcb7093a52
commit 79700151e4

@ -23,6 +23,7 @@ START_FROM=1
KEEP_OLD=true
KEEP_ORI=false
OPTIMIZE=true
VEC_STAGE=3
CATEGORY="all"
SKIP_LIST=""
VERBOSE=false
@ -349,6 +350,7 @@ fi
echo "OUTPUT_DIR=$OUTPUT_DIR"
echo "CATEGORY=$CATEGORY"
echo "OPTIMIZE=$OPTIMIZE"
echo "UPDATE_COMPILER_VEC_STAGE=$VEC_STAGE"
echo "MAX_CASES=$MAX_CASES"
echo "START_FROM=$START_FROM"
echo "SKIP_LIST=$SKIP_LIST"
@ -518,7 +520,7 @@ for file in "${ALL_CASES[@]}"; do
set +e
if [[ "$OPTIMIZE" == "true" ]]; then
"$COMPILER" -O --emit-asm "$file" > "$asm_file" 2>/dev/null
UPDATE_COMPILER_VEC_STAGE="$VEC_STAGE" "$COMPILER" -O --emit-asm "$file" > "$asm_file" 2>/dev/null
else
"$COMPILER" --emit-asm "$file" > "$asm_file" 2>/dev/null
fi

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -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

@ -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

@ -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

@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -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

@ -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

@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -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

@ -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

@ -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

@ -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

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save