5#if !(KMP_ARCH_X86 || KMP_ARCH_X86_64 || KMP_MIC || KMP_ARCH_AARCH64 || \
6 KMP_ARCH_PPC64 || KMP_ARCH_RISCV64 || KMP_ARCH_LOONGARCH64 || \
7 KMP_ARCH_ARM || KMP_ARCH_VE || KMP_ARCH_S390X || KMP_ARCH_PPC_XCOFF || \
10template <
size_t>
using microtask_argument_t =
void *;
12template <
size_t... Indices>
13static void invokeMicrotask(microtask_t pkfn,
int *gtid,
int *tid,
14 void *p_argv[], std::index_sequence<Indices...>) {
18 using typed_microtask_t =
19 void (*)(
int *,
int *, microtask_argument_t<Indices>...);
20 (*(typed_microtask_t)pkfn)(gtid, tid, p_argv[Indices]...);
25int __kmp_invoke_microtask(microtask_t pkfn,
int gtid,
int tid,
int argc,
33 *exit_frame_ptr = OMPT_GET_FRAME_ADDRESS(0);
36#define KMP_INVOKE_MICROTASK_CASE(N) \
38 invokeMicrotask(pkfn, >id, &tid, p_argv, std::make_index_sequence<N>{}); \
42 KMP_INVOKE_MICROTASK_CASE(0);
43 KMP_INVOKE_MICROTASK_CASE(1);
44 KMP_INVOKE_MICROTASK_CASE(2);
45 KMP_INVOKE_MICROTASK_CASE(3);
46 KMP_INVOKE_MICROTASK_CASE(4);
47 KMP_INVOKE_MICROTASK_CASE(5);
48 KMP_INVOKE_MICROTASK_CASE(6);
49 KMP_INVOKE_MICROTASK_CASE(7);
50 KMP_INVOKE_MICROTASK_CASE(8);
51 KMP_INVOKE_MICROTASK_CASE(9);
52 KMP_INVOKE_MICROTASK_CASE(10);
53 KMP_INVOKE_MICROTASK_CASE(11);
54 KMP_INVOKE_MICROTASK_CASE(12);
55 KMP_INVOKE_MICROTASK_CASE(13);
56 KMP_INVOKE_MICROTASK_CASE(14);
57 KMP_INVOKE_MICROTASK_CASE(15);
59 fprintf(stderr,
"Too many args to microtask: %d!\n", argc);
64#undef KMP_INVOKE_MICROTASK_CASE