You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1235 lines
29KB

  1. /* HSA BRIG (binary representation of HSAIL) 1.0.1 representation description.
  2. Copyright (C) 2016-2020 Free Software Foundation, Inc.
  3. This file is part of GCC.
  4. GCC is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 3, or (at your option)
  7. any later version.
  8. GCC is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with GCC; see the file COPYING3. If not see
  14. <http://www.gnu.org/licenses/>.
  15. The contents of the file was created by extracting data structures, enum,
  16. typedef and other definitions from HSA Programmer's Reference Manual Version
  17. 1.0.1 (http://www.hsafoundation.com/standards/).
  18. HTML version is provided on the following link:
  19. http://www.hsafoundation.com/html/Content/PRM/Topics/PRM_title_page.htm */
  20. #ifndef HSA_BRIG_FORMAT_H
  21. #define HSA_BRIG_FORMAT_H
  22. struct BrigModuleHeader;
  23. typedef uint16_t BrigKind16_t;
  24. typedef uint32_t BrigVersion32_t;
  25. typedef BrigModuleHeader *BrigModule_t;
  26. typedef uint32_t BrigDataOffset32_t;
  27. typedef uint32_t BrigCodeOffset32_t;
  28. typedef uint32_t BrigOperandOffset32_t;
  29. typedef BrigDataOffset32_t BrigDataOffsetString32_t;
  30. typedef BrigDataOffset32_t BrigDataOffsetCodeList32_t;
  31. typedef BrigDataOffset32_t BrigDataOffsetOperandList32_t;
  32. typedef uint8_t BrigAlignment8_t;
  33. enum BrigAlignment
  34. {
  35. BRIG_ALIGNMENT_NONE = 0,
  36. BRIG_ALIGNMENT_1 = 1,
  37. BRIG_ALIGNMENT_2 = 2,
  38. BRIG_ALIGNMENT_4 = 3,
  39. BRIG_ALIGNMENT_8 = 4,
  40. BRIG_ALIGNMENT_16 = 5,
  41. BRIG_ALIGNMENT_32 = 6,
  42. BRIG_ALIGNMENT_64 = 7,
  43. BRIG_ALIGNMENT_128 = 8,
  44. BRIG_ALIGNMENT_256 = 9
  45. };
  46. typedef uint8_t BrigAllocation8_t;
  47. enum BrigAllocation
  48. {
  49. BRIG_ALLOCATION_NONE = 0,
  50. BRIG_ALLOCATION_PROGRAM = 1,
  51. BRIG_ALLOCATION_AGENT = 2,
  52. BRIG_ALLOCATION_AUTOMATIC = 3
  53. };
  54. typedef uint8_t BrigAluModifier8_t;
  55. enum BrigAluModifierMask
  56. {
  57. BRIG_ALU_FTZ = 1
  58. };
  59. typedef uint8_t BrigAtomicOperation8_t;
  60. enum BrigAtomicOperation
  61. {
  62. BRIG_ATOMIC_ADD = 0,
  63. BRIG_ATOMIC_AND = 1,
  64. BRIG_ATOMIC_CAS = 2,
  65. BRIG_ATOMIC_EXCH = 3,
  66. BRIG_ATOMIC_LD = 4,
  67. BRIG_ATOMIC_MAX = 5,
  68. BRIG_ATOMIC_MIN = 6,
  69. BRIG_ATOMIC_OR = 7,
  70. BRIG_ATOMIC_ST = 8,
  71. BRIG_ATOMIC_SUB = 9,
  72. BRIG_ATOMIC_WRAPDEC = 10,
  73. BRIG_ATOMIC_WRAPINC = 11,
  74. BRIG_ATOMIC_XOR = 12,
  75. BRIG_ATOMIC_WAIT_EQ = 13,
  76. BRIG_ATOMIC_WAIT_NE = 14,
  77. BRIG_ATOMIC_WAIT_LT = 15,
  78. BRIG_ATOMIC_WAIT_GTE = 16,
  79. BRIG_ATOMIC_WAITTIMEOUT_EQ = 17,
  80. BRIG_ATOMIC_WAITTIMEOUT_NE = 18,
  81. BRIG_ATOMIC_WAITTIMEOUT_LT = 19,
  82. BRIG_ATOMIC_WAITTIMEOUT_GTE = 20
  83. };
  84. struct BrigBase
  85. {
  86. uint16_t byteCount;
  87. BrigKind16_t kind;
  88. };
  89. typedef uint8_t BrigCompareOperation8_t;
  90. enum BrigCompareOperation
  91. {
  92. BRIG_COMPARE_EQ = 0,
  93. BRIG_COMPARE_NE = 1,
  94. BRIG_COMPARE_LT = 2,
  95. BRIG_COMPARE_LE = 3,
  96. BRIG_COMPARE_GT = 4,
  97. BRIG_COMPARE_GE = 5,
  98. BRIG_COMPARE_EQU = 6,
  99. BRIG_COMPARE_NEU = 7,
  100. BRIG_COMPARE_LTU = 8,
  101. BRIG_COMPARE_LEU = 9,
  102. BRIG_COMPARE_GTU = 10,
  103. BRIG_COMPARE_GEU = 11,
  104. BRIG_COMPARE_NUM = 12,
  105. BRIG_COMPARE_NAN = 13,
  106. BRIG_COMPARE_SEQ = 14,
  107. BRIG_COMPARE_SNE = 15,
  108. BRIG_COMPARE_SLT = 16,
  109. BRIG_COMPARE_SLE = 17,
  110. BRIG_COMPARE_SGT = 18,
  111. BRIG_COMPARE_SGE = 19,
  112. BRIG_COMPARE_SGEU = 20,
  113. BRIG_COMPARE_SEQU = 21,
  114. BRIG_COMPARE_SNEU = 22,
  115. BRIG_COMPARE_SLTU = 23,
  116. BRIG_COMPARE_SLEU = 24,
  117. BRIG_COMPARE_SNUM = 25,
  118. BRIG_COMPARE_SNAN = 26,
  119. BRIG_COMPARE_SGTU = 27
  120. };
  121. typedef uint16_t BrigControlDirective16_t;
  122. enum BrigControlDirective
  123. {
  124. BRIG_CONTROL_NONE = 0,
  125. BRIG_CONTROL_ENABLEBREAKEXCEPTIONS = 1,
  126. BRIG_CONTROL_ENABLEDETECTEXCEPTIONS = 2,
  127. BRIG_CONTROL_MAXDYNAMICGROUPSIZE = 3,
  128. BRIG_CONTROL_MAXFLATGRIDSIZE = 4,
  129. BRIG_CONTROL_MAXFLATWORKGROUPSIZE = 5,
  130. BRIG_CONTROL_REQUIREDDIM = 6,
  131. BRIG_CONTROL_REQUIREDGRIDSIZE = 7,
  132. BRIG_CONTROL_REQUIREDWORKGROUPSIZE = 8,
  133. BRIG_CONTROL_REQUIRENOPARTIALWORKGROUPS = 9
  134. };
  135. typedef uint32_t BrigExceptions32_t;
  136. enum BrigExceptionsMask
  137. {
  138. BRIG_EXCEPTIONS_INVALID_OPERATION = 1 << 0,
  139. BRIG_EXCEPTIONS_DIVIDE_BY_ZERO = 1 << 1,
  140. BRIG_EXCEPTIONS_OVERFLOW = 1 << 2,
  141. BRIG_EXCEPTIONS_UNDERFLOW = 1 << 3,
  142. BRIG_EXCEPTIONS_INEXACT = 1 << 4,
  143. BRIG_EXCEPTIONS_FIRST_USER_DEFINED = 1 << 16
  144. };
  145. typedef uint8_t BrigExecutableModifier8_t;
  146. enum BrigExecutableModifierMask
  147. {
  148. BRIG_EXECUTABLE_DEFINITION = 1
  149. };
  150. typedef uint8_t BrigImageChannelOrder8_t;
  151. enum BrigImageChannelOrder
  152. {
  153. BRIG_CHANNEL_ORDER_A = 0,
  154. BRIG_CHANNEL_ORDER_R = 1,
  155. BRIG_CHANNEL_ORDER_RX = 2,
  156. BRIG_CHANNEL_ORDER_RG = 3,
  157. BRIG_CHANNEL_ORDER_RGX = 4,
  158. BRIG_CHANNEL_ORDER_RA = 5,
  159. BRIG_CHANNEL_ORDER_RGB = 6,
  160. BRIG_CHANNEL_ORDER_RGBX = 7,
  161. BRIG_CHANNEL_ORDER_RGBA = 8,
  162. BRIG_CHANNEL_ORDER_BGRA = 9,
  163. BRIG_CHANNEL_ORDER_ARGB = 10,
  164. BRIG_CHANNEL_ORDER_ABGR = 11,
  165. BRIG_CHANNEL_ORDER_SRGB = 12,
  166. BRIG_CHANNEL_ORDER_SRGBX = 13,
  167. BRIG_CHANNEL_ORDER_SRGBA = 14,
  168. BRIG_CHANNEL_ORDER_SBGRA = 15,
  169. BRIG_CHANNEL_ORDER_INTENSITY = 16,
  170. BRIG_CHANNEL_ORDER_LUMINANCE = 17,
  171. BRIG_CHANNEL_ORDER_DEPTH = 18,
  172. BRIG_CHANNEL_ORDER_DEPTH_STENCIL = 19,
  173. BRIG_CHANNEL_ORDER_FIRST_USER_DEFINED = 128
  174. };
  175. typedef uint8_t BrigImageChannelType8_t;
  176. enum BrigImageChannelType
  177. {
  178. BRIG_CHANNEL_TYPE_SNORM_INT8 = 0,
  179. BRIG_CHANNEL_TYPE_SNORM_INT16 = 1,
  180. BRIG_CHANNEL_TYPE_UNORM_INT8 = 2,
  181. BRIG_CHANNEL_TYPE_UNORM_INT16 = 3,
  182. BRIG_CHANNEL_TYPE_UNORM_INT24 = 4,
  183. BRIG_CHANNEL_TYPE_UNORM_SHORT_555 = 5,
  184. BRIG_CHANNEL_TYPE_UNORM_SHORT_565 = 6,
  185. BRIG_CHANNEL_TYPE_UNORM_INT_101010 = 7,
  186. BRIG_CHANNEL_TYPE_SIGNED_INT8 = 8,
  187. BRIG_CHANNEL_TYPE_SIGNED_INT16 = 9,
  188. BRIG_CHANNEL_TYPE_SIGNED_INT32 = 10,
  189. BRIG_CHANNEL_TYPE_UNSIGNED_INT8 = 11,
  190. BRIG_CHANNEL_TYPE_UNSIGNED_INT16 = 12,
  191. BRIG_CHANNEL_TYPE_UNSIGNED_INT32 = 13,
  192. BRIG_CHANNEL_TYPE_HALF_FLOAT = 14,
  193. BRIG_CHANNEL_TYPE_FLOAT = 15,
  194. BRIG_CHANNEL_TYPE_FIRST_USER_DEFINED = 128
  195. };
  196. typedef uint8_t BrigImageGeometry8_t;
  197. enum BrigImageGeometry
  198. {
  199. BRIG_GEOMETRY_1D = 0,
  200. BRIG_GEOMETRY_2D = 1,
  201. BRIG_GEOMETRY_3D = 2,
  202. BRIG_GEOMETRY_1DA = 3,
  203. BRIG_GEOMETRY_2DA = 4,
  204. BRIG_GEOMETRY_1DB = 5,
  205. BRIG_GEOMETRY_2DDEPTH = 6,
  206. BRIG_GEOMETRY_2DADEPTH = 7,
  207. BRIG_GEOMETRY_FIRST_USER_DEFINED = 128
  208. };
  209. typedef uint8_t BrigImageQuery8_t;
  210. enum BrigImageQuery
  211. {
  212. BRIG_IMAGE_QUERY_WIDTH = 0,
  213. BRIG_IMAGE_QUERY_HEIGHT = 1,
  214. BRIG_IMAGE_QUERY_DEPTH = 2,
  215. BRIG_IMAGE_QUERY_ARRAY = 3,
  216. BRIG_IMAGE_QUERY_CHANNELORDER = 4,
  217. BRIG_IMAGE_QUERY_CHANNELTYPE = 5
  218. };
  219. enum BrigKind
  220. {
  221. BRIG_KIND_NONE = 0x0000,
  222. BRIG_KIND_DIRECTIVE_BEGIN = 0x1000,
  223. BRIG_KIND_DIRECTIVE_ARG_BLOCK_END = 0x1000,
  224. BRIG_KIND_DIRECTIVE_ARG_BLOCK_START = 0x1001,
  225. BRIG_KIND_DIRECTIVE_COMMENT = 0x1002,
  226. BRIG_KIND_DIRECTIVE_CONTROL = 0x1003,
  227. BRIG_KIND_DIRECTIVE_EXTENSION = 0x1004,
  228. BRIG_KIND_DIRECTIVE_FBARRIER = 0x1005,
  229. BRIG_KIND_DIRECTIVE_FUNCTION = 0x1006,
  230. BRIG_KIND_DIRECTIVE_INDIRECT_FUNCTION = 0x1007,
  231. BRIG_KIND_DIRECTIVE_KERNEL = 0x1008,
  232. BRIG_KIND_DIRECTIVE_LABEL = 0x1009,
  233. BRIG_KIND_DIRECTIVE_LOC = 0x100a,
  234. BRIG_KIND_DIRECTIVE_MODULE = 0x100b,
  235. BRIG_KIND_DIRECTIVE_PRAGMA = 0x100c,
  236. BRIG_KIND_DIRECTIVE_SIGNATURE = 0x100d,
  237. BRIG_KIND_DIRECTIVE_VARIABLE = 0x100e,
  238. BRIG_KIND_DIRECTIVE_END = 0x100f,
  239. BRIG_KIND_INST_BEGIN = 0x2000,
  240. BRIG_KIND_INST_ADDR = 0x2000,
  241. BRIG_KIND_INST_ATOMIC = 0x2001,
  242. BRIG_KIND_INST_BASIC = 0x2002,
  243. BRIG_KIND_INST_BR = 0x2003,
  244. BRIG_KIND_INST_CMP = 0x2004,
  245. BRIG_KIND_INST_CVT = 0x2005,
  246. BRIG_KIND_INST_IMAGE = 0x2006,
  247. BRIG_KIND_INST_LANE = 0x2007,
  248. BRIG_KIND_INST_MEM = 0x2008,
  249. BRIG_KIND_INST_MEM_FENCE = 0x2009,
  250. BRIG_KIND_INST_MOD = 0x200a,
  251. BRIG_KIND_INST_QUERY_IMAGE = 0x200b,
  252. BRIG_KIND_INST_QUERY_SAMPLER = 0x200c,
  253. BRIG_KIND_INST_QUEUE = 0x200d,
  254. BRIG_KIND_INST_SEG = 0x200e,
  255. BRIG_KIND_INST_SEG_CVT = 0x200f,
  256. BRIG_KIND_INST_SIGNAL = 0x2010,
  257. BRIG_KIND_INST_SOURCE_TYPE = 0x2011,
  258. BRIG_KIND_INST_END = 0x2012,
  259. BRIG_KIND_OPERAND_BEGIN = 0x3000,
  260. BRIG_KIND_OPERAND_ADDRESS = 0x3000,
  261. BRIG_KIND_OPERAND_ALIGN = 0x3001,
  262. BRIG_KIND_OPERAND_CODE_LIST = 0x3002,
  263. BRIG_KIND_OPERAND_CODE_REF = 0x3003,
  264. BRIG_KIND_OPERAND_CONSTANT_BYTES = 0x3004,
  265. BRIG_KIND_OPERAND_RESERVED = 0x3005,
  266. BRIG_KIND_OPERAND_CONSTANT_IMAGE = 0x3006,
  267. BRIG_KIND_OPERAND_CONSTANT_OPERAND_LIST = 0x3007,
  268. BRIG_KIND_OPERAND_CONSTANT_SAMPLER = 0x3008,
  269. BRIG_KIND_OPERAND_OPERAND_LIST = 0x3009,
  270. BRIG_KIND_OPERAND_REGISTER = 0x300a,
  271. BRIG_KIND_OPERAND_STRING = 0x300b,
  272. BRIG_KIND_OPERAND_WAVESIZE = 0x300c,
  273. BRIG_KIND_OPERAND_END = 0x300d
  274. };
  275. typedef uint8_t BrigLinkage8_t;
  276. enum BrigLinkage
  277. {
  278. BRIG_LINKAGE_NONE = 0,
  279. BRIG_LINKAGE_PROGRAM = 1,
  280. BRIG_LINKAGE_MODULE = 2,
  281. BRIG_LINKAGE_FUNCTION = 3,
  282. BRIG_LINKAGE_ARG = 4
  283. };
  284. typedef uint8_t BrigMachineModel8_t;
  285. enum BrigMachineModel
  286. {
  287. BRIG_MACHINE_SMALL = 0,
  288. BRIG_MACHINE_LARGE = 1
  289. };
  290. typedef uint8_t BrigMemoryModifier8_t;
  291. enum BrigMemoryModifierMask
  292. {
  293. BRIG_MEMORY_CONST = 1
  294. };
  295. typedef uint8_t BrigMemoryOrder8_t;
  296. enum BrigMemoryOrder
  297. {
  298. BRIG_MEMORY_ORDER_NONE = 0,
  299. BRIG_MEMORY_ORDER_RELAXED = 1,
  300. BRIG_MEMORY_ORDER_SC_ACQUIRE = 2,
  301. BRIG_MEMORY_ORDER_SC_RELEASE = 3,
  302. BRIG_MEMORY_ORDER_SC_ACQUIRE_RELEASE = 4
  303. };
  304. typedef uint8_t BrigMemoryScope8_t;
  305. enum BrigMemoryScope
  306. {
  307. BRIG_MEMORY_SCOPE_NONE = 0,
  308. BRIG_MEMORY_SCOPE_WORKITEM = 1,
  309. BRIG_MEMORY_SCOPE_WAVEFRONT = 2,
  310. BRIG_MEMORY_SCOPE_WORKGROUP = 3,
  311. BRIG_MEMORY_SCOPE_AGENT = 4,
  312. BRIG_MEMORY_SCOPE_SYSTEM = 5
  313. };
  314. struct BrigModuleHeader
  315. {
  316. char identification[8];
  317. BrigVersion32_t brigMajor;
  318. BrigVersion32_t brigMinor;
  319. uint64_t byteCount;
  320. uint8_t hash[64];
  321. uint32_t reserved;
  322. uint32_t sectionCount;
  323. uint64_t sectionIndex;
  324. };
  325. typedef uint16_t BrigOpcode16_t;
  326. enum BrigOpcode
  327. {
  328. BRIG_OPCODE_NOP = 0,
  329. BRIG_OPCODE_ABS = 1,
  330. BRIG_OPCODE_ADD = 2,
  331. BRIG_OPCODE_BORROW = 3,
  332. BRIG_OPCODE_CARRY = 4,
  333. BRIG_OPCODE_CEIL = 5,
  334. BRIG_OPCODE_COPYSIGN = 6,
  335. BRIG_OPCODE_DIV = 7,
  336. BRIG_OPCODE_FLOOR = 8,
  337. BRIG_OPCODE_FMA = 9,
  338. BRIG_OPCODE_FRACT = 10,
  339. BRIG_OPCODE_MAD = 11,
  340. BRIG_OPCODE_MAX = 12,
  341. BRIG_OPCODE_MIN = 13,
  342. BRIG_OPCODE_MUL = 14,
  343. BRIG_OPCODE_MULHI = 15,
  344. BRIG_OPCODE_NEG = 16,
  345. BRIG_OPCODE_REM = 17,
  346. BRIG_OPCODE_RINT = 18,
  347. BRIG_OPCODE_SQRT = 19,
  348. BRIG_OPCODE_SUB = 20,
  349. BRIG_OPCODE_TRUNC = 21,
  350. BRIG_OPCODE_MAD24 = 22,
  351. BRIG_OPCODE_MAD24HI = 23,
  352. BRIG_OPCODE_MUL24 = 24,
  353. BRIG_OPCODE_MUL24HI = 25,
  354. BRIG_OPCODE_SHL = 26,
  355. BRIG_OPCODE_SHR = 27,
  356. BRIG_OPCODE_AND = 28,
  357. BRIG_OPCODE_NOT = 29,
  358. BRIG_OPCODE_OR = 30,
  359. BRIG_OPCODE_POPCOUNT = 31,
  360. BRIG_OPCODE_XOR = 32,
  361. BRIG_OPCODE_BITEXTRACT = 33,
  362. BRIG_OPCODE_BITINSERT = 34,
  363. BRIG_OPCODE_BITMASK = 35,
  364. BRIG_OPCODE_BITREV = 36,
  365. BRIG_OPCODE_BITSELECT = 37,
  366. BRIG_OPCODE_FIRSTBIT = 38,
  367. BRIG_OPCODE_LASTBIT = 39,
  368. BRIG_OPCODE_COMBINE = 40,
  369. BRIG_OPCODE_EXPAND = 41,
  370. BRIG_OPCODE_LDA = 42,
  371. BRIG_OPCODE_MOV = 43,
  372. BRIG_OPCODE_SHUFFLE = 44,
  373. BRIG_OPCODE_UNPACKHI = 45,
  374. BRIG_OPCODE_UNPACKLO = 46,
  375. BRIG_OPCODE_PACK = 47,
  376. BRIG_OPCODE_UNPACK = 48,
  377. BRIG_OPCODE_CMOV = 49,
  378. BRIG_OPCODE_CLASS = 50,
  379. BRIG_OPCODE_NCOS = 51,
  380. BRIG_OPCODE_NEXP2 = 52,
  381. BRIG_OPCODE_NFMA = 53,
  382. BRIG_OPCODE_NLOG2 = 54,
  383. BRIG_OPCODE_NRCP = 55,
  384. BRIG_OPCODE_NRSQRT = 56,
  385. BRIG_OPCODE_NSIN = 57,
  386. BRIG_OPCODE_NSQRT = 58,
  387. BRIG_OPCODE_BITALIGN = 59,
  388. BRIG_OPCODE_BYTEALIGN = 60,
  389. BRIG_OPCODE_PACKCVT = 61,
  390. BRIG_OPCODE_UNPACKCVT = 62,
  391. BRIG_OPCODE_LERP = 63,
  392. BRIG_OPCODE_SAD = 64,
  393. BRIG_OPCODE_SADHI = 65,
  394. BRIG_OPCODE_SEGMENTP = 66,
  395. BRIG_OPCODE_FTOS = 67,
  396. BRIG_OPCODE_STOF = 68,
  397. BRIG_OPCODE_CMP = 69,
  398. BRIG_OPCODE_CVT = 70,
  399. BRIG_OPCODE_LD = 71,
  400. BRIG_OPCODE_ST = 72,
  401. BRIG_OPCODE_ATOMIC = 73,
  402. BRIG_OPCODE_ATOMICNORET = 74,
  403. BRIG_OPCODE_SIGNAL = 75,
  404. BRIG_OPCODE_SIGNALNORET = 76,
  405. BRIG_OPCODE_MEMFENCE = 77,
  406. BRIG_OPCODE_RDIMAGE = 78,
  407. BRIG_OPCODE_LDIMAGE = 79,
  408. BRIG_OPCODE_STIMAGE = 80,
  409. BRIG_OPCODE_IMAGEFENCE = 81,
  410. BRIG_OPCODE_QUERYIMAGE = 82,
  411. BRIG_OPCODE_QUERYSAMPLER = 83,
  412. BRIG_OPCODE_CBR = 84,
  413. BRIG_OPCODE_BR = 85,
  414. BRIG_OPCODE_SBR = 86,
  415. BRIG_OPCODE_BARRIER = 87,
  416. BRIG_OPCODE_WAVEBARRIER = 88,
  417. BRIG_OPCODE_ARRIVEFBAR = 89,
  418. BRIG_OPCODE_INITFBAR = 90,
  419. BRIG_OPCODE_JOINFBAR = 91,
  420. BRIG_OPCODE_LEAVEFBAR = 92,
  421. BRIG_OPCODE_RELEASEFBAR = 93,
  422. BRIG_OPCODE_WAITFBAR = 94,
  423. BRIG_OPCODE_LDF = 95,
  424. BRIG_OPCODE_ACTIVELANECOUNT = 96,
  425. BRIG_OPCODE_ACTIVELANEID = 97,
  426. BRIG_OPCODE_ACTIVELANEMASK = 98,
  427. BRIG_OPCODE_ACTIVELANEPERMUTE = 99,
  428. BRIG_OPCODE_CALL = 100,
  429. BRIG_OPCODE_SCALL = 101,
  430. BRIG_OPCODE_ICALL = 102,
  431. BRIG_OPCODE_RET = 103,
  432. BRIG_OPCODE_ALLOCA = 104,
  433. BRIG_OPCODE_CURRENTWORKGROUPSIZE = 105,
  434. BRIG_OPCODE_CURRENTWORKITEMFLATID = 106,
  435. BRIG_OPCODE_DIM = 107,
  436. BRIG_OPCODE_GRIDGROUPS = 108,
  437. BRIG_OPCODE_GRIDSIZE = 109,
  438. BRIG_OPCODE_PACKETCOMPLETIONSIG = 110,
  439. BRIG_OPCODE_PACKETID = 111,
  440. BRIG_OPCODE_WORKGROUPID = 112,
  441. BRIG_OPCODE_WORKGROUPSIZE = 113,
  442. BRIG_OPCODE_WORKITEMABSID = 114,
  443. BRIG_OPCODE_WORKITEMFLATABSID = 115,
  444. BRIG_OPCODE_WORKITEMFLATID = 116,
  445. BRIG_OPCODE_WORKITEMID = 117,
  446. BRIG_OPCODE_CLEARDETECTEXCEPT = 118,
  447. BRIG_OPCODE_GETDETECTEXCEPT = 119,
  448. BRIG_OPCODE_SETDETECTEXCEPT = 120,
  449. BRIG_OPCODE_ADDQUEUEWRITEINDEX = 121,
  450. BRIG_OPCODE_CASQUEUEWRITEINDEX = 122,
  451. BRIG_OPCODE_LDQUEUEREADINDEX = 123,
  452. BRIG_OPCODE_LDQUEUEWRITEINDEX = 124,
  453. BRIG_OPCODE_STQUEUEREADINDEX = 125,
  454. BRIG_OPCODE_STQUEUEWRITEINDEX = 126,
  455. BRIG_OPCODE_CLOCK = 127,
  456. BRIG_OPCODE_CUID = 128,
  457. BRIG_OPCODE_DEBUGTRAP = 129,
  458. BRIG_OPCODE_GROUPBASEPTR = 130,
  459. BRIG_OPCODE_KERNARGBASEPTR = 131,
  460. BRIG_OPCODE_LANEID = 132,
  461. BRIG_OPCODE_MAXCUID = 133,
  462. BRIG_OPCODE_MAXWAVEID = 134,
  463. BRIG_OPCODE_NULLPTR = 135,
  464. BRIG_OPCODE_WAVEID = 136,
  465. BRIG_OPCODE_FIRST_USER_DEFINED = 32768
  466. };
  467. typedef uint8_t BrigPack8_t;
  468. enum BrigPack
  469. {
  470. BRIG_PACK_NONE = 0,
  471. BRIG_PACK_PP = 1,
  472. BRIG_PACK_PS = 2,
  473. BRIG_PACK_SP = 3,
  474. BRIG_PACK_SS = 4,
  475. BRIG_PACK_S = 5,
  476. BRIG_PACK_P = 6,
  477. BRIG_PACK_PPSAT = 7,
  478. BRIG_PACK_PSSAT = 8,
  479. BRIG_PACK_SPSAT = 9,
  480. BRIG_PACK_SSSAT = 10,
  481. BRIG_PACK_SSAT = 11,
  482. BRIG_PACK_PSAT = 12
  483. };
  484. typedef uint8_t BrigProfile8_t;
  485. enum BrigProfile
  486. {
  487. BRIG_PROFILE_BASE = 0,
  488. BRIG_PROFILE_FULL = 1
  489. };
  490. typedef uint16_t BrigRegisterKind16_t;
  491. enum BrigRegisterKind
  492. {
  493. BRIG_REGISTER_KIND_CONTROL = 0,
  494. BRIG_REGISTER_KIND_SINGLE = 1,
  495. BRIG_REGISTER_KIND_DOUBLE = 2,
  496. BRIG_REGISTER_KIND_QUAD = 3
  497. };
  498. typedef uint8_t BrigRound8_t;
  499. enum BrigRound
  500. {
  501. BRIG_ROUND_NONE = 0,
  502. BRIG_ROUND_FLOAT_DEFAULT = 1,
  503. BRIG_ROUND_FLOAT_NEAR_EVEN = 2,
  504. BRIG_ROUND_FLOAT_ZERO = 3,
  505. BRIG_ROUND_FLOAT_PLUS_INFINITY = 4,
  506. BRIG_ROUND_FLOAT_MINUS_INFINITY = 5,
  507. BRIG_ROUND_INTEGER_NEAR_EVEN = 6,
  508. BRIG_ROUND_INTEGER_ZERO = 7,
  509. BRIG_ROUND_INTEGER_PLUS_INFINITY = 8,
  510. BRIG_ROUND_INTEGER_MINUS_INFINITY = 9,
  511. BRIG_ROUND_INTEGER_NEAR_EVEN_SAT = 10,
  512. BRIG_ROUND_INTEGER_ZERO_SAT = 11,
  513. BRIG_ROUND_INTEGER_PLUS_INFINITY_SAT = 12,
  514. BRIG_ROUND_INTEGER_MINUS_INFINITY_SAT = 13,
  515. BRIG_ROUND_INTEGER_SIGNALING_NEAR_EVEN = 14,
  516. BRIG_ROUND_INTEGER_SIGNALING_ZERO = 15,
  517. BRIG_ROUND_INTEGER_SIGNALING_PLUS_INFINITY = 16,
  518. BRIG_ROUND_INTEGER_SIGNALING_MINUS_INFINITY = 17,
  519. BRIG_ROUND_INTEGER_SIGNALING_NEAR_EVEN_SAT = 18,
  520. BRIG_ROUND_INTEGER_SIGNALING_ZERO_SAT = 19,
  521. BRIG_ROUND_INTEGER_SIGNALING_PLUS_INFINITY_SAT = 20,
  522. BRIG_ROUND_INTEGER_SIGNALING_MINUS_INFINITY_SAT = 21
  523. };
  524. typedef uint8_t BrigSamplerAddressing8_t;
  525. enum BrigSamplerAddressing
  526. {
  527. BRIG_ADDRESSING_UNDEFINED = 0,
  528. BRIG_ADDRESSING_CLAMP_TO_EDGE = 1,
  529. BRIG_ADDRESSING_CLAMP_TO_BORDER = 2,
  530. BRIG_ADDRESSING_REPEAT = 3,
  531. BRIG_ADDRESSING_MIRRORED_REPEAT = 4,
  532. BRIG_ADDRESSING_FIRST_USER_DEFINED = 128
  533. };
  534. typedef uint8_t BrigSamplerCoordNormalization8_t;
  535. enum BrigSamplerCoordNormalization
  536. {
  537. BRIG_COORD_UNNORMALIZED = 0,
  538. BRIG_COORD_NORMALIZED = 1
  539. };
  540. typedef uint8_t BrigSamplerFilter8_t;
  541. enum BrigSamplerFilter
  542. {
  543. BRIG_FILTER_NEAREST = 0,
  544. BRIG_FILTER_LINEAR = 1,
  545. BRIG_FILTER_FIRST_USER_DEFINED = 128
  546. };
  547. typedef uint8_t BrigSamplerQuery8_t;
  548. enum BrigSamplerQuery
  549. {
  550. BRIG_SAMPLER_QUERY_ADDRESSING = 0,
  551. BRIG_SAMPLER_QUERY_COORD = 1,
  552. BRIG_SAMPLER_QUERY_FILTER = 2
  553. };
  554. typedef uint32_t BrigSectionIndex32_t;
  555. enum BrigSectionIndex
  556. {
  557. BRIG_SECTION_INDEX_DATA = 0,
  558. BRIG_SECTION_INDEX_CODE = 1,
  559. BRIG_SECTION_INDEX_OPERAND = 2,
  560. BRIG_SECTION_INDEX_BEGIN_IMPLEMENTATION_DEFINED = 3
  561. };
  562. struct BrigSectionHeader
  563. {
  564. uint64_t byteCount;
  565. uint32_t headerByteCount;
  566. uint32_t nameLength;
  567. uint8_t name[1];
  568. };
  569. typedef uint8_t BrigSegCvtModifier8_t;
  570. enum BrigSegCvtModifierMask
  571. {
  572. BRIG_SEG_CVT_NONULL = 1
  573. };
  574. typedef uint8_t BrigSegment8_t;
  575. enum BrigSegment
  576. {
  577. BRIG_SEGMENT_NONE = 0,
  578. BRIG_SEGMENT_FLAT = 1,
  579. BRIG_SEGMENT_GLOBAL = 2,
  580. BRIG_SEGMENT_READONLY = 3,
  581. BRIG_SEGMENT_KERNARG = 4,
  582. BRIG_SEGMENT_GROUP = 5,
  583. BRIG_SEGMENT_PRIVATE = 6,
  584. BRIG_SEGMENT_SPILL = 7,
  585. BRIG_SEGMENT_ARG = 8,
  586. BRIG_SEGMENT_FIRST_USER_DEFINED = 128
  587. };
  588. enum
  589. {
  590. BRIG_TYPE_BASE_SIZE = 5,
  591. BRIG_TYPE_PACK_SIZE = 2,
  592. BRIG_TYPE_ARRAY_SIZE = 1,
  593. BRIG_TYPE_BASE_SHIFT = 0,
  594. BRIG_TYPE_PACK_SHIFT = BRIG_TYPE_BASE_SHIFT + BRIG_TYPE_BASE_SIZE,
  595. BRIG_TYPE_ARRAY_SHIFT = BRIG_TYPE_PACK_SHIFT + BRIG_TYPE_PACK_SIZE,
  596. BRIG_TYPE_BASE_MASK = ((1 << BRIG_TYPE_BASE_SIZE) - 1)
  597. << BRIG_TYPE_BASE_SHIFT,
  598. BRIG_TYPE_PACK_MASK = ((1 << BRIG_TYPE_PACK_SIZE) - 1)
  599. << BRIG_TYPE_PACK_SHIFT,
  600. BRIG_TYPE_ARRAY_MASK = ((1 << BRIG_TYPE_ARRAY_SIZE) - 1)
  601. << BRIG_TYPE_ARRAY_SHIFT,
  602. BRIG_TYPE_PACK_NONE = 0 << BRIG_TYPE_PACK_SHIFT,
  603. BRIG_TYPE_PACK_32 = 1 << BRIG_TYPE_PACK_SHIFT,
  604. BRIG_TYPE_PACK_64 = 2 << BRIG_TYPE_PACK_SHIFT,
  605. BRIG_TYPE_PACK_128 = 3 << BRIG_TYPE_PACK_SHIFT,
  606. BRIG_TYPE_ARRAY = 1 << BRIG_TYPE_ARRAY_SHIFT
  607. };
  608. typedef uint16_t BrigType16_t;
  609. enum BrigType
  610. {
  611. BRIG_TYPE_NONE = 0,
  612. BRIG_TYPE_U8 = 1,
  613. BRIG_TYPE_U16 = 2,
  614. BRIG_TYPE_U32 = 3,
  615. BRIG_TYPE_U64 = 4,
  616. BRIG_TYPE_S8 = 5,
  617. BRIG_TYPE_S16 = 6,
  618. BRIG_TYPE_S32 = 7,
  619. BRIG_TYPE_S64 = 8,
  620. BRIG_TYPE_F16 = 9,
  621. BRIG_TYPE_F32 = 10,
  622. BRIG_TYPE_F64 = 11,
  623. BRIG_TYPE_B1 = 12,
  624. BRIG_TYPE_B8 = 13,
  625. BRIG_TYPE_B16 = 14,
  626. BRIG_TYPE_B32 = 15,
  627. BRIG_TYPE_B64 = 16,
  628. BRIG_TYPE_B128 = 17,
  629. BRIG_TYPE_SAMP = 18,
  630. BRIG_TYPE_ROIMG = 19,
  631. BRIG_TYPE_WOIMG = 20,
  632. BRIG_TYPE_RWIMG = 21,
  633. BRIG_TYPE_SIG32 = 22,
  634. BRIG_TYPE_SIG64 = 23,
  635. BRIG_TYPE_U8X4 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_32,
  636. BRIG_TYPE_U8X8 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_64,
  637. BRIG_TYPE_U8X16 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_128,
  638. BRIG_TYPE_U16X2 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_32,
  639. BRIG_TYPE_U16X4 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_64,
  640. BRIG_TYPE_U16X8 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_128,
  641. BRIG_TYPE_U32X2 = BRIG_TYPE_U32 | BRIG_TYPE_PACK_64,
  642. BRIG_TYPE_U32X4 = BRIG_TYPE_U32 | BRIG_TYPE_PACK_128,
  643. BRIG_TYPE_U64X2 = BRIG_TYPE_U64 | BRIG_TYPE_PACK_128,
  644. BRIG_TYPE_S8X4 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_32,
  645. BRIG_TYPE_S8X8 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_64,
  646. BRIG_TYPE_S8X16 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_128,
  647. BRIG_TYPE_S16X2 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_32,
  648. BRIG_TYPE_S16X4 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_64,
  649. BRIG_TYPE_S16X8 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_128,
  650. BRIG_TYPE_S32X2 = BRIG_TYPE_S32 | BRIG_TYPE_PACK_64,
  651. BRIG_TYPE_S32X4 = BRIG_TYPE_S32 | BRIG_TYPE_PACK_128,
  652. BRIG_TYPE_S64X2 = BRIG_TYPE_S64 | BRIG_TYPE_PACK_128,
  653. BRIG_TYPE_F16X2 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_32,
  654. BRIG_TYPE_F16X4 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_64,
  655. BRIG_TYPE_F16X8 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_128,
  656. BRIG_TYPE_F32X2 = BRIG_TYPE_F32 | BRIG_TYPE_PACK_64,
  657. BRIG_TYPE_F32X4 = BRIG_TYPE_F32 | BRIG_TYPE_PACK_128,
  658. BRIG_TYPE_F64X2 = BRIG_TYPE_F64 | BRIG_TYPE_PACK_128,
  659. BRIG_TYPE_U8_ARRAY = BRIG_TYPE_U8 | BRIG_TYPE_ARRAY,
  660. BRIG_TYPE_U16_ARRAY = BRIG_TYPE_U16 | BRIG_TYPE_ARRAY,
  661. BRIG_TYPE_U32_ARRAY = BRIG_TYPE_U32 | BRIG_TYPE_ARRAY,
  662. BRIG_TYPE_U64_ARRAY = BRIG_TYPE_U64 | BRIG_TYPE_ARRAY,
  663. BRIG_TYPE_S8_ARRAY = BRIG_TYPE_S8 | BRIG_TYPE_ARRAY,
  664. BRIG_TYPE_S16_ARRAY = BRIG_TYPE_S16 | BRIG_TYPE_ARRAY,
  665. BRIG_TYPE_S32_ARRAY = BRIG_TYPE_S32 | BRIG_TYPE_ARRAY,
  666. BRIG_TYPE_S64_ARRAY = BRIG_TYPE_S64 | BRIG_TYPE_ARRAY,
  667. BRIG_TYPE_F16_ARRAY = BRIG_TYPE_F16 | BRIG_TYPE_ARRAY,
  668. BRIG_TYPE_F32_ARRAY = BRIG_TYPE_F32 | BRIG_TYPE_ARRAY,
  669. BRIG_TYPE_F64_ARRAY = BRIG_TYPE_F64 | BRIG_TYPE_ARRAY,
  670. BRIG_TYPE_B8_ARRAY = BRIG_TYPE_B8 | BRIG_TYPE_ARRAY,
  671. BRIG_TYPE_B16_ARRAY = BRIG_TYPE_B16 | BRIG_TYPE_ARRAY,
  672. BRIG_TYPE_B32_ARRAY = BRIG_TYPE_B32 | BRIG_TYPE_ARRAY,
  673. BRIG_TYPE_B64_ARRAY = BRIG_TYPE_B64 | BRIG_TYPE_ARRAY,
  674. BRIG_TYPE_B128_ARRAY = BRIG_TYPE_B128 | BRIG_TYPE_ARRAY,
  675. BRIG_TYPE_SAMP_ARRAY = BRIG_TYPE_SAMP | BRIG_TYPE_ARRAY,
  676. BRIG_TYPE_ROIMG_ARRAY = BRIG_TYPE_ROIMG | BRIG_TYPE_ARRAY,
  677. BRIG_TYPE_WOIMG_ARRAY = BRIG_TYPE_WOIMG | BRIG_TYPE_ARRAY,
  678. BRIG_TYPE_RWIMG_ARRAY = BRIG_TYPE_RWIMG | BRIG_TYPE_ARRAY,
  679. BRIG_TYPE_SIG32_ARRAY = BRIG_TYPE_SIG32 | BRIG_TYPE_ARRAY,
  680. BRIG_TYPE_SIG64_ARRAY = BRIG_TYPE_SIG64 | BRIG_TYPE_ARRAY,
  681. BRIG_TYPE_U8X4_ARRAY = BRIG_TYPE_U8X4 | BRIG_TYPE_ARRAY,
  682. BRIG_TYPE_U8X8_ARRAY = BRIG_TYPE_U8X8 | BRIG_TYPE_ARRAY,
  683. BRIG_TYPE_U8X16_ARRAY = BRIG_TYPE_U8X16 | BRIG_TYPE_ARRAY,
  684. BRIG_TYPE_U16X2_ARRAY = BRIG_TYPE_U16X2 | BRIG_TYPE_ARRAY,
  685. BRIG_TYPE_U16X4_ARRAY = BRIG_TYPE_U16X4 | BRIG_TYPE_ARRAY,
  686. BRIG_TYPE_U16X8_ARRAY = BRIG_TYPE_U16X8 | BRIG_TYPE_ARRAY,
  687. BRIG_TYPE_U32X2_ARRAY = BRIG_TYPE_U32X2 | BRIG_TYPE_ARRAY,
  688. BRIG_TYPE_U32X4_ARRAY = BRIG_TYPE_U32X4 | BRIG_TYPE_ARRAY,
  689. BRIG_TYPE_U64X2_ARRAY = BRIG_TYPE_U64X2 | BRIG_TYPE_ARRAY,
  690. BRIG_TYPE_S8X4_ARRAY = BRIG_TYPE_S8X4 | BRIG_TYPE_ARRAY,
  691. BRIG_TYPE_S8X8_ARRAY = BRIG_TYPE_S8X8 | BRIG_TYPE_ARRAY,
  692. BRIG_TYPE_S8X16_ARRAY = BRIG_TYPE_S8X16 | BRIG_TYPE_ARRAY,
  693. BRIG_TYPE_S16X2_ARRAY = BRIG_TYPE_S16X2 | BRIG_TYPE_ARRAY,
  694. BRIG_TYPE_S16X4_ARRAY = BRIG_TYPE_S16X4 | BRIG_TYPE_ARRAY,
  695. BRIG_TYPE_S16X8_ARRAY = BRIG_TYPE_S16X8 | BRIG_TYPE_ARRAY,
  696. BRIG_TYPE_S32X2_ARRAY = BRIG_TYPE_S32X2 | BRIG_TYPE_ARRAY,
  697. BRIG_TYPE_S32X4_ARRAY = BRIG_TYPE_S32X4 | BRIG_TYPE_ARRAY,
  698. BRIG_TYPE_S64X2_ARRAY = BRIG_TYPE_S64X2 | BRIG_TYPE_ARRAY,
  699. BRIG_TYPE_F16X2_ARRAY = BRIG_TYPE_F16X2 | BRIG_TYPE_ARRAY,
  700. BRIG_TYPE_F16X4_ARRAY = BRIG_TYPE_F16X4 | BRIG_TYPE_ARRAY,
  701. BRIG_TYPE_F16X8_ARRAY = BRIG_TYPE_F16X8 | BRIG_TYPE_ARRAY,
  702. BRIG_TYPE_F32X2_ARRAY = BRIG_TYPE_F32X2 | BRIG_TYPE_ARRAY,
  703. BRIG_TYPE_F32X4_ARRAY = BRIG_TYPE_F32X4 | BRIG_TYPE_ARRAY,
  704. BRIG_TYPE_F64X2_ARRAY = BRIG_TYPE_F64X2 | BRIG_TYPE_ARRAY
  705. };
  706. struct BrigUInt64
  707. {
  708. uint32_t lo;
  709. uint32_t hi;
  710. };
  711. typedef uint8_t BrigVariableModifier8_t;
  712. enum BrigVariableModifierMask
  713. {
  714. BRIG_VARIABLE_DEFINITION = 1,
  715. BRIG_VARIABLE_CONST = 2
  716. };
  717. enum BrigVersion
  718. {
  719. BRIG_VERSION_HSAIL_MAJOR = 1,
  720. BRIG_VERSION_HSAIL_MINOR = 0,
  721. BRIG_VERSION_BRIG_MAJOR = 1,
  722. BRIG_VERSION_BRIG_MINOR = 0
  723. };
  724. typedef uint8_t BrigWidth8_t;
  725. enum BrigWidth
  726. {
  727. BRIG_WIDTH_NONE = 0,
  728. BRIG_WIDTH_1 = 1,
  729. BRIG_WIDTH_2 = 2,
  730. BRIG_WIDTH_4 = 3,
  731. BRIG_WIDTH_8 = 4,
  732. BRIG_WIDTH_16 = 5,
  733. BRIG_WIDTH_32 = 6,
  734. BRIG_WIDTH_64 = 7,
  735. BRIG_WIDTH_128 = 8,
  736. BRIG_WIDTH_256 = 9,
  737. BRIG_WIDTH_512 = 10,
  738. BRIG_WIDTH_1024 = 11,
  739. BRIG_WIDTH_2048 = 12,
  740. BRIG_WIDTH_4096 = 13,
  741. BRIG_WIDTH_8192 = 14,
  742. BRIG_WIDTH_16384 = 15,
  743. BRIG_WIDTH_32768 = 16,
  744. BRIG_WIDTH_65536 = 17,
  745. BRIG_WIDTH_131072 = 18,
  746. BRIG_WIDTH_262144 = 19,
  747. BRIG_WIDTH_524288 = 20,
  748. BRIG_WIDTH_1048576 = 21,
  749. BRIG_WIDTH_2097152 = 22,
  750. BRIG_WIDTH_4194304 = 23,
  751. BRIG_WIDTH_8388608 = 24,
  752. BRIG_WIDTH_16777216 = 25,
  753. BRIG_WIDTH_33554432 = 26,
  754. BRIG_WIDTH_67108864 = 27,
  755. BRIG_WIDTH_134217728 = 28,
  756. BRIG_WIDTH_268435456 = 29,
  757. BRIG_WIDTH_536870912 = 30,
  758. BRIG_WIDTH_1073741824 = 31,
  759. BRIG_WIDTH_2147483648 = 32,
  760. BRIG_WIDTH_WAVESIZE = 33,
  761. BRIG_WIDTH_ALL = 34
  762. };
  763. struct BrigData
  764. {
  765. uint32_t byteCount;
  766. uint8_t bytes[1];
  767. };
  768. struct BrigDirectiveArgBlock
  769. {
  770. BrigBase base;
  771. };
  772. struct BrigDirectiveComment
  773. {
  774. BrigBase base;
  775. BrigDataOffsetString32_t name;
  776. };
  777. struct BrigDirectiveControl
  778. {
  779. BrigBase base;
  780. BrigControlDirective16_t control;
  781. uint16_t reserved;
  782. BrigDataOffsetOperandList32_t operands;
  783. };
  784. struct BrigDirectiveExecutable
  785. {
  786. BrigBase base;
  787. BrigDataOffsetString32_t name;
  788. uint16_t outArgCount;
  789. uint16_t inArgCount;
  790. BrigCodeOffset32_t firstInArg;
  791. BrigCodeOffset32_t firstCodeBlockEntry;
  792. BrigCodeOffset32_t nextModuleEntry;
  793. BrigExecutableModifier8_t modifier;
  794. BrigLinkage8_t linkage;
  795. uint16_t reserved;
  796. };
  797. struct BrigDirectiveExtension
  798. {
  799. BrigBase base;
  800. BrigDataOffsetString32_t name;
  801. };
  802. struct BrigDirectiveFbarrier
  803. {
  804. BrigBase base;
  805. BrigDataOffsetString32_t name;
  806. BrigVariableModifier8_t modifier;
  807. BrigLinkage8_t linkage;
  808. uint16_t reserved;
  809. };
  810. struct BrigDirectiveLabel
  811. {
  812. BrigBase base;
  813. BrigDataOffsetString32_t name;
  814. };
  815. struct BrigDirectiveLoc
  816. {
  817. BrigBase base;
  818. BrigDataOffsetString32_t filename;
  819. uint32_t line;
  820. uint32_t column;
  821. };
  822. struct BrigDirectiveModule
  823. {
  824. BrigBase base;
  825. BrigDataOffsetString32_t name;
  826. BrigVersion32_t hsailMajor;
  827. BrigVersion32_t hsailMinor;
  828. BrigProfile8_t profile;
  829. BrigMachineModel8_t machineModel;
  830. BrigRound8_t defaultFloatRound;
  831. uint8_t reserved;
  832. };
  833. struct BrigDirectiveNone
  834. {
  835. BrigBase base;
  836. };
  837. struct BrigDirectivePragma
  838. {
  839. BrigBase base;
  840. BrigDataOffsetOperandList32_t operands;
  841. };
  842. struct BrigDirectiveVariable
  843. {
  844. BrigBase base;
  845. BrigDataOffsetString32_t name;
  846. BrigOperandOffset32_t init;
  847. BrigType16_t type;
  848. BrigSegment8_t segment;
  849. BrigAlignment8_t align;
  850. BrigUInt64 dim;
  851. BrigVariableModifier8_t modifier;
  852. BrigLinkage8_t linkage;
  853. BrigAllocation8_t allocation;
  854. uint8_t reserved;
  855. };
  856. struct BrigInstBase
  857. {
  858. BrigBase base;
  859. BrigOpcode16_t opcode;
  860. BrigType16_t type;
  861. BrigDataOffsetOperandList32_t operands;
  862. };
  863. struct BrigInstAddr
  864. {
  865. BrigInstBase base;
  866. BrigSegment8_t segment;
  867. uint8_t reserved[3];
  868. };
  869. struct BrigInstAtomic
  870. {
  871. BrigInstBase base;
  872. BrigSegment8_t segment;
  873. BrigMemoryOrder8_t memoryOrder;
  874. BrigMemoryScope8_t memoryScope;
  875. BrigAtomicOperation8_t atomicOperation;
  876. uint8_t equivClass;
  877. uint8_t reserved[3];
  878. };
  879. struct BrigInstBasic
  880. {
  881. BrigInstBase base;
  882. };
  883. struct BrigInstBr
  884. {
  885. BrigInstBase base;
  886. BrigWidth8_t width;
  887. uint8_t reserved[3];
  888. };
  889. struct BrigInstCmp
  890. {
  891. BrigInstBase base;
  892. BrigType16_t sourceType;
  893. BrigAluModifier8_t modifier;
  894. BrigCompareOperation8_t compare;
  895. BrigPack8_t pack;
  896. uint8_t reserved[3];
  897. };
  898. struct BrigInstCvt
  899. {
  900. BrigInstBase base;
  901. BrigType16_t sourceType;
  902. BrigAluModifier8_t modifier;
  903. BrigRound8_t round;
  904. };
  905. struct BrigInstImage
  906. {
  907. BrigInstBase base;
  908. BrigType16_t imageType;
  909. BrigType16_t coordType;
  910. BrigImageGeometry8_t geometry;
  911. uint8_t equivClass;
  912. uint16_t reserved;
  913. };
  914. struct BrigInstLane
  915. {
  916. BrigInstBase base;
  917. BrigType16_t sourceType;
  918. BrigWidth8_t width;
  919. uint8_t reserved;
  920. };
  921. struct BrigInstMem
  922. {
  923. BrigInstBase base;
  924. BrigSegment8_t segment;
  925. BrigAlignment8_t align;
  926. uint8_t equivClass;
  927. BrigWidth8_t width;
  928. BrigMemoryModifier8_t modifier;
  929. uint8_t reserved[3];
  930. };
  931. struct BrigInstMemFence
  932. {
  933. BrigInstBase base;
  934. BrigMemoryOrder8_t memoryOrder;
  935. BrigMemoryScope8_t globalSegmentMemoryScope;
  936. BrigMemoryScope8_t groupSegmentMemoryScope;
  937. BrigMemoryScope8_t imageSegmentMemoryScope;
  938. };
  939. struct BrigInstMod
  940. {
  941. BrigInstBase base;
  942. BrigAluModifier8_t modifier;
  943. BrigRound8_t round;
  944. BrigPack8_t pack;
  945. uint8_t reserved;
  946. };
  947. struct BrigInstQueryImage
  948. {
  949. BrigInstBase base;
  950. BrigType16_t imageType;
  951. BrigImageGeometry8_t geometry;
  952. BrigImageQuery8_t query;
  953. };
  954. struct BrigInstQuerySampler
  955. {
  956. BrigInstBase base;
  957. BrigSamplerQuery8_t query;
  958. uint8_t reserved[3];
  959. };
  960. struct BrigInstQueue
  961. {
  962. BrigInstBase base;
  963. BrigSegment8_t segment;
  964. BrigMemoryOrder8_t memoryOrder;
  965. uint16_t reserved;
  966. };
  967. struct BrigInstSeg
  968. {
  969. BrigInstBase base;
  970. BrigSegment8_t segment;
  971. uint8_t reserved[3];
  972. };
  973. struct BrigInstSegCvt
  974. {
  975. BrigInstBase base;
  976. BrigType16_t sourceType;
  977. BrigSegment8_t segment;
  978. BrigSegCvtModifier8_t modifier;
  979. };
  980. struct BrigInstSignal
  981. {
  982. BrigInstBase base;
  983. BrigType16_t signalType;
  984. BrigMemoryOrder8_t memoryOrder;
  985. BrigAtomicOperation8_t signalOperation;
  986. };
  987. struct BrigInstSourceType
  988. {
  989. BrigInstBase base;
  990. BrigType16_t sourceType;
  991. uint16_t reserved;
  992. };
  993. struct BrigOperandAddress
  994. {
  995. BrigBase base;
  996. BrigCodeOffset32_t symbol;
  997. BrigOperandOffset32_t reg;
  998. BrigUInt64 offset;
  999. };
  1000. struct BrigOperandAlign
  1001. {
  1002. BrigBase base;
  1003. BrigAlignment8_t align;
  1004. uint8_t reserved[3];
  1005. };
  1006. struct BrigOperandCodeList
  1007. {
  1008. BrigBase base;
  1009. BrigDataOffsetCodeList32_t elements;
  1010. };
  1011. struct BrigOperandCodeRef
  1012. {
  1013. BrigBase base;
  1014. BrigCodeOffset32_t ref;
  1015. };
  1016. struct BrigOperandConstantBytes
  1017. {
  1018. BrigBase base;
  1019. BrigType16_t type;
  1020. uint16_t reserved;
  1021. BrigDataOffsetString32_t bytes;
  1022. };
  1023. struct BrigOperandConstantImage
  1024. {
  1025. BrigBase base;
  1026. BrigType16_t type;
  1027. BrigImageGeometry8_t geometry;
  1028. BrigImageChannelOrder8_t channelOrder;
  1029. BrigImageChannelType8_t channelType;
  1030. uint8_t reserved[3];
  1031. BrigUInt64 width;
  1032. BrigUInt64 height;
  1033. BrigUInt64 depth;
  1034. BrigUInt64 array;
  1035. };
  1036. struct BrigOperandConstantOperandList
  1037. {
  1038. BrigBase base;
  1039. BrigType16_t type;
  1040. uint16_t reserved;
  1041. BrigDataOffsetOperandList32_t elements;
  1042. };
  1043. struct BrigOperandConstantSampler
  1044. {
  1045. BrigBase base;
  1046. BrigType16_t type;
  1047. BrigSamplerCoordNormalization8_t coord;
  1048. BrigSamplerFilter8_t filter;
  1049. BrigSamplerAddressing8_t addressing;
  1050. uint8_t reserved[3];
  1051. };
  1052. struct BrigOperandOperandList
  1053. {
  1054. BrigBase base;
  1055. BrigDataOffsetOperandList32_t elements;
  1056. };
  1057. struct BrigOperandRegister
  1058. {
  1059. BrigBase base;
  1060. BrigRegisterKind16_t regKind;
  1061. uint16_t regNum;
  1062. };
  1063. struct BrigOperandString
  1064. {
  1065. BrigBase base;
  1066. BrigDataOffsetString32_t string;
  1067. };
  1068. struct BrigOperandWavesize
  1069. {
  1070. BrigBase base;
  1071. };
  1072. #endif /* HSA_BRIG_FORMAT_H */