15 #ifndef LLVM_SUPPORT_AMDHSAKERNELDESCRIPTOR_H
16 #define LLVM_SUPPORT_AMDHSAKERNELDESCRIPTOR_H
23 #define offsetof(TYPE, MEMBER) ((size_t)&((TYPE*)0)->MEMBER)
28 #ifndef AMDHSA_BITS_ENUM_ENTRY
29 #define AMDHSA_BITS_ENUM_ENTRY(NAME, SHIFT, WIDTH) \
30 NAME ## _SHIFT = (SHIFT), \
31 NAME ## _WIDTH = (WIDTH), \
32 NAME = (((1 << (WIDTH)) - 1) << (SHIFT))
33 #endif // AMDHSA_BITS_ENUM_ENTRY
36 #ifndef AMDHSA_BITS_GET
37 #define AMDHSA_BITS_GET(SRC, MSK) ((SRC & MSK) >> MSK ## _SHIFT)
38 #endif // AMDHSA_BITS_GET
41 #ifndef AMDHSA_BITS_SET
42 #define AMDHSA_BITS_SET(DST, MSK, VAL) \
44 DST |= ((VAL << MSK ## _SHIFT) & MSK)
45 #endif // AMDHSA_BITS_SET
75 #define COMPUTE_PGM_RSRC1(NAME, SHIFT, WIDTH) \
76 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC1_ ## NAME, SHIFT, WIDTH)
97 #undef COMPUTE_PGM_RSRC1
100 #define COMPUTE_PGM_RSRC2(NAME, SHIFT, WIDTH) \
101 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC2_ ## NAME, SHIFT, WIDTH)
123 #undef COMPUTE_PGM_RSRC2
127 #define COMPUTE_PGM_RSRC3_GFX90A(NAME, SHIFT, WIDTH) \
128 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_GFX90A_ ## NAME, SHIFT, WIDTH)
135 #undef COMPUTE_PGM_RSRC3_GFX90A
139 #define COMPUTE_PGM_RSRC3_GFX10(NAME, SHIFT, WIDTH) \
140 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_GFX10_ ## NAME, SHIFT, WIDTH)
145 #undef COMPUTE_PGM_RSRC3_GFX10
148 #define KERNEL_CODE_PROPERTY(NAME, SHIFT, WIDTH) \
149 AMDHSA_BITS_ENUM_ENTRY(KERNEL_CODE_PROPERTY_ ## NAME, SHIFT, WIDTH)
162 #undef KERNEL_CODE_PROPERTY
194 sizeof(kernel_descriptor_t) == 64,
195 "invalid size for kernel_descriptor_t");
196 static_assert(
offsetof(kernel_descriptor_t, group_segment_fixed_size) ==
198 "invalid offset for group_segment_fixed_size");
199 static_assert(
offsetof(kernel_descriptor_t, private_segment_fixed_size) ==
201 "invalid offset for private_segment_fixed_size");
202 static_assert(
offsetof(kernel_descriptor_t, kernarg_size) ==
204 "invalid offset for kernarg_size");
206 "invalid offset for reserved0");
207 static_assert(
offsetof(kernel_descriptor_t, kernel_code_entry_byte_offset) ==
209 "invalid offset for kernel_code_entry_byte_offset");
211 "invalid offset for reserved1");
212 static_assert(
offsetof(kernel_descriptor_t, compute_pgm_rsrc3) ==
214 "invalid offset for compute_pgm_rsrc3");
215 static_assert(
offsetof(kernel_descriptor_t, compute_pgm_rsrc1) ==
217 "invalid offset for compute_pgm_rsrc1");
218 static_assert(
offsetof(kernel_descriptor_t, compute_pgm_rsrc2) ==
220 "invalid offset for compute_pgm_rsrc2");
221 static_assert(
offsetof(kernel_descriptor_t, kernel_code_properties) ==
223 "invalid offset for kernel_code_properties");
225 "invalid offset for reserved2");
230 #endif // LLVM_SUPPORT_AMDHSAKERNELDESCRIPTOR_H