HLSL: use HLSL parser to parse HLSL intrinsic prototypes, enable int/bool mats

This PR adds a CreateParseContext() fn analogous to CreateBuiltInParseables(),
to create a language specific built in parser.  (This code was present before
but not encapsualted in a fn).  This can now be used to create a source language
specific parser for builtins.

Along with this, the code creating HLSL intrinsic prototypes can now produce
them in HLSL syntax, rather than GLSL syntax.  This relaxes certain prior
restrictions at the parser level.  Lower layers (e.g, SPIR-V) may still have
such restrictions, such as around Nx1 matrices: this code does not impact
that.

This PR also fleshes out matrix types for bools and ints, both of which were
partially in place before.  This was easier than maintaining the restrictions
in the HLSL prototype generator to avoid creating protoypes with those types.

Many tests change because the result type from intrinsics moves from "global"
to "temp".

Several new tests are added for the new types.
This commit is contained in:
steve-lunarg 2016-11-15 10:11:04 -07:00
parent fabe7d6a61
commit 0842dbb39a
43 changed files with 3729 additions and 2033 deletions

View file

@ -10,9 +10,9 @@ local_size = (1, 1, 1)
0:17 'inU0' (in uint)
0:17 'inU1' (in uint)
0:? Sequence
0:21 all (global bool)
0:21 all (temp bool)
0:21 'inF0' (in float)
0:24 AtomicAdd (global void)
0:24 AtomicAdd (temp void)
0:24 'gs_ua' (shared uint)
0:24 'gs_ub' (shared uint)
0:25 move second child to first child (temp uint)
@ -20,7 +20,7 @@ local_size = (1, 1, 1)
0:25 AtomicAdd (temp uint)
0:25 'gs_ua' (shared uint)
0:25 'gs_ub' (shared uint)
0:26 AtomicAnd (global void)
0:26 AtomicAnd (temp void)
0:26 'gs_ua' (shared uint)
0:26 'gs_ub' (shared uint)
0:27 move second child to first child (temp uint)
@ -39,7 +39,7 @@ local_size = (1, 1, 1)
0:29 AtomicExchange (temp uint)
0:29 'gs_ua' (shared uint)
0:29 'gs_ub' (shared uint)
0:30 AtomicMax (global void)
0:30 AtomicMax (temp void)
0:30 'gs_ua' (shared uint)
0:30 'gs_ub' (shared uint)
0:31 move second child to first child (temp uint)
@ -47,7 +47,7 @@ local_size = (1, 1, 1)
0:31 AtomicMax (temp uint)
0:31 'gs_ua' (shared uint)
0:31 'gs_ub' (shared uint)
0:32 AtomicMin (global void)
0:32 AtomicMin (temp void)
0:32 'gs_ua' (shared uint)
0:32 'gs_ub' (shared uint)
0:33 move second child to first child (temp uint)
@ -55,7 +55,7 @@ local_size = (1, 1, 1)
0:33 AtomicMin (temp uint)
0:33 'gs_ua' (shared uint)
0:33 'gs_ub' (shared uint)
0:34 AtomicOr (global void)
0:34 AtomicOr (temp void)
0:34 'gs_ua' (shared uint)
0:34 'gs_ub' (shared uint)
0:35 move second child to first child (temp uint)
@ -63,7 +63,7 @@ local_size = (1, 1, 1)
0:35 AtomicOr (temp uint)
0:35 'gs_ua' (shared uint)
0:35 'gs_ub' (shared uint)
0:36 AtomicXor (global void)
0:36 AtomicXor (temp void)
0:36 'gs_ua' (shared uint)
0:36 'gs_ub' (shared uint)
0:37 move second child to first child (temp uint)
@ -91,9 +91,9 @@ local_size = (1, 1, 1)
0:51 'inU0' (in 2-component vector of uint)
0:51 'inU1' (in 2-component vector of uint)
0:? Sequence
0:55 all (global bool)
0:55 all (temp bool)
0:55 'inF0' (in 2-component vector of float)
0:58 AtomicAdd (global void)
0:58 AtomicAdd (temp void)
0:58 'gs_ua2' (shared 2-component vector of uint)
0:58 'gs_ub2' (shared 2-component vector of uint)
0:59 move second child to first child (temp 2-component vector of uint)
@ -101,7 +101,7 @@ local_size = (1, 1, 1)
0:59 AtomicAdd (temp 2-component vector of uint)
0:59 'gs_ua2' (shared 2-component vector of uint)
0:59 'gs_ub2' (shared 2-component vector of uint)
0:60 AtomicAnd (global void)
0:60 AtomicAnd (temp void)
0:60 'gs_ua2' (shared 2-component vector of uint)
0:60 'gs_ub2' (shared 2-component vector of uint)
0:61 move second child to first child (temp 2-component vector of uint)
@ -120,7 +120,7 @@ local_size = (1, 1, 1)
0:63 AtomicExchange (temp 2-component vector of uint)
0:63 'gs_ua2' (shared 2-component vector of uint)
0:63 'gs_ub2' (shared 2-component vector of uint)
0:64 AtomicMax (global void)
0:64 AtomicMax (temp void)
0:64 'gs_ua2' (shared 2-component vector of uint)
0:64 'gs_ub2' (shared 2-component vector of uint)
0:65 move second child to first child (temp 2-component vector of uint)
@ -128,7 +128,7 @@ local_size = (1, 1, 1)
0:65 AtomicMax (temp 2-component vector of uint)
0:65 'gs_ua2' (shared 2-component vector of uint)
0:65 'gs_ub2' (shared 2-component vector of uint)
0:66 AtomicMin (global void)
0:66 AtomicMin (temp void)
0:66 'gs_ua2' (shared 2-component vector of uint)
0:66 'gs_ub2' (shared 2-component vector of uint)
0:67 move second child to first child (temp 2-component vector of uint)
@ -136,7 +136,7 @@ local_size = (1, 1, 1)
0:67 AtomicMin (temp 2-component vector of uint)
0:67 'gs_ua2' (shared 2-component vector of uint)
0:67 'gs_ub2' (shared 2-component vector of uint)
0:68 AtomicOr (global void)
0:68 AtomicOr (temp void)
0:68 'gs_ua2' (shared 2-component vector of uint)
0:68 'gs_ub2' (shared 2-component vector of uint)
0:69 move second child to first child (temp 2-component vector of uint)
@ -144,7 +144,7 @@ local_size = (1, 1, 1)
0:69 AtomicOr (temp 2-component vector of uint)
0:69 'gs_ua2' (shared 2-component vector of uint)
0:69 'gs_ub2' (shared 2-component vector of uint)
0:70 AtomicXor (global void)
0:70 AtomicXor (temp void)
0:70 'gs_ua2' (shared 2-component vector of uint)
0:70 'gs_ub2' (shared 2-component vector of uint)
0:71 move second child to first child (temp 2-component vector of uint)
@ -164,9 +164,9 @@ local_size = (1, 1, 1)
0:78 'inU0' (in 3-component vector of uint)
0:78 'inU1' (in 3-component vector of uint)
0:? Sequence
0:82 all (global bool)
0:82 all (temp bool)
0:82 'inF0' (in 3-component vector of float)
0:85 AtomicAdd (global void)
0:85 AtomicAdd (temp void)
0:85 'gs_ua3' (shared 3-component vector of uint)
0:85 'gs_ub3' (shared 3-component vector of uint)
0:86 move second child to first child (temp 3-component vector of uint)
@ -174,7 +174,7 @@ local_size = (1, 1, 1)
0:86 AtomicAdd (temp 3-component vector of uint)
0:86 'gs_ua3' (shared 3-component vector of uint)
0:86 'gs_ub3' (shared 3-component vector of uint)
0:87 AtomicAnd (global void)
0:87 AtomicAnd (temp void)
0:87 'gs_ua3' (shared 3-component vector of uint)
0:87 'gs_ub3' (shared 3-component vector of uint)
0:88 move second child to first child (temp 3-component vector of uint)
@ -193,7 +193,7 @@ local_size = (1, 1, 1)
0:90 AtomicExchange (temp 3-component vector of uint)
0:90 'gs_ua3' (shared 3-component vector of uint)
0:90 'gs_ub3' (shared 3-component vector of uint)
0:91 AtomicMax (global void)
0:91 AtomicMax (temp void)
0:91 'gs_ua3' (shared 3-component vector of uint)
0:91 'gs_ub3' (shared 3-component vector of uint)
0:92 move second child to first child (temp 3-component vector of uint)
@ -201,7 +201,7 @@ local_size = (1, 1, 1)
0:92 AtomicMax (temp 3-component vector of uint)
0:92 'gs_ua3' (shared 3-component vector of uint)
0:92 'gs_ub3' (shared 3-component vector of uint)
0:93 AtomicMin (global void)
0:93 AtomicMin (temp void)
0:93 'gs_ua3' (shared 3-component vector of uint)
0:93 'gs_ub3' (shared 3-component vector of uint)
0:94 move second child to first child (temp 3-component vector of uint)
@ -209,7 +209,7 @@ local_size = (1, 1, 1)
0:94 AtomicMin (temp 3-component vector of uint)
0:94 'gs_ua3' (shared 3-component vector of uint)
0:94 'gs_ub3' (shared 3-component vector of uint)
0:95 AtomicOr (global void)
0:95 AtomicOr (temp void)
0:95 'gs_ua3' (shared 3-component vector of uint)
0:95 'gs_ub3' (shared 3-component vector of uint)
0:96 move second child to first child (temp 3-component vector of uint)
@ -217,7 +217,7 @@ local_size = (1, 1, 1)
0:96 AtomicOr (temp 3-component vector of uint)
0:96 'gs_ua3' (shared 3-component vector of uint)
0:96 'gs_ub3' (shared 3-component vector of uint)
0:97 AtomicXor (global void)
0:97 AtomicXor (temp void)
0:97 'gs_ua3' (shared 3-component vector of uint)
0:97 'gs_ub3' (shared 3-component vector of uint)
0:98 move second child to first child (temp 3-component vector of uint)
@ -238,9 +238,9 @@ local_size = (1, 1, 1)
0:105 'inU0' (layout(location=3 ) in 4-component vector of uint)
0:105 'inU1' (layout(location=4 ) in 4-component vector of uint)
0:? Sequence
0:109 all (global bool)
0:109 all (temp bool)
0:109 'inF0' (layout(location=0 ) in 4-component vector of float)
0:112 AtomicAdd (global void)
0:112 AtomicAdd (temp void)
0:112 'gs_ua4' (shared 4-component vector of uint)
0:112 'gs_ub4' (shared 4-component vector of uint)
0:113 move second child to first child (temp 4-component vector of uint)
@ -248,7 +248,7 @@ local_size = (1, 1, 1)
0:113 AtomicAdd (temp 4-component vector of uint)
0:113 'gs_ua4' (shared 4-component vector of uint)
0:113 'gs_ub4' (shared 4-component vector of uint)
0:114 AtomicAnd (global void)
0:114 AtomicAnd (temp void)
0:114 'gs_ua4' (shared 4-component vector of uint)
0:114 'gs_ub4' (shared 4-component vector of uint)
0:115 move second child to first child (temp 4-component vector of uint)
@ -267,7 +267,7 @@ local_size = (1, 1, 1)
0:117 AtomicExchange (temp 4-component vector of uint)
0:117 'gs_ua4' (shared 4-component vector of uint)
0:117 'gs_ub4' (shared 4-component vector of uint)
0:118 AtomicMax (global void)
0:118 AtomicMax (temp void)
0:118 'gs_ua4' (shared 4-component vector of uint)
0:118 'gs_ub4' (shared 4-component vector of uint)
0:119 move second child to first child (temp 4-component vector of uint)
@ -275,7 +275,7 @@ local_size = (1, 1, 1)
0:119 AtomicMax (temp 4-component vector of uint)
0:119 'gs_ua4' (shared 4-component vector of uint)
0:119 'gs_ub4' (shared 4-component vector of uint)
0:120 AtomicMin (global void)
0:120 AtomicMin (temp void)
0:120 'gs_ua4' (shared 4-component vector of uint)
0:120 'gs_ub4' (shared 4-component vector of uint)
0:121 move second child to first child (temp 4-component vector of uint)
@ -283,7 +283,7 @@ local_size = (1, 1, 1)
0:121 AtomicMin (temp 4-component vector of uint)
0:121 'gs_ua4' (shared 4-component vector of uint)
0:121 'gs_ub4' (shared 4-component vector of uint)
0:122 AtomicOr (global void)
0:122 AtomicOr (temp void)
0:122 'gs_ua4' (shared 4-component vector of uint)
0:122 'gs_ub4' (shared 4-component vector of uint)
0:123 move second child to first child (temp 4-component vector of uint)
@ -291,7 +291,7 @@ local_size = (1, 1, 1)
0:123 AtomicOr (temp 4-component vector of uint)
0:123 'gs_ua4' (shared 4-component vector of uint)
0:123 'gs_ub4' (shared 4-component vector of uint)
0:124 AtomicXor (global void)
0:124 AtomicXor (temp void)
0:124 'gs_ua4' (shared 4-component vector of uint)
0:124 'gs_ub4' (shared 4-component vector of uint)
0:125 move second child to first child (temp 4-component vector of uint)
@ -343,9 +343,9 @@ local_size = (1, 1, 1)
0:17 'inU0' (in uint)
0:17 'inU1' (in uint)
0:? Sequence
0:21 all (global bool)
0:21 all (temp bool)
0:21 'inF0' (in float)
0:24 AtomicAdd (global void)
0:24 AtomicAdd (temp void)
0:24 'gs_ua' (shared uint)
0:24 'gs_ub' (shared uint)
0:25 move second child to first child (temp uint)
@ -353,7 +353,7 @@ local_size = (1, 1, 1)
0:25 AtomicAdd (temp uint)
0:25 'gs_ua' (shared uint)
0:25 'gs_ub' (shared uint)
0:26 AtomicAnd (global void)
0:26 AtomicAnd (temp void)
0:26 'gs_ua' (shared uint)
0:26 'gs_ub' (shared uint)
0:27 move second child to first child (temp uint)
@ -372,7 +372,7 @@ local_size = (1, 1, 1)
0:29 AtomicExchange (temp uint)
0:29 'gs_ua' (shared uint)
0:29 'gs_ub' (shared uint)
0:30 AtomicMax (global void)
0:30 AtomicMax (temp void)
0:30 'gs_ua' (shared uint)
0:30 'gs_ub' (shared uint)
0:31 move second child to first child (temp uint)
@ -380,7 +380,7 @@ local_size = (1, 1, 1)
0:31 AtomicMax (temp uint)
0:31 'gs_ua' (shared uint)
0:31 'gs_ub' (shared uint)
0:32 AtomicMin (global void)
0:32 AtomicMin (temp void)
0:32 'gs_ua' (shared uint)
0:32 'gs_ub' (shared uint)
0:33 move second child to first child (temp uint)
@ -388,7 +388,7 @@ local_size = (1, 1, 1)
0:33 AtomicMin (temp uint)
0:33 'gs_ua' (shared uint)
0:33 'gs_ub' (shared uint)
0:34 AtomicOr (global void)
0:34 AtomicOr (temp void)
0:34 'gs_ua' (shared uint)
0:34 'gs_ub' (shared uint)
0:35 move second child to first child (temp uint)
@ -396,7 +396,7 @@ local_size = (1, 1, 1)
0:35 AtomicOr (temp uint)
0:35 'gs_ua' (shared uint)
0:35 'gs_ub' (shared uint)
0:36 AtomicXor (global void)
0:36 AtomicXor (temp void)
0:36 'gs_ua' (shared uint)
0:36 'gs_ub' (shared uint)
0:37 move second child to first child (temp uint)
@ -424,9 +424,9 @@ local_size = (1, 1, 1)
0:51 'inU0' (in 2-component vector of uint)
0:51 'inU1' (in 2-component vector of uint)
0:? Sequence
0:55 all (global bool)
0:55 all (temp bool)
0:55 'inF0' (in 2-component vector of float)
0:58 AtomicAdd (global void)
0:58 AtomicAdd (temp void)
0:58 'gs_ua2' (shared 2-component vector of uint)
0:58 'gs_ub2' (shared 2-component vector of uint)
0:59 move second child to first child (temp 2-component vector of uint)
@ -434,7 +434,7 @@ local_size = (1, 1, 1)
0:59 AtomicAdd (temp 2-component vector of uint)
0:59 'gs_ua2' (shared 2-component vector of uint)
0:59 'gs_ub2' (shared 2-component vector of uint)
0:60 AtomicAnd (global void)
0:60 AtomicAnd (temp void)
0:60 'gs_ua2' (shared 2-component vector of uint)
0:60 'gs_ub2' (shared 2-component vector of uint)
0:61 move second child to first child (temp 2-component vector of uint)
@ -453,7 +453,7 @@ local_size = (1, 1, 1)
0:63 AtomicExchange (temp 2-component vector of uint)
0:63 'gs_ua2' (shared 2-component vector of uint)
0:63 'gs_ub2' (shared 2-component vector of uint)
0:64 AtomicMax (global void)
0:64 AtomicMax (temp void)
0:64 'gs_ua2' (shared 2-component vector of uint)
0:64 'gs_ub2' (shared 2-component vector of uint)
0:65 move second child to first child (temp 2-component vector of uint)
@ -461,7 +461,7 @@ local_size = (1, 1, 1)
0:65 AtomicMax (temp 2-component vector of uint)
0:65 'gs_ua2' (shared 2-component vector of uint)
0:65 'gs_ub2' (shared 2-component vector of uint)
0:66 AtomicMin (global void)
0:66 AtomicMin (temp void)
0:66 'gs_ua2' (shared 2-component vector of uint)
0:66 'gs_ub2' (shared 2-component vector of uint)
0:67 move second child to first child (temp 2-component vector of uint)
@ -469,7 +469,7 @@ local_size = (1, 1, 1)
0:67 AtomicMin (temp 2-component vector of uint)
0:67 'gs_ua2' (shared 2-component vector of uint)
0:67 'gs_ub2' (shared 2-component vector of uint)
0:68 AtomicOr (global void)
0:68 AtomicOr (temp void)
0:68 'gs_ua2' (shared 2-component vector of uint)
0:68 'gs_ub2' (shared 2-component vector of uint)
0:69 move second child to first child (temp 2-component vector of uint)
@ -477,7 +477,7 @@ local_size = (1, 1, 1)
0:69 AtomicOr (temp 2-component vector of uint)
0:69 'gs_ua2' (shared 2-component vector of uint)
0:69 'gs_ub2' (shared 2-component vector of uint)
0:70 AtomicXor (global void)
0:70 AtomicXor (temp void)
0:70 'gs_ua2' (shared 2-component vector of uint)
0:70 'gs_ub2' (shared 2-component vector of uint)
0:71 move second child to first child (temp 2-component vector of uint)
@ -497,9 +497,9 @@ local_size = (1, 1, 1)
0:78 'inU0' (in 3-component vector of uint)
0:78 'inU1' (in 3-component vector of uint)
0:? Sequence
0:82 all (global bool)
0:82 all (temp bool)
0:82 'inF0' (in 3-component vector of float)
0:85 AtomicAdd (global void)
0:85 AtomicAdd (temp void)
0:85 'gs_ua3' (shared 3-component vector of uint)
0:85 'gs_ub3' (shared 3-component vector of uint)
0:86 move second child to first child (temp 3-component vector of uint)
@ -507,7 +507,7 @@ local_size = (1, 1, 1)
0:86 AtomicAdd (temp 3-component vector of uint)
0:86 'gs_ua3' (shared 3-component vector of uint)
0:86 'gs_ub3' (shared 3-component vector of uint)
0:87 AtomicAnd (global void)
0:87 AtomicAnd (temp void)
0:87 'gs_ua3' (shared 3-component vector of uint)
0:87 'gs_ub3' (shared 3-component vector of uint)
0:88 move second child to first child (temp 3-component vector of uint)
@ -526,7 +526,7 @@ local_size = (1, 1, 1)
0:90 AtomicExchange (temp 3-component vector of uint)
0:90 'gs_ua3' (shared 3-component vector of uint)
0:90 'gs_ub3' (shared 3-component vector of uint)
0:91 AtomicMax (global void)
0:91 AtomicMax (temp void)
0:91 'gs_ua3' (shared 3-component vector of uint)
0:91 'gs_ub3' (shared 3-component vector of uint)
0:92 move second child to first child (temp 3-component vector of uint)
@ -534,7 +534,7 @@ local_size = (1, 1, 1)
0:92 AtomicMax (temp 3-component vector of uint)
0:92 'gs_ua3' (shared 3-component vector of uint)
0:92 'gs_ub3' (shared 3-component vector of uint)
0:93 AtomicMin (global void)
0:93 AtomicMin (temp void)
0:93 'gs_ua3' (shared 3-component vector of uint)
0:93 'gs_ub3' (shared 3-component vector of uint)
0:94 move second child to first child (temp 3-component vector of uint)
@ -542,7 +542,7 @@ local_size = (1, 1, 1)
0:94 AtomicMin (temp 3-component vector of uint)
0:94 'gs_ua3' (shared 3-component vector of uint)
0:94 'gs_ub3' (shared 3-component vector of uint)
0:95 AtomicOr (global void)
0:95 AtomicOr (temp void)
0:95 'gs_ua3' (shared 3-component vector of uint)
0:95 'gs_ub3' (shared 3-component vector of uint)
0:96 move second child to first child (temp 3-component vector of uint)
@ -550,7 +550,7 @@ local_size = (1, 1, 1)
0:96 AtomicOr (temp 3-component vector of uint)
0:96 'gs_ua3' (shared 3-component vector of uint)
0:96 'gs_ub3' (shared 3-component vector of uint)
0:97 AtomicXor (global void)
0:97 AtomicXor (temp void)
0:97 'gs_ua3' (shared 3-component vector of uint)
0:97 'gs_ub3' (shared 3-component vector of uint)
0:98 move second child to first child (temp 3-component vector of uint)
@ -571,9 +571,9 @@ local_size = (1, 1, 1)
0:105 'inU0' (layout(location=3 ) in 4-component vector of uint)
0:105 'inU1' (layout(location=4 ) in 4-component vector of uint)
0:? Sequence
0:109 all (global bool)
0:109 all (temp bool)
0:109 'inF0' (layout(location=0 ) in 4-component vector of float)
0:112 AtomicAdd (global void)
0:112 AtomicAdd (temp void)
0:112 'gs_ua4' (shared 4-component vector of uint)
0:112 'gs_ub4' (shared 4-component vector of uint)
0:113 move second child to first child (temp 4-component vector of uint)
@ -581,7 +581,7 @@ local_size = (1, 1, 1)
0:113 AtomicAdd (temp 4-component vector of uint)
0:113 'gs_ua4' (shared 4-component vector of uint)
0:113 'gs_ub4' (shared 4-component vector of uint)
0:114 AtomicAnd (global void)
0:114 AtomicAnd (temp void)
0:114 'gs_ua4' (shared 4-component vector of uint)
0:114 'gs_ub4' (shared 4-component vector of uint)
0:115 move second child to first child (temp 4-component vector of uint)
@ -600,7 +600,7 @@ local_size = (1, 1, 1)
0:117 AtomicExchange (temp 4-component vector of uint)
0:117 'gs_ua4' (shared 4-component vector of uint)
0:117 'gs_ub4' (shared 4-component vector of uint)
0:118 AtomicMax (global void)
0:118 AtomicMax (temp void)
0:118 'gs_ua4' (shared 4-component vector of uint)
0:118 'gs_ub4' (shared 4-component vector of uint)
0:119 move second child to first child (temp 4-component vector of uint)
@ -608,7 +608,7 @@ local_size = (1, 1, 1)
0:119 AtomicMax (temp 4-component vector of uint)
0:119 'gs_ua4' (shared 4-component vector of uint)
0:119 'gs_ub4' (shared 4-component vector of uint)
0:120 AtomicMin (global void)
0:120 AtomicMin (temp void)
0:120 'gs_ua4' (shared 4-component vector of uint)
0:120 'gs_ub4' (shared 4-component vector of uint)
0:121 move second child to first child (temp 4-component vector of uint)
@ -616,7 +616,7 @@ local_size = (1, 1, 1)
0:121 AtomicMin (temp 4-component vector of uint)
0:121 'gs_ua4' (shared 4-component vector of uint)
0:121 'gs_ub4' (shared 4-component vector of uint)
0:122 AtomicOr (global void)
0:122 AtomicOr (temp void)
0:122 'gs_ua4' (shared 4-component vector of uint)
0:122 'gs_ub4' (shared 4-component vector of uint)
0:123 move second child to first child (temp 4-component vector of uint)
@ -624,7 +624,7 @@ local_size = (1, 1, 1)
0:123 AtomicOr (temp 4-component vector of uint)
0:123 'gs_ua4' (shared 4-component vector of uint)
0:123 'gs_ub4' (shared 4-component vector of uint)
0:124 AtomicXor (global void)
0:124 AtomicXor (temp void)
0:124 'gs_ua4' (shared 4-component vector of uint)
0:124 'gs_ub4' (shared 4-component vector of uint)
0:125 move second child to first child (temp 4-component vector of uint)