function: default_handler (entry: bb_0x20a0)

loops: 1 (0 with a derived trip count; max nesting depth 1)
  iters = executions of a block per single call of default_handler (product of enclosing trip counts);
  ? = not derivable from the code — treat that block's cost as per-iteration, not per-call.
  A block with no iters annotation is in no loop and runs once per call.
  L1  loop  header bb_0x20a4  latch bb_0x20a4  depth 1  blocks 1  trips ?  (no exit test inside the loop — exit is unconditional or indirect)

[default_handler_0x20a0] 0x20a0-0x20a4  (entry)
source: startup.c:11:11;
  push {r7, lr}
  add r7, sp, #0
  -> bb_0x20a4

[default_handler_0x20a4] 0x20a4-0x20a6  (loop-header L1, trips=?, iters=?)
source: startup.c:11:11;
  b #0x20a4
  -> bb_0x20a4 (back-edge, loop L1)

------------------------------------------------------------

function: kernel_main (entry: bb_0x2010)

loops: 3 (0 with a derived trip count; max nesting depth 2)
  iters = executions of a block per single call of kernel_main (product of enclosing trip counts);
  ? = not derivable from the code — treat that block's cost as per-iteration, not per-call.
  A block with no iters annotation is in no loop and runs once per call.
  L1  loop  header bb_0x202c  latch bb_0x2074  depth 1  blocks 7  trips ?  (no exit test inside the loop — exit is unconditional or indirect)
  L2  loop  header bb_0x203e  latch bb_0x2034  depth 2  in L1  blocks 2  trips ?  (limit is not an immediate compare)
  L3  loop  header bb_0x206a  latch bb_0x2060  depth 2  in L1  blocks 2  trips ?  (limit is not an immediate compare)

[kernel_main_0x2010] 0x2010-0x202c  (entry)
source: blink.c:19:21;
  push {r7, lr}
  add r7, sp, #0
  ldr r3, [pc, #0x70]
  ldr r2, [pc, #0x74]
  str r2, [r3]
  ldr r3, [pc, #0x6c]
  ldr r3, [r3]
  ldr r2, [r3]
  ldr r3, [pc, #0x64]
  ldr r3, [r3]
  movs r1, #0x80
  lsls r1, r1, #3
  orrs r2, r1
  str r2, [r3]
  -> bb_0x202c

[kernel_main_0x202c] 0x202c-0x2034  (loop-header L1, trips=?, iters=?)
source: blink.c:24:24;
  ldr r3, [pc, #0x60]
  movs r2, #0
  str r2, [r3]
  b #0x203e
  -> bb_0x203e

[kernel_main_0x2034] 0x2034-0x203e  (in L2, iters=?)
source: blink.c:24:24;
  ldr r3, [pc, #0x58]
  ldr r3, [r3]
  adds r2, r3, #1
  ldr r3, [pc, #0x54]
  str r2, [r3]
  -> bb_0x203e (back-edge, loop L2)

[kernel_main_0x203e] 0x203e-0x2048  (loop-header L2, trips=?, in L1, iters=?)
source: blink.c:24:24;
  ldr r3, [pc, #0x50]
  ldr r3, [r3]
  ldr r2, [pc, #0x50]
  cmp r3, r2
  bls #0x2034
  -> bb_0x2034 (ls=taken), bb_0x2048 (hi=fallthrough)

[kernel_main_0x2048] 0x2048-0x2060  (in L1, iters=?)
source: blink.c:27:30;
  ldr r3, [pc, #0x3c]
  ldr r2, [pc, #0x4c]
  str r2, [r3]
  ldr r3, [pc, #0x38]
  ldr r3, [r3]
  movs r2, #0x80
  lsls r2, r2, #3
  str r2, [r3]
  ldr r3, [pc, #0x34]
  movs r2, #0
  str r2, [r3]
  b #0x206a
  -> bb_0x206a

[kernel_main_0x2060] 0x2060-0x206a  (in L3, iters=?)
source: blink.c:30:30;
  ldr r3, [pc, #0x2c]
  ldr r3, [r3]
  adds r2, r3, #1
  ldr r3, [pc, #0x28]
  str r2, [r3]
  -> bb_0x206a (back-edge, loop L3)

[kernel_main_0x206a] 0x206a-0x2074  (loop-header L3, trips=?, in L1, iters=?)
source: blink.c:30:30;
  ldr r3, [pc, #0x24]
  ldr r3, [r3]
  ldr r2, [pc, #0x24]
  cmp r3, r2
  bls #0x2060
  -> bb_0x2060 (ls=taken), bb_0x2074 (hi=fallthrough)

[kernel_main_0x2074] 0x2074-0x2086  (in L1, iters=?)
source: blink.c:24:34;
  ldr r3, [pc, #0x10]
  ldr r2, [pc, #0x24]
  str r2, [r3]
  ldr r3, [pc, #0xc]
  ldr r3, [r3]
  movs r2, #0x80
  lsls r2, r2, #3
  str r2, [r3]
  b #0x202c
  -> bb_0x202c (back-edge, loop L1)

[kernel_main_0x2086] 0x2086-0x2088  (exit)
source: blink.c:24:24;
  mov r8, r8
