From: David Neto Date: Mon, 2 Nov 2015 21:03:12 +0000 (-0500) Subject: Use the syntax table for opcode to name mappings. X-Git-Tag: upstream/2018.6~1488 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1bcd3d16a380750c768c84d0f0ce6d2d11123f49;p=platform%2Fupstream%2FSPIRV-Tools.git Use the syntax table for opcode to name mappings. This method is more reliably complete. --- diff --git a/source/opcode.cpp b/source/opcode.cpp index afb362b..555bfb7 100644 --- a/source/opcode.cpp +++ b/source/opcode.cpp @@ -384,245 +384,17 @@ void spvInstructionCopy(const uint32_t* words, const SpvOp opcode, } const char* spvOpcodeString(const SpvOp opcode) { -#define CASE(OPCODE) \ - case Spv##OPCODE: \ - return #OPCODE; + // Use the syntax table so it's sure to be complete. +#define Instruction(Name, ...) \ + case SpvOp##Name: \ + return #Name; switch (opcode) { - CASE(OpNop) - CASE(OpSource) - CASE(OpSourceExtension) - CASE(OpExtension) - CASE(OpExtInstImport) - CASE(OpMemoryModel) - CASE(OpEntryPoint) - CASE(OpExecutionMode) - CASE(OpTypeVoid) - CASE(OpTypeBool) - CASE(OpTypeInt) - CASE(OpTypeFloat) - CASE(OpTypeVector) - CASE(OpTypeMatrix) - CASE(OpTypeSampler) - CASE(OpTypeArray) - CASE(OpTypeRuntimeArray) - CASE(OpTypeStruct) - CASE(OpTypeOpaque) - CASE(OpTypePointer) - CASE(OpTypeFunction) - CASE(OpTypeEvent) - CASE(OpTypeDeviceEvent) - CASE(OpTypeReserveId) - CASE(OpTypeQueue) - CASE(OpTypePipe) - CASE(OpConstantTrue) - CASE(OpConstantFalse) - CASE(OpConstant) - CASE(OpConstantComposite) - CASE(OpConstantSampler) - CASE(OpConstantNull) - CASE(OpSpecConstantTrue) - CASE(OpSpecConstantFalse) - CASE(OpSpecConstant) - CASE(OpSpecConstantComposite) - CASE(OpVariable) - CASE(OpFunction) - CASE(OpFunctionParameter) - CASE(OpFunctionEnd) - CASE(OpFunctionCall) - CASE(OpExtInst) - CASE(OpUndef) - CASE(OpLoad) - CASE(OpStore) - CASE(OpPhi) - CASE(OpDecorationGroup) - CASE(OpDecorate) - CASE(OpMemberDecorate) - CASE(OpGroupDecorate) - CASE(OpGroupMemberDecorate) - CASE(OpName) - CASE(OpMemberName) - CASE(OpString) - CASE(OpLine) - CASE(OpVectorExtractDynamic) - CASE(OpVectorInsertDynamic) - CASE(OpVectorShuffle) - CASE(OpCompositeConstruct) - CASE(OpCompositeExtract) - CASE(OpCompositeInsert) - CASE(OpCopyObject) - CASE(OpCopyMemory) - CASE(OpCopyMemorySized) - CASE(OpAccessChain) - CASE(OpInBoundsAccessChain) - CASE(OpSNegate) - CASE(OpFNegate) - CASE(OpNot) - CASE(OpAny) - CASE(OpAll) - CASE(OpConvertFToU) - CASE(OpConvertFToS) - CASE(OpConvertSToF) - CASE(OpConvertUToF) - CASE(OpUConvert) - CASE(OpSConvert) - CASE(OpFConvert) - CASE(OpConvertPtrToU) - CASE(OpConvertUToPtr) - CASE(OpPtrCastToGeneric) - CASE(OpGenericCastToPtr) - CASE(OpBitcast) - CASE(OpTranspose) - CASE(OpIsNan) - CASE(OpIsInf) - CASE(OpIsFinite) - CASE(OpIsNormal) - CASE(OpSignBitSet) - CASE(OpLessOrGreater) - CASE(OpOrdered) - CASE(OpUnordered) - CASE(OpArrayLength) - CASE(OpIAdd) - CASE(OpFAdd) - CASE(OpISub) - CASE(OpFSub) - CASE(OpIMul) - CASE(OpFMul) - CASE(OpUDiv) - CASE(OpSDiv) - CASE(OpFDiv) - CASE(OpUMod) - CASE(OpSRem) - CASE(OpSMod) - CASE(OpFRem) - CASE(OpFMod) - CASE(OpVectorTimesScalar) - CASE(OpMatrixTimesScalar) - CASE(OpVectorTimesMatrix) - CASE(OpMatrixTimesVector) - CASE(OpMatrixTimesMatrix) - CASE(OpOuterProduct) - CASE(OpDot) - CASE(OpShiftRightLogical) - CASE(OpShiftRightArithmetic) - CASE(OpShiftLeftLogical) - CASE(OpLogicalOr) - CASE(OpLogicalAnd) - CASE(OpBitwiseOr) - CASE(OpBitwiseXor) - CASE(OpBitwiseAnd) - CASE(OpSelect) - CASE(OpIEqual) - CASE(OpFOrdEqual) - CASE(OpFUnordEqual) - CASE(OpINotEqual) - CASE(OpFOrdNotEqual) - CASE(OpFUnordNotEqual) - CASE(OpULessThan) - CASE(OpSLessThan) - CASE(OpFOrdLessThan) - CASE(OpFUnordLessThan) - CASE(OpUGreaterThan) - CASE(OpSGreaterThan) - CASE(OpFOrdGreaterThan) - CASE(OpFUnordGreaterThan) - CASE(OpULessThanEqual) - CASE(OpSLessThanEqual) - CASE(OpFOrdLessThanEqual) - CASE(OpFUnordLessThanEqual) - CASE(OpUGreaterThanEqual) - CASE(OpSGreaterThanEqual) - CASE(OpFOrdGreaterThanEqual) - CASE(OpFUnordGreaterThanEqual) - CASE(OpDPdx) - CASE(OpDPdy) - CASE(OpFwidth) - CASE(OpDPdxFine) - CASE(OpDPdyFine) - CASE(OpFwidthFine) - CASE(OpDPdxCoarse) - CASE(OpDPdyCoarse) - CASE(OpFwidthCoarse) - CASE(OpEmitVertex) - CASE(OpEndPrimitive) - CASE(OpEmitStreamVertex) - CASE(OpEndStreamPrimitive) - CASE(OpControlBarrier) - CASE(OpMemoryBarrier) - CASE(OpAtomicLoad) - CASE(OpAtomicStore) - CASE(OpAtomicExchange) - CASE(OpAtomicCompareExchange) - CASE(OpAtomicCompareExchangeWeak) - CASE(OpAtomicIIncrement) - CASE(OpAtomicIDecrement) - CASE(OpAtomicIAdd) - CASE(OpAtomicISub) - CASE(OpAtomicUMin) - CASE(OpAtomicUMax) - CASE(OpAtomicAnd) - CASE(OpAtomicOr) - CASE(OpAtomicXor) - CASE(OpLoopMerge) - CASE(OpSelectionMerge) - CASE(OpLabel) - CASE(OpBranch) - CASE(OpBranchConditional) - CASE(OpSwitch) - CASE(OpKill) - CASE(OpReturn) - CASE(OpReturnValue) - CASE(OpUnreachable) - CASE(OpLifetimeStart) - CASE(OpLifetimeStop) - CASE(OpAsyncGroupCopy) - CASE(OpWaitGroupEvents) - CASE(OpGroupAll) - CASE(OpGroupAny) - CASE(OpGroupBroadcast) - CASE(OpGroupIAdd) - CASE(OpGroupFAdd) - CASE(OpGroupFMin) - CASE(OpGroupUMin) - CASE(OpGroupSMin) - CASE(OpGroupFMax) - CASE(OpGroupUMax) - CASE(OpGroupSMax) - CASE(OpGenericCastToPtrExplicit) - CASE(OpGenericPtrMemSemantics) - CASE(OpReadPipe) - CASE(OpWritePipe) - CASE(OpReservedReadPipe) - CASE(OpReservedWritePipe) - CASE(OpReserveReadPipePackets) - CASE(OpReserveWritePipePackets) - CASE(OpCommitReadPipe) - CASE(OpCommitWritePipe) - CASE(OpIsValidReserveId) - CASE(OpGetNumPipePackets) - CASE(OpGetMaxPipePackets) - CASE(OpGroupReserveReadPipePackets) - CASE(OpGroupReserveWritePipePackets) - CASE(OpGroupCommitReadPipe) - CASE(OpGroupCommitWritePipe) - CASE(OpEnqueueMarker) - CASE(OpEnqueueKernel) - CASE(OpGetKernelNDrangeSubGroupCount) - CASE(OpGetKernelNDrangeMaxSubGroupSize) - CASE(OpGetKernelWorkGroupSize) - CASE(OpGetKernelPreferredWorkGroupSizeMultiple) - CASE(OpRetainEvent) - CASE(OpReleaseEvent) - CASE(OpCreateUserEvent) - CASE(OpIsValidEvent) - CASE(OpSetUserEventStatus) - CASE(OpCaptureEventProfilingInfo) - CASE(OpGetDefaultQueue) - CASE(OpBuildNDRange) +#include "opcode.inc" default: assert(0 && "Unreachable!"); } -#undef CASE return "unknown"; +#undef Instruction } int32_t spvOpcodeIsScalarType(const SpvOp opcode) { diff --git a/source/opcode.h b/source/opcode.h index d9d9c60..d9689e1 100644 --- a/source/opcode.h +++ b/source/opcode.h @@ -111,7 +111,7 @@ void spvInstructionCopy(const uint32_t* words, const SpvOp opcode, const uint16_t wordCount, const spv_endianness_t endian, spv_instruction_t* pInst); -/// @brief Get the string of an OpCode +/// @brief Get the name of an instruction, without the "Op" prefix. /// /// @param[in] opcode the opcode ///