Yahoo, happy news —  I think I've got it. Studying enough of the non-handwritten ASM that I was stepping through led me to make this change:
(I think disabling the floating point registers was just a red herring; I'll confirm that next)
For posterity, more detail on the crashing case earlier (this is fixed now with proper storage and updating of the frame pointer):
Calling fib(1) or fib(2) worked, but calling fib(3) triggered the crash.
This was the backtrace, where you can see the errant 0x0000000100f05110 frame values.
(lldb) bt
* thread #1: tid = 0xac6ed, 0x0000000100f05110, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0x100f05110)
    frame #0: 0x0000000100f05110
    frame #1: 0x0000000100f05110
  * frame #2: 0x00000001000ffc9c HelloHaskell`-[SPJViewController viewDidLoad](self=0x0000000144e0cf10, _cmd=0x0000000186ae429a) + 76 at SPJViewController.m:22
    frame #3: 0x00000001862f8b70 UIKit`-[UIViewController loadViewIfRequired] + 692
    frame #4: 0x00000001862f8880 UIKit`-[UIViewController view] + 32
    frame #5: 0x00000001862feeb0 UIKit`-[UIWindow addRootViewControllerViewIfPossible] + 72
    frame #6: 0x00000001862fc6d4 UIKit`-[UIWindow _setHidden:forced:] + 296
    frame #7: 0x000000018636d2bc UIKit`-[UIWindow makeKeyAndVisible] + 56
    frame #8: 0x000000018657ff74 UIKit`-[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2804
    frame #9: 0x00000001865824ec UIKit`-[UIApplication _runWithMainScene:transitionContext:completion:] + 1480
    frame #10: 0x0000000186580b84 UIKit`-[UIApplication workspaceDidEndTransaction:] + 184
    frame #11: 0x0000000189d846ac FrontBoardServices`__31-[FBSSerialQueue performAsync:]_block_invoke + 28
    frame #12: 0x0000000181c7a360 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 20
    frame #13: 0x0000000181c79468 CoreFoundation`__CFRunLoopDoBlocks + 312
    frame #14: 0x0000000181c77a8c CoreFoundation`__CFRunLoopRun + 1756
    frame #15: 0x0000000181ba5664 CoreFoundation`CFRunLoopRunSpecific + 396
    frame #16: 0x0000000186363140 UIKit`-[UIApplication _run] + 552
    frame #17: 0x000000018635e164 UIKit`UIApplicationMain + 1488
    frame #18: 0x0000000100100268 HelloHaskell`main(argc=1, argv=0x000000016fd07a58) + 204 at main.m:24
    frame #19: 0x00000001921eea08 libdyld.dylib`start + 4