template <typename Visitor> void enumerateFields_gen(OperandAddress obj, Visitor & vis) { vis(obj.symbol(),"symbol"); vis(obj.reg(),"reg"); vis(obj.offsetLo(),"offsetLo"); vis(obj.offset(),"offset"); vis(obj.offsetHi(),"offsetHi"); vis(obj.type(),"type"); }
template <typename Visitor> void enumerateFields_gen(OperandAddress obj, Visitor & vis) { enumerateFields_gen(Operand(obj), vis); vis(obj.symbol(),"symbol"); vis(obj.reg(),"reg"); enumerateFields(obj.offset(), vis); }
bool ValidatorImpl::ValidateBrigOperandFields(Operand item) const { unsigned kind = item.kind(); switch (kind) { case BRIG_KIND_OPERAND_ADDRESS: { OperandAddress it = item; validate_BrigCodeOffset(item, it.brig()->symbol, "OperandAddress", "symbol"); validate_BrigOperandOffset(item, it.brig()->reg, "OperandAddress", "reg"); validate_fld_Offset(item, it.brig()->offset, "OperandAddress", "offset"); } break; case BRIG_KIND_OPERAND_ALIGN: { OperandAlign it = item; validate_BrigAlignment(item, it.brig()->align, "OperandAlign", "align"); for (unsigned i = 0; i < 3; i++) { validate_fld_Reserved(item, it.brig()->reserved[i], "OperandAlign", "reserved"); } } break; case BRIG_KIND_OPERAND_CODE_LIST: { OperandCodeList it = item; validate_BrigDataOffsetCodeList(item, it.brig()->elements, "OperandCodeList", "elements"); } break; case BRIG_KIND_OPERAND_CODE_REF: { OperandCodeRef it = item; validate_BrigCodeOffset(item, it.brig()->ref, "OperandCodeRef", "ref"); } break; case BRIG_KIND_OPERAND_CONSTANT_BYTES: { OperandConstantBytes it = item; validate_BrigType(item, it.brig()->type, "OperandConstantBytes", "type"); validate_fld_Reserved(item, it.brig()->reserved, "OperandConstantBytes", "reserved"); validate_BrigDataOffsetString(item, it.brig()->bytes, "OperandConstantBytes", "bytes"); } break; case BRIG_KIND_OPERAND_CONSTANT_IMAGE: { OperandConstantImage it = item; validate_BrigType(item, it.brig()->type, "OperandConstantImage", "type"); validate_BrigImageGeometry(item, it.brig()->geometry, "OperandConstantImage", "geometry"); validate_BrigImageChannelOrder(item, it.brig()->channelOrder, "OperandConstantImage", "channelOrder"); validate_BrigImageChannelType(item, it.brig()->channelType, "OperandConstantImage", "channelType"); for (unsigned i = 0; i < 3; i++) { validate_fld_Reserved(item, it.brig()->reserved[i], "OperandConstantImage", "reserved"); } validate_fld_Width(item, it.brig()->width, "OperandConstantImage", "width"); validate_fld_Height(item, it.brig()->height, "OperandConstantImage", "height"); validate_fld_Depth(item, it.brig()->depth, "OperandConstantImage", "depth"); validate_fld_Array(item, it.brig()->array, "OperandConstantImage", "array"); } break; case BRIG_KIND_OPERAND_CONSTANT_OPERAND_LIST: { OperandConstantOperandList it = item; validate_BrigType(item, it.brig()->type, "OperandConstantOperandList", "type"); validate_fld_Reserved(item, it.brig()->reserved, "OperandConstantOperandList", "reserved"); validate_BrigDataOffsetOperandList(item, it.brig()->elements, "OperandConstantOperandList", "elements"); } break; case BRIG_KIND_OPERAND_CONSTANT_SAMPLER: { OperandConstantSampler it = item; validate_BrigType(item, it.brig()->type, "OperandConstantSampler", "type"); validate_BrigSamplerCoordNormalization(item, it.brig()->coord, "OperandConstantSampler", "coord"); validate_BrigSamplerFilter(item, it.brig()->filter, "OperandConstantSampler", "filter"); validate_BrigSamplerAddressing(item, it.brig()->addressing, "OperandConstantSampler", "addressing"); for (unsigned i = 0; i < 3; i++) { validate_fld_Reserved(item, it.brig()->reserved[i], "OperandConstantSampler", "reserved"); } } break; case BRIG_KIND_OPERAND_OPERAND_LIST: { OperandOperandList it = item; validate_BrigDataOffsetOperandList(item, it.brig()->elements, "OperandOperandList", "elements"); } break; case BRIG_KIND_OPERAND_REGISTER: { OperandRegister it = item; validate_BrigRegisterKind(item, it.brig()->regKind, "OperandRegister", "regKind"); validate_fld_RegNum(item, it.brig()->regNum, "OperandRegister", "regNum"); } break; case BRIG_KIND_OPERAND_STRING: { OperandString it = item; validate_BrigDataOffsetString(item, it.brig()->string, "OperandString", "string"); } break; case BRIG_KIND_OPERAND_WAVESIZE: { OperandWavesize it = item; } break; default: return false; // not found } // switch return true; // found and validated }