• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by gen_spirv_builder_and_parser.py using data from spirv.core.grammar.json.
3 //
4 // Copyright 2021 The ANGLE Project Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style license that can be
6 // found in the LICENSE file.
7 //
8 // spirv_instruction_parser_autogen.h:
9 //   Functions to parse SPIR-V binary for each instruction.
10 
11 #ifndef COMMON_SPIRV_SPIRVINSTRUCTIONPARSERAUTOGEN_H_
12 #define COMMON_SPIRV_SPIRVINSTRUCTIONPARSERAUTOGEN_H_
13 
14 #include <spirv/unified1/spirv.hpp>
15 
16 #include "spirv_types.h"
17 
18 namespace angle
19 {
20 namespace spirv
21 {
22 void GetInstructionOpAndLength(const uint32_t *_instruction, spv::Op *opOut, uint32_t *lengthOut);
23 void ParseUndef(const uint32_t *_instruction, IdResultType *idResultType, IdResult *idResult);
24 void ParseSourceContinued(const uint32_t *_instruction, LiteralString *continuedSource);
25 void ParseSource(const uint32_t *_instruction,
26                  spv::SourceLanguage *sourceLanguage,
27                  LiteralInteger *version,
28                  IdRef *file,
29                  LiteralString *source);
30 void ParseSourceExtension(const uint32_t *_instruction, LiteralString *extension);
31 void ParseName(const uint32_t *_instruction, IdRef *target, LiteralString *name);
32 void ParseMemberName(const uint32_t *_instruction,
33                      IdRef *type,
34                      LiteralInteger *member,
35                      LiteralString *name);
36 void ParseString(const uint32_t *_instruction, IdResult *idResult, LiteralString *string);
37 void ParseLine(const uint32_t *_instruction,
38                IdRef *file,
39                LiteralInteger *line,
40                LiteralInteger *column);
41 void ParseExtension(const uint32_t *_instruction, LiteralString *name);
42 void ParseExtInstImport(const uint32_t *_instruction, IdResult *idResult, LiteralString *name);
43 void ParseExtInst(const uint32_t *_instruction,
44                   IdResultType *idResultType,
45                   IdResult *idResult,
46                   IdRef *set,
47                   LiteralExtInstInteger *instruction,
48                   IdRefList *operandList);
49 void ParseMemoryModel(const uint32_t *_instruction,
50                       spv::AddressingModel *addressingModel,
51                       spv::MemoryModel *memoryModel);
52 void ParseEntryPoint(const uint32_t *_instruction,
53                      spv::ExecutionModel *executionModel,
54                      IdRef *entryPoint,
55                      LiteralString *name,
56                      IdRefList *interfaceList);
57 void ParseExecutionMode(const uint32_t *_instruction,
58                         IdRef *entryPoint,
59                         spv::ExecutionMode *mode,
60                         LiteralIntegerList *operandsList);
61 void ParseCapability(const uint32_t *_instruction, spv::Capability *capability);
62 void ParseTypeVoid(const uint32_t *_instruction, IdResult *idResult);
63 void ParseTypeBool(const uint32_t *_instruction, IdResult *idResult);
64 void ParseTypeInt(const uint32_t *_instruction,
65                   IdResult *idResult,
66                   LiteralInteger *width,
67                   LiteralInteger *signedness);
68 void ParseTypeFloat(const uint32_t *_instruction, IdResult *idResult, LiteralInteger *width);
69 void ParseTypeVector(const uint32_t *_instruction,
70                      IdResult *idResult,
71                      IdRef *componentType,
72                      LiteralInteger *componentCount);
73 void ParseTypeMatrix(const uint32_t *_instruction,
74                      IdResult *idResult,
75                      IdRef *columnType,
76                      LiteralInteger *columnCount);
77 void ParseTypeImage(const uint32_t *_instruction,
78                     IdResult *idResult,
79                     IdRef *sampledType,
80                     spv::Dim *dim,
81                     LiteralInteger *depth,
82                     LiteralInteger *arrayed,
83                     LiteralInteger *mS,
84                     LiteralInteger *sampled,
85                     spv::ImageFormat *imageFormat,
86                     spv::AccessQualifier *accessQualifier);
87 void ParseTypeSampler(const uint32_t *_instruction, IdResult *idResult);
88 void ParseTypeSampledImage(const uint32_t *_instruction, IdResult *idResult, IdRef *imageType);
89 void ParseTypeArray(const uint32_t *_instruction,
90                     IdResult *idResult,
91                     IdRef *elementType,
92                     IdRef *length);
93 void ParseTypeRuntimeArray(const uint32_t *_instruction, IdResult *idResult, IdRef *elementType);
94 void ParseTypeStruct(const uint32_t *_instruction, IdResult *idResult, IdRefList *memberList);
95 void ParseTypePointer(const uint32_t *_instruction,
96                       IdResult *idResult,
97                       spv::StorageClass *storageClass,
98                       IdRef *type);
99 void ParseTypeFunction(const uint32_t *_instruction,
100                        IdResult *idResult,
101                        IdRef *returnType,
102                        IdRefList *parameterList);
103 void ParseConstantTrue(const uint32_t *_instruction,
104                        IdResultType *idResultType,
105                        IdResult *idResult);
106 void ParseConstantFalse(const uint32_t *_instruction,
107                         IdResultType *idResultType,
108                         IdResult *idResult);
109 void ParseConstant(const uint32_t *_instruction,
110                    IdResultType *idResultType,
111                    IdResult *idResult,
112                    LiteralContextDependentNumber *value);
113 void ParseConstantComposite(const uint32_t *_instruction,
114                             IdResultType *idResultType,
115                             IdResult *idResult,
116                             IdRefList *constituentsList);
117 void ParseConstantNull(const uint32_t *_instruction,
118                        IdResultType *idResultType,
119                        IdResult *idResult);
120 void ParseSpecConstantTrue(const uint32_t *_instruction,
121                            IdResultType *idResultType,
122                            IdResult *idResult);
123 void ParseSpecConstantFalse(const uint32_t *_instruction,
124                             IdResultType *idResultType,
125                             IdResult *idResult);
126 void ParseSpecConstant(const uint32_t *_instruction,
127                        IdResultType *idResultType,
128                        IdResult *idResult,
129                        LiteralContextDependentNumber *value);
130 void ParseSpecConstantComposite(const uint32_t *_instruction,
131                                 IdResultType *idResultType,
132                                 IdResult *idResult,
133                                 IdRefList *constituentsList);
134 void ParseFunction(const uint32_t *_instruction,
135                    IdResultType *idResultType,
136                    IdResult *idResult,
137                    spv::FunctionControlMask *functionControl,
138                    IdRef *functionType);
139 void ParseFunctionParameter(const uint32_t *_instruction,
140                             IdResultType *idResultType,
141                             IdResult *idResult);
142 void ParseFunctionCall(const uint32_t *_instruction,
143                        IdResultType *idResultType,
144                        IdResult *idResult,
145                        IdRef *function,
146                        IdRefList *argumentList);
147 void ParseVariable(const uint32_t *_instruction,
148                    IdResultType *idResultType,
149                    IdResult *idResult,
150                    spv::StorageClass *storageClass,
151                    IdRef *initializer);
152 void ParseImageTexelPointer(const uint32_t *_instruction,
153                             IdResultType *idResultType,
154                             IdResult *idResult,
155                             IdRef *image,
156                             IdRef *coordinate,
157                             IdRef *sample);
158 void ParseLoad(const uint32_t *_instruction,
159                IdResultType *idResultType,
160                IdResult *idResult,
161                IdRef *pointer,
162                spv::MemoryAccessMask *memoryAccess);
163 void ParseStore(const uint32_t *_instruction,
164                 IdRef *pointer,
165                 IdRef *object,
166                 spv::MemoryAccessMask *memoryAccess);
167 void ParseCopyMemory(const uint32_t *_instruction,
168                      IdRef *target,
169                      IdRef *source,
170                      spv::MemoryAccessMask *memoryAccess);
171 void ParseAccessChain(const uint32_t *_instruction,
172                       IdResultType *idResultType,
173                       IdResult *idResult,
174                       IdRef *base,
175                       IdRefList *indexesList);
176 void ParseInBoundsAccessChain(const uint32_t *_instruction,
177                               IdResultType *idResultType,
178                               IdResult *idResult,
179                               IdRef *base,
180                               IdRefList *indexesList);
181 void ParseArrayLength(const uint32_t *_instruction,
182                       IdResultType *idResultType,
183                       IdResult *idResult,
184                       IdRef *structure,
185                       LiteralInteger *arraymember);
186 void ParseDecorate(const uint32_t *_instruction,
187                    IdRef *target,
188                    spv::Decoration *decoration,
189                    LiteralIntegerList *valuesList);
190 void ParseMemberDecorate(const uint32_t *_instruction,
191                          IdRef *structureType,
192                          LiteralInteger *member,
193                          spv::Decoration *decoration,
194                          LiteralIntegerList *valuesList);
195 void ParseDecorationGroup(const uint32_t *_instruction, IdResult *idResult);
196 void ParseGroupDecorate(const uint32_t *_instruction,
197                         IdRef *decorationGroup,
198                         IdRefList *targetsList);
199 void ParseGroupMemberDecorate(const uint32_t *_instruction,
200                               IdRef *decorationGroup,
201                               PairIdRefLiteralIntegerList *targetsPairList);
202 void ParseVectorExtractDynamic(const uint32_t *_instruction,
203                                IdResultType *idResultType,
204                                IdResult *idResult,
205                                IdRef *vector,
206                                IdRef *index);
207 void ParseVectorInsertDynamic(const uint32_t *_instruction,
208                               IdResultType *idResultType,
209                               IdResult *idResult,
210                               IdRef *vector,
211                               IdRef *component,
212                               IdRef *index);
213 void ParseVectorShuffle(const uint32_t *_instruction,
214                         IdResultType *idResultType,
215                         IdResult *idResult,
216                         IdRef *vector1,
217                         IdRef *vector2,
218                         LiteralIntegerList *componentsList);
219 void ParseCompositeConstruct(const uint32_t *_instruction,
220                              IdResultType *idResultType,
221                              IdResult *idResult,
222                              IdRefList *constituentsList);
223 void ParseCompositeExtract(const uint32_t *_instruction,
224                            IdResultType *idResultType,
225                            IdResult *idResult,
226                            IdRef *composite,
227                            LiteralIntegerList *indexesList);
228 void ParseCompositeInsert(const uint32_t *_instruction,
229                           IdResultType *idResultType,
230                           IdResult *idResult,
231                           IdRef *object,
232                           IdRef *composite,
233                           LiteralIntegerList *indexesList);
234 void ParseCopyObject(const uint32_t *_instruction,
235                      IdResultType *idResultType,
236                      IdResult *idResult,
237                      IdRef *operand);
238 void ParseTranspose(const uint32_t *_instruction,
239                     IdResultType *idResultType,
240                     IdResult *idResult,
241                     IdRef *matrix);
242 void ParseSampledImage(const uint32_t *_instruction,
243                        IdResultType *idResultType,
244                        IdResult *idResult,
245                        IdRef *image,
246                        IdRef *sampler);
247 void ParseImageSampleImplicitLod(const uint32_t *_instruction,
248                                  IdResultType *idResultType,
249                                  IdResult *idResult,
250                                  IdRef *sampledImage,
251                                  IdRef *coordinate,
252                                  spv::ImageOperandsMask *imageOperands,
253                                  IdRefList *imageOperandIdsList);
254 void ParseImageSampleExplicitLod(const uint32_t *_instruction,
255                                  IdResultType *idResultType,
256                                  IdResult *idResult,
257                                  IdRef *sampledImage,
258                                  IdRef *coordinate,
259                                  spv::ImageOperandsMask *imageOperands,
260                                  IdRefList *imageOperandIdsList);
261 void ParseImageSampleDrefImplicitLod(const uint32_t *_instruction,
262                                      IdResultType *idResultType,
263                                      IdResult *idResult,
264                                      IdRef *sampledImage,
265                                      IdRef *coordinate,
266                                      IdRef *dref,
267                                      spv::ImageOperandsMask *imageOperands,
268                                      IdRefList *imageOperandIdsList);
269 void ParseImageSampleDrefExplicitLod(const uint32_t *_instruction,
270                                      IdResultType *idResultType,
271                                      IdResult *idResult,
272                                      IdRef *sampledImage,
273                                      IdRef *coordinate,
274                                      IdRef *dref,
275                                      spv::ImageOperandsMask *imageOperands,
276                                      IdRefList *imageOperandIdsList);
277 void ParseImageSampleProjImplicitLod(const uint32_t *_instruction,
278                                      IdResultType *idResultType,
279                                      IdResult *idResult,
280                                      IdRef *sampledImage,
281                                      IdRef *coordinate,
282                                      spv::ImageOperandsMask *imageOperands,
283                                      IdRefList *imageOperandIdsList);
284 void ParseImageSampleProjExplicitLod(const uint32_t *_instruction,
285                                      IdResultType *idResultType,
286                                      IdResult *idResult,
287                                      IdRef *sampledImage,
288                                      IdRef *coordinate,
289                                      spv::ImageOperandsMask *imageOperands,
290                                      IdRefList *imageOperandIdsList);
291 void ParseImageSampleProjDrefImplicitLod(const uint32_t *_instruction,
292                                          IdResultType *idResultType,
293                                          IdResult *idResult,
294                                          IdRef *sampledImage,
295                                          IdRef *coordinate,
296                                          IdRef *dref,
297                                          spv::ImageOperandsMask *imageOperands,
298                                          IdRefList *imageOperandIdsList);
299 void ParseImageSampleProjDrefExplicitLod(const uint32_t *_instruction,
300                                          IdResultType *idResultType,
301                                          IdResult *idResult,
302                                          IdRef *sampledImage,
303                                          IdRef *coordinate,
304                                          IdRef *dref,
305                                          spv::ImageOperandsMask *imageOperands,
306                                          IdRefList *imageOperandIdsList);
307 void ParseImageFetch(const uint32_t *_instruction,
308                      IdResultType *idResultType,
309                      IdResult *idResult,
310                      IdRef *image,
311                      IdRef *coordinate,
312                      spv::ImageOperandsMask *imageOperands,
313                      IdRefList *imageOperandIdsList);
314 void ParseImageGather(const uint32_t *_instruction,
315                       IdResultType *idResultType,
316                       IdResult *idResult,
317                       IdRef *sampledImage,
318                       IdRef *coordinate,
319                       IdRef *component,
320                       spv::ImageOperandsMask *imageOperands,
321                       IdRefList *imageOperandIdsList);
322 void ParseImageDrefGather(const uint32_t *_instruction,
323                           IdResultType *idResultType,
324                           IdResult *idResult,
325                           IdRef *sampledImage,
326                           IdRef *coordinate,
327                           IdRef *dref,
328                           spv::ImageOperandsMask *imageOperands,
329                           IdRefList *imageOperandIdsList);
330 void ParseImageRead(const uint32_t *_instruction,
331                     IdResultType *idResultType,
332                     IdResult *idResult,
333                     IdRef *image,
334                     IdRef *coordinate,
335                     spv::ImageOperandsMask *imageOperands,
336                     IdRefList *imageOperandIdsList);
337 void ParseImageWrite(const uint32_t *_instruction,
338                      IdRef *image,
339                      IdRef *coordinate,
340                      IdRef *texel,
341                      spv::ImageOperandsMask *imageOperands,
342                      IdRefList *imageOperandIdsList);
343 void ParseImage(const uint32_t *_instruction,
344                 IdResultType *idResultType,
345                 IdResult *idResult,
346                 IdRef *sampledImage);
347 void ParseImageQuerySizeLod(const uint32_t *_instruction,
348                             IdResultType *idResultType,
349                             IdResult *idResult,
350                             IdRef *image,
351                             IdRef *levelofDetail);
352 void ParseImageQuerySize(const uint32_t *_instruction,
353                          IdResultType *idResultType,
354                          IdResult *idResult,
355                          IdRef *image);
356 void ParseImageQueryLod(const uint32_t *_instruction,
357                         IdResultType *idResultType,
358                         IdResult *idResult,
359                         IdRef *sampledImage,
360                         IdRef *coordinate);
361 void ParseImageQueryLevels(const uint32_t *_instruction,
362                            IdResultType *idResultType,
363                            IdResult *idResult,
364                            IdRef *image);
365 void ParseImageQuerySamples(const uint32_t *_instruction,
366                             IdResultType *idResultType,
367                             IdResult *idResult,
368                             IdRef *image);
369 void ParseConvertFToU(const uint32_t *_instruction,
370                       IdResultType *idResultType,
371                       IdResult *idResult,
372                       IdRef *floatValue);
373 void ParseConvertFToS(const uint32_t *_instruction,
374                       IdResultType *idResultType,
375                       IdResult *idResult,
376                       IdRef *floatValue);
377 void ParseConvertSToF(const uint32_t *_instruction,
378                       IdResultType *idResultType,
379                       IdResult *idResult,
380                       IdRef *signedValue);
381 void ParseConvertUToF(const uint32_t *_instruction,
382                       IdResultType *idResultType,
383                       IdResult *idResult,
384                       IdRef *unsignedValue);
385 void ParseUConvert(const uint32_t *_instruction,
386                    IdResultType *idResultType,
387                    IdResult *idResult,
388                    IdRef *unsignedValue);
389 void ParseSConvert(const uint32_t *_instruction,
390                    IdResultType *idResultType,
391                    IdResult *idResult,
392                    IdRef *signedValue);
393 void ParseFConvert(const uint32_t *_instruction,
394                    IdResultType *idResultType,
395                    IdResult *idResult,
396                    IdRef *floatValue);
397 void ParseQuantizeToF16(const uint32_t *_instruction,
398                         IdResultType *idResultType,
399                         IdResult *idResult,
400                         IdRef *value);
401 void ParseBitcast(const uint32_t *_instruction,
402                   IdResultType *idResultType,
403                   IdResult *idResult,
404                   IdRef *operand);
405 void ParseSNegate(const uint32_t *_instruction,
406                   IdResultType *idResultType,
407                   IdResult *idResult,
408                   IdRef *operand);
409 void ParseFNegate(const uint32_t *_instruction,
410                   IdResultType *idResultType,
411                   IdResult *idResult,
412                   IdRef *operand);
413 void ParseIAdd(const uint32_t *_instruction,
414                IdResultType *idResultType,
415                IdResult *idResult,
416                IdRef *operand1,
417                IdRef *operand2);
418 void ParseFAdd(const uint32_t *_instruction,
419                IdResultType *idResultType,
420                IdResult *idResult,
421                IdRef *operand1,
422                IdRef *operand2);
423 void ParseISub(const uint32_t *_instruction,
424                IdResultType *idResultType,
425                IdResult *idResult,
426                IdRef *operand1,
427                IdRef *operand2);
428 void ParseFSub(const uint32_t *_instruction,
429                IdResultType *idResultType,
430                IdResult *idResult,
431                IdRef *operand1,
432                IdRef *operand2);
433 void ParseIMul(const uint32_t *_instruction,
434                IdResultType *idResultType,
435                IdResult *idResult,
436                IdRef *operand1,
437                IdRef *operand2);
438 void ParseFMul(const uint32_t *_instruction,
439                IdResultType *idResultType,
440                IdResult *idResult,
441                IdRef *operand1,
442                IdRef *operand2);
443 void ParseUDiv(const uint32_t *_instruction,
444                IdResultType *idResultType,
445                IdResult *idResult,
446                IdRef *operand1,
447                IdRef *operand2);
448 void ParseSDiv(const uint32_t *_instruction,
449                IdResultType *idResultType,
450                IdResult *idResult,
451                IdRef *operand1,
452                IdRef *operand2);
453 void ParseFDiv(const uint32_t *_instruction,
454                IdResultType *idResultType,
455                IdResult *idResult,
456                IdRef *operand1,
457                IdRef *operand2);
458 void ParseUMod(const uint32_t *_instruction,
459                IdResultType *idResultType,
460                IdResult *idResult,
461                IdRef *operand1,
462                IdRef *operand2);
463 void ParseSRem(const uint32_t *_instruction,
464                IdResultType *idResultType,
465                IdResult *idResult,
466                IdRef *operand1,
467                IdRef *operand2);
468 void ParseSMod(const uint32_t *_instruction,
469                IdResultType *idResultType,
470                IdResult *idResult,
471                IdRef *operand1,
472                IdRef *operand2);
473 void ParseFRem(const uint32_t *_instruction,
474                IdResultType *idResultType,
475                IdResult *idResult,
476                IdRef *operand1,
477                IdRef *operand2);
478 void ParseFMod(const uint32_t *_instruction,
479                IdResultType *idResultType,
480                IdResult *idResult,
481                IdRef *operand1,
482                IdRef *operand2);
483 void ParseVectorTimesScalar(const uint32_t *_instruction,
484                             IdResultType *idResultType,
485                             IdResult *idResult,
486                             IdRef *vector,
487                             IdRef *scalar);
488 void ParseMatrixTimesScalar(const uint32_t *_instruction,
489                             IdResultType *idResultType,
490                             IdResult *idResult,
491                             IdRef *matrix,
492                             IdRef *scalar);
493 void ParseVectorTimesMatrix(const uint32_t *_instruction,
494                             IdResultType *idResultType,
495                             IdResult *idResult,
496                             IdRef *vector,
497                             IdRef *matrix);
498 void ParseMatrixTimesVector(const uint32_t *_instruction,
499                             IdResultType *idResultType,
500                             IdResult *idResult,
501                             IdRef *matrix,
502                             IdRef *vector);
503 void ParseMatrixTimesMatrix(const uint32_t *_instruction,
504                             IdResultType *idResultType,
505                             IdResult *idResult,
506                             IdRef *leftMatrix,
507                             IdRef *rightMatrix);
508 void ParseOuterProduct(const uint32_t *_instruction,
509                        IdResultType *idResultType,
510                        IdResult *idResult,
511                        IdRef *vector1,
512                        IdRef *vector2);
513 void ParseDot(const uint32_t *_instruction,
514               IdResultType *idResultType,
515               IdResult *idResult,
516               IdRef *vector1,
517               IdRef *vector2);
518 void ParseIAddCarry(const uint32_t *_instruction,
519                     IdResultType *idResultType,
520                     IdResult *idResult,
521                     IdRef *operand1,
522                     IdRef *operand2);
523 void ParseISubBorrow(const uint32_t *_instruction,
524                      IdResultType *idResultType,
525                      IdResult *idResult,
526                      IdRef *operand1,
527                      IdRef *operand2);
528 void ParseUMulExtended(const uint32_t *_instruction,
529                        IdResultType *idResultType,
530                        IdResult *idResult,
531                        IdRef *operand1,
532                        IdRef *operand2);
533 void ParseSMulExtended(const uint32_t *_instruction,
534                        IdResultType *idResultType,
535                        IdResult *idResult,
536                        IdRef *operand1,
537                        IdRef *operand2);
538 void ParseAny(const uint32_t *_instruction,
539               IdResultType *idResultType,
540               IdResult *idResult,
541               IdRef *vector);
542 void ParseAll(const uint32_t *_instruction,
543               IdResultType *idResultType,
544               IdResult *idResult,
545               IdRef *vector);
546 void ParseIsNan(const uint32_t *_instruction,
547                 IdResultType *idResultType,
548                 IdResult *idResult,
549                 IdRef *x);
550 void ParseIsInf(const uint32_t *_instruction,
551                 IdResultType *idResultType,
552                 IdResult *idResult,
553                 IdRef *x);
554 void ParseLogicalEqual(const uint32_t *_instruction,
555                        IdResultType *idResultType,
556                        IdResult *idResult,
557                        IdRef *operand1,
558                        IdRef *operand2);
559 void ParseLogicalNotEqual(const uint32_t *_instruction,
560                           IdResultType *idResultType,
561                           IdResult *idResult,
562                           IdRef *operand1,
563                           IdRef *operand2);
564 void ParseLogicalOr(const uint32_t *_instruction,
565                     IdResultType *idResultType,
566                     IdResult *idResult,
567                     IdRef *operand1,
568                     IdRef *operand2);
569 void ParseLogicalAnd(const uint32_t *_instruction,
570                      IdResultType *idResultType,
571                      IdResult *idResult,
572                      IdRef *operand1,
573                      IdRef *operand2);
574 void ParseLogicalNot(const uint32_t *_instruction,
575                      IdResultType *idResultType,
576                      IdResult *idResult,
577                      IdRef *operand);
578 void ParseSelect(const uint32_t *_instruction,
579                  IdResultType *idResultType,
580                  IdResult *idResult,
581                  IdRef *condition,
582                  IdRef *object1,
583                  IdRef *object2);
584 void ParseIEqual(const uint32_t *_instruction,
585                  IdResultType *idResultType,
586                  IdResult *idResult,
587                  IdRef *operand1,
588                  IdRef *operand2);
589 void ParseINotEqual(const uint32_t *_instruction,
590                     IdResultType *idResultType,
591                     IdResult *idResult,
592                     IdRef *operand1,
593                     IdRef *operand2);
594 void ParseUGreaterThan(const uint32_t *_instruction,
595                        IdResultType *idResultType,
596                        IdResult *idResult,
597                        IdRef *operand1,
598                        IdRef *operand2);
599 void ParseSGreaterThan(const uint32_t *_instruction,
600                        IdResultType *idResultType,
601                        IdResult *idResult,
602                        IdRef *operand1,
603                        IdRef *operand2);
604 void ParseUGreaterThanEqual(const uint32_t *_instruction,
605                             IdResultType *idResultType,
606                             IdResult *idResult,
607                             IdRef *operand1,
608                             IdRef *operand2);
609 void ParseSGreaterThanEqual(const uint32_t *_instruction,
610                             IdResultType *idResultType,
611                             IdResult *idResult,
612                             IdRef *operand1,
613                             IdRef *operand2);
614 void ParseULessThan(const uint32_t *_instruction,
615                     IdResultType *idResultType,
616                     IdResult *idResult,
617                     IdRef *operand1,
618                     IdRef *operand2);
619 void ParseSLessThan(const uint32_t *_instruction,
620                     IdResultType *idResultType,
621                     IdResult *idResult,
622                     IdRef *operand1,
623                     IdRef *operand2);
624 void ParseULessThanEqual(const uint32_t *_instruction,
625                          IdResultType *idResultType,
626                          IdResult *idResult,
627                          IdRef *operand1,
628                          IdRef *operand2);
629 void ParseSLessThanEqual(const uint32_t *_instruction,
630                          IdResultType *idResultType,
631                          IdResult *idResult,
632                          IdRef *operand1,
633                          IdRef *operand2);
634 void ParseFOrdEqual(const uint32_t *_instruction,
635                     IdResultType *idResultType,
636                     IdResult *idResult,
637                     IdRef *operand1,
638                     IdRef *operand2);
639 void ParseFUnordEqual(const uint32_t *_instruction,
640                       IdResultType *idResultType,
641                       IdResult *idResult,
642                       IdRef *operand1,
643                       IdRef *operand2);
644 void ParseFOrdNotEqual(const uint32_t *_instruction,
645                        IdResultType *idResultType,
646                        IdResult *idResult,
647                        IdRef *operand1,
648                        IdRef *operand2);
649 void ParseFUnordNotEqual(const uint32_t *_instruction,
650                          IdResultType *idResultType,
651                          IdResult *idResult,
652                          IdRef *operand1,
653                          IdRef *operand2);
654 void ParseFOrdLessThan(const uint32_t *_instruction,
655                        IdResultType *idResultType,
656                        IdResult *idResult,
657                        IdRef *operand1,
658                        IdRef *operand2);
659 void ParseFUnordLessThan(const uint32_t *_instruction,
660                          IdResultType *idResultType,
661                          IdResult *idResult,
662                          IdRef *operand1,
663                          IdRef *operand2);
664 void ParseFOrdGreaterThan(const uint32_t *_instruction,
665                           IdResultType *idResultType,
666                           IdResult *idResult,
667                           IdRef *operand1,
668                           IdRef *operand2);
669 void ParseFUnordGreaterThan(const uint32_t *_instruction,
670                             IdResultType *idResultType,
671                             IdResult *idResult,
672                             IdRef *operand1,
673                             IdRef *operand2);
674 void ParseFOrdLessThanEqual(const uint32_t *_instruction,
675                             IdResultType *idResultType,
676                             IdResult *idResult,
677                             IdRef *operand1,
678                             IdRef *operand2);
679 void ParseFUnordLessThanEqual(const uint32_t *_instruction,
680                               IdResultType *idResultType,
681                               IdResult *idResult,
682                               IdRef *operand1,
683                               IdRef *operand2);
684 void ParseFOrdGreaterThanEqual(const uint32_t *_instruction,
685                                IdResultType *idResultType,
686                                IdResult *idResult,
687                                IdRef *operand1,
688                                IdRef *operand2);
689 void ParseFUnordGreaterThanEqual(const uint32_t *_instruction,
690                                  IdResultType *idResultType,
691                                  IdResult *idResult,
692                                  IdRef *operand1,
693                                  IdRef *operand2);
694 void ParseShiftRightLogical(const uint32_t *_instruction,
695                             IdResultType *idResultType,
696                             IdResult *idResult,
697                             IdRef *base,
698                             IdRef *shift);
699 void ParseShiftRightArithmetic(const uint32_t *_instruction,
700                                IdResultType *idResultType,
701                                IdResult *idResult,
702                                IdRef *base,
703                                IdRef *shift);
704 void ParseShiftLeftLogical(const uint32_t *_instruction,
705                            IdResultType *idResultType,
706                            IdResult *idResult,
707                            IdRef *base,
708                            IdRef *shift);
709 void ParseBitwiseOr(const uint32_t *_instruction,
710                     IdResultType *idResultType,
711                     IdResult *idResult,
712                     IdRef *operand1,
713                     IdRef *operand2);
714 void ParseBitwiseXor(const uint32_t *_instruction,
715                      IdResultType *idResultType,
716                      IdResult *idResult,
717                      IdRef *operand1,
718                      IdRef *operand2);
719 void ParseBitwiseAnd(const uint32_t *_instruction,
720                      IdResultType *idResultType,
721                      IdResult *idResult,
722                      IdRef *operand1,
723                      IdRef *operand2);
724 void ParseNot(const uint32_t *_instruction,
725               IdResultType *idResultType,
726               IdResult *idResult,
727               IdRef *operand);
728 void ParseBitFieldInsert(const uint32_t *_instruction,
729                          IdResultType *idResultType,
730                          IdResult *idResult,
731                          IdRef *base,
732                          IdRef *insert,
733                          IdRef *offset,
734                          IdRef *count);
735 void ParseBitFieldSExtract(const uint32_t *_instruction,
736                            IdResultType *idResultType,
737                            IdResult *idResult,
738                            IdRef *base,
739                            IdRef *offset,
740                            IdRef *count);
741 void ParseBitFieldUExtract(const uint32_t *_instruction,
742                            IdResultType *idResultType,
743                            IdResult *idResult,
744                            IdRef *base,
745                            IdRef *offset,
746                            IdRef *count);
747 void ParseBitReverse(const uint32_t *_instruction,
748                      IdResultType *idResultType,
749                      IdResult *idResult,
750                      IdRef *base);
751 void ParseBitCount(const uint32_t *_instruction,
752                    IdResultType *idResultType,
753                    IdResult *idResult,
754                    IdRef *base);
755 void ParseDPdx(const uint32_t *_instruction,
756                IdResultType *idResultType,
757                IdResult *idResult,
758                IdRef *p);
759 void ParseDPdy(const uint32_t *_instruction,
760                IdResultType *idResultType,
761                IdResult *idResult,
762                IdRef *p);
763 void ParseFwidth(const uint32_t *_instruction,
764                  IdResultType *idResultType,
765                  IdResult *idResult,
766                  IdRef *p);
767 void ParseDPdxFine(const uint32_t *_instruction,
768                    IdResultType *idResultType,
769                    IdResult *idResult,
770                    IdRef *p);
771 void ParseDPdyFine(const uint32_t *_instruction,
772                    IdResultType *idResultType,
773                    IdResult *idResult,
774                    IdRef *p);
775 void ParseFwidthFine(const uint32_t *_instruction,
776                      IdResultType *idResultType,
777                      IdResult *idResult,
778                      IdRef *p);
779 void ParseDPdxCoarse(const uint32_t *_instruction,
780                      IdResultType *idResultType,
781                      IdResult *idResult,
782                      IdRef *p);
783 void ParseDPdyCoarse(const uint32_t *_instruction,
784                      IdResultType *idResultType,
785                      IdResult *idResult,
786                      IdRef *p);
787 void ParseFwidthCoarse(const uint32_t *_instruction,
788                        IdResultType *idResultType,
789                        IdResult *idResult,
790                        IdRef *p);
791 void ParseEmitStreamVertex(const uint32_t *_instruction, IdRef *stream);
792 void ParseEndStreamPrimitive(const uint32_t *_instruction, IdRef *stream);
793 void ParseControlBarrier(const uint32_t *_instruction,
794                          IdScope *execution,
795                          IdScope *memory,
796                          IdMemorySemantics *semantics);
797 void ParseMemoryBarrier(const uint32_t *_instruction,
798                         IdScope *memory,
799                         IdMemorySemantics *semantics);
800 void ParseAtomicLoad(const uint32_t *_instruction,
801                      IdResultType *idResultType,
802                      IdResult *idResult,
803                      IdRef *pointer,
804                      IdScope *scope,
805                      IdMemorySemantics *semantics);
806 void ParseAtomicStore(const uint32_t *_instruction,
807                       IdRef *pointer,
808                       IdScope *scope,
809                       IdMemorySemantics *semantics,
810                       IdRef *value);
811 void ParseAtomicExchange(const uint32_t *_instruction,
812                          IdResultType *idResultType,
813                          IdResult *idResult,
814                          IdRef *pointer,
815                          IdScope *scope,
816                          IdMemorySemantics *semantics,
817                          IdRef *value);
818 void ParseAtomicCompareExchange(const uint32_t *_instruction,
819                                 IdResultType *idResultType,
820                                 IdResult *idResult,
821                                 IdRef *pointer,
822                                 IdScope *scope,
823                                 IdMemorySemantics *equal,
824                                 IdMemorySemantics *unequal,
825                                 IdRef *value,
826                                 IdRef *comparator);
827 void ParseAtomicIIncrement(const uint32_t *_instruction,
828                            IdResultType *idResultType,
829                            IdResult *idResult,
830                            IdRef *pointer,
831                            IdScope *scope,
832                            IdMemorySemantics *semantics);
833 void ParseAtomicIDecrement(const uint32_t *_instruction,
834                            IdResultType *idResultType,
835                            IdResult *idResult,
836                            IdRef *pointer,
837                            IdScope *scope,
838                            IdMemorySemantics *semantics);
839 void ParseAtomicIAdd(const uint32_t *_instruction,
840                      IdResultType *idResultType,
841                      IdResult *idResult,
842                      IdRef *pointer,
843                      IdScope *scope,
844                      IdMemorySemantics *semantics,
845                      IdRef *value);
846 void ParseAtomicISub(const uint32_t *_instruction,
847                      IdResultType *idResultType,
848                      IdResult *idResult,
849                      IdRef *pointer,
850                      IdScope *scope,
851                      IdMemorySemantics *semantics,
852                      IdRef *value);
853 void ParseAtomicSMin(const uint32_t *_instruction,
854                      IdResultType *idResultType,
855                      IdResult *idResult,
856                      IdRef *pointer,
857                      IdScope *scope,
858                      IdMemorySemantics *semantics,
859                      IdRef *value);
860 void ParseAtomicUMin(const uint32_t *_instruction,
861                      IdResultType *idResultType,
862                      IdResult *idResult,
863                      IdRef *pointer,
864                      IdScope *scope,
865                      IdMemorySemantics *semantics,
866                      IdRef *value);
867 void ParseAtomicSMax(const uint32_t *_instruction,
868                      IdResultType *idResultType,
869                      IdResult *idResult,
870                      IdRef *pointer,
871                      IdScope *scope,
872                      IdMemorySemantics *semantics,
873                      IdRef *value);
874 void ParseAtomicUMax(const uint32_t *_instruction,
875                      IdResultType *idResultType,
876                      IdResult *idResult,
877                      IdRef *pointer,
878                      IdScope *scope,
879                      IdMemorySemantics *semantics,
880                      IdRef *value);
881 void ParseAtomicAnd(const uint32_t *_instruction,
882                     IdResultType *idResultType,
883                     IdResult *idResult,
884                     IdRef *pointer,
885                     IdScope *scope,
886                     IdMemorySemantics *semantics,
887                     IdRef *value);
888 void ParseAtomicOr(const uint32_t *_instruction,
889                    IdResultType *idResultType,
890                    IdResult *idResult,
891                    IdRef *pointer,
892                    IdScope *scope,
893                    IdMemorySemantics *semantics,
894                    IdRef *value);
895 void ParseAtomicXor(const uint32_t *_instruction,
896                     IdResultType *idResultType,
897                     IdResult *idResult,
898                     IdRef *pointer,
899                     IdScope *scope,
900                     IdMemorySemantics *semantics,
901                     IdRef *value);
902 void ParsePhi(const uint32_t *_instruction,
903               IdResultType *idResultType,
904               IdResult *idResult,
905               PairIdRefIdRefList *variableParentPairList);
906 void ParseLoopMerge(const uint32_t *_instruction,
907                     IdRef *mergeBlock,
908                     IdRef *continueTarget,
909                     spv::LoopControlMask *loopControl);
910 void ParseSelectionMerge(const uint32_t *_instruction,
911                          IdRef *mergeBlock,
912                          spv::SelectionControlMask *selectionControl);
913 void ParseLabel(const uint32_t *_instruction, IdResult *idResult);
914 void ParseBranch(const uint32_t *_instruction, IdRef *targetLabel);
915 void ParseBranchConditional(const uint32_t *_instruction,
916                             IdRef *condition,
917                             IdRef *trueLabel,
918                             IdRef *falseLabel,
919                             LiteralIntegerList *branchweightsList);
920 void ParseSwitch(const uint32_t *_instruction,
921                  IdRef *selector,
922                  IdRef *default_,
923                  PairLiteralIntegerIdRefList *targetPairList);
924 void ParseReturnValue(const uint32_t *_instruction, IdRef *value);
925 void ParseGroupAll(const uint32_t *_instruction,
926                    IdResultType *idResultType,
927                    IdResult *idResult,
928                    IdScope *execution,
929                    IdRef *predicate);
930 void ParseGroupAny(const uint32_t *_instruction,
931                    IdResultType *idResultType,
932                    IdResult *idResult,
933                    IdScope *execution,
934                    IdRef *predicate);
935 void ParseGroupBroadcast(const uint32_t *_instruction,
936                          IdResultType *idResultType,
937                          IdResult *idResult,
938                          IdScope *execution,
939                          IdRef *value,
940                          IdRef *localId);
941 void ParseGroupIAdd(const uint32_t *_instruction,
942                     IdResultType *idResultType,
943                     IdResult *idResult,
944                     IdScope *execution,
945                     spv::GroupOperation *operation,
946                     IdRef *x);
947 void ParseGroupFAdd(const uint32_t *_instruction,
948                     IdResultType *idResultType,
949                     IdResult *idResult,
950                     IdScope *execution,
951                     spv::GroupOperation *operation,
952                     IdRef *x);
953 void ParseGroupFMin(const uint32_t *_instruction,
954                     IdResultType *idResultType,
955                     IdResult *idResult,
956                     IdScope *execution,
957                     spv::GroupOperation *operation,
958                     IdRef *x);
959 void ParseGroupUMin(const uint32_t *_instruction,
960                     IdResultType *idResultType,
961                     IdResult *idResult,
962                     IdScope *execution,
963                     spv::GroupOperation *operation,
964                     IdRef *x);
965 void ParseGroupSMin(const uint32_t *_instruction,
966                     IdResultType *idResultType,
967                     IdResult *idResult,
968                     IdScope *execution,
969                     spv::GroupOperation *operation,
970                     IdRef *x);
971 void ParseGroupFMax(const uint32_t *_instruction,
972                     IdResultType *idResultType,
973                     IdResult *idResult,
974                     IdScope *execution,
975                     spv::GroupOperation *operation,
976                     IdRef *x);
977 void ParseGroupUMax(const uint32_t *_instruction,
978                     IdResultType *idResultType,
979                     IdResult *idResult,
980                     IdScope *execution,
981                     spv::GroupOperation *operation,
982                     IdRef *x);
983 void ParseGroupSMax(const uint32_t *_instruction,
984                     IdResultType *idResultType,
985                     IdResult *idResult,
986                     IdScope *execution,
987                     spv::GroupOperation *operation,
988                     IdRef *x);
989 void ParseImageSparseSampleImplicitLod(const uint32_t *_instruction,
990                                        IdResultType *idResultType,
991                                        IdResult *idResult,
992                                        IdRef *sampledImage,
993                                        IdRef *coordinate,
994                                        spv::ImageOperandsMask *imageOperands,
995                                        IdRefList *imageOperandIdsList);
996 void ParseImageSparseSampleExplicitLod(const uint32_t *_instruction,
997                                        IdResultType *idResultType,
998                                        IdResult *idResult,
999                                        IdRef *sampledImage,
1000                                        IdRef *coordinate,
1001                                        spv::ImageOperandsMask *imageOperands,
1002                                        IdRefList *imageOperandIdsList);
1003 void ParseImageSparseSampleDrefImplicitLod(const uint32_t *_instruction,
1004                                            IdResultType *idResultType,
1005                                            IdResult *idResult,
1006                                            IdRef *sampledImage,
1007                                            IdRef *coordinate,
1008                                            IdRef *dref,
1009                                            spv::ImageOperandsMask *imageOperands,
1010                                            IdRefList *imageOperandIdsList);
1011 void ParseImageSparseSampleDrefExplicitLod(const uint32_t *_instruction,
1012                                            IdResultType *idResultType,
1013                                            IdResult *idResult,
1014                                            IdRef *sampledImage,
1015                                            IdRef *coordinate,
1016                                            IdRef *dref,
1017                                            spv::ImageOperandsMask *imageOperands,
1018                                            IdRefList *imageOperandIdsList);
1019 void ParseImageSparseSampleProjImplicitLod(const uint32_t *_instruction,
1020                                            IdResultType *idResultType,
1021                                            IdResult *idResult,
1022                                            IdRef *sampledImage,
1023                                            IdRef *coordinate,
1024                                            spv::ImageOperandsMask *imageOperands,
1025                                            IdRefList *imageOperandIdsList);
1026 void ParseImageSparseSampleProjExplicitLod(const uint32_t *_instruction,
1027                                            IdResultType *idResultType,
1028                                            IdResult *idResult,
1029                                            IdRef *sampledImage,
1030                                            IdRef *coordinate,
1031                                            spv::ImageOperandsMask *imageOperands,
1032                                            IdRefList *imageOperandIdsList);
1033 void ParseImageSparseSampleProjDrefImplicitLod(const uint32_t *_instruction,
1034                                                IdResultType *idResultType,
1035                                                IdResult *idResult,
1036                                                IdRef *sampledImage,
1037                                                IdRef *coordinate,
1038                                                IdRef *dref,
1039                                                spv::ImageOperandsMask *imageOperands,
1040                                                IdRefList *imageOperandIdsList);
1041 void ParseImageSparseSampleProjDrefExplicitLod(const uint32_t *_instruction,
1042                                                IdResultType *idResultType,
1043                                                IdResult *idResult,
1044                                                IdRef *sampledImage,
1045                                                IdRef *coordinate,
1046                                                IdRef *dref,
1047                                                spv::ImageOperandsMask *imageOperands,
1048                                                IdRefList *imageOperandIdsList);
1049 void ParseImageSparseFetch(const uint32_t *_instruction,
1050                            IdResultType *idResultType,
1051                            IdResult *idResult,
1052                            IdRef *image,
1053                            IdRef *coordinate,
1054                            spv::ImageOperandsMask *imageOperands,
1055                            IdRefList *imageOperandIdsList);
1056 void ParseImageSparseGather(const uint32_t *_instruction,
1057                             IdResultType *idResultType,
1058                             IdResult *idResult,
1059                             IdRef *sampledImage,
1060                             IdRef *coordinate,
1061                             IdRef *component,
1062                             spv::ImageOperandsMask *imageOperands,
1063                             IdRefList *imageOperandIdsList);
1064 void ParseImageSparseDrefGather(const uint32_t *_instruction,
1065                                 IdResultType *idResultType,
1066                                 IdResult *idResult,
1067                                 IdRef *sampledImage,
1068                                 IdRef *coordinate,
1069                                 IdRef *dref,
1070                                 spv::ImageOperandsMask *imageOperands,
1071                                 IdRefList *imageOperandIdsList);
1072 void ParseImageSparseTexelsResident(const uint32_t *_instruction,
1073                                     IdResultType *idResultType,
1074                                     IdResult *idResult,
1075                                     IdRef *residentCode);
1076 void ParseImageSparseRead(const uint32_t *_instruction,
1077                           IdResultType *idResultType,
1078                           IdResult *idResult,
1079                           IdRef *image,
1080                           IdRef *coordinate,
1081                           spv::ImageOperandsMask *imageOperands,
1082                           IdRefList *imageOperandIdsList);
1083 void ParseGroupIAddNonUniformAMD(const uint32_t *_instruction,
1084                                  IdResultType *idResultType,
1085                                  IdResult *idResult,
1086                                  IdScope *execution,
1087                                  spv::GroupOperation *operation,
1088                                  IdRef *x);
1089 void ParseGroupFAddNonUniformAMD(const uint32_t *_instruction,
1090                                  IdResultType *idResultType,
1091                                  IdResult *idResult,
1092                                  IdScope *execution,
1093                                  spv::GroupOperation *operation,
1094                                  IdRef *x);
1095 void ParseGroupFMinNonUniformAMD(const uint32_t *_instruction,
1096                                  IdResultType *idResultType,
1097                                  IdResult *idResult,
1098                                  IdScope *execution,
1099                                  spv::GroupOperation *operation,
1100                                  IdRef *x);
1101 void ParseGroupUMinNonUniformAMD(const uint32_t *_instruction,
1102                                  IdResultType *idResultType,
1103                                  IdResult *idResult,
1104                                  IdScope *execution,
1105                                  spv::GroupOperation *operation,
1106                                  IdRef *x);
1107 void ParseGroupSMinNonUniformAMD(const uint32_t *_instruction,
1108                                  IdResultType *idResultType,
1109                                  IdResult *idResult,
1110                                  IdScope *execution,
1111                                  spv::GroupOperation *operation,
1112                                  IdRef *x);
1113 void ParseGroupFMaxNonUniformAMD(const uint32_t *_instruction,
1114                                  IdResultType *idResultType,
1115                                  IdResult *idResult,
1116                                  IdScope *execution,
1117                                  spv::GroupOperation *operation,
1118                                  IdRef *x);
1119 void ParseGroupUMaxNonUniformAMD(const uint32_t *_instruction,
1120                                  IdResultType *idResultType,
1121                                  IdResult *idResult,
1122                                  IdScope *execution,
1123                                  spv::GroupOperation *operation,
1124                                  IdRef *x);
1125 void ParseGroupSMaxNonUniformAMD(const uint32_t *_instruction,
1126                                  IdResultType *idResultType,
1127                                  IdResult *idResult,
1128                                  IdScope *execution,
1129                                  spv::GroupOperation *operation,
1130                                  IdRef *x);
1131 
1132 }  // namespace spirv
1133 }  // namespace angle
1134 
1135 #endif  // COMMON_SPIRV_SPIRVINSTRUCTIONPARSERAUTOGEN_H_
1136