nvptx_stacks_free (stacks, teams * threads);
}
-void
-GOMP_OFFLOAD_async_run (int ord, void *tgt_fn, void *tgt_vars, void **args,
- void *async_data)
-{
- GOMP_PLUGIN_fatal ("GOMP_OFFLOAD_async_run unimplemented");
-}
+/* TODO: Implement GOMP_OFFLOAD_async_run. */
gomp_unmap_vars (tgt_vars, true);
}
+static inline unsigned int
+clear_unsupported_flags (struct gomp_device_descr *devicep, unsigned int flags)
+{
+ /* If we cannot run asynchronously, simply ignore nowait. */
+ if (devicep != NULL && devicep->async_run_func == NULL)
+ flags &= ~GOMP_TARGET_FLAG_NOWAIT;
+
+ return flags;
+}
+
/* Like GOMP_target, but KINDS is 16-bit, UNUSED is no longer present,
and several arguments have been added:
FLAGS is a bitmask, see GOMP_TARGET_FLAG_* in gomp-constants.h.
size_t tgt_align = 0, tgt_size = 0;
bool fpc_done = false;
+ flags = clear_unsupported_flags (devicep, flags);
+
if (flags & GOMP_TARGET_FLAG_NOWAIT)
{
struct gomp_thread *thr = gomp_thread ();
}
ttask->state = GOMP_TARGET_TASK_READY_TO_RUN;
+ assert (devicep->async_run_func);
devicep->async_run_func (devicep->target_id, fn_addr, actual_arguments,
ttask->args, (void *) ttask);
return true;
if (device->capabilities & GOMP_OFFLOAD_CAP_OPENMP_400)
{
DLSYM (run);
- DLSYM (async_run);
+ DLSYM_OPT (async_run, async_run);
DLSYM_OPT (can_run, can_run);
DLSYM (dev2dev);
}