MU Library
kernel.hpp
Go to the documentation of this file.
1 // SPDX-License-Identifier: Apache-2.0
2 // Copyright 2024 XCENA Inc.
3 
4 #pragma once
5 
6 #include "mu/crt0/call_main.hpp"
7 
8 namespace mu
9 {
10 typedef struct
11 {
12  const char* name;
13  void (*func)(unsigned int mode, unsigned int ndarrayValueBit, char* argv);
14 } KernelInfo;
15 } // namespace mu
16 
21 #ifndef MU_NON_BLOCKING_KERNEL_INIT
22 #define MU_NON_BLOCKING_KERNEL_INIT(FUNC) \
23  MU_KERNEL_ADD(FUNC) \
24  extern "C" [[gnu::used]] const uint64_t __mu_kernel_type__ = 1;
25 #endif
26 
27 // for safe ##
28 #ifndef _MU_CONCAT
29 #define _MU_CONCAT(a, b) a##b
30 #endif
31 #ifndef MU_CONCAT
32 #define MU_CONCAT(a, b) _MU_CONCAT(a, b)
33 #endif
34 
40 #ifndef MU_KERNEL_DEFINE
41 #define MU_KERNEL_DEFINE(TARGET, ID) \
42  extern "C" void MU_CONCAT(__mu_kernel_, ID)(unsigned int mode, unsigned int ndarrayValueBit, char* argv) \
43  { \
44  mu::callMain(TARGET, mode, ndarrayValueBit, argv); \
45  } \
46  extern "C" [[gnu::used]] const mu::KernelInfo MU_CONCAT(__mu_func_, ID) = { \
47  #ID, \
48  MU_CONCAT(__mu_kernel_, ID)};
49 #endif
50 
55 #ifndef MU_KERNEL_ADD
56 #define MU_KERNEL_ADD(FUNC) MU_KERNEL_DEFINE(FUNC, FUNC)
57 #endif
58 
62 #ifndef __pxl_kernel__
63 #define __pxl_kernel__ [[clang::annotate("mu::offload")]]
64 #endif
65 
69 #ifndef __mu_shared__
70 #define __mu_shared__ [[clang::annotate("mu::share")]]
71 #endif
72 
76 #ifndef __mu_device__
77 #define __mu_device__ [[clang::annotate("mu::device")]]
78 #endif
Definition: assert.hpp:9
const char * name
Definition: kernel.hpp:12