Ah, je n'étais pas sûr si GCC était suffisamment malin pour ça ou non, donc j'ai préféré te laisser essayer toi-même (connaissant ta curiosité

).
Là, la "nested function" n'accède pas aux variables locales de la fonction contenante parce que ta structure est passée en paramètre, donc du coup c'est comme si elle n'était pas "nested", et le trampoline n'est pas nécessaire.

Le vieux GCC de TIGCC fait de même (j'ai désactivé les informations de débogage pour avoir un .s plus propre):
.section .text.fib,"x"
.even
.globl fib
fib:
link.w %fp,#-4
move.l %d3,-(%sp)
move.w 8(%fp),%d3
cmp.w #1,%d3
jble .L4
move.w %d3,%d0
subq.w #2,%d0
move.w %d0,-4(%fp)
pea -4(%fp)
pea subfunc_2.3518
jbsr may_spawn
subq.w #1,%d3
move.w %d3,-(%sp)
jbsr fib
move.w %d0,%d3
add.w -2(%fp),%d3
lea (10,%sp),%sp
.L4:
move.w %d3,%d0
move.l -8(%fp),%d3
unlk %fp
rts
.section .text.subfunc_2.3518,"x"
.even
subfunc_2.3518:
move.l %a2,-(%sp)
move.l 8(%sp),%a2
move.w (%a2),-(%sp)
jbsr fib
move.w %d0,2(%a2)
addq.l #2,%sp
move.l (%sp)+,%a2
rts