============= DEBUG VERSION ============================== 00000000004007c0 : void bubble_sort (int *a, int n) { 4007c0: d10083ff sub sp, sp, #0x20 4007c4: f90007e0 str x0, [sp,#8] 4007c8: b90007e1 str w1, [sp,#4] int i, t, s = 1; 4007cc: 52800020 mov w0, #0x1 // #1 4007d0: b9001be0 str w0, [sp,#24] while (s) { 4007d4: 14000033 b 4008a0 s = 0; 4007d8: b9001bff str wzr, [sp,#24] for (i = 1; i < n; i++) { 4007dc: 52800020 mov w0, #0x1 // #1 4007e0: b9001fe0 str w0, [sp,#28] 4007e4: 1400002b b 400890 if (a[i] < a[i - 1]) { 4007e8: b9801fe0 ldrsw x0, [sp,#28] 4007ec: d37ef400 lsl x0, x0, #2 4007f0: f94007e1 ldr x1, [sp,#8] 4007f4: 8b000020 add x0, x1, x0 4007f8: b9400001 ldr w1, [x0] 4007fc: b9801fe0 ldrsw x0, [sp,#28] 400800: d37ef400 lsl x0, x0, #2 400804: d1001000 sub x0, x0, #0x4 400808: f94007e2 ldr x2, [sp,#8] 40080c: 8b000040 add x0, x2, x0 400810: b9400000 ldr w0, [x0] 400814: 6b00003f cmp w1, w0 400818: 5400036a b.ge 400884 t = a[i]; 40081c: b9801fe0 ldrsw x0, [sp,#28] 400820: d37ef400 lsl x0, x0, #2 400824: f94007e1 ldr x1, [sp,#8] 400828: 8b000020 add x0, x1, x0 40082c: b9400000 ldr w0, [x0] 400830: b90017e0 str w0, [sp,#20] a[i] = a[i - 1]; 400834: b9801fe0 ldrsw x0, [sp,#28] 400838: d37ef400 lsl x0, x0, #2 40083c: f94007e1 ldr x1, [sp,#8] 400840: 8b000020 add x0, x1, x0 400844: b9801fe1 ldrsw x1, [sp,#28] 400848: d37ef421 lsl x1, x1, #2 40084c: d1001021 sub x1, x1, #0x4 400850: f94007e2 ldr x2, [sp,#8] 400854: 8b010041 add x1, x2, x1 400858: b9400021 ldr w1, [x1] 40085c: b9000001 str w1, [x0] a[i - 1] = t; 400860: b9801fe0 ldrsw x0, [sp,#28] 400864: d37ef400 lsl x0, x0, #2 400868: d1001000 sub x0, x0, #0x4 40086c: f94007e1 ldr x1, [sp,#8] 400870: 8b000020 add x0, x1, x0 400874: b94017e1 ldr w1, [sp,#20] 400878: b9000001 str w1, [x0] s = 1; 40087c: 52800020 mov w0, #0x1 // #1 400880: b9001be0 str w0, [sp,#24] void bubble_sort (int *a, int n) { int i, t, s = 1; while (s) { s = 0; for (i = 1; i < n; i++) { 400884: b9401fe0 ldr w0, [sp,#28] 400888: 11000400 add w0, w0, #0x1 40088c: b9001fe0 str w0, [sp,#28] 400890: b9401fe1 ldr w1, [sp,#28] 400894: b94007e0 ldr w0, [sp,#4] 400898: 6b00003f cmp w1, w0 40089c: 54fffa6b b.lt 4007e8 printf("%llu ms\n", t); } void bubble_sort (int *a, int n) { int i, t, s = 1; while (s) { 4008a0: b9401be0 ldr w0, [sp,#24] 4008a4: 7100001f cmp w0, #0x0 4008a8: 54fff981 b.ne 4007d8 a[i - 1] = t; s = 1; } } } } 4008ac: d503201f nop 4008b0: 910083ff add sp, sp, #0x20 4008b4: d65f03c0 ret =============== O3 VERSION ============================ 00000000004007c0 : 4007c0: 51000825 sub w5, w1, #0x2 4007c4: 910004a5 add x5, x5, #0x1 4007c8: 8b050805 add x5, x0, x5, lsl #2 4007cc: 7100043f cmp w1, #0x1 4007d0: 5400018d b.le 400800 4007d4: aa0003e2 mov x2, x0 4007d8: 52800006 mov w6, #0x0 // #0 4007dc: 29400c44 ldp w4, w3, [x2] 4007e0: 6b04007f cmp w3, w4 4007e4: 5400006a b.ge 4007f0 4007e8: 52800026 mov w6, #0x1 // #1 4007ec: 29001043 stp w3, w4, [x2] 4007f0: 91001042 add x2, x2, #0x4 4007f4: eb05005f cmp x2, x5 4007f8: 54ffff21 b.ne 4007dc 4007fc: 35fffe86 cbnz w6, 4007cc 400800: d65f03c0 ret 400804: d503201f nop 0000000000400808 : 400808: a9bd7bfd stp x29, x30, [sp,#-48]! 40080c: 90000000 adrp x0, 400000 <_init-0x4e8> 400810: 9126c000 add x0, x0, #0x9b0 400814: 910003fd mov x29, sp 400818: a90153f3 stp x19, x20, [sp,#16] 40081c: 90000093 adrp x19, 410000 <__FRAME_END__+0xf5e0> 400820: f90013f5 str x21, [sp,#32] 400824: b94c9261 ldr w1, [x19,#3216] 400828: 97ffff5e bl 4005a0 40082c: b94c9274 ldr w20, [x19,#3216] 400830: 937e7e80 sbfiz x0, x20, #2, #32 400834: 97ffff3b bl 400520 400838: aa0003f5 mov x21, x0 40083c: b40003c0 cbz x0, 4008b4 400840: 7100029f cmp w20, #0x0 400844: 540000ed b.le 400860 400848: d2800013 mov x19, #0x0 // #0 40084c: 97ffff41 bl 400550 400850: b8337aa0 str w0, [x21,x19,lsl #2] 400854: 91000673 add x19, x19, #0x1 400858: 6b13029f cmp w20, w19 40085c: 54ffff8c b.gt 40084c 400860: 51000a84 sub w4, w20, #0x2 400864: 91000484 add x4, x4, #0x1 400868: 8b040aa4 add x4, x21, x4, lsl #2 40086c: 7100069f cmp w20, #0x1 400870: 5400018d b.le 4008a0 400874: aa1503e0 mov x0, x21 400878: 52800005 mov w5, #0x0 // #0 40087c: 29400803 ldp w3, w2, [x0] 400880: 6b03005f cmp w2, w3 400884: 5400006a b.ge 400890 400888: 52800025 mov w5, #0x1 // #1 40088c: 29000c02 stp w2, w3, [x0] 400890: 91001000 add x0, x0, #0x4 400894: eb04001f cmp x0, x4 400898: 54ffff21 b.ne 40087c 40089c: 35fffe85 cbnz w5, 40086c 4008a0: aa1503e0 mov x0, x21 4008a4: f94013f5 ldr x21, [sp,#32] 4008a8: a94153f3 ldp x19, x20, [sp,#16] 4008ac: a8c37bfd ldp x29, x30, [sp],#48 4008b0: 17ffff38 b 400590 4008b4: 90000000 adrp x0, 400000 <_init-0x4e8> 4008b8: 2a1403e1 mov w1, w20 4008bc: 91276000 add x0, x0, #0x9d8 4008c0: 97ffff38 bl 4005a0 4008c4: 17fffff7 b 4008a0 ================ O3 autofdo version ================== 0000000000400640 : 400640: 51000827 sub w7, w1, #0x2 400644: 910004e2 add x2, x7, #0x1 400648: 8b020807 add x7, x0, x2, lsl #2 40064c: 7100043f cmp w1, #0x1 400650: 5400100d b.le 400850 400654: 29402408 ldp w8, w9, [x0] 400658: cb0000e3 sub x3, x7, x0 40065c: d1001064 sub x4, x3, #0x4 400660: 52800006 mov w6, #0x0 // #0 400664: d3421085 ubfx x5, x4, #2, #3 400668: 6b08013f cmp w9, w8 40066c: 5400006a b.ge 400678 400670: 52800026 mov w6, #0x1 // #1 400674: 29002009 stp w9, w8, [x0] 400678: 91001003 add x3, x0, #0x4 40067c: eb07007f cmp x3, x7 400680: 54000e60 b.eq 40084c 400684: b4000ac5 cbz x5, 4007dc 400688: f10004bf cmp x5, #0x1 40068c: 54000620 b.eq 400750 400690: f10008bf cmp x5, #0x2 400694: 54000520 b.eq 400738 400698: f1000cbf cmp x5, #0x3 40069c: 54000420 b.eq 400720 4006a0: f10010bf cmp x5, #0x4 4006a4: 54000320 b.eq 400708 4006a8: f10014bf cmp x5, #0x5 4006ac: 54000220 b.eq 4006f0 4006b0: f10018bf cmp x5, #0x6 4006b4: 54000120 b.eq 4006d8 4006b8: b940040a ldr w10, [x0,#4] 4006bc: b940046b ldr w11, [x3,#4] 4006c0: 6b0a017f cmp w11, w10 4006c4: 5400008a b.ge 4006d4 4006c8: b900046a str w10, [x3,#4] 4006cc: 52800026 mov w6, #0x1 // #1 4006d0: b900040b str w11, [x0,#4] 4006d4: 91001063 add x3, x3, #0x4 4006d8: 2940346c ldp w12, w13, [x3] 4006dc: 6b0c01bf cmp w13, w12 4006e0: 5400006a b.ge 4006ec 4006e4: 52800026 mov w6, #0x1 // #1 4006e8: 2900306d stp w13, w12, [x3] 4006ec: 91001063 add x3, x3, #0x4 4006f0: 29403c6e ldp w14, w15, [x3] 4006f4: 6b0e01ff cmp w15, w14 4006f8: 5400006a b.ge 400704 4006fc: 52800026 mov w6, #0x1 // #1 400700: 2900386f stp w15, w14, [x3] 400704: 91001063 add x3, x3, #0x4 400708: 29404470 ldp w16, w17, [x3] 40070c: 6b10023f cmp w17, w16 400710: 5400006a b.ge 40071c 400714: 52800026 mov w6, #0x1 // #1 400718: 29004071 stp w17, w16, [x3] 40071c: 91001063 add x3, x3, #0x4 400720: 29400872 ldp w18, w2, [x3] 400724: 6b12005f cmp w2, w18 400728: 5400006a b.ge 400734 40072c: 52800026 mov w6, #0x1 // #1 400730: 29004862 stp w2, w18, [x3] 400734: 91001063 add x3, x3, #0x4 400738: 29401464 ldp w4, w5, [x3] 40073c: 6b0400bf cmp w5, w4 400740: 5400006a b.ge 40074c 400744: 52800026 mov w6, #0x1 // #1 400748: 29001065 stp w5, w4, [x3] 40074c: 91001063 add x3, x3, #0x4 400750: 29402468 ldp w8, w9, [x3] 400754: 6b08013f cmp w9, w8 400758: 5400006a b.ge 400764 40075c: 52800026 mov w6, #0x1 // #1 400760: 29002069 stp w9, w8, [x3] 400764: 91001063 add x3, x3, #0x4 400768: eb07007f cmp x3, x7 40076c: 54000381 b.ne 4007dc 400770: 14000037 b 40084c 400774: 9100106c add x12, x3, #0x4 400778: b940046e ldr w14, [x3,#4] 40077c: b940058d ldr w13, [x12,#4] 400780: 6b0e01bf cmp w13, w14 400784: 540005cb b.lt 40083c 400788: 29408d8f ldp w15, w3, [x12,#4] 40078c: 6b0f007f cmp w3, w15 400790: 5400050b b.lt 400830 400794: 29414590 ldp w16, w17, [x12,#8] 400798: 6b10023f cmp w17, w16 40079c: 5400044b b.lt 400824 4007a0: 29418992 ldp w18, w2, [x12,#12] 4007a4: 6b12005f cmp w2, w18 4007a8: 5400038b b.lt 400818 4007ac: 29421584 ldp w4, w5, [x12,#16] 4007b0: 6b0400bf cmp w5, w4 4007b4: 540002cb b.lt 40080c 4007b8: 2942a588 ldp w8, w9, [x12,#20] 4007bc: 6b08013f cmp w9, w8 4007c0: 5400020b b.lt 400800 4007c4: 29432d8a ldp w10, w11, [x12,#24] 4007c8: 6b0a017f cmp w11, w10 4007cc: 5400014b b.lt 4007f4 4007d0: 91007183 add x3, x12, #0x1c 4007d4: eb07007f cmp x3, x7 4007d8: 540003a0 b.eq 40084c 4007dc: 29402c6a ldp w10, w11, [x3] 4007e0: 6b0a017f cmp w11, w10 4007e4: 54fffc8a b.ge 400774 4007e8: 52800026 mov w6, #0x1 // #1 4007ec: 2900286b stp w11, w10, [x3] 4007f0: 17ffffe1 b 400774 4007f4: 52800026 mov w6, #0x1 // #1 4007f8: 2903298b stp w11, w10, [x12,#24] 4007fc: 17fffff5 b 4007d0 400800: 52800026 mov w6, #0x1 // #1 400804: 2902a189 stp w9, w8, [x12,#20] 400808: 17ffffef b 4007c4 40080c: 52800026 mov w6, #0x1 // #1 400810: 29021185 stp w5, w4, [x12,#16] 400814: 17ffffe9 b 4007b8 400818: 52800026 mov w6, #0x1 // #1 40081c: 2901c982 stp w2, w18, [x12,#12] 400820: 17ffffe3 b 4007ac 400824: 52800026 mov w6, #0x1 // #1 400828: 29014191 stp w17, w16, [x12,#8] 40082c: 17ffffdd b 4007a0 400830: 52800026 mov w6, #0x1 // #1 400834: 2900bd83 stp w3, w15, [x12,#4] 400838: 17ffffd7 b 400794 40083c: b900058e str w14, [x12,#4] 400840: 52800026 mov w6, #0x1 // #1 400844: b900046d str w13, [x3,#4] 400848: 17ffffd0 b 400788 40084c: 35fff006 cbnz w6, 40064c 400850: d65f03c0 ret 400854: d503201f nop 00000000004009a8 : 4009a8: a9bb7bfd stp x29, x30, [sp,#-80]! 4009ac: 90000000 adrp x0, 400000 <_init-0x4e8> 4009b0: 9131e000 add x0, x0, #0xc78 4009b4: 910003fd mov x29, sp 4009b8: a90153f3 stp x19, x20, [sp,#16] 4009bc: 90000093 adrp x19, 410000 <__FRAME_END__+0xf318> 4009c0: a9025bf5 stp x21, x22, [sp,#32] 4009c4: a90363f7 stp x23, x24, [sp,#48] 4009c8: b94f5a61 ldr w1, [x19,#3928] 4009cc: a9046bf9 stp x25, x26, [sp,#64] 4009d0: 97fffef4 bl 4005a0 4009d4: b94f5a75 ldr w21, [x19,#3928] 4009d8: 937e7ea0 sbfiz x0, x21, #2, #32 4009dc: 97fffed1 bl 400520 4009e0: aa0003f3 mov x19, x0 4009e4: b4000ca0 cbz x0, 400b78 4009e8: 710002bf cmp w21, #0x0 4009ec: 540008cd b.le 400b04 4009f0: 97fffed8 bl 400550 4009f4: b9000260 str w0, [x19] 4009f8: 710006bf cmp w21, #0x1 4009fc: 510006b6 sub w22, w21, #0x1 400a00: d2800034 mov x20, #0x1 // #1 400a04: 12000ad7 and w23, w22, #0x7 400a08: 540007ed b.le 400b04 400a0c: 34000497 cbz w23, 400a9c 400a10: 710006ff cmp w23, #0x1 400a14: 540003a0 b.eq 400a88 400a18: 71000aff cmp w23, #0x2 400a1c: 54000300 b.eq 400a7c 400a20: 71000eff cmp w23, #0x3 400a24: 54000260 b.eq 400a70 400a28: 710012ff cmp w23, #0x4 400a2c: 540001c0 b.eq 400a64 400a30: 710016ff cmp w23, #0x5 400a34: 54000120 b.eq 400a58 400a38: 71001aff cmp w23, #0x6 400a3c: 54000080 b.eq 400a4c 400a40: 97fffec4 bl 400550 400a44: d2800054 mov x20, #0x2 // #2 400a48: b9000660 str w0, [x19,#4] 400a4c: 97fffec1 bl 400550 400a50: b8347a60 str w0, [x19,x20,lsl #2] 400a54: 91000694 add x20, x20, #0x1 400a58: 97fffebe bl 400550 400a5c: b8347a60 str w0, [x19,x20,lsl #2] 400a60: 91000694 add x20, x20, #0x1 400a64: 97fffebb bl 400550 400a68: b8347a60 str w0, [x19,x20,lsl #2] 400a6c: 91000694 add x20, x20, #0x1 400a70: 97fffeb8 bl 400550 400a74: b8347a60 str w0, [x19,x20,lsl #2] 400a78: 91000694 add x20, x20, #0x1 400a7c: 97fffeb5 bl 400550 400a80: b8347a60 str w0, [x19,x20,lsl #2] 400a84: 91000694 add x20, x20, #0x1 400a88: 97fffeb2 bl 400550 400a8c: b8347a60 str w0, [x19,x20,lsl #2] 400a90: 91000694 add x20, x20, #0x1 400a94: 6b1402bf cmp w21, w20 400a98: 5400036d b.le 400b04 400a9c: 91000698 add x24, x20, #0x1 400aa0: 97fffeac bl 400550 400aa4: b8347a60 str w0, [x19,x20,lsl #2] 400aa8: 91000a96 add x22, x20, #0x2 400aac: 91000e9a add x26, x20, #0x3 400ab0: 91001299 add x25, x20, #0x4 400ab4: 97fffea7 bl 400550 400ab8: b8387a60 str w0, [x19,x24,lsl #2] 400abc: 91001698 add x24, x20, #0x5 400ac0: 91001a97 add x23, x20, #0x6 400ac4: 97fffea3 bl 400550 400ac8: b8367a60 str w0, [x19,x22,lsl #2] 400acc: 91001e96 add x22, x20, #0x7 400ad0: 91002294 add x20, x20, #0x8 400ad4: 97fffe9f bl 400550 400ad8: b83a7a60 str w0, [x19,x26,lsl #2] 400adc: 97fffe9d bl 400550 400ae0: b8397a60 str w0, [x19,x25,lsl #2] 400ae4: 97fffe9b bl 400550 400ae8: b8387a60 str w0, [x19,x24,lsl #2] 400aec: 97fffe99 bl 400550 400af0: b8377a60 str w0, [x19,x23,lsl #2] 400af4: 97fffe97 bl 400550 400af8: b8367a60 str w0, [x19,x22,lsl #2] 400afc: 6b1402bf cmp w21, w20 400b00: 54fffcec b.gt 400a9c 400b04: 51000aa4 sub w4, w21, #0x2 400b08: 91000481 add x1, x4, #0x1 400b0c: 8b010a66 add x6, x19, x1, lsl #2 400b10: 710006bf cmp w21, #0x1 400b14: 5400024d b.le 400b5c 400b18: aa1303e7 mov x7, x19 400b1c: 52800005 mov w5, #0x0 // #0 400b20: 294020e3 ldp w3, w8, [x7] 400b24: 6b03011f cmp w8, w3 400b28: 5400012a b.ge 400b4c 400b2c: b90004e3 str w3, [x7,#4] 400b30: 52800025 mov w5, #0x1 // #1 400b34: b80044e8 str w8, [x7],#4 400b38: eb0600ff cmp x7, x6 400b3c: 54fffea0 b.eq 400b10 400b40: 294020e3 ldp w3, w8, [x7] 400b44: 6b03011f cmp w8, w3 400b48: 54ffff2b b.lt 400b2c 400b4c: 910010e7 add x7, x7, #0x4 400b50: eb0600ff cmp x7, x6 400b54: 54fffe61 b.ne 400b20 400b58: 35fffdc5 cbnz w5, 400b10 400b5c: aa1303e0 mov x0, x19 400b60: a9425bf5 ldp x21, x22, [sp,#32] 400b64: a94153f3 ldp x19, x20, [sp,#16] 400b68: a94363f7 ldp x23, x24, [sp,#48] 400b6c: a9446bf9 ldp x25, x26, [sp,#64] 400b70: a8c57bfd ldp x29, x30, [sp],#80 400b74: 17fffe87 b 400590 400b78: 90000002 adrp x2, 400000 <_init-0x4e8> 400b7c: 2a1503e1 mov w1, w21 400b80: 91328040 add x0, x2, #0xca0 400b84: 97fffe87 bl 4005a0 400b88: 17fffff5 b 400b5c 400b8c: d503201f nop