LLVM: include/llvm/Support/AMDHSAKernelDescriptor.h Source File (original) (raw)

31#define AMDHSA_BITS_ENUM_ENTRY(NAME, SHIFT, WIDTH) \

32 NAME ## _SHIFT = (SHIFT), \

33 NAME ## _WIDTH = (WIDTH), \

34 NAME = (((1 << (WIDTH)) - 1) << (SHIFT))

44#define AMDHSA_BITS_SET(DST, MSK, VAL) \

45 do { \

46 auto local = VAL; \

47 DST &= ~MSK; \

48 DST |= ((local << MSK##_SHIFT) & MSK); \

49 } while (0)

54

55

61};

62

63

69};

70

71

77};

78

79

80

81#define COMPUTE_PGM_RSRC1(NAME, SHIFT, WIDTH) \

82 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC1_##NAME, SHIFT, WIDTH)

83

84#define COMPUTE_PGM_RSRC1_GFX6_GFX8(NAME, SHIFT, WIDTH) \

85 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC1_GFX6_GFX8_##NAME, SHIFT, WIDTH)

86

87#define COMPUTE_PGM_RSRC1_GFX6_GFX9(NAME, SHIFT, WIDTH) \

88 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC1_GFX6_GFX9_##NAME, SHIFT, WIDTH)

89

90#define COMPUTE_PGM_RSRC1_GFX6_GFX11(NAME, SHIFT, WIDTH) \

91 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC1_GFX6_GFX11_##NAME, SHIFT, WIDTH)

92

93#define COMPUTE_PGM_RSRC1_GFX6_GFX120(NAME, SHIFT, WIDTH) \

94 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC1_GFX6_GFX120_##NAME, SHIFT, WIDTH)

95

96#define COMPUTE_PGM_RSRC1_GFX9_PLUS(NAME, SHIFT, WIDTH) \

97 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC1_GFX9_PLUS_##NAME, SHIFT, WIDTH)

98

99#define COMPUTE_PGM_RSRC1_GFX10_PLUS(NAME, SHIFT, WIDTH) \

100 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC1_GFX10_PLUS_##NAME, SHIFT, WIDTH)

101

102#define COMPUTE_PGM_RSRC1_GFX12_PLUS(NAME, SHIFT, WIDTH) \

103 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC1_GFX12_PLUS_##NAME, SHIFT, WIDTH)

104

105#define COMPUTE_PGM_RSRC1_GFX125(NAME, SHIFT, WIDTH) \

106 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC1_GFX125_##NAME, SHIFT, WIDTH)

107enum : int32_t {

132};

133#undef COMPUTE_PGM_RSRC1

134

135

136

137#define COMPUTE_PGM_RSRC2(NAME, SHIFT, WIDTH) \

138 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC2_##NAME, SHIFT, WIDTH)

139

140#define COMPUTE_PGM_RSRC2_GFX6_GFX11(NAME, SHIFT, WIDTH) \

141 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC2_GFX6_GFX11_##NAME, SHIFT, WIDTH)

142

143#define COMPUTE_PGM_RSRC2_GFX6_GFX120(NAME, SHIFT, WIDTH) \

144 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC2_GFX6_GFX120_##NAME, SHIFT, WIDTH)

145

146#define COMPUTE_PGM_RSRC2_GFX12_PLUS(NAME, SHIFT, WIDTH) \

147 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC2_GFX12_PLUS_##NAME, SHIFT, WIDTH)

148

149#define COMPUTE_PGM_RSRC2_GFX120(NAME, SHIFT, WIDTH) \

150 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC2_GFX120_##NAME, SHIFT, WIDTH)

151

152#define COMPUTE_PGM_RSRC2_GFX125(NAME, SHIFT, WIDTH) \

153 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC2_GFX125_##NAME, SHIFT, WIDTH)

154enum : int32_t {

168 COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_IEEE_754_FP_INVALID_OPERATION, 24, 1),

170 COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_IEEE_754_FP_DIVISION_BY_ZERO, 26, 1),

172 COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_IEEE_754_FP_UNDERFLOW, 28, 1),

176};

177#undef COMPUTE_PGM_RSRC2

178

179

180

181#define COMPUTE_PGM_RSRC3_GFX90A(NAME, SHIFT, WIDTH) \

182 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_GFX90A_ ## NAME, SHIFT, WIDTH)

183enum : int32_t {

188};

189#undef COMPUTE_PGM_RSRC3_GFX90A

190

191

192

193

194#define COMPUTE_PGM_RSRC3_GFX10_PLUS(NAME, SHIFT, WIDTH) \

195 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_GFX10_PLUS_##NAME, SHIFT, WIDTH)

196

197#define COMPUTE_PGM_RSRC3_GFX10(NAME, SHIFT, WIDTH) \

198 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_GFX10_##NAME, SHIFT, WIDTH)

199

200#define COMPUTE_PGM_RSRC3_GFX10_GFX11(NAME, SHIFT, WIDTH) \

201 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_GFX10_GFX11_##NAME, SHIFT, WIDTH)

202

203#define COMPUTE_PGM_RSRC3_GFX10_GFX120(NAME, SHIFT, WIDTH) \

204 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_GFX10_GFX120_##NAME, SHIFT, WIDTH)

205

206#define COMPUTE_PGM_RSRC3_GFX11_PLUS(NAME, SHIFT, WIDTH) \

207 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_GFX11_PLUS_##NAME, SHIFT, WIDTH)

208

209#define COMPUTE_PGM_RSRC3_GFX11(NAME, SHIFT, WIDTH) \

210 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_GFX11_##NAME, SHIFT, WIDTH)

211

212#define COMPUTE_PGM_RSRC3_GFX12_PLUS(NAME, SHIFT, WIDTH) \

213 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_GFX12_PLUS_##NAME, SHIFT, WIDTH)

214

215#define COMPUTE_PGM_RSRC3_GFX125(NAME, SHIFT, WIDTH) \

216 AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC3_GFX125_##NAME, SHIFT, WIDTH)

217enum : int32_t {

236};

237#undef COMPUTE_PGM_RSRC3_GFX10_PLUS

238

239

240#define KERNEL_CODE_PROPERTY(NAME, SHIFT, WIDTH) \

241 AMDHSA_BITS_ENUM_ENTRY(KERNEL_CODE_PROPERTY_ ## NAME, SHIFT, WIDTH)

242enum : int32_t {

254};

255#undef KERNEL_CODE_PROPERTY

256

257

258#define KERNARG_PRELOAD_SPEC(NAME, SHIFT, WIDTH) \

259 AMDHSA_BITS_ENUM_ENTRY(KERNARG_PRELOAD_SPEC_##NAME, SHIFT, WIDTH)

260enum : int32_t {

263};

264#undef KERNARG_PRELOAD_SPEC

265

266

281

295};

296

297static_assert(

298 sizeof(kernel_descriptor_t) == 64,

299 "invalid size for kernel_descriptor_t");

300static_assert(offsetof(kernel_descriptor_t, group_segment_fixed_size) ==

302 "invalid offset for group_segment_fixed_size");

303static_assert(offsetof(kernel_descriptor_t, private_segment_fixed_size) ==

305 "invalid offset for private_segment_fixed_size");

306static_assert(offsetof(kernel_descriptor_t, kernarg_size) ==

308 "invalid offset for kernarg_size");

310 "invalid offset for reserved0");

311static_assert(offsetof(kernel_descriptor_t, kernel_code_entry_byte_offset) ==

313 "invalid offset for kernel_code_entry_byte_offset");

315 "invalid offset for reserved1");

316static_assert(offsetof(kernel_descriptor_t, compute_pgm_rsrc3) ==

318 "invalid offset for compute_pgm_rsrc3");

319static_assert(offsetof(kernel_descriptor_t, compute_pgm_rsrc1) ==

321 "invalid offset for compute_pgm_rsrc1");

322static_assert(offsetof(kernel_descriptor_t, compute_pgm_rsrc2) ==

324 "invalid offset for compute_pgm_rsrc2");

325static_assert(offsetof(kernel_descriptor_t, kernel_code_properties) ==

327 "invalid offset for kernel_code_properties");

328static_assert(offsetof(kernel_descriptor_t, kernarg_preload) ==

330 "invalid offset for kernarg_preload");

332 "invalid offset for reserved3");

333

334}