rem: assert (blomcall_ctx != NULL);
context: uae_u32 REGPARAM2 __blomcall_callfunc68k(uae_u32 args[16], fptype fp[8], uae_u32 addr) {  assert (blomcall_ctx != NULL);  // Adjust sp not to include native return address (blomcall_ops() will push  // correct m68k address)  args[8+7] += sizeof (void*);    // Save UAE's register array, load a new one  memcpy(blomcall_ctx->saved_regs, blomcall_ctx->regs->regs, 16*4);  memcpy(blomcall_ctx->regs->regs, args, 16*4);  if (fp != NULL) {    memcpy(blomcall_ctx->saved_fpregs, blomcall_ctx->regs->fp, 8*4);    memcpy(blomcall_ctx->regs->fp, fp, 8*4);  }  // Set emulation address  m68k_setpc(blomcall_ctx->regs, addr);  fill_prefetch_slow(blomcall_ctx->regs);  // Save return address in m68kjmp ...  if (sigsetjmp (blomcall_ctx->m68kjmp, 0) == 0) {    // ... and head back to emulation via the emuljmp    pthread_sigmask(SIG_BLOCK, &blomcall_usr1sigset, NULL);    siglongjmp(blomcall_ctx->emuljmp, 3);  }  // Now we're back from emulation again  pthread_sigmask(SIG_UNBLOCK, &blomcall_usr1sigset, NULL);    assert (blomcall_ctx != NULL);  // Transfer UAE's register array back to caller, then restore it  memcpy(args, blomcall_ctx->regs->regs, 16*4);  memcpy(blomcall_ctx->regs->regs, blomcall_ctx->saved_regs, 16*4);  if (fp != NULL) {    memcpy(fp, blomcall_ctx->regs->fp, 8*4);    memcpy(blomcall_ctx->regs->fp, blomcall_ctx->saved_fpregs, 16*4);  }    // Return d0 for convenience  return m68k_dreg(blomcall_ctx->regs, 0);}