Как и обещал, программа сортировки дерева хипом под АРМ с максимальной оптимизацией -
Хорошо можно видеть что до оптимизации связанной с самим микропроцессоро дело совершенно не доходит. Не использованы команды упраления кешем и так далее...
heap_sutras_real_2.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <FixTree>:
0: 4a13 ldr r2, [pc, #76] ; (50 <FixTree+0x50>)
2: b5f0 push {r4, r5, r6, r7, lr}
4: f852 6020 ldr.w r6, [r2, r0, lsl #2]
8: 0043 lsls r3, r0, #1
a: 428b cmp r3, r1
c: dc1b bgt.n 46 <FixTree+0x46>
e: f852 4023 ldr.w r4, [r2, r3, lsl #2]
12: bf08 it eq
14: 4625 moveq r5, r4
16: d002 beq.n 1e <FixTree+0x1e>
18: 1c5d adds r5, r3, #1
1a: f852 5025 ldr.w r5, [r2, r5, lsl #2]
1e: 42b5 cmp r5, r6
20: bfd4 ite le
22: 2700 movle r7, #0
24: 2701 movgt r7, #1
26: 42a5 cmp r5, r4
28: bfd4 ite le
2a: 2700 movle r7, #0
2c: f007 0701 andgt.w r7, r7, #1
30: b11f cbz r7, 3a <FixTree+0x3a>
32: f842 5020 str.w r5, [r2, r0, lsl #2]
36: 1c58 adds r0, r3, #1
38: e7e6 b.n 8 <FixTree+0x8>
3a: 42b4 cmp r4, r6
3c: dd03 ble.n 46 <FixTree+0x46>
3e: f842 4020 str.w r4, [r2, r0, lsl #2]
42: 4618 mov r0, r3
44: e7e0 b.n 8 <FixTree+0x8>
46: 4b02 ldr r3, [pc, #8] ; (50 <FixTree+0x50>)
48: f843 6020 str.w r6, [r3, r0, lsl #2]
4c: bdf0 pop {r4, r5, r6, r7, pc}
4e: bf00 nop
50: 00000000 andeq r0, r0, r0
Disassembly of section .bss:
00000000 <iNum>:
0: 00000000 andeq r0, r0, r0
Disassembly of section .text.startup:
00000000 <main>:
0: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
2: 200a movs r0, #10
4: f7ff fffe bl 0 <putchar>
8: 4857 ldr r0, [pc, #348] ; (160 <puts+0x160>)
a: f7ff fffe bl 0 <puts>
e: 4c57 ldr r4, [pc, #348] ; (16c <main+0x16c>)
10: 4d57 ldr r5, [pc, #348] ; (170 <main+0x170>)
12: e00d b.n 30 <main+0x30>
14: 4857 ldr r0, [pc, #348] ; (174 <main+0x174>)
16: a901 add r1, sp, #4
18: f7ff fffe bl 0 <__isoc99_scanf>
1c: 2800 cmp r0, #0
1e: dd0a ble.n 36 <main+0x36>
20: 6826 ldr r6, [r4, #0]
22: a801 add r0, sp, #4
24: 3601 adds r6, #1
26: 6026 str r6, [r4, #0]
28: f7ff fffe bl 0 <atoi>
2c: f845 0026 str.w r0, [r5, r6, lsl #2]
30: 6823 ldr r3, [r4, #0]
32: 2b08 cmp r3, #8
34: ddee ble.n 14 <main+0x14>
36: 4b4d ldr r3, [pc, #308] ; (16c <main+0x16c>)
38: 4d4f ldr r5, [pc, #316] ; (178 <main+0x178>)
3a: 4c50 ldr r4, [pc, #320] ; (17c <main+0x17c>)
3c: 681b ldr r3, [r3, #0]
3e: 105b asrs r3, r3, #1
40: 602b str r3, [r5, #0]
42: e021 b.n 88 <main+0x88>
44: 4e49 ldr r6, [pc, #292] ; (16c <main+0x16c>)
46: 4f4a ldr r7, [pc, #296] ; (170 <main+0x170>)
48: 6831 ldr r1, [r6, #0]
4a: f7ff fffe bl 0 <main>
4e: 484c ldr r0, [pc, #304] ; (180 <main+0x180>)
50: 6829 ldr r1, [r5, #0]
52: 6832 ldr r2, [r6, #0]
54: f7ff fffe bl 0 <printf>
58: 2301 movs r3, #1
5a: 6023 str r3, [r4, #0]
5c: e007 b.n 6e <main+0x6e>
5e: 4849 ldr r0, [pc, #292] ; (184 <main+0x184>)
60: f857 1022 ldr.w r1, [r7, r2, lsl #2]
64: f7ff fffe bl 0 <printf>
68: 6823 ldr r3, [r4, #0]
6a: 3301 adds r3, #1
6c: 6023 str r3, [r4, #0]
6e: 6822 ldr r2, [r4, #0]
70: 6833 ldr r3, [r6, #0]
72: 429a cmp r2, r3
74: dbf3 blt.n 5e <main+0x5e>
76: 4a3e ldr r2, [pc, #248] ; (170 <main+0x170>)
78: 4843 ldr r0, [pc, #268] ; (188 <main+0x188>)
7a: f852 1023 ldr.w r1, [r2, r3, lsl #2]
7e: f7ff fffe bl 0 <printf>
82: 682b ldr r3, [r5, #0]
84: 3b01 subs r3, #1
86: 602b str r3, [r5, #0]
88: 6828 ldr r0, [r5, #0]
8a: 4e3b ldr r6, [pc, #236] ; (178 <main+0x178>)
8c: 2800 cmp r0, #0
8e: dcd9 bgt.n 44 <main+0x44>
90: 483e ldr r0, [pc, #248] ; (18c <main+0x18c>)
92: 4634 mov r4, r6
94: f7ff fffe bl 0 <printf>
98: 4f34 ldr r7, [pc, #208] ; (16c <main+0x16c>)
9a: 2301 movs r3, #1
9c: 4d34 ldr r5, [pc, #208] ; (170 <main+0x170>)
9e: 6033 str r3, [r6, #0]
a0: e007 b.n b2 <main+0xb2>
a2: 4838 ldr r0, [pc, #224] ; (184 <main+0x184>)
a4: f855 1022 ldr.w r1, [r5, r2, lsl #2]
a8: f7ff fffe bl 0 <printf>
ac: 6823 ldr r3, [r4, #0]
ae: 3301 adds r3, #1
b0: 6023 str r3, [r4, #0]
b2: 6822 ldr r2, [r4, #0]
b4: 683b ldr r3, [r7, #0]
b6: 4e30 ldr r6, [pc, #192] ; (178 <main+0x178>)
b8: 429a cmp r2, r3
ba: dbf2 blt.n a2 <main+0xa2>
bc: 4a2c ldr r2, [pc, #176] ; (170 <main+0x170>)
be: 4832 ldr r0, [pc, #200] ; (188 <main+0x188>)
c0: 4d2e ldr r5, [pc, #184] ; (17c <main+0x17c>)
c2: f852 1023 ldr.w r1, [r2, r3, lsl #2]
c6: f7ff fffe bl 0 <printf>
ca: 4b28 ldr r3, [pc, #160] ; (16c <main+0x16c>)
cc: 681b ldr r3, [r3, #0]
ce: 6033 str r3, [r6, #0]
d0: e028 b.n 124 <main+0x124>
d2: 4c27 ldr r4, [pc, #156] ; (170 <main+0x170>)
d4: 2001 movs r0, #1
d6: 4a2e ldr r2, [pc, #184] ; (190 <main+0x190>)
d8: 4f24 ldr r7, [pc, #144] ; (16c <main+0x16c>)
da: 6863 ldr r3, [r4, #4]
dc: 6013 str r3, [r2, #0]
de: f854 2021 ldr.w r2, [r4, r1, lsl #2]
e2: 6062 str r2, [r4, #4]
e4: f844 3021 str.w r3, [r4, r1, lsl #2]
e8: 3901 subs r1, #1
ea: f7ff fffe bl 0 <main>
ee: 4829 ldr r0, [pc, #164] ; (a8 <printf+0xa8>)
f0: f7ff fffe bl 0 <printf>
f4: 2301 movs r3, #1
f6: 602b str r3, [r5, #0]
f8: e007 b.n 10a <main+0x10a>
fa: 4822 ldr r0, [pc, #136] ; (184 <main+0x184>)
fc: f854 1022 ldr.w r1, [r4, r2, lsl #2]
100: f7ff fffe bl 0 <printf>
104: 682b ldr r3, [r5, #0]
106: 3301 adds r3, #1
108: 602b str r3, [r5, #0]
10a: 682a ldr r2, [r5, #0]
10c: 683b ldr r3, [r7, #0]
10e: 429a cmp r2, r3
110: dbf3 blt.n fa <main+0xfa>
112: 4a17 ldr r2, [pc, #92] ; (170 <main+0x170>)
114: 481c ldr r0, [pc, #112] ; (188 <main+0x188>)
116: f852 1023 ldr.w r1, [r2, r3, lsl #2]
11a: f7ff fffe bl 0 <printf>
11e: 6833 ldr r3, [r6, #0]
120: 3b01 subs r3, #1
122: 6033 str r3, [r6, #0]
124: 6831 ldr r1, [r6, #0]
126: 4c14 ldr r4, [pc, #80] ; (178 <main+0x178>)
128: 2901 cmp r1, #1
12a: dcd2 bgt.n d2 <main+0xd2>
12c: 481a ldr r0, [pc, #104] ; (198 <main+0x198>)
12e: f7ff fffe bl 0 <printf>
132: 4e0e ldr r6, [pc, #56] ; (16c <main+0x16c>)
134: 2301 movs r3, #1
136: 4d0e ldr r5, [pc, #56] ; (170 <main+0x170>)
138: 6023 str r3, [r4, #0]
13a: e007 b.n 14c <main+0x14c>
13c: 4811 ldr r0, [pc, #68] ; (184 <main+0x184>)
13e: f855 1022 ldr.w r1, [r5, r2, lsl #2]
142: f7ff fffe bl 0 <printf>
146: 6823 ldr r3, [r4, #0]
148: 3301 adds r3, #1
14a: 6023 str r3, [r4, #0]
14c: 6822 ldr r2, [r4, #0]
14e: 6833 ldr r3, [r6, #0]
150: 429a cmp r2, r3
152: dbf3 blt.n 13c <main+0x13c>
154: 4a06 ldr r2, [pc, #24] ; (170 <main+0x170>)
156: 480c ldr r0, [pc, #48] ; (188 <main+0x188>)
158: f852 1023 ldr.w r1, [r2, r3, lsl #2]
15c: f7ff fffe bl 0 <printf>
160: 480e ldr r0, [pc, #56] ; (3c <puts+0x3c>)
162: f7ff fffe bl 0 <puts>
166: bdfe pop {r1, r2, r3, r4, r5, r6, r7, pc}
...
174: 00000027 andeq r0, r0, r7, lsr #32
...
180: 0000002a andeq r0, r0, sl, lsr #32
184: 00000034 andeq r0, r0, r4, lsr r0
188: 00000038 andeq r0, r0, r8, lsr r0
18c: 0000003d andeq r0, r0, sp, lsr r0
190: 00000000 andeq r0, r0, r0
194: 00000053 andeq r0, r0, r3, asr r0
198: 00000056 andeq r0, r0, r6, asr r0
19c: 0000006a andeq r0, r0, sl, rrx
Disassembly of section .rodata.str1.1:
00000000 <.rodata.str1.1>:
0: 70616548 rsbvc r6, r1, r8, asr #10
4: 4120202e teqmi r0, lr, lsr #32
8: 79617272 stmdbvc r1!, {r1, r4, r5, r6, r9, ip, sp, lr}^
c: 726f7320 rsbvc r7, pc, #-2147483648 ; 0x80000000
10: 676e6974 ; <UNDEFINED> instruction: 0x676e6974
14: 20796220 rsbscs r6, r9, r0, lsr #4
18: 65657274 strbvs r7, [r5, #-628]! ; 0x274
1c: 69756220 ldmdbvs r5!, {r5, r9, sp, lr}^
20: 6e69646c cdpvs 4, 6, cr6, cr9, cr12, {3}
24: 25002e67 strcs r2, [r0, #-3687] ; 0xe67
28: 202a0073 eorcs r0, sl, r3, ror r0
2c: 25206425 strcs r6, [r0, #-1061]! ; 0x425
30: 00203a64 eoreq r3, r0, r4, ror #20
34: 00206425 eoreq r6, r0, r5, lsr #8
38: 0a206425 beq 8190d4 <FixTree+0x8190d4>
3c: 55202a00 strpl r2, [r0, #-2560]! ; 0xa00
40: 726f536e rsbvc r5, pc, #-1207959551 ; 0xb8000001
44: 20646574 rsbcs r6, r4, r4, ror r5
48: 61727261 cmnvs r2, r1, ror #4
4c: 0a2a2079 beq a88238 <FixTree+0xa88238>
50: 2a002020 bcs 80d8 <FixTree+0x80d8>
54: 202a0020 eorcs r0, sl, r0, lsr #32
58: 74726f53 ldrbtvc r6, [r2], #-3923 ; 0xf53
5c: 61206465 teqvs r0, r5, ror #8
60: 79617272 stmdbvc r1!, {r1, r4, r5, r6, r9, ip, sp, lr}^
64: 200a2a20 andcs r2, sl, r0, lsr #20
68: 2e500020 cdpcs 0, 5, cr0, cr0, cr0, {1}
6c: 54202e53 strtpl r2, [r0], #-3667 ; 0xe53
70: 6b6e6168 blvs 1b98618 <FixTree+0x1b98618>
74: 756f7920 strbvc r7, [pc, #-2336]! ; fffff75c <FixTree+0xfffff75c>
78: 726f6620 rsbvc r6, pc, #33554432 ; 0x2000000
7c: 69737520 ldmdbvs r3!, {r5, r8, sl, ip, sp, lr}^
80: 6f20676e svcvs 0x0020676e
84: 73207275 teqvc r0, #1342177287 ; 0x50000007
88: 7774666f ldrbvc r6, [r4, -pc, ror #12]!
8c: 2e657261 cdpcs 2, 6, cr7, cr5, cr1, {3}
...
Disassembly of section .comment:
00000000 <.comment>:
0: 43434700 movtmi r4, #14080 ; 0x3700
4: 4428203a strtmi r2, [r8], #-58 ; 0x3a
8: 61696265 cmnvs r9, r5, ror #4
c: 2e34206e cdpcs 0, 3, cr2, cr4, cr14, {3}
10: 2d332e36 ldccs 14, cr2, [r3, #-216]! ; 0xffffff28
14: 20293431 eorcs r3, r9, r1, lsr r4
18: 2e362e34 mrccs 14, 1, r2, cr6, cr4, {1}
1c: Address 0x0000001c is out of bounds.
Disassembly of section .ARM.attributes:
00000000 <.ARM.attributes>:
0: 00003441 andeq r3, r0, r1, asr #8
4: 61656100 cmnvs r5, r0, lsl #2
8: 01006962 tsteq r0, r2, ror #18
c: 0000002a andeq r0, r0, sl, lsr #32
10: 412d3705 teqmi sp, r5, lsl #14
14: 070a0600 streq r0, [sl, -r0, lsl #12]
18: 09010841 stmdbeq r1, {r0, r6, fp}
1c: 12040a02 andne r0, r4, #8192 ; 0x2000
20: 15011404 strne r1, [r1, #-1028] ; 0x404
24: 18031701 stmdane r3, {r0, r8, r9, sl, ip}
28: 1a011901 bne 46434 <FixTree+0x46434>
2c: 1c031b02 stcne 11, cr1, [r3], {2}
30: 2c041e01 stccs 14, cr1, [r4], {1}
34: Address 0x00000034 is out of bounds.