emitWhileNonzero xs = do
  (start, _) <- mfix (\ ~(_, end) -> do
    start <- aload 1
    iload 2
    baload
    ifeq end
    forM_ xs emitCommand
    goto start
    end <- nop
    returnM (start, end))
  returnM start
emitWhileNonzero xs = do
  (start, _) <- mfix (\ ~(_, end) -> do
    start <- aload 1
    iload 2
    baload
    ifeq end
    forM_ xs emitCommand
    goto start
    end <- nop
    returnM (start, end))
  returnM start
emitWhileNonzero xs = do
  (start, _) <- mfix (\ ~(_, end) -> do
    start <- aload 1
    iload 2
    baload
    ifeq end
    forM_ xs emitCommand
    goto start
    end <- nop
    returnM (start, end))
  returnM start