/* HSA BRIG (binary representation of HSAIL) 1.0.1 representation description.
   Copyright (C) 2016 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.

GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.

The contents of the file was created by extracting data structures, enum,
typedef and other definitions from HSA Programmer's Reference Manual Version
1.0.1 (http://www.hsafoundation.com/standards/).

HTML version is provided on the following link:
http://www.hsafoundation.com/html/Content/PRM/Topics/PRM_title_page.htm */

#ifndef HSA_BRIG_FORMAT_H
#define HSA_BRIG_FORMAT_H

struct BrigModuleHeader;
typedef uint16_t BrigKind16_t;
typedef uint32_t BrigVersion32_t;

typedef BrigModuleHeader *BrigModule_t;
typedef uint32_t BrigDataOffset32_t;
typedef uint32_t BrigCodeOffset32_t;
typedef uint32_t BrigOperandOffset32_t;
typedef BrigDataOffset32_t BrigDataOffsetString32_t;
typedef BrigDataOffset32_t BrigDataOffsetCodeList32_t;
typedef BrigDataOffset32_t BrigDataOffsetOperandList32_t;
typedef uint8_t BrigAlignment8_t;

enum BrigAlignment
{
  BRIG_ALIGNMENT_NONE = 0,
  BRIG_ALIGNMENT_1 = 1,
  BRIG_ALIGNMENT_2 = 2,
  BRIG_ALIGNMENT_4 = 3,
  BRIG_ALIGNMENT_8 = 4,
  BRIG_ALIGNMENT_16 = 5,
  BRIG_ALIGNMENT_32 = 6,
  BRIG_ALIGNMENT_64 = 7,
  BRIG_ALIGNMENT_128 = 8,
  BRIG_ALIGNMENT_256 = 9
};

typedef uint8_t BrigAllocation8_t;

enum BrigAllocation
{
  BRIG_ALLOCATION_NONE = 0,
  BRIG_ALLOCATION_PROGRAM = 1,
  BRIG_ALLOCATION_AGENT = 2,
  BRIG_ALLOCATION_AUTOMATIC = 3
};

typedef uint8_t BrigAluModifier8_t;

enum BrigAluModifierMask
{
  BRIG_ALU_FTZ = 1
};

typedef uint8_t BrigAtomicOperation8_t;

enum BrigAtomicOperation
{
  BRIG_ATOMIC_ADD = 0,
  BRIG_ATOMIC_AND = 1,
  BRIG_ATOMIC_CAS = 2,
  BRIG_ATOMIC_EXCH = 3,
  BRIG_ATOMIC_LD = 4,
  BRIG_ATOMIC_MAX = 5,
  BRIG_ATOMIC_MIN = 6,
  BRIG_ATOMIC_OR = 7,
  BRIG_ATOMIC_ST = 8,
  BRIG_ATOMIC_SUB = 9,
  BRIG_ATOMIC_WRAPDEC = 10,
  BRIG_ATOMIC_WRAPINC = 11,
  BRIG_ATOMIC_XOR = 12,
  BRIG_ATOMIC_WAIT_EQ = 13,
  BRIG_ATOMIC_WAIT_NE = 14,
  BRIG_ATOMIC_WAIT_LT = 15,
  BRIG_ATOMIC_WAIT_GTE = 16,
  BRIG_ATOMIC_WAITTIMEOUT_EQ = 17,
  BRIG_ATOMIC_WAITTIMEOUT_NE = 18,
  BRIG_ATOMIC_WAITTIMEOUT_LT = 19,
  BRIG_ATOMIC_WAITTIMEOUT_GTE = 20
};

struct BrigBase
{
  uint16_t byteCount;
  BrigKind16_t kind;
};

typedef uint8_t BrigCompareOperation8_t;

enum BrigCompareOperation
{
  BRIG_COMPARE_EQ = 0,
  BRIG_COMPARE_NE = 1,
  BRIG_COMPARE_LT = 2,
  BRIG_COMPARE_LE = 3,
  BRIG_COMPARE_GT = 4,
  BRIG_COMPARE_GE = 5,
  BRIG_COMPARE_EQU = 6,
  BRIG_COMPARE_NEU = 7,
  BRIG_COMPARE_LTU = 8,
  BRIG_COMPARE_LEU = 9,
  BRIG_COMPARE_GTU = 10,
  BRIG_COMPARE_GEU = 11,
  BRIG_COMPARE_NUM = 12,
  BRIG_COMPARE_NAN = 13,
  BRIG_COMPARE_SEQ = 14,
  BRIG_COMPARE_SNE = 15,
  BRIG_COMPARE_SLT = 16,
  BRIG_COMPARE_SLE = 17,
  BRIG_COMPARE_SGT = 18,
  BRIG_COMPARE_SGE = 19,
  BRIG_COMPARE_SGEU = 20,
  BRIG_COMPARE_SEQU = 21,
  BRIG_COMPARE_SNEU = 22,
  BRIG_COMPARE_SLTU = 23,
  BRIG_COMPARE_SLEU = 24,
  BRIG_COMPARE_SNUM = 25,
  BRIG_COMPARE_SNAN = 26,
  BRIG_COMPARE_SGTU = 27
};

typedef uint16_t BrigControlDirective16_t;

enum BrigControlDirective
{
  BRIG_CONTROL_NONE = 0,
  BRIG_CONTROL_ENABLEBREAKEXCEPTIONS = 1,
  BRIG_CONTROL_ENABLEDETECTEXCEPTIONS = 2,
  BRIG_CONTROL_MAXDYNAMICGROUPSIZE = 3,
  BRIG_CONTROL_MAXFLATGRIDSIZE = 4,
  BRIG_CONTROL_MAXFLATWORKGROUPSIZE = 5,
  BRIG_CONTROL_REQUIREDDIM = 6,
  BRIG_CONTROL_REQUIREDGRIDSIZE = 7,
  BRIG_CONTROL_REQUIREDWORKGROUPSIZE = 8,
  BRIG_CONTROL_REQUIRENOPARTIALWORKGROUPS = 9
};

typedef uint32_t BrigExceptions32_t;

enum BrigExceptionsMask
{
  BRIG_EXCEPTIONS_INVALID_OPERATION = 1 << 0,
  BRIG_EXCEPTIONS_DIVIDE_BY_ZERO = 1 << 1,
  BRIG_EXCEPTIONS_OVERFLOW = 1 << 2,
  BRIG_EXCEPTIONS_UNDERFLOW = 1 << 3,
  BRIG_EXCEPTIONS_INEXACT = 1 << 4,
  BRIG_EXCEPTIONS_FIRST_USER_DEFINED = 1 << 16
};

typedef uint8_t BrigExecutableModifier8_t;

enum BrigExecutableModifierMask
{
  BRIG_EXECUTABLE_DEFINITION = 1
};

typedef uint8_t BrigImageChannelOrder8_t;

enum BrigImageChannelOrder
{
  BRIG_CHANNEL_ORDER_A = 0,
  BRIG_CHANNEL_ORDER_R = 1,
  BRIG_CHANNEL_ORDER_RX = 2,
  BRIG_CHANNEL_ORDER_RG = 3,
  BRIG_CHANNEL_ORDER_RGX = 4,
  BRIG_CHANNEL_ORDER_RA = 5,
  BRIG_CHANNEL_ORDER_RGB = 6,
  BRIG_CHANNEL_ORDER_RGBX = 7,
  BRIG_CHANNEL_ORDER_RGBA = 8,
  BRIG_CHANNEL_ORDER_BGRA = 9,
  BRIG_CHANNEL_ORDER_ARGB = 10,
  BRIG_CHANNEL_ORDER_ABGR = 11,
  BRIG_CHANNEL_ORDER_SRGB = 12,
  BRIG_CHANNEL_ORDER_SRGBX = 13,
  BRIG_CHANNEL_ORDER_SRGBA = 14,
  BRIG_CHANNEL_ORDER_SBGRA = 15,
  BRIG_CHANNEL_ORDER_INTENSITY = 16,
  BRIG_CHANNEL_ORDER_LUMINANCE = 17,
  BRIG_CHANNEL_ORDER_DEPTH = 18,
  BRIG_CHANNEL_ORDER_DEPTH_STENCIL = 19,
  BRIG_CHANNEL_ORDER_FIRST_USER_DEFINED = 128
};

typedef uint8_t BrigImageChannelType8_t;

enum BrigImageChannelType
{
  BRIG_CHANNEL_TYPE_SNORM_INT8 = 0,
  BRIG_CHANNEL_TYPE_SNORM_INT16 = 1,
  BRIG_CHANNEL_TYPE_UNORM_INT8 = 2,
  BRIG_CHANNEL_TYPE_UNORM_INT16 = 3,
  BRIG_CHANNEL_TYPE_UNORM_INT24 = 4,
  BRIG_CHANNEL_TYPE_UNORM_SHORT_555 = 5,
  BRIG_CHANNEL_TYPE_UNORM_SHORT_565 = 6,
  BRIG_CHANNEL_TYPE_UNORM_INT_101010 = 7,
  BRIG_CHANNEL_TYPE_SIGNED_INT8 = 8,
  BRIG_CHANNEL_TYPE_SIGNED_INT16 = 9,
  BRIG_CHANNEL_TYPE_SIGNED_INT32 = 10,
  BRIG_CHANNEL_TYPE_UNSIGNED_INT8 = 11,
  BRIG_CHANNEL_TYPE_UNSIGNED_INT16 = 12,
  BRIG_CHANNEL_TYPE_UNSIGNED_INT32 = 13,
  BRIG_CHANNEL_TYPE_HALF_FLOAT = 14,
  BRIG_CHANNEL_TYPE_FLOAT = 15,
  BRIG_CHANNEL_TYPE_FIRST_USER_DEFINED = 128
};

typedef uint8_t BrigImageGeometry8_t;

enum BrigImageGeometry
{
  BRIG_GEOMETRY_1D = 0,
  BRIG_GEOMETRY_2D = 1,
  BRIG_GEOMETRY_3D = 2,
  BRIG_GEOMETRY_1DA = 3,
  BRIG_GEOMETRY_2DA = 4,
  BRIG_GEOMETRY_1DB = 5,
  BRIG_GEOMETRY_2DDEPTH = 6,
  BRIG_GEOMETRY_2DADEPTH = 7,
  BRIG_GEOMETRY_FIRST_USER_DEFINED = 128
};

typedef uint8_t BrigImageQuery8_t;

enum BrigImageQuery
{
  BRIG_IMAGE_QUERY_WIDTH = 0,
  BRIG_IMAGE_QUERY_HEIGHT = 1,
  BRIG_IMAGE_QUERY_DEPTH = 2,
  BRIG_IMAGE_QUERY_ARRAY = 3,
  BRIG_IMAGE_QUERY_CHANNELORDER = 4,
  BRIG_IMAGE_QUERY_CHANNELTYPE = 5
};

enum BrigKind
{
  BRIG_KIND_NONE = 0x0000,
  BRIG_KIND_DIRECTIVE_BEGIN = 0x1000,
  BRIG_KIND_DIRECTIVE_ARG_BLOCK_END = 0x1000,
  BRIG_KIND_DIRECTIVE_ARG_BLOCK_START = 0x1001,
  BRIG_KIND_DIRECTIVE_COMMENT = 0x1002,
  BRIG_KIND_DIRECTIVE_CONTROL = 0x1003,
  BRIG_KIND_DIRECTIVE_EXTENSION = 0x1004,
  BRIG_KIND_DIRECTIVE_FBARRIER = 0x1005,
  BRIG_KIND_DIRECTIVE_FUNCTION = 0x1006,
  BRIG_KIND_DIRECTIVE_INDIRECT_FUNCTION = 0x1007,
  BRIG_KIND_DIRECTIVE_KERNEL = 0x1008,
  BRIG_KIND_DIRECTIVE_LABEL = 0x1009,
  BRIG_KIND_DIRECTIVE_LOC = 0x100a,
  BRIG_KIND_DIRECTIVE_MODULE = 0x100b,
  BRIG_KIND_DIRECTIVE_PRAGMA = 0x100c,
  BRIG_KIND_DIRECTIVE_SIGNATURE = 0x100d,
  BRIG_KIND_DIRECTIVE_VARIABLE = 0x100e,
  BRIG_KIND_DIRECTIVE_END = 0x100f,
  BRIG_KIND_INST_BEGIN = 0x2000,
  BRIG_KIND_INST_ADDR = 0x2000,
  BRIG_KIND_INST_ATOMIC = 0x2001,
  BRIG_KIND_INST_BASIC = 0x2002,
  BRIG_KIND_INST_BR = 0x2003,
  BRIG_KIND_INST_CMP = 0x2004,
  BRIG_KIND_INST_CVT = 0x2005,
  BRIG_KIND_INST_IMAGE = 0x2006,
  BRIG_KIND_INST_LANE = 0x2007,
  BRIG_KIND_INST_MEM = 0x2008,
  BRIG_KIND_INST_MEM_FENCE = 0x2009,
  BRIG_KIND_INST_MOD = 0x200a,
  BRIG_KIND_INST_QUERY_IMAGE = 0x200b,
  BRIG_KIND_INST_QUERY_SAMPLER = 0x200c,
  BRIG_KIND_INST_QUEUE = 0x200d,
  BRIG_KIND_INST_SEG = 0x200e,
  BRIG_KIND_INST_SEG_CVT = 0x200f,
  BRIG_KIND_INST_SIGNAL = 0x2010,
  BRIG_KIND_INST_SOURCE_TYPE = 0x2011,
  BRIG_KIND_INST_END = 0x2012,
  BRIG_KIND_OPERAND_BEGIN = 0x3000,
  BRIG_KIND_OPERAND_ADDRESS = 0x3000,
  BRIG_KIND_OPERAND_ALIGN = 0x3001,
  BRIG_KIND_OPERAND_CODE_LIST = 0x3002,
  BRIG_KIND_OPERAND_CODE_REF = 0x3003,
  BRIG_KIND_OPERAND_CONSTANT_BYTES = 0x3004,
  BRIG_KIND_OPERAND_RESERVED = 0x3005,
  BRIG_KIND_OPERAND_CONSTANT_IMAGE = 0x3006,
  BRIG_KIND_OPERAND_CONSTANT_OPERAND_LIST = 0x3007,
  BRIG_KIND_OPERAND_CONSTANT_SAMPLER = 0x3008,
  BRIG_KIND_OPERAND_OPERAND_LIST = 0x3009,
  BRIG_KIND_OPERAND_REGISTER = 0x300a,
  BRIG_KIND_OPERAND_STRING = 0x300b,
  BRIG_KIND_OPERAND_WAVESIZE = 0x300c,
  BRIG_KIND_OPERAND_END = 0x300d
};

typedef uint8_t BrigLinkage8_t;

enum BrigLinkage
{
  BRIG_LINKAGE_NONE = 0,
  BRIG_LINKAGE_PROGRAM = 1,
  BRIG_LINKAGE_MODULE = 2,
  BRIG_LINKAGE_FUNCTION = 3,
  BRIG_LINKAGE_ARG = 4
};

typedef uint8_t BrigMachineModel8_t;

enum BrigMachineModel
{
  BRIG_MACHINE_SMALL = 0,
  BRIG_MACHINE_LARGE = 1
};

typedef uint8_t BrigMemoryModifier8_t;

enum BrigMemoryModifierMask
{
  BRIG_MEMORY_CONST = 1
};

typedef uint8_t BrigMemoryOrder8_t;

enum BrigMemoryOrder
{
  BRIG_MEMORY_ORDER_NONE = 0,
  BRIG_MEMORY_ORDER_RELAXED = 1,
  BRIG_MEMORY_ORDER_SC_ACQUIRE = 2,
  BRIG_MEMORY_ORDER_SC_RELEASE = 3,
  BRIG_MEMORY_ORDER_SC_ACQUIRE_RELEASE = 4
};

typedef uint8_t BrigMemoryScope8_t;

enum BrigMemoryScope
{
  BRIG_MEMORY_SCOPE_NONE = 0,
  BRIG_MEMORY_SCOPE_WORKITEM = 1,
  BRIG_MEMORY_SCOPE_WAVEFRONT = 2,
  BRIG_MEMORY_SCOPE_WORKGROUP = 3,
  BRIG_MEMORY_SCOPE_AGENT = 4,
  BRIG_MEMORY_SCOPE_SYSTEM = 5
};

struct BrigModuleHeader
{
  char identification[8];
  BrigVersion32_t brigMajor;
  BrigVersion32_t brigMinor;
  uint64_t byteCount;
  uint8_t hash[64];
  uint32_t reserved;
  uint32_t sectionCount;
  uint64_t sectionIndex;
};

typedef uint16_t BrigOpcode16_t;

enum BrigOpcode
{
  BRIG_OPCODE_NOP = 0,
  BRIG_OPCODE_ABS = 1,
  BRIG_OPCODE_ADD = 2,
  BRIG_OPCODE_BORROW = 3,
  BRIG_OPCODE_CARRY = 4,
  BRIG_OPCODE_CEIL = 5,
  BRIG_OPCODE_COPYSIGN = 6,
  BRIG_OPCODE_DIV = 7,
  BRIG_OPCODE_FLOOR = 8,
  BRIG_OPCODE_FMA = 9,
  BRIG_OPCODE_FRACT = 10,
  BRIG_OPCODE_MAD = 11,
  BRIG_OPCODE_MAX = 12,
  BRIG_OPCODE_MIN = 13,
  BRIG_OPCODE_MUL = 14,
  BRIG_OPCODE_MULHI = 15,
  BRIG_OPCODE_NEG = 16,
  BRIG_OPCODE_REM = 17,
  BRIG_OPCODE_RINT = 18,
  BRIG_OPCODE_SQRT = 19,
  BRIG_OPCODE_SUB = 20,
  BRIG_OPCODE_TRUNC = 21,
  BRIG_OPCODE_MAD24 = 22,
  BRIG_OPCODE_MAD24HI = 23,
  BRIG_OPCODE_MUL24 = 24,
  BRIG_OPCODE_MUL24HI = 25,
  BRIG_OPCODE_SHL = 26,
  BRIG_OPCODE_SHR = 27,
  BRIG_OPCODE_AND = 28,
  BRIG_OPCODE_NOT = 29,
  BRIG_OPCODE_OR = 30,
  BRIG_OPCODE_POPCOUNT = 31,
  BRIG_OPCODE_XOR = 32,
  BRIG_OPCODE_BITEXTRACT = 33,
  BRIG_OPCODE_BITINSERT = 34,
  BRIG_OPCODE_BITMASK = 35,
  BRIG_OPCODE_BITREV = 36,
  BRIG_OPCODE_BITSELECT = 37,
  BRIG_OPCODE_FIRSTBIT = 38,
  BRIG_OPCODE_LASTBIT = 39,
  BRIG_OPCODE_COMBINE = 40,
  BRIG_OPCODE_EXPAND = 41,
  BRIG_OPCODE_LDA = 42,
  BRIG_OPCODE_MOV = 43,
  BRIG_OPCODE_SHUFFLE = 44,
  BRIG_OPCODE_UNPACKHI = 45,
  BRIG_OPCODE_UNPACKLO = 46,
  BRIG_OPCODE_PACK = 47,
  BRIG_OPCODE_UNPACK = 48,
  BRIG_OPCODE_CMOV = 49,
  BRIG_OPCODE_CLASS = 50,
  BRIG_OPCODE_NCOS = 51,
  BRIG_OPCODE_NEXP2 = 52,
  BRIG_OPCODE_NFMA = 53,
  BRIG_OPCODE_NLOG2 = 54,
  BRIG_OPCODE_NRCP = 55,
  BRIG_OPCODE_NRSQRT = 56,
  BRIG_OPCODE_NSIN = 57,
  BRIG_OPCODE_NSQRT = 58,
  BRIG_OPCODE_BITALIGN = 59,
  BRIG_OPCODE_BYTEALIGN = 60,
  BRIG_OPCODE_PACKCVT = 61,
  BRIG_OPCODE_UNPACKCVT = 62,
  BRIG_OPCODE_LERP = 63,
  BRIG_OPCODE_SAD = 64,
  BRIG_OPCODE_SADHI = 65,
  BRIG_OPCODE_SEGMENTP = 66,
  BRIG_OPCODE_FTOS = 67,
  BRIG_OPCODE_STOF = 68,
  BRIG_OPCODE_CMP = 69,
  BRIG_OPCODE_CVT = 70,
  BRIG_OPCODE_LD = 71,
  BRIG_OPCODE_ST = 72,
  BRIG_OPCODE_ATOMIC = 73,
  BRIG_OPCODE_ATOMICNORET = 74,
  BRIG_OPCODE_SIGNAL = 75,
  BRIG_OPCODE_SIGNALNORET = 76,
  BRIG_OPCODE_MEMFENCE = 77,
  BRIG_OPCODE_RDIMAGE = 78,
  BRIG_OPCODE_LDIMAGE = 79,
  BRIG_OPCODE_STIMAGE = 80,
  BRIG_OPCODE_IMAGEFENCE = 81,
  BRIG_OPCODE_QUERYIMAGE = 82,
  BRIG_OPCODE_QUERYSAMPLER = 83,
  BRIG_OPCODE_CBR = 84,
  BRIG_OPCODE_BR = 85,
  BRIG_OPCODE_SBR = 86,
  BRIG_OPCODE_BARRIER = 87,
  BRIG_OPCODE_WAVEBARRIER = 88,
  BRIG_OPCODE_ARRIVEFBAR = 89,
  BRIG_OPCODE_INITFBAR = 90,
  BRIG_OPCODE_JOINFBAR = 91,
  BRIG_OPCODE_LEAVEFBAR = 92,
  BRIG_OPCODE_RELEASEFBAR = 93,
  BRIG_OPCODE_WAITFBAR = 94,
  BRIG_OPCODE_LDF = 95,
  BRIG_OPCODE_ACTIVELANECOUNT = 96,
  BRIG_OPCODE_ACTIVELANEID = 97,
  BRIG_OPCODE_ACTIVELANEMASK = 98,
  BRIG_OPCODE_ACTIVELANEPERMUTE = 99,
  BRIG_OPCODE_CALL = 100,
  BRIG_OPCODE_SCALL = 101,
  BRIG_OPCODE_ICALL = 102,
  BRIG_OPCODE_RET = 103,
  BRIG_OPCODE_ALLOCA = 104,
  BRIG_OPCODE_CURRENTWORKGROUPSIZE = 105,
  BRIG_OPCODE_CURRENTWORKITEMFLATID = 106,
  BRIG_OPCODE_DIM = 107,
  BRIG_OPCODE_GRIDGROUPS = 108,
  BRIG_OPCODE_GRIDSIZE = 109,
  BRIG_OPCODE_PACKETCOMPLETIONSIG = 110,
  BRIG_OPCODE_PACKETID = 111,
  BRIG_OPCODE_WORKGROUPID = 112,
  BRIG_OPCODE_WORKGROUPSIZE = 113,
  BRIG_OPCODE_WORKITEMABSID = 114,
  BRIG_OPCODE_WORKITEMFLATABSID = 115,
  BRIG_OPCODE_WORKITEMFLATID = 116,
  BRIG_OPCODE_WORKITEMID = 117,
  BRIG_OPCODE_CLEARDETECTEXCEPT = 118,
  BRIG_OPCODE_GETDETECTEXCEPT = 119,
  BRIG_OPCODE_SETDETECTEXCEPT = 120,
  BRIG_OPCODE_ADDQUEUEWRITEINDEX = 121,
  BRIG_OPCODE_CASQUEUEWRITEINDEX = 122,
  BRIG_OPCODE_LDQUEUEREADINDEX = 123,
  BRIG_OPCODE_LDQUEUEWRITEINDEX = 124,
  BRIG_OPCODE_STQUEUEREADINDEX = 125,
  BRIG_OPCODE_STQUEUEWRITEINDEX = 126,
  BRIG_OPCODE_CLOCK = 127,
  BRIG_OPCODE_CUID = 128,
  BRIG_OPCODE_DEBUGTRAP = 129,
  BRIG_OPCODE_GROUPBASEPTR = 130,
  BRIG_OPCODE_KERNARGBASEPTR = 131,
  BRIG_OPCODE_LANEID = 132,
  BRIG_OPCODE_MAXCUID = 133,
  BRIG_OPCODE_MAXWAVEID = 134,
  BRIG_OPCODE_NULLPTR = 135,
  BRIG_OPCODE_WAVEID = 136,
  BRIG_OPCODE_FIRST_USER_DEFINED = 32768
};

typedef uint8_t BrigPack8_t;

enum BrigPack
{
  BRIG_PACK_NONE = 0,
  BRIG_PACK_PP = 1,
  BRIG_PACK_PS = 2,
  BRIG_PACK_SP = 3,
  BRIG_PACK_SS = 4,
  BRIG_PACK_S = 5,
  BRIG_PACK_P = 6,
  BRIG_PACK_PPSAT = 7,
  BRIG_PACK_PSSAT = 8,
  BRIG_PACK_SPSAT = 9,
  BRIG_PACK_SSSAT = 10,
  BRIG_PACK_SSAT = 11,
  BRIG_PACK_PSAT = 12
};

typedef uint8_t BrigProfile8_t;

enum BrigProfile
{
  BRIG_PROFILE_BASE = 0,
  BRIG_PROFILE_FULL = 1
};

typedef uint16_t BrigRegisterKind16_t;

enum BrigRegisterKind
{
  BRIG_REGISTER_KIND_CONTROL = 0,
  BRIG_REGISTER_KIND_SINGLE = 1,
  BRIG_REGISTER_KIND_DOUBLE = 2,
  BRIG_REGISTER_KIND_QUAD = 3
};

typedef uint8_t BrigRound8_t;

enum BrigRound
{
  BRIG_ROUND_NONE = 0,
  BRIG_ROUND_FLOAT_DEFAULT = 1,
  BRIG_ROUND_FLOAT_NEAR_EVEN = 2,
  BRIG_ROUND_FLOAT_ZERO = 3,
  BRIG_ROUND_FLOAT_PLUS_INFINITY = 4,
  BRIG_ROUND_FLOAT_MINUS_INFINITY = 5,
  BRIG_ROUND_INTEGER_NEAR_EVEN = 6,
  BRIG_ROUND_INTEGER_ZERO = 7,
  BRIG_ROUND_INTEGER_PLUS_INFINITY = 8,
  BRIG_ROUND_INTEGER_MINUS_INFINITY = 9,
  BRIG_ROUND_INTEGER_NEAR_EVEN_SAT = 10,
  BRIG_ROUND_INTEGER_ZERO_SAT = 11,
  BRIG_ROUND_INTEGER_PLUS_INFINITY_SAT = 12,
  BRIG_ROUND_INTEGER_MINUS_INFINITY_SAT = 13,
  BRIG_ROUND_INTEGER_SIGNALING_NEAR_EVEN = 14,
  BRIG_ROUND_INTEGER_SIGNALING_ZERO = 15,
  BRIG_ROUND_INTEGER_SIGNALING_PLUS_INFINITY = 16,
  BRIG_ROUND_INTEGER_SIGNALING_MINUS_INFINITY = 17,
  BRIG_ROUND_INTEGER_SIGNALING_NEAR_EVEN_SAT = 18,
  BRIG_ROUND_INTEGER_SIGNALING_ZERO_SAT = 19,
  BRIG_ROUND_INTEGER_SIGNALING_PLUS_INFINITY_SAT = 20,
  BRIG_ROUND_INTEGER_SIGNALING_MINUS_INFINITY_SAT = 21
};

typedef uint8_t BrigSamplerAddressing8_t;

enum BrigSamplerAddressing
{
  BRIG_ADDRESSING_UNDEFINED = 0,
  BRIG_ADDRESSING_CLAMP_TO_EDGE = 1,
  BRIG_ADDRESSING_CLAMP_TO_BORDER = 2,
  BRIG_ADDRESSING_REPEAT = 3,
  BRIG_ADDRESSING_MIRRORED_REPEAT = 4,
  BRIG_ADDRESSING_FIRST_USER_DEFINED = 128
};

typedef uint8_t BrigSamplerCoordNormalization8_t;

enum BrigSamplerCoordNormalization
{
  BRIG_COORD_UNNORMALIZED = 0,
  BRIG_COORD_NORMALIZED = 1
};

typedef uint8_t BrigSamplerFilter8_t;

enum BrigSamplerFilter
{
  BRIG_FILTER_NEAREST = 0,
  BRIG_FILTER_LINEAR = 1,
  BRIG_FILTER_FIRST_USER_DEFINED = 128
};

typedef uint8_t BrigSamplerQuery8_t;

enum BrigSamplerQuery
{
  BRIG_SAMPLER_QUERY_ADDRESSING = 0,
  BRIG_SAMPLER_QUERY_COORD = 1,
  BRIG_SAMPLER_QUERY_FILTER = 2
};

typedef uint32_t BrigSectionIndex32_t;

enum BrigSectionIndex
{
  BRIG_SECTION_INDEX_DATA = 0,
  BRIG_SECTION_INDEX_CODE = 1,
  BRIG_SECTION_INDEX_OPERAND = 2,
  BRIG_SECTION_INDEX_BEGIN_IMPLEMENTATION_DEFINED = 3
};

struct BrigSectionHeader
{
  uint64_t byteCount;
  uint32_t headerByteCount;
  uint32_t nameLength;
  uint8_t name[1];
};

typedef uint8_t BrigSegCvtModifier8_t;

enum BrigSegCvtModifierMask
{
  BRIG_SEG_CVT_NONULL = 1
};

typedef uint8_t BrigSegment8_t;

enum BrigSegment
{
  BRIG_SEGMENT_NONE = 0,
  BRIG_SEGMENT_FLAT = 1,
  BRIG_SEGMENT_GLOBAL = 2,
  BRIG_SEGMENT_READONLY = 3,
  BRIG_SEGMENT_KERNARG = 4,
  BRIG_SEGMENT_GROUP = 5,
  BRIG_SEGMENT_PRIVATE = 6,
  BRIG_SEGMENT_SPILL = 7,
  BRIG_SEGMENT_ARG = 8,
  BRIG_SEGMENT_FIRST_USER_DEFINED = 128
};

enum
{
  BRIG_TYPE_BASE_SIZE = 5,
  BRIG_TYPE_PACK_SIZE = 2,
  BRIG_TYPE_ARRAY_SIZE = 1,

  BRIG_TYPE_BASE_SHIFT = 0,
  BRIG_TYPE_PACK_SHIFT = BRIG_TYPE_BASE_SHIFT + BRIG_TYPE_BASE_SIZE,
  BRIG_TYPE_ARRAY_SHIFT = BRIG_TYPE_PACK_SHIFT + BRIG_TYPE_PACK_SIZE,

  BRIG_TYPE_BASE_MASK = ((1 << BRIG_TYPE_BASE_SIZE) - 1)
			<< BRIG_TYPE_BASE_SHIFT,
  BRIG_TYPE_PACK_MASK = ((1 << BRIG_TYPE_PACK_SIZE) - 1)
			<< BRIG_TYPE_PACK_SHIFT,
  BRIG_TYPE_ARRAY_MASK = ((1 << BRIG_TYPE_ARRAY_SIZE) - 1)
			 << BRIG_TYPE_ARRAY_SHIFT,

  BRIG_TYPE_PACK_NONE = 0 << BRIG_TYPE_PACK_SHIFT,
  BRIG_TYPE_PACK_32 = 1 << BRIG_TYPE_PACK_SHIFT,
  BRIG_TYPE_PACK_64 = 2 << BRIG_TYPE_PACK_SHIFT,
  BRIG_TYPE_PACK_128 = 3 << BRIG_TYPE_PACK_SHIFT,

  BRIG_TYPE_ARRAY = 1 << BRIG_TYPE_ARRAY_SHIFT
};

typedef uint16_t BrigType16_t;

enum BrigType
{
  BRIG_TYPE_NONE = 0,

  BRIG_TYPE_U8 = 1,
  BRIG_TYPE_U16 = 2,
  BRIG_TYPE_U32 = 3,
  BRIG_TYPE_U64 = 4,

  BRIG_TYPE_S8 = 5,
  BRIG_TYPE_S16 = 6,
  BRIG_TYPE_S32 = 7,
  BRIG_TYPE_S64 = 8,

  BRIG_TYPE_F16 = 9,
  BRIG_TYPE_F32 = 10,
  BRIG_TYPE_F64 = 11,

  BRIG_TYPE_B1 = 12,
  BRIG_TYPE_B8 = 13,
  BRIG_TYPE_B16 = 14,
  BRIG_TYPE_B32 = 15,
  BRIG_TYPE_B64 = 16,
  BRIG_TYPE_B128 = 17,

  BRIG_TYPE_SAMP = 18,
  BRIG_TYPE_ROIMG = 19,
  BRIG_TYPE_WOIMG = 20,
  BRIG_TYPE_RWIMG = 21,

  BRIG_TYPE_SIG32 = 22,
  BRIG_TYPE_SIG64 = 23,

  BRIG_TYPE_U8X4 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_32,
  BRIG_TYPE_U8X8 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_64,
  BRIG_TYPE_U8X16 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_128,

  BRIG_TYPE_U16X2 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_32,
  BRIG_TYPE_U16X4 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_64,
  BRIG_TYPE_U16X8 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_128,

  BRIG_TYPE_U32X2 = BRIG_TYPE_U32 | BRIG_TYPE_PACK_64,
  BRIG_TYPE_U32X4 = BRIG_TYPE_U32 | BRIG_TYPE_PACK_128,

  BRIG_TYPE_U64X2 = BRIG_TYPE_U64 | BRIG_TYPE_PACK_128,

  BRIG_TYPE_S8X4 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_32,
  BRIG_TYPE_S8X8 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_64,
  BRIG_TYPE_S8X16 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_128,

  BRIG_TYPE_S16X2 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_32,
  BRIG_TYPE_S16X4 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_64,
  BRIG_TYPE_S16X8 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_128,

  BRIG_TYPE_S32X2 = BRIG_TYPE_S32 | BRIG_TYPE_PACK_64,
  BRIG_TYPE_S32X4 = BRIG_TYPE_S32 | BRIG_TYPE_PACK_128,

  BRIG_TYPE_S64X2 = BRIG_TYPE_S64 | BRIG_TYPE_PACK_128,

  BRIG_TYPE_F16X2 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_32,
  BRIG_TYPE_F16X4 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_64,
  BRIG_TYPE_F16X8 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_128,

  BRIG_TYPE_F32X2 = BRIG_TYPE_F32 | BRIG_TYPE_PACK_64,
  BRIG_TYPE_F32X4 = BRIG_TYPE_F32 | BRIG_TYPE_PACK_128,

  BRIG_TYPE_F64X2 = BRIG_TYPE_F64 | BRIG_TYPE_PACK_128,

  BRIG_TYPE_U8_ARRAY = BRIG_TYPE_U8 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_U16_ARRAY = BRIG_TYPE_U16 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_U32_ARRAY = BRIG_TYPE_U32 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_U64_ARRAY = BRIG_TYPE_U64 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_S8_ARRAY = BRIG_TYPE_S8 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_S16_ARRAY = BRIG_TYPE_S16 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_S32_ARRAY = BRIG_TYPE_S32 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_S64_ARRAY = BRIG_TYPE_S64 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_F16_ARRAY = BRIG_TYPE_F16 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_F32_ARRAY = BRIG_TYPE_F32 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_F64_ARRAY = BRIG_TYPE_F64 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_B8_ARRAY = BRIG_TYPE_B8 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_B16_ARRAY = BRIG_TYPE_B16 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_B32_ARRAY = BRIG_TYPE_B32 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_B64_ARRAY = BRIG_TYPE_B64 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_B128_ARRAY = BRIG_TYPE_B128 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_SAMP_ARRAY = BRIG_TYPE_SAMP | BRIG_TYPE_ARRAY,
  BRIG_TYPE_ROIMG_ARRAY = BRIG_TYPE_ROIMG | BRIG_TYPE_ARRAY,
  BRIG_TYPE_WOIMG_ARRAY = BRIG_TYPE_WOIMG | BRIG_TYPE_ARRAY,
  BRIG_TYPE_RWIMG_ARRAY = BRIG_TYPE_RWIMG | BRIG_TYPE_ARRAY,

  BRIG_TYPE_SIG32_ARRAY = BRIG_TYPE_SIG32 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_SIG64_ARRAY = BRIG_TYPE_SIG64 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_U8X4_ARRAY = BRIG_TYPE_U8X4 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_U8X8_ARRAY = BRIG_TYPE_U8X8 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_U8X16_ARRAY = BRIG_TYPE_U8X16 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_U16X2_ARRAY = BRIG_TYPE_U16X2 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_U16X4_ARRAY = BRIG_TYPE_U16X4 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_U16X8_ARRAY = BRIG_TYPE_U16X8 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_U32X2_ARRAY = BRIG_TYPE_U32X2 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_U32X4_ARRAY = BRIG_TYPE_U32X4 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_U64X2_ARRAY = BRIG_TYPE_U64X2 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_S8X4_ARRAY = BRIG_TYPE_S8X4 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_S8X8_ARRAY = BRIG_TYPE_S8X8 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_S8X16_ARRAY = BRIG_TYPE_S8X16 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_S16X2_ARRAY = BRIG_TYPE_S16X2 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_S16X4_ARRAY = BRIG_TYPE_S16X4 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_S16X8_ARRAY = BRIG_TYPE_S16X8 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_S32X2_ARRAY = BRIG_TYPE_S32X2 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_S32X4_ARRAY = BRIG_TYPE_S32X4 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_S64X2_ARRAY = BRIG_TYPE_S64X2 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_F16X2_ARRAY = BRIG_TYPE_F16X2 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_F16X4_ARRAY = BRIG_TYPE_F16X4 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_F16X8_ARRAY = BRIG_TYPE_F16X8 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_F32X2_ARRAY = BRIG_TYPE_F32X2 | BRIG_TYPE_ARRAY,
  BRIG_TYPE_F32X4_ARRAY = BRIG_TYPE_F32X4 | BRIG_TYPE_ARRAY,

  BRIG_TYPE_F64X2_ARRAY = BRIG_TYPE_F64X2 | BRIG_TYPE_ARRAY
};

struct BrigUInt64
{
  uint32_t lo;
  uint32_t hi;
};

typedef uint8_t BrigVariableModifier8_t;

enum BrigVariableModifierMask
{
  BRIG_VARIABLE_DEFINITION = 1,
  BRIG_VARIABLE_CONST = 2
};

enum BrigVersion
{
  BRIG_VERSION_HSAIL_MAJOR = 1,
  BRIG_VERSION_HSAIL_MINOR = 0,
  BRIG_VERSION_BRIG_MAJOR = 1,
  BRIG_VERSION_BRIG_MINOR = 0
};

typedef uint8_t BrigWidth8_t;

enum BrigWidth
{
  BRIG_WIDTH_NONE = 0,
  BRIG_WIDTH_1 = 1,
  BRIG_WIDTH_2 = 2,
  BRIG_WIDTH_4 = 3,
  BRIG_WIDTH_8 = 4,
  BRIG_WIDTH_16 = 5,
  BRIG_WIDTH_32 = 6,
  BRIG_WIDTH_64 = 7,
  BRIG_WIDTH_128 = 8,
  BRIG_WIDTH_256 = 9,
  BRIG_WIDTH_512 = 10,
  BRIG_WIDTH_1024 = 11,
  BRIG_WIDTH_2048 = 12,
  BRIG_WIDTH_4096 = 13,
  BRIG_WIDTH_8192 = 14,
  BRIG_WIDTH_16384 = 15,
  BRIG_WIDTH_32768 = 16,
  BRIG_WIDTH_65536 = 17,
  BRIG_WIDTH_131072 = 18,
  BRIG_WIDTH_262144 = 19,
  BRIG_WIDTH_524288 = 20,
  BRIG_WIDTH_1048576 = 21,
  BRIG_WIDTH_2097152 = 22,
  BRIG_WIDTH_4194304 = 23,
  BRIG_WIDTH_8388608 = 24,
  BRIG_WIDTH_16777216 = 25,
  BRIG_WIDTH_33554432 = 26,
  BRIG_WIDTH_67108864 = 27,
  BRIG_WIDTH_134217728 = 28,
  BRIG_WIDTH_268435456 = 29,
  BRIG_WIDTH_536870912 = 30,
  BRIG_WIDTH_1073741824 = 31,
  BRIG_WIDTH_2147483648 = 32,
  BRIG_WIDTH_WAVESIZE = 33,
  BRIG_WIDTH_ALL = 34
};

struct BrigData
{
  uint32_t byteCount;
  uint8_t bytes[1];
};

struct BrigDirectiveArgBlock
{
  BrigBase base;
};

struct BrigDirectiveComment
{
  BrigBase base;
  BrigDataOffsetString32_t name;
};

struct BrigDirectiveControl
{
  BrigBase base;
  BrigControlDirective16_t control;
  uint16_t reserved;
  BrigDataOffsetOperandList32_t operands;
};

struct BrigDirectiveExecutable
{
  BrigBase base;
  BrigDataOffsetString32_t name;
  uint16_t outArgCount;
  uint16_t inArgCount;
  BrigCodeOffset32_t firstInArg;
  BrigCodeOffset32_t firstCodeBlockEntry;
  BrigCodeOffset32_t nextModuleEntry;
  BrigExecutableModifier8_t modifier;
  BrigLinkage8_t linkage;
  uint16_t reserved;
};

struct BrigDirectiveExtension
{
  BrigBase base;
  BrigDataOffsetString32_t name;
};

struct BrigDirectiveFbarrier
{
  BrigBase base;
  BrigDataOffsetString32_t name;
  BrigVariableModifier8_t modifier;
  BrigLinkage8_t linkage;
  uint16_t reserved;
};

struct BrigDirectiveLabel
{
  BrigBase base;
  BrigDataOffsetString32_t name;
};

struct BrigDirectiveLoc
{
  BrigBase base;
  BrigDataOffsetString32_t filename;
  uint32_t line;
  uint32_t column;
};

struct BrigDirectiveModule
{
  BrigBase base;
  BrigDataOffsetString32_t name;
  BrigVersion32_t hsailMajor;
  BrigVersion32_t hsailMinor;
  BrigProfile8_t profile;
  BrigMachineModel8_t machineModel;
  BrigRound8_t defaultFloatRound;
  uint8_t reserved;
};

struct BrigDirectiveNone
{
  BrigBase base;
};

struct BrigDirectivePragma
{
  BrigBase base;
  BrigDataOffsetOperandList32_t operands;
};

struct BrigDirectiveVariable
{
  BrigBase base;
  BrigDataOffsetString32_t name;
  BrigOperandOffset32_t init;
  BrigType16_t type;
  BrigSegment8_t segment;
  BrigAlignment8_t align;
  BrigUInt64 dim;
  BrigVariableModifier8_t modifier;
  BrigLinkage8_t linkage;
  BrigAllocation8_t allocation;
  uint8_t reserved;
};

struct BrigInstBase
{
  BrigBase base;
  BrigOpcode16_t opcode;
  BrigType16_t type;
  BrigDataOffsetOperandList32_t operands;
};

struct BrigInstAddr
{
  BrigInstBase base;
  BrigSegment8_t segment;
  uint8_t reserved[3];
};

struct BrigInstAtomic
{
  BrigInstBase base;
  BrigSegment8_t segment;
  BrigMemoryOrder8_t memoryOrder;
  BrigMemoryScope8_t memoryScope;
  BrigAtomicOperation8_t atomicOperation;
  uint8_t equivClass;
  uint8_t reserved[3];
};

struct BrigInstBasic
{
  BrigInstBase base;
};

struct BrigInstBr
{
  BrigInstBase base;
  BrigWidth8_t width;
  uint8_t reserved[3];
};

struct BrigInstCmp
{
  BrigInstBase base;
  BrigType16_t sourceType;
  BrigAluModifier8_t modifier;
  BrigCompareOperation8_t compare;
  BrigPack8_t pack;
  uint8_t reserved[3];
};

struct BrigInstCvt
{
  BrigInstBase base;
  BrigType16_t sourceType;
  BrigAluModifier8_t modifier;
  BrigRound8_t round;
};

struct BrigInstImage
{
  BrigInstBase base;
  BrigType16_t imageType;
  BrigType16_t coordType;
  BrigImageGeometry8_t geometry;
  uint8_t equivClass;
  uint16_t reserved;
};

struct BrigInstLane
{
  BrigInstBase base;
  BrigType16_t sourceType;
  BrigWidth8_t width;
  uint8_t reserved;
};

struct BrigInstMem
{
  BrigInstBase base;
  BrigSegment8_t segment;
  BrigAlignment8_t align;
  uint8_t equivClass;
  BrigWidth8_t width;
  BrigMemoryModifier8_t modifier;
  uint8_t reserved[3];
};

struct BrigInstMemFence
{
  BrigInstBase base;
  BrigMemoryOrder8_t memoryOrder;
  BrigMemoryScope8_t globalSegmentMemoryScope;
  BrigMemoryScope8_t groupSegmentMemoryScope;
  BrigMemoryScope8_t imageSegmentMemoryScope;
};

struct BrigInstMod
{
  BrigInstBase base;
  BrigAluModifier8_t modifier;
  BrigRound8_t round;
  BrigPack8_t pack;
  uint8_t reserved;
};

struct BrigInstQueryImage
{
  BrigInstBase base;
  BrigType16_t imageType;
  BrigImageGeometry8_t geometry;
  BrigImageQuery8_t query;
};

struct BrigInstQuerySampler
{
  BrigInstBase base;
  BrigSamplerQuery8_t query;
  uint8_t reserved[3];
};

struct BrigInstQueue
{
  BrigInstBase base;
  BrigSegment8_t segment;
  BrigMemoryOrder8_t memoryOrder;
  uint16_t reserved;
};

struct BrigInstSeg
{
  BrigInstBase base;
  BrigSegment8_t segment;
  uint8_t reserved[3];
};

struct BrigInstSegCvt
{
  BrigInstBase base;
  BrigType16_t sourceType;
  BrigSegment8_t segment;
  BrigSegCvtModifier8_t modifier;
};

struct BrigInstSignal
{
  BrigInstBase base;
  BrigType16_t signalType;
  BrigMemoryOrder8_t memoryOrder;
  BrigAtomicOperation8_t signalOperation;
};

struct BrigInstSourceType
{
  BrigInstBase base;
  BrigType16_t sourceType;
  uint16_t reserved;
};

struct BrigOperandAddress
{
  BrigBase base;
  BrigCodeOffset32_t symbol;
  BrigOperandOffset32_t reg;
  BrigUInt64 offset;
};

struct BrigOperandAlign
{
  BrigBase base;
  BrigAlignment8_t align;
  uint8_t reserved[3];
};

struct BrigOperandCodeList
{
  BrigBase base;
  BrigDataOffsetCodeList32_t elements;
};

struct BrigOperandCodeRef
{
  BrigBase base;
  BrigCodeOffset32_t ref;
};

struct BrigOperandConstantBytes
{
  BrigBase base;
  BrigType16_t type;
  uint16_t reserved;
  BrigDataOffsetString32_t bytes;
};

struct BrigOperandConstantImage
{
  BrigBase base;
  BrigType16_t type;
  BrigImageGeometry8_t geometry;
  BrigImageChannelOrder8_t channelOrder;
  BrigImageChannelType8_t channelType;
  uint8_t reserved[3];
  BrigUInt64 width;
  BrigUInt64 height;
  BrigUInt64 depth;
  BrigUInt64 array;
};

struct BrigOperandConstantOperandList
{
  BrigBase base;
  BrigType16_t type;
  uint16_t reserved;
  BrigDataOffsetOperandList32_t elements;
};

struct BrigOperandConstantSampler
{
  BrigBase base;
  BrigType16_t type;
  BrigSamplerCoordNormalization8_t coord;
  BrigSamplerFilter8_t filter;
  BrigSamplerAddressing8_t addressing;
  uint8_t reserved[3];
};

struct BrigOperandOperandList
{
  BrigBase base;
  BrigDataOffsetOperandList32_t elements;
};

struct BrigOperandRegister
{
  BrigBase base;
  BrigRegisterKind16_t regKind;
  uint16_t regNum;
};

struct BrigOperandString
{
  BrigBase base;
  BrigDataOffsetString32_t string;
};

struct BrigOperandWavesize
{
  BrigBase base;
};

#endif /* HSA_BRIG_FORMAT_H */
