1#ifdef _CC_INSIDE_KERNEL
2#include "taichi/util/macros.h"
3// clang-format off
4STR(
5union Ti_BitCast {
6 Ti_i64 val_i64;
7 Ti_i32 val_i32;
8 Ti_i16 val_i16;
9 Ti_i8 val_i8;
10 Ti_u64 val_u64;
11 Ti_u32 val_u32;
12 Ti_u16 val_u16;
13 Ti_u8 val_u8;
14 Ti_f32 val_f32;
15 Ti_f64 val_f64;
16 Ti_i64 *ptr_i64;
17 Ti_i32 *ptr_i32;
18 Ti_i16 *ptr_i16;
19 Ti_i8 *ptr_i8;
20 Ti_u64 *ptr_u64;
21 Ti_u32 *ptr_u32;
22 Ti_u16 *ptr_u16;
23 Ti_u8 *ptr_u8;
24 Ti_f32 *ptr_f32;
25 Ti_f64 *ptr_f64;
26 void *ptr_void;
27};
28
29struct Ti_Context {
30 struct Ti_S0root *root;
31 // In some C compilers `void *p; p + 1 == p;`, so let's use `char *p`:
32 Ti_i8 *gtmp;
33
34 union Ti_BitCast *args;
35 int *earg;
36};
37)
38
39// clang-format on
40#else // _CC_INSIDE_KERNEL
41
42#include "cc_program.h"
43#include "taichi/util/lang_util.h"
44
45namespace taichi::lang {
46
47namespace cccp {
48
49struct CCContext {
50 void *root;
51 void *gtmp;
52
53 uint64_t *args;
54 int *earg;
55};
56
57}; // namespace cccp
58
59} // namespace taichi::lang
60
61#endif // _CC_INSIDE_KERNEL
62