55
55
#endif // AMDHSA_BITS_SET
56
56
57
57
namespace llvm {
58
+
59
+ class MCContext ;
60
+ class MCExpr ;
61
+
58
62
namespace amdhsa {
59
63
60
64
// Floating point rounding modes. Must match hardware definition.
@@ -241,18 +245,40 @@ enum : int32_t {
241
245
242
246
// Kernel descriptor. Must be kept backwards compatible.
243
247
struct kernel_descriptor_t {
244
- uint32_t group_segment_fixed_size;
245
- uint32_t private_segment_fixed_size;
246
- uint32_t kernarg_size;
248
+ const MCExpr * group_segment_fixed_size;
249
+ const MCExpr * private_segment_fixed_size;
250
+ const MCExpr * kernarg_size;
247
251
uint8_t reserved0[4 ];
248
252
int64_t kernel_code_entry_byte_offset;
249
253
uint8_t reserved1[20 ];
250
- uint32_t compute_pgm_rsrc3; // GFX10+ and GFX90A+
251
- uint32_t compute_pgm_rsrc1;
252
- uint32_t compute_pgm_rsrc2;
253
- uint16_t kernel_code_properties;
254
- uint16_t kernarg_preload;
254
+ const MCExpr * compute_pgm_rsrc3; // GFX10+ and GFX90A+
255
+ const MCExpr * compute_pgm_rsrc1;
256
+ const MCExpr * compute_pgm_rsrc2;
257
+ const MCExpr * kernel_code_properties;
258
+ const MCExpr * kernarg_preload;
255
259
uint8_t reserved3[4 ];
260
+
261
+ static void bits_set (const MCExpr *&Dst, const MCExpr *Value, uint32_t Shift,
262
+ uint32_t Mask, MCContext &Ctx);
263
+ static const MCExpr *bits_get (const MCExpr *Src, uint32_t Shift,
264
+ uint32_t Mask, MCContext &Ctx);
265
+ };
266
+
267
+ // Sizes for kernel_descriptor_t properties, should add up to 64.
268
+ enum : uint32_t {
269
+ SIZEOF_GROUP_SEGMENT_FIXED_SIZE = 4 ,
270
+ SIZEOF_PRIVATE_SEGMENT_FIXED_SIZE = 4 ,
271
+ SIZEOF_KERNARG_SIZE = 4 ,
272
+ SIZEOF_RESERVED0 = 4 ,
273
+ SIZEOF_KERNEL_CODE_ENTRY_BYTE_OFFSET = 8 ,
274
+ SIZEOF_RESERVED1 = 20 ,
275
+ SIZEOF_COMPUTE_PGM_RSRC3 = 4 ,
276
+ SIZEOF_COMPUTE_PGM_RSRC1 = 4 ,
277
+ SIZEOF_COMPUTE_PGM_RSRC2 = 4 ,
278
+ SIZEOF_KERNEL_CODE_PROPERTIES = 2 ,
279
+ SIZEOF_KERNARG_PRELOAD = 2 ,
280
+ SIZEOF_RESERVED3 = 4 ,
281
+ SIZEOF_KERNEL_DESCRIPTOR = 64
256
282
};
257
283
258
284
enum : uint32_t {
@@ -270,43 +296,6 @@ enum : uint32_t {
270
296
RESERVED3_OFFSET = 60
271
297
};
272
298
273
- static_assert (
274
- sizeof (kernel_descriptor_t ) == 64 ,
275
- " invalid size for kernel_descriptor_t" );
276
- static_assert (offsetof(kernel_descriptor_t , group_segment_fixed_size) ==
277
- GROUP_SEGMENT_FIXED_SIZE_OFFSET,
278
- " invalid offset for group_segment_fixed_size" );
279
- static_assert (offsetof(kernel_descriptor_t , private_segment_fixed_size) ==
280
- PRIVATE_SEGMENT_FIXED_SIZE_OFFSET,
281
- " invalid offset for private_segment_fixed_size" );
282
- static_assert (offsetof(kernel_descriptor_t , kernarg_size) ==
283
- KERNARG_SIZE_OFFSET,
284
- " invalid offset for kernarg_size" );
285
- static_assert (offsetof(kernel_descriptor_t , reserved0) == RESERVED0_OFFSET,
286
- " invalid offset for reserved0" );
287
- static_assert (offsetof(kernel_descriptor_t , kernel_code_entry_byte_offset) ==
288
- KERNEL_CODE_ENTRY_BYTE_OFFSET_OFFSET,
289
- " invalid offset for kernel_code_entry_byte_offset" );
290
- static_assert (offsetof(kernel_descriptor_t , reserved1) == RESERVED1_OFFSET,
291
- " invalid offset for reserved1" );
292
- static_assert (offsetof(kernel_descriptor_t , compute_pgm_rsrc3) ==
293
- COMPUTE_PGM_RSRC3_OFFSET,
294
- " invalid offset for compute_pgm_rsrc3" );
295
- static_assert (offsetof(kernel_descriptor_t , compute_pgm_rsrc1) ==
296
- COMPUTE_PGM_RSRC1_OFFSET,
297
- " invalid offset for compute_pgm_rsrc1" );
298
- static_assert (offsetof(kernel_descriptor_t , compute_pgm_rsrc2) ==
299
- COMPUTE_PGM_RSRC2_OFFSET,
300
- " invalid offset for compute_pgm_rsrc2" );
301
- static_assert (offsetof(kernel_descriptor_t , kernel_code_properties) ==
302
- KERNEL_CODE_PROPERTIES_OFFSET,
303
- " invalid offset for kernel_code_properties" );
304
- static_assert (offsetof(kernel_descriptor_t , kernarg_preload) ==
305
- KERNARG_PRELOAD_OFFSET,
306
- " invalid offset for kernarg_preload" );
307
- static_assert (offsetof(kernel_descriptor_t , reserved3) == RESERVED3_OFFSET,
308
- " invalid offset for reserved3" );
309
-
310
299
} // end namespace amdhsa
311
300
} // end namespace llvm
312
301
0 commit comments