Handle trace-scope execution masks properly.
Previously, trace-scope always used the current execution mask. In
practice, this doesn't work because the execution mask can change in
the middle of a block.
The SkVM code generator handles this by storing off the execution
mask when a trace-scope +1 is written, and reusing that mask when
the corresponding -1 is written. SkRP now mimics this approach. We
now have two calls `pushTraceScopeMask` and `discardTraceScopeMask`.
These compute `TraceMask & ExecutionMask` and save it onto the top
of the current stack. Scope increases and decreases use this mask
directly and do not check the current execution mask.
Change-Id: Ied97f51bf0a60c31d6b5a99b11b25e3a5b45ef60
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/664178
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
diff --git a/src/opts/SkRasterPipeline_opts.h b/src/opts/SkRasterPipeline_opts.h
index b21d83b..cf1dba4 100644
--- a/src/opts/SkRasterPipeline_opts.h
+++ b/src/opts/SkRasterPipeline_opts.h
@@ -3428,8 +3428,11 @@
}
STAGE_TAIL(trace_scope, SkRasterPipeline_TraceScopeCtx* ctx) {
+ // Note that trace_scope intentionally does not incorporate the execution mask. Otherwise, the
+ // scopes would become unbalanced if the execution mask changed in the middle of a block. The
+ // caller is responsible for providing a combined trace- and execution-mask.
I32* traceMask = (I32*)ctx->traceMask;
- if (any(execution_mask() & *traceMask)) {
+ if (any(*traceMask)) {
ctx->traceHook->scope(ctx->delta);
}
}
diff --git a/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp b/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp
index 0a209eb..1c52aea 100644
--- a/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp
+++ b/src/sksl/codegen/SkSLRasterPipelineCodeGenerator.cpp
@@ -145,13 +145,13 @@
/** Returns the stack ID of this AutoStack. */
int stackID() { return fStackID; }
- /** Clones values from the top of the active stack onto this one. */
+ /** Clones values from this stack onto the top of the active stack. */
void pushClone(int slots);
- /** Clones values from a fixed range of the active stack onto this one. */
+ /** Clones values from a fixed range of this stack onto the top of the active stack. */
void pushClone(SlotRange range, int offsetFromStackTop);
- /** Clones values from a dynamic range of the active stack onto this one. */
+ /** Clones values from a dynamic range of this stack onto the top of the active stack. */
void pushCloneIndirect(SlotRange range, int dynamicStackID, int offsetFromStackTop);
private:
@@ -339,7 +339,13 @@
*/
void emitTraceLine(Position pos);
- /** Emits a trace_scope opcode, which alters the SkSL variable-scope depth. */
+ /**
+ * Emits a trace_scope opcode, which alters the SkSL variable-scope depth.
+ * Unlike the other trace ops, trace_scope takes a dedicated mask instead of the trace-scope
+ * mask. Call `pushTraceScopeMask` to synthesize this mask; discard it when you're done.
+ */
+ void pushTraceScopeMask();
+ void discardTraceScopeMask();
void emitTraceScope(int delta);
/** Prepares our position-to-line-offset conversion table (stored in `fLineOffsets`). */
@@ -1331,9 +1337,26 @@
}
}
+void Generator::pushTraceScopeMask() {
+ if (this->shouldWriteTraceOps()) {
+ // Take the intersection of the trace mask and the execution mask. To do this, start with an
+ // all-zero mask, then use select to overwrite those zeros with the trace mask across all
+ // executing lanes. We'll get the trace mask in executing lanes, and zero in dead lanes.
+ fBuilder.push_literal_i(0);
+ fTraceMask->pushClone(/*slots=*/1);
+ fBuilder.select(/*slots=*/1);
+ }
+}
+
+void Generator::discardTraceScopeMask() {
+ if (this->shouldWriteTraceOps()) {
+ this->discardExpression(/*slots=*/1);
+ }
+}
+
void Generator::emitTraceScope(int delta) {
- if (fDebugTrace && fWriteTraceOps) {
- fBuilder.trace_scope(fTraceMask->stackID(), delta);
+ if (this->shouldWriteTraceOps()) {
+ fBuilder.trace_scope(this->currentStack(), delta);
}
}
@@ -1454,6 +1477,7 @@
this->emitTraceLine(b.fPosition);
++fInsideCompoundStatement;
} else {
+ this->pushTraceScopeMask();
this->emitTraceScope(+1);
}
@@ -1467,6 +1491,7 @@
--fInsideCompoundStatement;
} else {
this->emitTraceScope(-1);
+ this->discardTraceScopeMask();
}
return true;
@@ -1559,6 +1584,7 @@
// We want the loop index to disappear at the end of the loop, so wrap the for statement in a
// trace scope.
+ this->pushTraceScopeMask();
this->emitTraceScope(+1);
// If no lanes are active, skip over the loop entirely. This guards against looping forever;
@@ -1613,6 +1639,7 @@
fBuilder.label(loopExitID);
this->emitTraceScope(-1);
+ this->discardTraceScopeMask();
return true;
}
@@ -1632,6 +1659,7 @@
// We want the loop index to disappear at the end of the loop, so wrap the for statement in a
// trace scope.
+ this->pushTraceScopeMask();
this->emitTraceScope(+1);
// Set up a break target.
@@ -1714,6 +1742,7 @@
fBuilder.disableExecutionMaskWrites();
this->emitTraceScope(-1);
+ this->discardTraceScopeMask();
return true;
}
diff --git a/tests/SkRasterPipelineTest.cpp b/tests/SkRasterPipelineTest.cpp
index aaf4a99..2bf0347 100644
--- a/tests/SkRasterPipelineTest.cpp
+++ b/tests/SkRasterPipelineTest.cpp
@@ -1011,7 +1011,7 @@
p.append(SkRasterPipelineOp::trace_scope, &kTraceScope5);
p.run(0,0,N,1);
- REPORTER_ASSERT(r, (trace.fBuffer == TArray<int>{1, -5}));
+ REPORTER_ASSERT(r, (trace.fBuffer == TArray<int>{+1, +4, -5}));
}
DEF_TEST(SkRasterPipeline_CopySlotsMasked, r) {
diff --git a/tests/sksl/runtime/ArrayIndexing.skrp b/tests/sksl/runtime/ArrayIndexing.skrp
index 51ecaf7..57c6117 100644
--- a/tests/sksl/runtime/ArrayIndexing.skrp
+++ b/tests/sksl/runtime/ArrayIndexing.skrp
@@ -1,162 +1,198 @@
- 1. store_device_xy01 $10..13 = DeviceCoords.xy01
- 2. copy_constant $12 = 0x3F000000 (0.5)
- 3. copy_constant $13 = 0x3F000000 (0.5)
- 4. cmpeq_2_floats $10..11 = equal($10..11, $12..13)
- 5. bitwise_and_int $10 &= $11
+ 1. store_device_xy01 $15..18 = DeviceCoords.xy01
+ 2. copy_constant $17 = 0x3F000000 (0.5)
+ 3. copy_constant $18 = 0x3F000000 (0.5)
+ 4. cmpeq_2_floats $15..16 = equal($15..16, $17..18)
+ 5. bitwise_and_int $15 &= $16
6. store_src_rg xy = src.rg
7. init_lane_masks CondMask = LoopMask = RetMask = true
- 8. trace_enter TraceEnter(float4 main(float2 xy)) when $10 is true
- 9. trace_var TraceVar(xy) when $10 is true
- 10. trace_scope TraceScope(+1) when $10 is true
- 11. trace_line TraceLine(38) when $10 is true
- 12. trace_enter TraceEnter(float index_by_literal()) when $10 is true
- 13. trace_scope TraceScope(+1) when $10 is true
- 14. trace_line TraceLine(5) when $10 is true
- 15. copy_constant $0 = u1[0]
- 16. copy_slot_unmasked [index_by_literal].result = $0
- 17. trace_var TraceVar([index_by_literal].result) when $10 is true
- 18. trace_scope TraceScope(-1) when $10 is true
- 19. trace_exit TraceExit(float index_by_literal()) when $10 is true
- 20. copy_slot_unmasked $0 = [index_by_literal].result
- 21. label label 0x00000000
- 22. trace_enter TraceEnter(float index_by_loop()) when $10 is true
- 23. trace_scope TraceScope(+1) when $10 is true
- 24. trace_line TraceLine(10) when $10 is true
- 25. zero_slot_unmasked sum = 0
- 26. trace_var TraceVar(sum) when $10 is true
- 27. trace_scope TraceScope(+1) when $10 is true
- 28. trace_line TraceLine(11) when $10 is true
- 29. copy_constant i = 0x00000003 (4.203895e-45)
- 30. trace_var TraceVar(i) when $10 is true
- 31. label label 0x00000003
- 32. trace_scope TraceScope(+1) when $10 is true
- 33. trace_line TraceLine(12) when $10 is true
- 34. copy_slot_unmasked $1 = sum
- 35. copy_slot_unmasked $7 = i
- 36. copy_from_indirect_uniform_unm $2 = Indirect(u2[0] + $7)
- 37. add_float $1 += $2
- 38. copy_slot_unmasked sum = $1
- 39. trace_var TraceVar(sum) when $10 is true
- 40. trace_scope TraceScope(-1) when $10 is true
- 41. trace_line TraceLine(11) when $10 is true
- 42. copy_slot_unmasked $1 = i
- 43. copy_constant $2 = 0x00000001 (1.401298e-45)
- 44. sub_int $1 -= $2
- 45. copy_slot_unmasked i = $1
- 46. trace_var TraceVar(i) when $10 is true
- 47. zero_slot_unmasked $1 = 0
- 48. copy_slot_unmasked $2 = i
- 49. cmple_int $1 = lessThanEqual($1, $2)
- 50. stack_rewind
- 51. branch_if_no_active_lanes_eq branch -20 (label 3 at #31) if no lanes of $1 == 0x00000000 (0.0)
- 52. label label 0x00000002
- 53. trace_scope TraceScope(-1) when $10 is true
- 54. trace_line TraceLine(14) when $10 is true
- 55. copy_slot_unmasked [index_by_loop].result = sum
- 56. trace_var TraceVar([index_by_loop].result) when $10 is true
- 57. trace_scope TraceScope(-1) when $10 is true
- 58. trace_exit TraceExit(float index_by_loop()) when $10 is true
- 59. copy_slot_unmasked $1 = [index_by_loop].result
- 60. label label 0x00000001
- 61. trace_enter TraceEnter(float index_by_complex_loop()) when $10 is true
- 62. trace_scope TraceScope(+1) when $10 is true
- 63. trace_line TraceLine(19) when $10 is true
- 64. copy_constant prod = 0x3F800000 (1.0)
- 65. trace_var TraceVar(prod) when $10 is true
- 66. trace_scope TraceScope(+1) when $10 is true
- 67. trace_line TraceLine(20) when $10 is true
- 68. zero_slot_unmasked i₁ = 0
- 69. trace_var TraceVar(i₁) when $10 is true
- 70. label label 0x00000006
- 71. trace_scope TraceScope(+1) when $10 is true
- 72. trace_line TraceLine(21) when $10 is true
- 73. copy_slot_unmasked $2 = prod
- 74. copy_slot_unmasked $7 = i₁
- 75. copy_constant $8 = 0x00000002 (2.802597e-45)
- 76. cmplt_int $7 = lessThan($7, $8)
- 77. copy_slot_unmasked $8 = i₁
- 78. zero_slot_unmasked $9 = 0
- 79. mix_int $7 = mix($8, $9, $7)
- 80. copy_from_indirect_uniform_unm $3 = Indirect(u3[0] + $7)
- 81. mul_float $2 *= $3
- 82. copy_slot_unmasked prod = $2
- 83. trace_var TraceVar(prod) when $10 is true
- 84. trace_scope TraceScope(-1) when $10 is true
- 85. trace_line TraceLine(20) when $10 is true
- 86. copy_slot_unmasked $2 = i₁
- 87. copy_constant $3 = 0x00000001 (1.401298e-45)
- 88. add_int $2 += $3
- 89. copy_slot_unmasked i₁ = $2
- 90. trace_var TraceVar(i₁) when $10 is true
- 91. copy_slot_unmasked $2 = i₁
- 92. copy_constant $3 = 0x00000004 (5.605194e-45)
- 93. cmplt_int $2 = lessThan($2, $3)
- 94. stack_rewind
- 95. branch_if_no_active_lanes_eq branch -25 (label 6 at #70) if no lanes of $2 == 0x00000000 (0.0)
- 96. label label 0x00000005
- 97. trace_scope TraceScope(-1) when $10 is true
- 98. trace_line TraceLine(23) when $10 is true
- 99. copy_slot_unmasked [index_by_complex_loop].result = prod
- 100. trace_var TraceVar([index_by_complex_loop].result) when $10 is true
- 101. trace_scope TraceScope(-1) when $10 is true
- 102. trace_exit TraceExit(float index_by_complex_loop()) when $10 is true
- 103. copy_slot_unmasked $2 = [index_by_complex_loop].result
- 104. label label 0x00000004
- 105. trace_enter TraceEnter(float index_out_of_bounds_checked()) when $10 is true
- 106. trace_scope TraceScope(+1) when $10 is true
- 107. trace_line TraceLine(28) when $10 is true
- 108. zero_slot_unmasked sum₁ = 0
- 109. trace_var TraceVar(sum₁) when $10 is true
- 110. trace_scope TraceScope(+1) when $10 is true
- 111. trace_line TraceLine(29) when $10 is true
- 112. copy_constant f = 0xC0133333 (-2.3)
- 113. trace_var TraceVar(f) when $10 is true
- 114. label label 0x0000000A
- 115. trace_scope TraceScope(+1) when $10 is true
- 116. trace_line TraceLine(30) when $10 is true
- 117. store_condition_mask $3 = CondMask
- 118. zero_slot_unmasked $4 = 0
- 119. copy_slot_unmasked $5 = f
- 120. cmplt_float $4 = lessThan($4, $5)
- 121. copy_slot_unmasked $5 = f
- 122. copy_constant $6 = 0x41800000 (16.0)
- 123. cmplt_float $5 = lessThan($5, $6)
- 124. bitwise_and_int $4 &= $5
- 125. merge_condition_mask CondMask = $3 & $4
- 126. trace_scope TraceScope(+1) when $10 is true
- 127. trace_line TraceLine(31) when $10 is true
- 128. copy_slot_unmasked $5 = sum₁
- 129. copy_slot_unmasked $7 = f
- 130. cast_to_int_from_float $7 = FloatToInt($7)
- 131. copy_from_indirect_uniform_unm $6 = Indirect(u4[0] + $7)
- 132. sub_float $5 -= $6
- 133. copy_slot_masked sum₁ = Mask($5)
- 134. trace_var TraceVar(sum₁) when $10 is true
- 135. trace_scope TraceScope(-1) when $10 is true
- 136. load_condition_mask CondMask = $3
- 137. trace_scope TraceScope(-1) when $10 is true
- 138. trace_line TraceLine(29) when $10 is true
- 139. copy_slot_unmasked $3 = f
- 140. copy_constant $4 = 0x406CCCCD (3.7)
- 141. add_float $3 += $4
- 142. copy_slot_unmasked f = $3
- 143. trace_var TraceVar(f) when $10 is true
- 144. copy_slot_unmasked $3 = f
- 145. copy_constant $4 = 0x41880000 (17.0)
- 146. cmplt_float $3 = lessThan($3, $4)
- 147. stack_rewind
- 148. branch_if_no_active_lanes_eq branch -34 (label 10 at #114) if no lanes of $3 == 0x00000000 (0.0)
- 149. label label 0x00000009
- 150. trace_scope TraceScope(-1) when $10 is true
- 151. trace_line TraceLine(34) when $10 is true
- 152. copy_slot_unmasked [index_out_of_bounds_checked].result = sum₁
- 153. trace_var TraceVar([index_out_of_bounds_checked].result) when $10 is true
- 154. trace_scope TraceScope(-1) when $10 is true
- 155. trace_exit TraceExit(float index_out_of_bounds_checked()) when $10 is true
- 156. copy_slot_unmasked $3 = [index_out_of_bounds_checked].result
- 157. label label 0x00000008
- 158. copy_4_slots_unmasked [main].result = $0..3
- 159. trace_var TraceVar([main].result) when $10 is true
- 160. trace_scope TraceScope(-1) when $10 is true
- 161. trace_exit TraceExit(float4 main(float2 xy)) when $10 is true
- 162. load_src src.rgba = [main].result
+ 8. trace_enter TraceEnter(float4 main(float2 xy)) when $15 is true
+ 9. trace_var TraceVar(xy) when $15 is true
+ 10. zero_slot_unmasked $0 = 0
+ 11. copy_slot_unmasked $1 = $15
+ 12. copy_slot_masked $0 = Mask($1)
+ 13. trace_scope TraceScope(+1) when $0 is true
+ 14. trace_line TraceLine(38) when $15 is true
+ 15. trace_enter TraceEnter(float index_by_literal()) when $15 is true
+ 16. zero_slot_unmasked $1 = 0
+ 17. copy_slot_unmasked $2 = $15
+ 18. copy_slot_masked $1 = Mask($2)
+ 19. trace_scope TraceScope(+1) when $1 is true
+ 20. trace_line TraceLine(5) when $15 is true
+ 21. copy_constant $2 = u1[0]
+ 22. copy_slot_unmasked [index_by_literal].result = $2
+ 23. trace_var TraceVar([index_by_literal].result) when $15 is true
+ 24. trace_scope TraceScope(-1) when $1 is true
+ 25. trace_exit TraceExit(float index_by_literal()) when $15 is true
+ 26. copy_slot_unmasked $1 = [index_by_literal].result
+ 27. label label 0x00000000
+ 28. trace_enter TraceEnter(float index_by_loop()) when $15 is true
+ 29. zero_slot_unmasked $2 = 0
+ 30. copy_slot_unmasked $3 = $15
+ 31. copy_slot_masked $2 = Mask($3)
+ 32. trace_scope TraceScope(+1) when $2 is true
+ 33. trace_line TraceLine(10) when $15 is true
+ 34. zero_slot_unmasked sum = 0
+ 35. trace_var TraceVar(sum) when $15 is true
+ 36. zero_slot_unmasked $3 = 0
+ 37. copy_slot_unmasked $4 = $15
+ 38. copy_slot_masked $3 = Mask($4)
+ 39. trace_scope TraceScope(+1) when $3 is true
+ 40. trace_line TraceLine(11) when $15 is true
+ 41. copy_constant i = 0x00000003 (4.203895e-45)
+ 42. trace_var TraceVar(i) when $15 is true
+ 43. label label 0x00000003
+ 44. zero_slot_unmasked $4 = 0
+ 45. copy_slot_unmasked $5 = $15
+ 46. copy_slot_masked $4 = Mask($5)
+ 47. trace_scope TraceScope(+1) when $4 is true
+ 48. trace_line TraceLine(12) when $15 is true
+ 49. copy_slot_unmasked $5 = sum
+ 50. copy_slot_unmasked $12 = i
+ 51. copy_from_indirect_uniform_unm $6 = Indirect(u2[0] + $12)
+ 52. add_float $5 += $6
+ 53. copy_slot_unmasked sum = $5
+ 54. trace_var TraceVar(sum) when $15 is true
+ 55. trace_scope TraceScope(-1) when $4 is true
+ 56. trace_line TraceLine(11) when $15 is true
+ 57. copy_slot_unmasked $4 = i
+ 58. copy_constant $5 = 0x00000001 (1.401298e-45)
+ 59. sub_int $4 -= $5
+ 60. copy_slot_unmasked i = $4
+ 61. trace_var TraceVar(i) when $15 is true
+ 62. zero_slot_unmasked $4 = 0
+ 63. copy_slot_unmasked $5 = i
+ 64. cmple_int $4 = lessThanEqual($4, $5)
+ 65. stack_rewind
+ 66. branch_if_no_active_lanes_eq branch -23 (label 3 at #43) if no lanes of $4 == 0x00000000 (0.0)
+ 67. label label 0x00000002
+ 68. trace_scope TraceScope(-1) when $3 is true
+ 69. trace_line TraceLine(14) when $15 is true
+ 70. copy_slot_unmasked [index_by_loop].result = sum
+ 71. trace_var TraceVar([index_by_loop].result) when $15 is true
+ 72. trace_scope TraceScope(-1) when $2 is true
+ 73. trace_exit TraceExit(float index_by_loop()) when $15 is true
+ 74. copy_slot_unmasked $2 = [index_by_loop].result
+ 75. label label 0x00000001
+ 76. trace_enter TraceEnter(float index_by_complex_loop()) when $15 is true
+ 77. zero_slot_unmasked $3 = 0
+ 78. copy_slot_unmasked $4 = $15
+ 79. copy_slot_masked $3 = Mask($4)
+ 80. trace_scope TraceScope(+1) when $3 is true
+ 81. trace_line TraceLine(19) when $15 is true
+ 82. copy_constant prod = 0x3F800000 (1.0)
+ 83. trace_var TraceVar(prod) when $15 is true
+ 84. zero_slot_unmasked $4 = 0
+ 85. copy_slot_unmasked $5 = $15
+ 86. copy_slot_masked $4 = Mask($5)
+ 87. trace_scope TraceScope(+1) when $4 is true
+ 88. trace_line TraceLine(20) when $15 is true
+ 89. zero_slot_unmasked i₁ = 0
+ 90. trace_var TraceVar(i₁) when $15 is true
+ 91. label label 0x00000006
+ 92. zero_slot_unmasked $5 = 0
+ 93. copy_slot_unmasked $6 = $15
+ 94. copy_slot_masked $5 = Mask($6)
+ 95. trace_scope TraceScope(+1) when $5 is true
+ 96. trace_line TraceLine(21) when $15 is true
+ 97. copy_slot_unmasked $6 = prod
+ 98. copy_slot_unmasked $12 = i₁
+ 99. copy_constant $13 = 0x00000002 (2.802597e-45)
+ 100. cmplt_int $12 = lessThan($12, $13)
+ 101. copy_slot_unmasked $13 = i₁
+ 102. zero_slot_unmasked $14 = 0
+ 103. mix_int $12 = mix($13, $14, $12)
+ 104. copy_from_indirect_uniform_unm $7 = Indirect(u3[0] + $12)
+ 105. mul_float $6 *= $7
+ 106. copy_slot_unmasked prod = $6
+ 107. trace_var TraceVar(prod) when $15 is true
+ 108. trace_scope TraceScope(-1) when $5 is true
+ 109. trace_line TraceLine(20) when $15 is true
+ 110. copy_slot_unmasked $5 = i₁
+ 111. copy_constant $6 = 0x00000001 (1.401298e-45)
+ 112. add_int $5 += $6
+ 113. copy_slot_unmasked i₁ = $5
+ 114. trace_var TraceVar(i₁) when $15 is true
+ 115. copy_slot_unmasked $5 = i₁
+ 116. copy_constant $6 = 0x00000004 (5.605194e-45)
+ 117. cmplt_int $5 = lessThan($5, $6)
+ 118. stack_rewind
+ 119. branch_if_no_active_lanes_eq branch -28 (label 6 at #91) if no lanes of $5 == 0x00000000 (0.0)
+ 120. label label 0x00000005
+ 121. trace_scope TraceScope(-1) when $4 is true
+ 122. trace_line TraceLine(23) when $15 is true
+ 123. copy_slot_unmasked [index_by_complex_loop].result = prod
+ 124. trace_var TraceVar([index_by_complex_loop].result) when $15 is true
+ 125. trace_scope TraceScope(-1) when $3 is true
+ 126. trace_exit TraceExit(float index_by_complex_loop()) when $15 is true
+ 127. copy_slot_unmasked $3 = [index_by_complex_loop].result
+ 128. label label 0x00000004
+ 129. trace_enter TraceEnter(float index_out_of_bounds_checked()) when $15 is true
+ 130. zero_slot_unmasked $4 = 0
+ 131. copy_slot_unmasked $5 = $15
+ 132. copy_slot_masked $4 = Mask($5)
+ 133. trace_scope TraceScope(+1) when $4 is true
+ 134. trace_line TraceLine(28) when $15 is true
+ 135. zero_slot_unmasked sum₁ = 0
+ 136. trace_var TraceVar(sum₁) when $15 is true
+ 137. zero_slot_unmasked $5 = 0
+ 138. copy_slot_unmasked $6 = $15
+ 139. copy_slot_masked $5 = Mask($6)
+ 140. trace_scope TraceScope(+1) when $5 is true
+ 141. trace_line TraceLine(29) when $15 is true
+ 142. copy_constant f = 0xC0133333 (-2.3)
+ 143. trace_var TraceVar(f) when $15 is true
+ 144. label label 0x0000000A
+ 145. zero_slot_unmasked $6 = 0
+ 146. copy_slot_unmasked $7 = $15
+ 147. copy_slot_masked $6 = Mask($7)
+ 148. trace_scope TraceScope(+1) when $6 is true
+ 149. trace_line TraceLine(30) when $15 is true
+ 150. store_condition_mask $7 = CondMask
+ 151. zero_slot_unmasked $8 = 0
+ 152. copy_slot_unmasked $9 = f
+ 153. cmplt_float $8 = lessThan($8, $9)
+ 154. copy_slot_unmasked $9 = f
+ 155. copy_constant $10 = 0x41800000 (16.0)
+ 156. cmplt_float $9 = lessThan($9, $10)
+ 157. bitwise_and_int $8 &= $9
+ 158. merge_condition_mask CondMask = $7 & $8
+ 159. zero_slot_unmasked $9 = 0
+ 160. copy_slot_unmasked $10 = $15
+ 161. copy_slot_masked $9 = Mask($10)
+ 162. trace_scope TraceScope(+1) when $9 is true
+ 163. trace_line TraceLine(31) when $15 is true
+ 164. copy_slot_unmasked $10 = sum₁
+ 165. copy_slot_unmasked $12 = f
+ 166. cast_to_int_from_float $12 = FloatToInt($12)
+ 167. copy_from_indirect_uniform_unm $11 = Indirect(u4[0] + $12)
+ 168. sub_float $10 -= $11
+ 169. copy_slot_masked sum₁ = Mask($10)
+ 170. trace_var TraceVar(sum₁) when $15 is true
+ 171. trace_scope TraceScope(-1) when $9 is true
+ 172. load_condition_mask CondMask = $7
+ 173. trace_scope TraceScope(-1) when $6 is true
+ 174. trace_line TraceLine(29) when $15 is true
+ 175. copy_slot_unmasked $6 = f
+ 176. copy_constant $7 = 0x406CCCCD (3.7)
+ 177. add_float $6 += $7
+ 178. copy_slot_unmasked f = $6
+ 179. trace_var TraceVar(f) when $15 is true
+ 180. copy_slot_unmasked $6 = f
+ 181. copy_constant $7 = 0x41880000 (17.0)
+ 182. cmplt_float $6 = lessThan($6, $7)
+ 183. stack_rewind
+ 184. branch_if_no_active_lanes_eq branch -40 (label 10 at #144) if no lanes of $6 == 0x00000000 (0.0)
+ 185. label label 0x00000009
+ 186. trace_scope TraceScope(-1) when $5 is true
+ 187. trace_line TraceLine(34) when $15 is true
+ 188. copy_slot_unmasked [index_out_of_bounds_checked].result = sum₁
+ 189. trace_var TraceVar([index_out_of_bounds_checked].result) when $15 is true
+ 190. trace_scope TraceScope(-1) when $4 is true
+ 191. trace_exit TraceExit(float index_out_of_bounds_checked()) when $15 is true
+ 192. copy_slot_unmasked $4 = [index_out_of_bounds_checked].result
+ 193. label label 0x00000008
+ 194. copy_4_slots_unmasked [main].result = $1..4
+ 195. trace_var TraceVar([main].result) when $15 is true
+ 196. trace_scope TraceScope(-1) when $0 is true
+ 197. trace_exit TraceExit(float4 main(float2 xy)) when $15 is true
+ 198. load_src src.rgba = [main].result
diff --git a/tests/sksl/runtime/Commutative.skrp b/tests/sksl/runtime/Commutative.skrp
index 0c2e8795..bbc0656 100644
--- a/tests/sksl/runtime/Commutative.skrp
+++ b/tests/sksl/runtime/Commutative.skrp
@@ -1,204 +1,207 @@
- 1. store_device_xy01 $12..15 = DeviceCoords.xy01
- 2. copy_constant $14 = 0x3F000000 (0.5)
- 3. copy_constant $15 = 0x3F000000 (0.5)
- 4. cmpeq_2_floats $12..13 = equal($12..13, $14..15)
- 5. bitwise_and_int $12 &= $13
+ 1. store_device_xy01 $13..16 = DeviceCoords.xy01
+ 2. copy_constant $15 = 0x3F000000 (0.5)
+ 3. copy_constant $16 = 0x3F000000 (0.5)
+ 4. cmpeq_2_floats $13..14 = equal($13..14, $15..16)
+ 5. bitwise_and_int $13 &= $14
6. store_src_rg xy = src.rg
7. init_lane_masks CondMask = LoopMask = RetMask = true
- 8. trace_enter TraceEnter(half4 main(float2 xy)) when $12 is true
- 9. trace_var TraceVar(xy) when $12 is true
- 10. trace_scope TraceScope(+1) when $12 is true
- 11. trace_line TraceLine(10) when $12 is true
- 12. copy_constant ok = 0xFFFFFFFF
- 13. trace_var TraceVar(ok) when $12 is true
- 14. trace_line TraceLine(11) when $12 is true
- 15. copy_constant $0 = testMatrix2x2(0)
- 16. cast_to_int_from_float $0 = FloatToInt($0)
- 17. copy_slot_unmasked a = $0
- 18. trace_var TraceVar(a) when $12 is true
- 19. copy_2_constants $0..1 = testMatrix2x2(0..1)
- 20. swizzle_1 $0 = ($0..1).y
- 21. cast_to_int_from_float $0 = FloatToInt($0)
- 22. copy_slot_unmasked b = $0
- 23. trace_var TraceVar(b) when $12 is true
- 24. trace_line TraceLine(12) when $12 is true
- 25. copy_constant $0 = testMatrix2x2(2)
- 26. copy_slot_unmasked c = $0
- 27. trace_var TraceVar(c) when $12 is true
- 28. copy_2_constants $0..1 = testMatrix2x2(2..3)
- 29. swizzle_1 $0 = ($0..1).y
- 30. copy_slot_unmasked d = $0
- 31. trace_var TraceVar(d) when $12 is true
- 32. trace_line TraceLine(14) when $12 is true
- 33. copy_2_slots_unmasked $0..1 = a, b
- 34. bitwise_and_int $0 &= $1
- 35. copy_slot_unmasked a_and_b = $0
- 36. trace_var TraceVar(a_and_b) when $12 is true
- 37. trace_line TraceLine(15) when $12 is true
- 38. copy_slot_unmasked $0 = b
- 39. copy_slot_unmasked $1 = a
- 40. bitwise_and_int $0 &= $1
- 41. copy_slot_unmasked b_and_a = $0
- 42. trace_var TraceVar(b_and_a) when $12 is true
- 43. trace_line TraceLine(16) when $12 is true
- 44. copy_slot_unmasked $0 = ok
- 45. copy_2_slots_unmasked $1..2 = a_and_b, b_and_a
- 46. cmpeq_int $1 = equal($1, $2)
- 47. bitwise_and_int $0 &= $1
- 48. copy_slot_unmasked ok = $0
- 49. trace_var TraceVar(ok) when $12 is true
- 50. trace_line TraceLine(18) when $12 is true
- 51. copy_2_slots_unmasked $0..1 = a, b
- 52. bitwise_or_int $0 |= $1
- 53. copy_slot_unmasked a_or_b = $0
- 54. trace_var TraceVar(a_or_b) when $12 is true
- 55. trace_line TraceLine(19) when $12 is true
- 56. copy_slot_unmasked $0 = b
- 57. copy_slot_unmasked $1 = a
- 58. bitwise_or_int $0 |= $1
- 59. copy_slot_unmasked b_or_a = $0
- 60. trace_var TraceVar(b_or_a) when $12 is true
- 61. trace_line TraceLine(20) when $12 is true
- 62. copy_slot_unmasked $0 = ok
- 63. copy_2_slots_unmasked $1..2 = a_or_b, b_or_a
- 64. cmpeq_int $1 = equal($1, $2)
- 65. bitwise_and_int $0 &= $1
- 66. copy_slot_unmasked ok = $0
- 67. trace_var TraceVar(ok) when $12 is true
- 68. trace_line TraceLine(22) when $12 is true
- 69. copy_2_slots_unmasked $0..1 = a, b
- 70. bitwise_xor_int $0 ^= $1
- 71. copy_slot_unmasked a_xor_b = $0
- 72. trace_var TraceVar(a_xor_b) when $12 is true
- 73. trace_line TraceLine(23) when $12 is true
- 74. copy_slot_unmasked $0 = b
- 75. copy_slot_unmasked $1 = a
- 76. bitwise_xor_int $0 ^= $1
- 77. copy_slot_unmasked b_xor_a = $0
- 78. trace_var TraceVar(b_xor_a) when $12 is true
- 79. trace_line TraceLine(24) when $12 is true
- 80. copy_slot_unmasked $0 = ok
- 81. copy_2_slots_unmasked $1..2 = a_xor_b, b_xor_a
- 82. cmpeq_int $1 = equal($1, $2)
- 83. bitwise_and_int $0 &= $1
- 84. copy_slot_unmasked ok = $0
- 85. trace_var TraceVar(ok) when $12 is true
- 86. trace_line TraceLine(26) when $12 is true
- 87. copy_2_slots_unmasked $0..1 = a, b
- 88. cmpeq_int $0 = equal($0, $1)
- 89. copy_slot_unmasked a_eq_b = $0
- 90. trace_var TraceVar(a_eq_b) when $12 is true
- 91. trace_line TraceLine(27) when $12 is true
- 92. copy_slot_unmasked $0 = b
- 93. copy_slot_unmasked $1 = a
- 94. cmpeq_int $0 = equal($0, $1)
- 95. copy_slot_unmasked b_eq_a = $0
- 96. trace_var TraceVar(b_eq_a) when $12 is true
- 97. trace_line TraceLine(28) when $12 is true
- 98. copy_slot_unmasked $0 = ok
- 99. copy_2_slots_unmasked $1..2 = a_eq_b, b_eq_a
- 100. cmpeq_int $1 = equal($1, $2)
- 101. bitwise_and_int $0 &= $1
- 102. copy_slot_unmasked ok = $0
- 103. trace_var TraceVar(ok) when $12 is true
- 104. trace_line TraceLine(30) when $12 is true
- 105. copy_2_slots_unmasked $0..1 = a, b
- 106. cmpne_int $0 = notEqual($0, $1)
- 107. copy_slot_unmasked a_neq_b = $0
- 108. trace_var TraceVar(a_neq_b) when $12 is true
- 109. trace_line TraceLine(31) when $12 is true
- 110. copy_slot_unmasked $0 = b
- 111. copy_slot_unmasked $1 = a
- 112. cmpne_int $0 = notEqual($0, $1)
- 113. copy_slot_unmasked b_neq_a = $0
- 114. trace_var TraceVar(b_neq_a) when $12 is true
- 115. trace_line TraceLine(32) when $12 is true
- 116. copy_slot_unmasked $0 = ok
- 117. copy_2_slots_unmasked $1..2 = a_neq_b, b_neq_a
- 118. cmpeq_int $1 = equal($1, $2)
- 119. bitwise_and_int $0 &= $1
- 120. copy_slot_unmasked ok = $0
- 121. trace_var TraceVar(ok) when $12 is true
- 122. trace_line TraceLine(34) when $12 is true
- 123. copy_2_slots_unmasked $0..1 = a, b
- 124. add_int $0 += $1
- 125. copy_slot_unmasked a_add_b = $0
- 126. trace_var TraceVar(a_add_b) when $12 is true
- 127. trace_line TraceLine(35) when $12 is true
- 128. copy_slot_unmasked $0 = b
- 129. copy_slot_unmasked $1 = a
- 130. add_int $0 += $1
- 131. copy_slot_unmasked b_add_a = $0
- 132. trace_var TraceVar(b_add_a) when $12 is true
- 133. trace_line TraceLine(36) when $12 is true
- 134. copy_slot_unmasked $0 = ok
- 135. copy_2_slots_unmasked $1..2 = a_add_b, b_add_a
- 136. cmpeq_int $1 = equal($1, $2)
- 137. bitwise_and_int $0 &= $1
- 138. copy_slot_unmasked ok = $0
- 139. trace_var TraceVar(ok) when $12 is true
- 140. trace_line TraceLine(38) when $12 is true
- 141. copy_2_slots_unmasked $0..1 = c, d
- 142. add_float $0 += $1
- 143. copy_slot_unmasked c_add_d = $0
- 144. trace_var TraceVar(c_add_d) when $12 is true
- 145. trace_line TraceLine(39) when $12 is true
- 146. copy_slot_unmasked $0 = d
- 147. copy_slot_unmasked $1 = c
- 148. add_float $0 += $1
- 149. copy_slot_unmasked d_add_c = $0
- 150. trace_var TraceVar(d_add_c) when $12 is true
- 151. trace_line TraceLine(40) when $12 is true
- 152. copy_slot_unmasked $0 = ok
- 153. copy_2_slots_unmasked $1..2 = c_add_d, d_add_c
- 154. cmpeq_float $1 = equal($1, $2)
- 155. bitwise_and_int $0 &= $1
- 156. copy_slot_unmasked ok = $0
- 157. trace_var TraceVar(ok) when $12 is true
- 158. trace_line TraceLine(42) when $12 is true
- 159. copy_2_slots_unmasked $0..1 = a, b
- 160. mul_int $0 *= $1
- 161. copy_slot_unmasked a_mul_b = $0
- 162. trace_var TraceVar(a_mul_b) when $12 is true
- 163. trace_line TraceLine(43) when $12 is true
- 164. copy_slot_unmasked $0 = b
- 165. copy_slot_unmasked $1 = a
- 166. mul_int $0 *= $1
- 167. copy_slot_unmasked b_mul_a = $0
- 168. trace_var TraceVar(b_mul_a) when $12 is true
- 169. trace_line TraceLine(44) when $12 is true
- 170. copy_slot_unmasked $0 = ok
- 171. copy_2_slots_unmasked $1..2 = a_mul_b, b_mul_a
- 172. cmpeq_int $1 = equal($1, $2)
- 173. bitwise_and_int $0 &= $1
- 174. copy_slot_unmasked ok = $0
- 175. trace_var TraceVar(ok) when $12 is true
- 176. trace_line TraceLine(46) when $12 is true
- 177. copy_2_slots_unmasked $0..1 = c, d
- 178. mul_float $0 *= $1
- 179. copy_slot_unmasked c_mul_d = $0
- 180. trace_var TraceVar(c_mul_d) when $12 is true
- 181. trace_line TraceLine(47) when $12 is true
- 182. copy_slot_unmasked $0 = d
- 183. copy_slot_unmasked $1 = c
- 184. mul_float $0 *= $1
- 185. copy_slot_unmasked d_mul_c = $0
- 186. trace_var TraceVar(d_mul_c) when $12 is true
- 187. trace_line TraceLine(48) when $12 is true
- 188. copy_slot_unmasked $0 = ok
- 189. copy_2_slots_unmasked $1..2 = c_mul_d, d_mul_c
- 190. cmpeq_float $1 = equal($1, $2)
- 191. bitwise_and_int $0 &= $1
- 192. copy_slot_unmasked ok = $0
- 193. trace_var TraceVar(ok) when $12 is true
- 194. trace_line TraceLine(50) when $12 is true
- 195. copy_slot_unmasked $0 = ok
- 196. swizzle_4 $0..3 = ($0..3).xxxx
- 197. copy_4_constants $4..7 = colorRed
- 198. copy_4_constants $8..11 = colorGreen
- 199. mix_4_ints $0..3 = mix($4..7, $8..11, $0..3)
- 200. copy_4_slots_unmasked [main].result = $0..3
- 201. trace_var TraceVar([main].result) when $12 is true
- 202. trace_scope TraceScope(-1) when $12 is true
- 203. trace_exit TraceExit(half4 main(float2 xy)) when $12 is true
- 204. load_src src.rgba = [main].result
+ 8. trace_enter TraceEnter(half4 main(float2 xy)) when $13 is true
+ 9. trace_var TraceVar(xy) when $13 is true
+ 10. zero_slot_unmasked $0 = 0
+ 11. copy_slot_unmasked $1 = $13
+ 12. copy_slot_masked $0 = Mask($1)
+ 13. trace_scope TraceScope(+1) when $0 is true
+ 14. trace_line TraceLine(10) when $13 is true
+ 15. copy_constant ok = 0xFFFFFFFF
+ 16. trace_var TraceVar(ok) when $13 is true
+ 17. trace_line TraceLine(11) when $13 is true
+ 18. copy_constant $1 = testMatrix2x2(0)
+ 19. cast_to_int_from_float $1 = FloatToInt($1)
+ 20. copy_slot_unmasked a = $1
+ 21. trace_var TraceVar(a) when $13 is true
+ 22. copy_2_constants $1..2 = testMatrix2x2(0..1)
+ 23. swizzle_1 $1 = ($1..2).y
+ 24. cast_to_int_from_float $1 = FloatToInt($1)
+ 25. copy_slot_unmasked b = $1
+ 26. trace_var TraceVar(b) when $13 is true
+ 27. trace_line TraceLine(12) when $13 is true
+ 28. copy_constant $1 = testMatrix2x2(2)
+ 29. copy_slot_unmasked c = $1
+ 30. trace_var TraceVar(c) when $13 is true
+ 31. copy_2_constants $1..2 = testMatrix2x2(2..3)
+ 32. swizzle_1 $1 = ($1..2).y
+ 33. copy_slot_unmasked d = $1
+ 34. trace_var TraceVar(d) when $13 is true
+ 35. trace_line TraceLine(14) when $13 is true
+ 36. copy_2_slots_unmasked $1..2 = a, b
+ 37. bitwise_and_int $1 &= $2
+ 38. copy_slot_unmasked a_and_b = $1
+ 39. trace_var TraceVar(a_and_b) when $13 is true
+ 40. trace_line TraceLine(15) when $13 is true
+ 41. copy_slot_unmasked $1 = b
+ 42. copy_slot_unmasked $2 = a
+ 43. bitwise_and_int $1 &= $2
+ 44. copy_slot_unmasked b_and_a = $1
+ 45. trace_var TraceVar(b_and_a) when $13 is true
+ 46. trace_line TraceLine(16) when $13 is true
+ 47. copy_slot_unmasked $1 = ok
+ 48. copy_2_slots_unmasked $2..3 = a_and_b, b_and_a
+ 49. cmpeq_int $2 = equal($2, $3)
+ 50. bitwise_and_int $1 &= $2
+ 51. copy_slot_unmasked ok = $1
+ 52. trace_var TraceVar(ok) when $13 is true
+ 53. trace_line TraceLine(18) when $13 is true
+ 54. copy_2_slots_unmasked $1..2 = a, b
+ 55. bitwise_or_int $1 |= $2
+ 56. copy_slot_unmasked a_or_b = $1
+ 57. trace_var TraceVar(a_or_b) when $13 is true
+ 58. trace_line TraceLine(19) when $13 is true
+ 59. copy_slot_unmasked $1 = b
+ 60. copy_slot_unmasked $2 = a
+ 61. bitwise_or_int $1 |= $2
+ 62. copy_slot_unmasked b_or_a = $1
+ 63. trace_var TraceVar(b_or_a) when $13 is true
+ 64. trace_line TraceLine(20) when $13 is true
+ 65. copy_slot_unmasked $1 = ok
+ 66. copy_2_slots_unmasked $2..3 = a_or_b, b_or_a
+ 67. cmpeq_int $2 = equal($2, $3)
+ 68. bitwise_and_int $1 &= $2
+ 69. copy_slot_unmasked ok = $1
+ 70. trace_var TraceVar(ok) when $13 is true
+ 71. trace_line TraceLine(22) when $13 is true
+ 72. copy_2_slots_unmasked $1..2 = a, b
+ 73. bitwise_xor_int $1 ^= $2
+ 74. copy_slot_unmasked a_xor_b = $1
+ 75. trace_var TraceVar(a_xor_b) when $13 is true
+ 76. trace_line TraceLine(23) when $13 is true
+ 77. copy_slot_unmasked $1 = b
+ 78. copy_slot_unmasked $2 = a
+ 79. bitwise_xor_int $1 ^= $2
+ 80. copy_slot_unmasked b_xor_a = $1
+ 81. trace_var TraceVar(b_xor_a) when $13 is true
+ 82. trace_line TraceLine(24) when $13 is true
+ 83. copy_slot_unmasked $1 = ok
+ 84. copy_2_slots_unmasked $2..3 = a_xor_b, b_xor_a
+ 85. cmpeq_int $2 = equal($2, $3)
+ 86. bitwise_and_int $1 &= $2
+ 87. copy_slot_unmasked ok = $1
+ 88. trace_var TraceVar(ok) when $13 is true
+ 89. trace_line TraceLine(26) when $13 is true
+ 90. copy_2_slots_unmasked $1..2 = a, b
+ 91. cmpeq_int $1 = equal($1, $2)
+ 92. copy_slot_unmasked a_eq_b = $1
+ 93. trace_var TraceVar(a_eq_b) when $13 is true
+ 94. trace_line TraceLine(27) when $13 is true
+ 95. copy_slot_unmasked $1 = b
+ 96. copy_slot_unmasked $2 = a
+ 97. cmpeq_int $1 = equal($1, $2)
+ 98. copy_slot_unmasked b_eq_a = $1
+ 99. trace_var TraceVar(b_eq_a) when $13 is true
+ 100. trace_line TraceLine(28) when $13 is true
+ 101. copy_slot_unmasked $1 = ok
+ 102. copy_2_slots_unmasked $2..3 = a_eq_b, b_eq_a
+ 103. cmpeq_int $2 = equal($2, $3)
+ 104. bitwise_and_int $1 &= $2
+ 105. copy_slot_unmasked ok = $1
+ 106. trace_var TraceVar(ok) when $13 is true
+ 107. trace_line TraceLine(30) when $13 is true
+ 108. copy_2_slots_unmasked $1..2 = a, b
+ 109. cmpne_int $1 = notEqual($1, $2)
+ 110. copy_slot_unmasked a_neq_b = $1
+ 111. trace_var TraceVar(a_neq_b) when $13 is true
+ 112. trace_line TraceLine(31) when $13 is true
+ 113. copy_slot_unmasked $1 = b
+ 114. copy_slot_unmasked $2 = a
+ 115. cmpne_int $1 = notEqual($1, $2)
+ 116. copy_slot_unmasked b_neq_a = $1
+ 117. trace_var TraceVar(b_neq_a) when $13 is true
+ 118. trace_line TraceLine(32) when $13 is true
+ 119. copy_slot_unmasked $1 = ok
+ 120. copy_2_slots_unmasked $2..3 = a_neq_b, b_neq_a
+ 121. cmpeq_int $2 = equal($2, $3)
+ 122. bitwise_and_int $1 &= $2
+ 123. copy_slot_unmasked ok = $1
+ 124. trace_var TraceVar(ok) when $13 is true
+ 125. trace_line TraceLine(34) when $13 is true
+ 126. copy_2_slots_unmasked $1..2 = a, b
+ 127. add_int $1 += $2
+ 128. copy_slot_unmasked a_add_b = $1
+ 129. trace_var TraceVar(a_add_b) when $13 is true
+ 130. trace_line TraceLine(35) when $13 is true
+ 131. copy_slot_unmasked $1 = b
+ 132. copy_slot_unmasked $2 = a
+ 133. add_int $1 += $2
+ 134. copy_slot_unmasked b_add_a = $1
+ 135. trace_var TraceVar(b_add_a) when $13 is true
+ 136. trace_line TraceLine(36) when $13 is true
+ 137. copy_slot_unmasked $1 = ok
+ 138. copy_2_slots_unmasked $2..3 = a_add_b, b_add_a
+ 139. cmpeq_int $2 = equal($2, $3)
+ 140. bitwise_and_int $1 &= $2
+ 141. copy_slot_unmasked ok = $1
+ 142. trace_var TraceVar(ok) when $13 is true
+ 143. trace_line TraceLine(38) when $13 is true
+ 144. copy_2_slots_unmasked $1..2 = c, d
+ 145. add_float $1 += $2
+ 146. copy_slot_unmasked c_add_d = $1
+ 147. trace_var TraceVar(c_add_d) when $13 is true
+ 148. trace_line TraceLine(39) when $13 is true
+ 149. copy_slot_unmasked $1 = d
+ 150. copy_slot_unmasked $2 = c
+ 151. add_float $1 += $2
+ 152. copy_slot_unmasked d_add_c = $1
+ 153. trace_var TraceVar(d_add_c) when $13 is true
+ 154. trace_line TraceLine(40) when $13 is true
+ 155. copy_slot_unmasked $1 = ok
+ 156. copy_2_slots_unmasked $2..3 = c_add_d, d_add_c
+ 157. cmpeq_float $2 = equal($2, $3)
+ 158. bitwise_and_int $1 &= $2
+ 159. copy_slot_unmasked ok = $1
+ 160. trace_var TraceVar(ok) when $13 is true
+ 161. trace_line TraceLine(42) when $13 is true
+ 162. copy_2_slots_unmasked $1..2 = a, b
+ 163. mul_int $1 *= $2
+ 164. copy_slot_unmasked a_mul_b = $1
+ 165. trace_var TraceVar(a_mul_b) when $13 is true
+ 166. trace_line TraceLine(43) when $13 is true
+ 167. copy_slot_unmasked $1 = b
+ 168. copy_slot_unmasked $2 = a
+ 169. mul_int $1 *= $2
+ 170. copy_slot_unmasked b_mul_a = $1
+ 171. trace_var TraceVar(b_mul_a) when $13 is true
+ 172. trace_line TraceLine(44) when $13 is true
+ 173. copy_slot_unmasked $1 = ok
+ 174. copy_2_slots_unmasked $2..3 = a_mul_b, b_mul_a
+ 175. cmpeq_int $2 = equal($2, $3)
+ 176. bitwise_and_int $1 &= $2
+ 177. copy_slot_unmasked ok = $1
+ 178. trace_var TraceVar(ok) when $13 is true
+ 179. trace_line TraceLine(46) when $13 is true
+ 180. copy_2_slots_unmasked $1..2 = c, d
+ 181. mul_float $1 *= $2
+ 182. copy_slot_unmasked c_mul_d = $1
+ 183. trace_var TraceVar(c_mul_d) when $13 is true
+ 184. trace_line TraceLine(47) when $13 is true
+ 185. copy_slot_unmasked $1 = d
+ 186. copy_slot_unmasked $2 = c
+ 187. mul_float $1 *= $2
+ 188. copy_slot_unmasked d_mul_c = $1
+ 189. trace_var TraceVar(d_mul_c) when $13 is true
+ 190. trace_line TraceLine(48) when $13 is true
+ 191. copy_slot_unmasked $1 = ok
+ 192. copy_2_slots_unmasked $2..3 = c_mul_d, d_mul_c
+ 193. cmpeq_float $2 = equal($2, $3)
+ 194. bitwise_and_int $1 &= $2
+ 195. copy_slot_unmasked ok = $1
+ 196. trace_var TraceVar(ok) when $13 is true
+ 197. trace_line TraceLine(50) when $13 is true
+ 198. copy_slot_unmasked $1 = ok
+ 199. swizzle_4 $1..4 = ($1..4).xxxx
+ 200. copy_4_constants $5..8 = colorRed
+ 201. copy_4_constants $9..12 = colorGreen
+ 202. mix_4_ints $1..4 = mix($5..8, $9..12, $1..4)
+ 203. copy_4_slots_unmasked [main].result = $1..4
+ 204. trace_var TraceVar([main].result) when $13 is true
+ 205. trace_scope TraceScope(-1) when $0 is true
+ 206. trace_exit TraceExit(half4 main(float2 xy)) when $13 is true
+ 207. load_src src.rgba = [main].result
diff --git a/tests/sksl/runtime/GlobalVariables.skrp b/tests/sksl/runtime/GlobalVariables.skrp
index 1abedd9..872dc0b4 100644
--- a/tests/sksl/runtime/GlobalVariables.skrp
+++ b/tests/sksl/runtime/GlobalVariables.skrp
@@ -1,35 +1,41 @@
- 1. store_device_xy01 $1..4 = DeviceCoords.xy01
- 2. copy_constant $3 = 0x3F000000 (0.5)
- 3. copy_constant $4 = 0x3F000000 (0.5)
- 4. cmpeq_2_floats $1..2 = equal($1..2, $3..4)
- 5. bitwise_and_int $1 &= $2
+ 1. store_device_xy01 $3..6 = DeviceCoords.xy01
+ 2. copy_constant $5 = 0x3F000000 (0.5)
+ 3. copy_constant $6 = 0x3F000000 (0.5)
+ 4. cmpeq_2_floats $3..4 = equal($3..4, $5..6)
+ 5. bitwise_and_int $3 &= $4
6. store_src_rg xy = src.rg
7. init_lane_masks CondMask = LoopMask = RetMask = true
8. copy_constant gInitialized = 0xBF800000 (-1.0)
- 9. trace_var TraceVar(gInitialized) when $1 is true
+ 9. trace_var TraceVar(gInitialized) when $3 is true
10. copy_constant gInitializedFromOther = 0x3F800000 (1.0)
- 11. trace_var TraceVar(gInitializedFromOther) when $1 is true
+ 11. trace_var TraceVar(gInitializedFromOther) when $3 is true
12. zero_slot_unmasked gUninitialized = 0
- 13. trace_var TraceVar(gUninitialized) when $1 is true
- 14. trace_enter TraceEnter(float4 main(float2 xy)) when $1 is true
- 15. trace_var TraceVar(xy) when $1 is true
- 16. trace_scope TraceScope(+1) when $1 is true
- 17. trace_line TraceLine(12) when $1 is true
- 18. trace_enter TraceEnter(void init_globals()) when $1 is true
- 19. trace_scope TraceScope(+1) when $1 is true
- 20. trace_line TraceLine(8) when $1 is true
- 21. copy_constant $0 = 0x3F800000 (1.0)
- 22. copy_slot_unmasked gUninitialized = $0
- 23. trace_var TraceVar(gUninitialized) when $1 is true
- 24. trace_scope TraceScope(-1) when $1 is true
- 25. trace_exit TraceExit(void init_globals()) when $1 is true
- 26. label label 0x00000000
- 27. trace_line TraceLine(13) when $1 is true
- 28. zero_slot_unmasked [main].result(0) = 0
- 29. copy_slot_unmasked [main].result(1) = gInitializedFromOther
- 30. zero_slot_unmasked [main].result(2) = 0
- 31. copy_slot_unmasked [main].result(3) = gUninitialized
- 32. trace_var TraceVar([main].result) when $1 is true
- 33. trace_scope TraceScope(-1) when $1 is true
- 34. trace_exit TraceExit(float4 main(float2 xy)) when $1 is true
- 35. load_src src.rgba = [main].result
+ 13. trace_var TraceVar(gUninitialized) when $3 is true
+ 14. trace_enter TraceEnter(float4 main(float2 xy)) when $3 is true
+ 15. trace_var TraceVar(xy) when $3 is true
+ 16. zero_slot_unmasked $0 = 0
+ 17. copy_slot_unmasked $1 = $3
+ 18. copy_slot_masked $0 = Mask($1)
+ 19. trace_scope TraceScope(+1) when $0 is true
+ 20. trace_line TraceLine(12) when $3 is true
+ 21. trace_enter TraceEnter(void init_globals()) when $3 is true
+ 22. zero_slot_unmasked $1 = 0
+ 23. copy_slot_unmasked $2 = $3
+ 24. copy_slot_masked $1 = Mask($2)
+ 25. trace_scope TraceScope(+1) when $1 is true
+ 26. trace_line TraceLine(8) when $3 is true
+ 27. copy_constant $2 = 0x3F800000 (1.0)
+ 28. copy_slot_unmasked gUninitialized = $2
+ 29. trace_var TraceVar(gUninitialized) when $3 is true
+ 30. trace_scope TraceScope(-1) when $1 is true
+ 31. trace_exit TraceExit(void init_globals()) when $3 is true
+ 32. label label 0x00000000
+ 33. trace_line TraceLine(13) when $3 is true
+ 34. zero_slot_unmasked [main].result(0) = 0
+ 35. copy_slot_unmasked [main].result(1) = gInitializedFromOther
+ 36. zero_slot_unmasked [main].result(2) = 0
+ 37. copy_slot_unmasked [main].result(3) = gUninitialized
+ 38. trace_var TraceVar([main].result) when $3 is true
+ 39. trace_scope TraceScope(-1) when $0 is true
+ 40. trace_exit TraceExit(float4 main(float2 xy)) when $3 is true
+ 41. load_src src.rgba = [main].result
diff --git a/tests/sksl/runtime/LoopFloat.skrp b/tests/sksl/runtime/LoopFloat.skrp
index d9c0b23..036bd16 100644
--- a/tests/sksl/runtime/LoopFloat.skrp
+++ b/tests/sksl/runtime/LoopFloat.skrp
@@ -1,605 +1,707 @@
- 1. store_device_xy01 $28..31 = DeviceCoords.xy01
- 2. copy_constant $30 = 0x3F000000 (0.5)
- 3. copy_constant $31 = 0x3F000000 (0.5)
- 4. cmpeq_2_floats $28..29 = equal($28..29, $30..31)
- 5. bitwise_and_int $28 &= $29
+ 1. store_device_xy01 $40..43 = DeviceCoords.xy01
+ 2. copy_constant $42 = 0x3F000000 (0.5)
+ 3. copy_constant $43 = 0x3F000000 (0.5)
+ 4. cmpeq_2_floats $40..41 = equal($40..41, $42..43)
+ 5. bitwise_and_int $40 &= $41
6. store_src_rg pos = src.rg
7. init_lane_masks CondMask = LoopMask = RetMask = true
8. zero_slot_unmasked kZero = 0
- 9. trace_var TraceVar(kZero) when $28 is true
+ 9. trace_var TraceVar(kZero) when $40 is true
10. copy_constant kTen = 0x41200000 (10.0)
- 11. trace_var TraceVar(kTen) when $28 is true
- 12. trace_enter TraceEnter(half4 main(float2 pos)) when $28 is true
- 13. trace_var TraceVar(pos) when $28 is true
- 14. trace_scope TraceScope(+1) when $28 is true
- 15. trace_line TraceLine(116) when $28 is true
- 16. copy_slot_unmasked $6 = pos(0)
- 17. copy_constant $7 = colorGreen(1)
- 18. max_float $6 = max($6, $7)
- 19. copy_constant $7 = colorGreen(3)
- 20. min_float $6 = min($6, $7)
- 21. copy_constant $7 = 0x40A00000 (5.0)
- 22. mul_float $6 *= $7
- 23. copy_slot_unmasked five = $6
- 24. trace_var TraceVar(five) when $28 is true
- 25. trace_line TraceLine(117) when $28 is true
- 26. store_condition_mask $42 = CondMask
- 27. store_condition_mask $52 = CondMask
- 28. store_condition_mask $32 = CondMask
- 29. store_condition_mask $78 = CondMask
- 30. store_condition_mask $62 = CondMask
- 31. store_condition_mask $24 = CondMask
- 32. store_condition_mask $72 = CondMask
- 33. store_condition_mask $18 = CondMask
- 34. store_condition_mask $0 = CondMask
- 35. branch_if_no_lanes_active branch_if_no_lanes_active +54 (label 10 at #89)
- 36. copy_slot_unmasked five₁ = five
- 37. trace_var TraceVar(five₁) when $28 is true
- 38. trace_enter TraceEnter(float return_loop(float five)) when $28 is true
- 39. store_return_mask $1 = RetMask
- 40. trace_scope TraceScope(+1) when $28 is true
- 41. trace_scope TraceScope(+1) when $28 is true
- 42. trace_line TraceLine(8) when $28 is true
- 43. copy_slot_unmasked i = kZero
- 44. trace_var TraceVar(i) when $28 is true
- 45. store_loop_mask $2 = LoopMask
- 46. jump jump +24 (label 12 at #70)
- 47. label label 0x0000000D
- 48. trace_scope TraceScope(+1) when $28 is true
- 49. trace_line TraceLine(9) when $28 is true
- 50. store_condition_mask $3 = CondMask
- 51. copy_slot_unmasked $4 = i
- 52. copy_slot_unmasked $5 = five₁
- 53. cmpeq_float $4 = equal($4, $5)
- 54. merge_condition_mask CondMask = $3 & $4
- 55. trace_scope TraceScope(+1) when $28 is true
- 56. trace_line TraceLine(9) when $28 is true
- 57. copy_slot_unmasked $5 = i
- 58. copy_slot_masked [return_loop].result = Mask($5)
- 59. trace_var TraceVar([return_loop].result) when $28 is true
- 60. mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask)
- 61. trace_scope TraceScope(-1) when $28 is true
- 62. load_condition_mask CondMask = $3
- 63. trace_scope TraceScope(-1) when $28 is true
- 64. trace_line TraceLine(8) when $28 is true
- 65. copy_slot_unmasked $3 = i
- 66. copy_constant $4 = 0x3F800000 (1.0)
- 67. add_float $3 += $4
- 68. copy_slot_masked i = Mask($3)
- 69. trace_var TraceVar(i) when $28 is true
- 70. label label 0x0000000C
- 71. copy_slot_unmasked $3 = i
- 72. copy_constant $4 = 0x41200000 (10.0)
- 73. cmplt_float $3 = lessThan($3, $4)
- 74. merge_loop_mask LoopMask &= $3
- 75. stack_rewind
- 76. branch_if_any_lanes_active branch_if_any_lanes_active -29 (label 13 at #47)
- 77. label label 0x0000000B
- 78. load_loop_mask LoopMask = $2
- 79. trace_scope TraceScope(-1) when $28 is true
- 80. trace_line TraceLine(11) when $28 is true
- 81. zero_slot_unmasked $2 = 0
- 82. copy_slot_masked [return_loop].result = Mask($2)
- 83. trace_var TraceVar([return_loop].result) when $28 is true
- 84. mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask)
- 85. trace_scope TraceScope(-1) when $28 is true
- 86. load_return_mask RetMask = $1
- 87. trace_exit TraceExit(float return_loop(float five)) when $28 is true
- 88. copy_slot_unmasked $1 = [return_loop].result
- 89. label label 0x0000000A
- 90. copy_constant $2 = 0x40A00000 (5.0)
- 91. cmpeq_float $1 = equal($1, $2)
- 92. zero_slot_unmasked $19 = 0
- 93. merge_condition_mask CondMask = $0 & $1
- 94. branch_if_no_lanes_active branch_if_no_lanes_active +64 (label 9 at #158)
- 95. copy_slot_unmasked five₂ = five
- 96. trace_var TraceVar(five₂) when $28 is true
- 97. trace_enter TraceEnter(float continue_loop(float five)) when $28 is true
- 98. trace_scope TraceScope(+1) when $28 is true
- 99. trace_line TraceLine(17) when $28 is true
- 100. zero_slot_unmasked sum = 0
- 101. trace_var TraceVar(sum) when $28 is true
- 102. trace_scope TraceScope(+1) when $28 is true
- 103. trace_line TraceLine(18) when $28 is true
- 104. zero_slot_unmasked i₁ = 0
- 105. trace_var TraceVar(i₁) when $28 is true
- 106. store_loop_mask $20 = LoopMask
- 107. jump jump +30 (label 16 at #137)
- 108. label label 0x00000011
- 109. zero_slot_unmasked $88 = 0
- 110. trace_scope TraceScope(+1) when $28 is true
- 111. trace_line TraceLine(19) when $28 is true
- 112. store_condition_mask $21 = CondMask
- 113. copy_slot_unmasked $22 = i₁
- 114. copy_slot_unmasked $23 = five₂
- 115. cmplt_float $22 = lessThan($22, $23)
- 116. merge_condition_mask CondMask = $21 & $22
- 117. trace_scope TraceScope(+1) when $28 is true
- 118. trace_line TraceLine(19) when $28 is true
- 119. copy_constant $89 = 0xFFFFFFFF
- 120. copy_slot_masked $88 = Mask($89)
- 121. mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask)
- 122. trace_scope TraceScope(-1) when $28 is true
- 123. load_condition_mask CondMask = $21
- 124. trace_line TraceLine(20) when $28 is true
- 125. copy_2_slots_unmasked $21..22 = sum, i₁
- 126. add_float $21 += $22
- 127. copy_slot_masked sum = Mask($21)
- 128. trace_var TraceVar(sum) when $28 is true
- 129. trace_scope TraceScope(-1) when $28 is true
- 130. reenable_loop_mask LoopMask |= $88
- 131. trace_line TraceLine(18) when $28 is true
- 132. copy_slot_unmasked $21 = i₁
- 133. copy_constant $22 = 0x3F800000 (1.0)
- 134. add_float $21 += $22
- 135. copy_slot_masked i₁ = Mask($21)
- 136. trace_var TraceVar(i₁) when $28 is true
- 137. label label 0x00000010
- 138. copy_slot_unmasked $21 = i₁
- 139. copy_slot_unmasked $22 = kTen
- 140. cmplt_float $21 = lessThan($21, $22)
- 141. merge_loop_mask LoopMask &= $21
- 142. stack_rewind
- 143. branch_if_any_lanes_active branch_if_any_lanes_active -35 (label 17 at #108)
- 144. label label 0x0000000F
- 145. load_loop_mask LoopMask = $20
- 146. trace_scope TraceScope(-1) when $28 is true
- 147. trace_line TraceLine(22) when $28 is true
- 148. copy_slot_unmasked $20 = sum
- 149. copy_slot_masked [continue_loop].result = Mask($20)
- 150. trace_var TraceVar([continue_loop].result) when $28 is true
- 151. trace_scope TraceScope(-1) when $28 is true
- 152. trace_exit TraceExit(float continue_loop(float five)) when $28 is true
- 153. copy_slot_unmasked $20 = [continue_loop].result
- 154. label label 0x0000000E
- 155. copy_constant $21 = 0x420C0000 (35.0)
- 156. cmpeq_float $20 = equal($20, $21)
- 157. copy_slot_masked $19 = Mask($20)
- 158. label label 0x00000009
- 159. load_condition_mask CondMask = $0
- 160. zero_slot_unmasked $73 = 0
- 161. merge_condition_mask CondMask = $18 & $19
- 162. branch_if_no_lanes_active branch_if_no_lanes_active +65 (label 8 at #227)
- 163. copy_slot_unmasked five₃ = five
- 164. trace_var TraceVar(five₃) when $28 is true
- 165. trace_enter TraceEnter(float break_loop(float five)) when $28 is true
- 166. trace_scope TraceScope(+1) when $28 is true
- 167. trace_line TraceLine(27) when $28 is true
- 168. zero_slot_unmasked sum₁ = 0
- 169. trace_var TraceVar(sum₁) when $28 is true
- 170. trace_line TraceLine(28) when $28 is true
- 171. copy_constant kOne = 0x3F800000 (1.0)
- 172. trace_var TraceVar(kOne) when $28 is true
- 173. trace_scope TraceScope(+1) when $28 is true
- 174. trace_line TraceLine(29) when $28 is true
- 175. zero_slot_unmasked i₂ = 0
- 176. trace_var TraceVar(i₂) when $28 is true
- 177. store_loop_mask $74 = LoopMask
- 178. jump jump +28 (label 20 at #206)
- 179. label label 0x00000015
- 180. trace_scope TraceScope(+1) when $28 is true
- 181. trace_line TraceLine(30) when $28 is true
- 182. store_condition_mask $75 = CondMask
- 183. copy_slot_unmasked $76 = five₃
- 184. copy_slot_unmasked $77 = i₂
- 185. cmplt_float $76 = lessThan($76, $77)
- 186. merge_condition_mask CondMask = $75 & $76
- 187. trace_scope TraceScope(+1) when $28 is true
- 188. trace_line TraceLine(30) when $28 is true
- 189. branch_if_all_lanes_active branch_if_all_lanes_active +24 (label 19 at #213)
- 190. mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask)
- 191. trace_scope TraceScope(-1) when $28 is true
- 192. load_condition_mask CondMask = $75
- 193. trace_line TraceLine(31) when $28 is true
- 194. copy_slot_unmasked $75 = sum₁
- 195. copy_slot_unmasked $76 = i₂
- 196. add_float $75 += $76
- 197. copy_slot_masked sum₁ = Mask($75)
- 198. trace_var TraceVar(sum₁) when $28 is true
- 199. trace_scope TraceScope(-1) when $28 is true
- 200. trace_line TraceLine(29) when $28 is true
- 201. copy_slot_unmasked $75 = i₂
- 202. copy_slot_unmasked $76 = kOne
- 203. add_float $75 += $76
- 204. copy_slot_masked i₂ = Mask($75)
- 205. trace_var TraceVar(i₂) when $28 is true
- 206. label label 0x00000014
- 207. copy_slot_unmasked $75 = i₂
- 208. copy_constant $76 = 0x41200000 (10.0)
- 209. cmplt_float $75 = lessThan($75, $76)
- 210. merge_loop_mask LoopMask &= $75
- 211. stack_rewind
- 212. branch_if_any_lanes_active branch_if_any_lanes_active -33 (label 21 at #179)
- 213. label label 0x00000013
- 214. load_loop_mask LoopMask = $74
- 215. trace_scope TraceScope(-1) when $28 is true
- 216. trace_line TraceLine(33) when $28 is true
- 217. copy_slot_unmasked $74 = sum₁
- 218. copy_slot_masked [break_loop].result = Mask($74)
- 219. trace_var TraceVar([break_loop].result) when $28 is true
- 220. trace_scope TraceScope(-1) when $28 is true
- 221. trace_exit TraceExit(float break_loop(float five)) when $28 is true
- 222. copy_slot_unmasked $74 = [break_loop].result
- 223. label label 0x00000012
- 224. copy_constant $75 = 0x41700000 (15.0)
- 225. cmpeq_float $74 = equal($74, $75)
- 226. copy_slot_masked $73 = Mask($74)
- 227. label label 0x00000008
- 228. load_condition_mask CondMask = $18
- 229. zero_slot_unmasked $25 = 0
- 230. merge_condition_mask CondMask = $72 & $73
- 231. branch_if_no_lanes_active branch_if_no_lanes_active +46 (label 7 at #277)
- 232. trace_enter TraceEnter(float float_loop()) when $28 is true
- 233. trace_scope TraceScope(+1) when $28 is true
- 234. trace_line TraceLine(38) when $28 is true
- 235. zero_slot_unmasked sum₂ = 0
- 236. trace_var TraceVar(sum₂) when $28 is true
- 237. trace_scope TraceScope(+1) when $28 is true
- 238. branch_if_no_lanes_active branch_if_no_lanes_active +23 (label 23 at #261)
- 239. trace_line TraceLine(39) when $28 is true
- 240. copy_constant i₃ = 0x3DFBE76D (0.123)
- 241. trace_var TraceVar(i₃) when $28 is true
- 242. label label 0x00000018
- 243. trace_scope TraceScope(+1) when $28 is true
- 244. trace_line TraceLine(40) when $28 is true
- 245. copy_2_slots_unmasked $26..27 = sum₂, i₃
- 246. add_float $26 += $27
- 247. copy_slot_masked sum₂ = Mask($26)
- 248. trace_var TraceVar(sum₂) when $28 is true
- 249. trace_scope TraceScope(-1) when $28 is true
- 250. trace_line TraceLine(39) when $28 is true
- 251. copy_slot_unmasked $26 = i₃
- 252. copy_constant $27 = 0x3DE353F8 (0.111)
- 253. add_float $26 += $27
- 254. copy_slot_masked i₃ = Mask($26)
- 255. trace_var TraceVar(i₃) when $28 is true
- 256. copy_slot_unmasked $26 = i₃
- 257. copy_constant $27 = 0x3F19999A (0.6)
- 258. cmplt_float $26 = lessThan($26, $27)
- 259. stack_rewind
- 260. branch_if_no_active_lanes_eq branch -18 (label 24 at #242) if no lanes of $26 == 0x00000000 (0.0)
- 261. label label 0x00000017
- 262. trace_scope TraceScope(-1) when $28 is true
- 263. trace_line TraceLine(42) when $28 is true
- 264. copy_slot_unmasked $26 = sum₂
- 265. copy_constant $27 = 0x3FDCCCCD (1.725)
- 266. sub_float $26 -= $27
- 267. copy_slot_masked [float_loop].result = Mask($26)
- 268. trace_var TraceVar([float_loop].result) when $28 is true
- 269. trace_scope TraceScope(-1) when $28 is true
- 270. trace_exit TraceExit(float float_loop()) when $28 is true
- 271. copy_slot_unmasked $26 = [float_loop].result
- 272. label label 0x00000016
- 273. abs_float $26 = abs($26)
- 274. copy_constant $27 = 0x3CCCCCCD (0.025)
- 275. cmplt_float $26 = lessThan($26, $27)
- 276. copy_slot_masked $25 = Mask($26)
- 277. label label 0x00000007
- 278. load_condition_mask CondMask = $72
- 279. zero_slot_unmasked $63 = 0
- 280. merge_condition_mask CondMask = $24 & $25
- 281. branch_if_no_lanes_active branch_if_no_lanes_active +51 (label 6 at #332)
- 282. trace_enter TraceEnter(bool loop_operator_le()) when $28 is true
- 283. trace_scope TraceScope(+1) when $28 is true
- 284. trace_line TraceLine(47) when $28 is true
- 285. trace_line TraceLine(48) when $28 is true
- 286. trace_line TraceLine(50) when $28 is true
- 287. copy_constant $64 = 0x41100000 (9.0)
- 288. swizzle_4 $64..67 = ($64..67).xxxx
- 289. copy_4_slots_unmasked result = $64..67
- 290. trace_var TraceVar(result) when $28 is true
- 291. trace_scope TraceScope(+1) when $28 is true
- 292. branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 26 at #314)
- 293. trace_line TraceLine(51) when $28 is true
- 294. copy_constant i₄ = 0x3F800000 (1.0)
- 295. trace_var TraceVar(i₄) when $28 is true
- 296. label label 0x0000001B
- 297. trace_scope TraceScope(+1) when $28 is true
- 298. trace_line TraceLine(52) when $28 is true
- 299. copy_4_slots_unmasked $64..67 = result(1..3), i₄
- 300. copy_4_slots_masked result = Mask($64..67)
- 301. trace_var TraceVar(result) when $28 is true
- 302. trace_scope TraceScope(-1) when $28 is true
- 303. trace_line TraceLine(51) when $28 is true
- 304. copy_slot_unmasked $64 = i₄
- 305. copy_constant $65 = 0x3F800000 (1.0)
- 306. add_float $64 += $65
- 307. copy_slot_masked i₄ = Mask($64)
- 308. trace_var TraceVar(i₄) when $28 is true
- 309. copy_slot_unmasked $64 = i₄
- 310. copy_constant $65 = 0x40400000 (3.0)
- 311. cmple_float $64 = lessThanEqual($64, $65)
- 312. stack_rewind
- 313. branch_if_no_active_lanes_eq branch -17 (label 27 at #296) if no lanes of $64 == 0x00000000 (0.0)
- 314. label label 0x0000001A
- 315. trace_scope TraceScope(-1) when $28 is true
- 316. trace_line TraceLine(54) when $28 is true
- 317. copy_4_slots_unmasked $64..67 = result
- 318. copy_constant $68 = 0x41100000 (9.0)
- 319. copy_constant $69 = 0x3F800000 (1.0)
- 320. copy_constant $70 = 0x40000000 (2.0)
- 321. copy_constant $71 = 0x40400000 (3.0)
- 322. cmpeq_4_floats $64..67 = equal($64..67, $68..71)
- 323. bitwise_and_2_ints $64..65 &= $66..67
- 324. bitwise_and_int $64 &= $65
- 325. copy_slot_masked [loop_operator_le].result = Mask($64)
- 326. trace_var TraceVar([loop_operator_le].result) when $28 is true
- 327. trace_scope TraceScope(-1) when $28 is true
- 328. trace_exit TraceExit(bool loop_operator_le()) when $28 is true
- 329. copy_slot_unmasked $64 = [loop_operator_le].result
- 330. label label 0x00000019
- 331. copy_slot_masked $63 = Mask($64)
- 332. label label 0x00000006
- 333. load_condition_mask CondMask = $24
- 334. zero_slot_unmasked $79 = 0
- 335. merge_condition_mask CondMask = $62 & $63
- 336. branch_if_no_lanes_active branch_if_no_lanes_active +51 (label 5 at #387)
- 337. trace_enter TraceEnter(bool loop_operator_lt()) when $28 is true
- 338. trace_scope TraceScope(+1) when $28 is true
- 339. trace_line TraceLine(59) when $28 is true
- 340. trace_line TraceLine(60) when $28 is true
- 341. trace_line TraceLine(62) when $28 is true
- 342. copy_constant $80 = 0x41100000 (9.0)
- 343. swizzle_4 $80..83 = ($80..83).xxxx
- 344. copy_4_slots_unmasked result₁ = $80..83
- 345. trace_var TraceVar(result₁) when $28 is true
- 346. trace_scope TraceScope(+1) when $28 is true
- 347. branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 29 at #369)
- 348. trace_line TraceLine(63) when $28 is true
- 349. copy_constant i₅ = 0x3F800000 (1.0)
- 350. trace_var TraceVar(i₅) when $28 is true
- 351. label label 0x0000001E
- 352. trace_scope TraceScope(+1) when $28 is true
- 353. trace_line TraceLine(64) when $28 is true
- 354. copy_4_slots_unmasked $80..83 = result₁(1..3), i₅
- 355. copy_4_slots_masked result₁ = Mask($80..83)
- 356. trace_var TraceVar(result₁) when $28 is true
- 357. trace_scope TraceScope(-1) when $28 is true
- 358. trace_line TraceLine(63) when $28 is true
- 359. copy_slot_unmasked $80 = i₅
- 360. copy_constant $81 = 0x3F800000 (1.0)
- 361. add_float $80 += $81
- 362. copy_slot_masked i₅ = Mask($80)
- 363. trace_var TraceVar(i₅) when $28 is true
- 364. copy_slot_unmasked $80 = i₅
- 365. copy_constant $81 = 0x40800000 (4.0)
- 366. cmplt_float $80 = lessThan($80, $81)
- 367. stack_rewind
- 368. branch_if_no_active_lanes_eq branch -17 (label 30 at #351) if no lanes of $80 == 0x00000000 (0.0)
- 369. label label 0x0000001D
- 370. trace_scope TraceScope(-1) when $28 is true
- 371. trace_line TraceLine(66) when $28 is true
- 372. copy_4_slots_unmasked $80..83 = result₁
- 373. copy_constant $84 = 0x41100000 (9.0)
- 374. copy_constant $85 = 0x3F800000 (1.0)
- 375. copy_constant $86 = 0x40000000 (2.0)
- 376. copy_constant $87 = 0x40400000 (3.0)
- 377. cmpeq_4_floats $80..83 = equal($80..83, $84..87)
- 378. bitwise_and_2_ints $80..81 &= $82..83
- 379. bitwise_and_int $80 &= $81
- 380. copy_slot_masked [loop_operator_lt].result = Mask($80)
- 381. trace_var TraceVar([loop_operator_lt].result) when $28 is true
- 382. trace_scope TraceScope(-1) when $28 is true
- 383. trace_exit TraceExit(bool loop_operator_lt()) when $28 is true
- 384. copy_slot_unmasked $80 = [loop_operator_lt].result
- 385. label label 0x0000001C
- 386. copy_slot_masked $79 = Mask($80)
- 387. label label 0x00000005
- 388. load_condition_mask CondMask = $62
- 389. zero_slot_unmasked $33 = 0
- 390. merge_condition_mask CondMask = $78 & $79
- 391. branch_if_no_lanes_active branch_if_no_lanes_active +51 (label 4 at #442)
- 392. trace_enter TraceEnter(bool loop_operator_ge()) when $28 is true
- 393. trace_scope TraceScope(+1) when $28 is true
- 394. trace_line TraceLine(71) when $28 is true
- 395. trace_line TraceLine(72) when $28 is true
- 396. trace_line TraceLine(74) when $28 is true
- 397. copy_constant $34 = 0x41100000 (9.0)
- 398. swizzle_4 $34..37 = ($34..37).xxxx
- 399. copy_4_slots_unmasked result₂ = $34..37
- 400. trace_var TraceVar(result₂) when $28 is true
- 401. trace_scope TraceScope(+1) when $28 is true
- 402. branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 32 at #424)
- 403. trace_line TraceLine(75) when $28 is true
- 404. copy_constant i₆ = 0x40400000 (3.0)
- 405. trace_var TraceVar(i₆) when $28 is true
- 406. label label 0x00000021
- 407. trace_scope TraceScope(+1) when $28 is true
- 408. trace_line TraceLine(76) when $28 is true
- 409. copy_4_slots_unmasked $34..37 = result₂(1..3), i₆
- 410. copy_4_slots_masked result₂ = Mask($34..37)
- 411. trace_var TraceVar(result₂) when $28 is true
- 412. trace_scope TraceScope(-1) when $28 is true
- 413. trace_line TraceLine(75) when $28 is true
- 414. copy_slot_unmasked $34 = i₆
- 415. copy_constant $35 = 0x3F800000 (1.0)
- 416. sub_float $34 -= $35
- 417. copy_slot_masked i₆ = Mask($34)
- 418. trace_var TraceVar(i₆) when $28 is true
- 419. copy_constant $34 = 0x3F800000 (1.0)
- 420. copy_slot_unmasked $35 = i₆
- 421. cmple_float $34 = lessThanEqual($34, $35)
- 422. stack_rewind
- 423. branch_if_no_active_lanes_eq branch -17 (label 33 at #406) if no lanes of $34 == 0x00000000 (0.0)
- 424. label label 0x00000020
- 425. trace_scope TraceScope(-1) when $28 is true
- 426. trace_line TraceLine(78) when $28 is true
- 427. copy_4_slots_unmasked $34..37 = result₂
- 428. copy_constant $38 = 0x41100000 (9.0)
- 429. copy_constant $39 = 0x40400000 (3.0)
- 430. copy_constant $40 = 0x40000000 (2.0)
- 431. copy_constant $41 = 0x3F800000 (1.0)
- 432. cmpeq_4_floats $34..37 = equal($34..37, $38..41)
- 433. bitwise_and_2_ints $34..35 &= $36..37
- 434. bitwise_and_int $34 &= $35
- 435. copy_slot_masked [loop_operator_ge].result = Mask($34)
- 436. trace_var TraceVar([loop_operator_ge].result) when $28 is true
- 437. trace_scope TraceScope(-1) when $28 is true
- 438. trace_exit TraceExit(bool loop_operator_ge()) when $28 is true
- 439. copy_slot_unmasked $34 = [loop_operator_ge].result
- 440. label label 0x0000001F
- 441. copy_slot_masked $33 = Mask($34)
- 442. label label 0x00000004
- 443. load_condition_mask CondMask = $78
- 444. zero_slot_unmasked $53 = 0
- 445. merge_condition_mask CondMask = $32 & $33
- 446. branch_if_no_lanes_active branch_if_no_lanes_active +51 (label 3 at #497)
- 447. trace_enter TraceEnter(bool loop_operator_gt()) when $28 is true
- 448. trace_scope TraceScope(+1) when $28 is true
- 449. trace_line TraceLine(83) when $28 is true
- 450. trace_line TraceLine(84) when $28 is true
- 451. trace_line TraceLine(86) when $28 is true
- 452. copy_constant $54 = 0x41100000 (9.0)
- 453. swizzle_4 $54..57 = ($54..57).xxxx
- 454. copy_4_slots_unmasked result₃ = $54..57
- 455. trace_var TraceVar(result₃) when $28 is true
- 456. trace_scope TraceScope(+1) when $28 is true
- 457. branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 35 at #479)
- 458. trace_line TraceLine(87) when $28 is true
- 459. copy_constant i₇ = 0x40400000 (3.0)
- 460. trace_var TraceVar(i₇) when $28 is true
- 461. label label 0x00000024
- 462. trace_scope TraceScope(+1) when $28 is true
- 463. trace_line TraceLine(88) when $28 is true
- 464. copy_4_slots_unmasked $54..57 = result₃(1..3), i₇
- 465. copy_4_slots_masked result₃ = Mask($54..57)
- 466. trace_var TraceVar(result₃) when $28 is true
- 467. trace_scope TraceScope(-1) when $28 is true
- 468. trace_line TraceLine(87) when $28 is true
- 469. copy_slot_unmasked $54 = i₇
- 470. copy_constant $55 = 0x3F800000 (1.0)
- 471. sub_float $54 -= $55
- 472. copy_slot_masked i₇ = Mask($54)
- 473. trace_var TraceVar(i₇) when $28 is true
- 474. zero_slot_unmasked $54 = 0
- 475. copy_slot_unmasked $55 = i₇
- 476. cmplt_float $54 = lessThan($54, $55)
- 477. stack_rewind
- 478. branch_if_no_active_lanes_eq branch -17 (label 36 at #461) if no lanes of $54 == 0x00000000 (0.0)
- 479. label label 0x00000023
- 480. trace_scope TraceScope(-1) when $28 is true
- 481. trace_line TraceLine(90) when $28 is true
- 482. copy_4_slots_unmasked $54..57 = result₃
- 483. copy_constant $58 = 0x41100000 (9.0)
- 484. copy_constant $59 = 0x40400000 (3.0)
- 485. copy_constant $60 = 0x40000000 (2.0)
- 486. copy_constant $61 = 0x3F800000 (1.0)
- 487. cmpeq_4_floats $54..57 = equal($54..57, $58..61)
- 488. bitwise_and_2_ints $54..55 &= $56..57
- 489. bitwise_and_int $54 &= $55
- 490. copy_slot_masked [loop_operator_gt].result = Mask($54)
- 491. trace_var TraceVar([loop_operator_gt].result) when $28 is true
- 492. trace_scope TraceScope(-1) when $28 is true
- 493. trace_exit TraceExit(bool loop_operator_gt()) when $28 is true
- 494. copy_slot_unmasked $54 = [loop_operator_gt].result
- 495. label label 0x00000022
- 496. copy_slot_masked $53 = Mask($54)
- 497. label label 0x00000003
- 498. load_condition_mask CondMask = $32
- 499. zero_slot_unmasked $43 = 0
- 500. merge_condition_mask CondMask = $52 & $53
- 501. branch_if_no_lanes_active branch_if_no_lanes_active +40 (label 2 at #541)
- 502. trace_enter TraceEnter(bool loop_operator_eq()) when $28 is true
- 503. trace_scope TraceScope(+1) when $28 is true
- 504. trace_line TraceLine(106) when $28 is true
- 505. trace_line TraceLine(108) when $28 is true
- 506. copy_constant $44 = 0x41100000 (9.0)
- 507. swizzle_4 $44..47 = ($44..47).xxxx
- 508. copy_4_slots_unmasked result₄ = $44..47
- 509. trace_var TraceVar(result₄) when $28 is true
- 510. trace_scope TraceScope(+1) when $28 is true
- 511. branch_if_no_lanes_active branch_if_no_lanes_active +12 (label 38 at #523)
- 512. trace_line TraceLine(109) when $28 is true
- 513. copy_constant i₈ = 0x3F800000 (1.0)
- 514. trace_var TraceVar(i₈) when $28 is true
- 515. label label 0x00000027
- 516. trace_scope TraceScope(+1) when $28 is true
- 517. trace_line TraceLine(110) when $28 is true
- 518. copy_4_slots_unmasked $44..47 = result₄(1..3), i₈
- 519. copy_4_slots_masked result₄ = Mask($44..47)
- 520. trace_var TraceVar(result₄) when $28 is true
- 521. trace_scope TraceScope(-1) when $28 is true
- 522. trace_line TraceLine(109) when $28 is true
- 523. label label 0x00000026
- 524. trace_scope TraceScope(-1) when $28 is true
- 525. trace_line TraceLine(112) when $28 is true
- 526. copy_4_slots_unmasked $44..47 = result₄
- 527. copy_constant $48 = 0x41100000 (9.0)
- 528. copy_constant $49 = 0x41100000 (9.0)
- 529. copy_constant $50 = 0x41100000 (9.0)
- 530. copy_constant $51 = 0x3F800000 (1.0)
- 531. cmpeq_4_floats $44..47 = equal($44..47, $48..51)
- 532. bitwise_and_2_ints $44..45 &= $46..47
- 533. bitwise_and_int $44 &= $45
- 534. copy_slot_masked [loop_operator_eq].result = Mask($44)
- 535. trace_var TraceVar([loop_operator_eq].result) when $28 is true
- 536. trace_scope TraceScope(-1) when $28 is true
- 537. trace_exit TraceExit(bool loop_operator_eq()) when $28 is true
- 538. copy_slot_unmasked $44 = [loop_operator_eq].result
- 539. label label 0x00000025
- 540. copy_slot_masked $43 = Mask($44)
- 541. label label 0x00000002
- 542. load_condition_mask CondMask = $52
- 543. zero_slot_unmasked $6 = 0
- 544. merge_condition_mask CondMask = $42 & $43
- 545. branch_if_no_lanes_active branch_if_no_lanes_active +50 (label 1 at #595)
- 546. trace_enter TraceEnter(bool loop_operator_ne()) when $28 is true
- 547. trace_scope TraceScope(+1) when $28 is true
- 548. trace_line TraceLine(95) when $28 is true
- 549. trace_line TraceLine(97) when $28 is true
- 550. copy_constant $7 = 0x41100000 (9.0)
- 551. swizzle_4 $7..10 = ($7..10).xxxx
- 552. copy_4_slots_unmasked result₅ = $7..10
- 553. trace_var TraceVar(result₅) when $28 is true
- 554. trace_scope TraceScope(+1) when $28 is true
- 555. branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 41 at #577)
- 556. trace_line TraceLine(98) when $28 is true
- 557. copy_constant i₉ = 0x3F800000 (1.0)
- 558. trace_var TraceVar(i₉) when $28 is true
- 559. label label 0x0000002A
- 560. trace_scope TraceScope(+1) when $28 is true
- 561. trace_line TraceLine(99) when $28 is true
- 562. copy_4_slots_unmasked $7..10 = result₅(1..3), i₉
- 563. copy_4_slots_masked result₅ = Mask($7..10)
- 564. trace_var TraceVar(result₅) when $28 is true
- 565. trace_scope TraceScope(-1) when $28 is true
- 566. trace_line TraceLine(98) when $28 is true
- 567. copy_slot_unmasked $7 = i₉
- 568. copy_constant $8 = 0x3F800000 (1.0)
- 569. add_float $7 += $8
- 570. copy_slot_masked i₉ = Mask($7)
- 571. trace_var TraceVar(i₉) when $28 is true
- 572. copy_slot_unmasked $7 = i₉
- 573. copy_constant $8 = 0x40800000 (4.0)
- 574. cmpne_float $7 = notEqual($7, $8)
- 575. stack_rewind
- 576. branch_if_no_active_lanes_eq branch -17 (label 42 at #559) if no lanes of $7 == 0x00000000 (0.0)
- 577. label label 0x00000029
- 578. trace_scope TraceScope(-1) when $28 is true
- 579. trace_line TraceLine(101) when $28 is true
- 580. copy_4_slots_unmasked $7..10 = result₅
- 581. copy_constant $11 = 0x41100000 (9.0)
- 582. copy_constant $12 = 0x3F800000 (1.0)
- 583. copy_constant $13 = 0x40000000 (2.0)
- 584. copy_constant $14 = 0x40400000 (3.0)
- 585. cmpeq_4_floats $7..10 = equal($7..10, $11..14)
- 586. bitwise_and_2_ints $7..8 &= $9..10
- 587. bitwise_and_int $7 &= $8
- 588. copy_slot_masked [loop_operator_ne].result = Mask($7)
- 589. trace_var TraceVar([loop_operator_ne].result) when $28 is true
- 590. trace_scope TraceScope(-1) when $28 is true
- 591. trace_exit TraceExit(bool loop_operator_ne()) when $28 is true
- 592. copy_slot_unmasked $7 = [loop_operator_ne].result
- 593. label label 0x00000028
- 594. copy_slot_masked $6 = Mask($7)
- 595. label label 0x00000001
- 596. load_condition_mask CondMask = $42
- 597. swizzle_4 $6..9 = ($6..9).xxxx
- 598. copy_4_constants $10..13 = colorRed
- 599. copy_4_constants $14..17 = colorGreen
- 600. mix_4_ints $6..9 = mix($10..13, $14..17, $6..9)
- 601. copy_4_slots_unmasked [main].result = $6..9
- 602. trace_var TraceVar([main].result) when $28 is true
- 603. trace_scope TraceScope(-1) when $28 is true
- 604. trace_exit TraceExit(half4 main(float2 pos)) when $28 is true
- 605. load_src src.rgba = [main].result
+ 11. trace_var TraceVar(kTen) when $40 is true
+ 12. trace_enter TraceEnter(half4 main(float2 pos)) when $40 is true
+ 13. trace_var TraceVar(pos) when $40 is true
+ 14. zero_slot_unmasked $10 = 0
+ 15. copy_slot_unmasked $11 = $40
+ 16. copy_slot_masked $10 = Mask($11)
+ 17. trace_scope TraceScope(+1) when $10 is true
+ 18. trace_line TraceLine(116) when $40 is true
+ 19. copy_slot_unmasked $11 = pos(0)
+ 20. copy_constant $12 = colorGreen(1)
+ 21. max_float $11 = max($11, $12)
+ 22. copy_constant $12 = colorGreen(3)
+ 23. min_float $11 = min($11, $12)
+ 24. copy_constant $12 = 0x40A00000 (5.0)
+ 25. mul_float $11 *= $12
+ 26. copy_slot_unmasked five = $11
+ 27. trace_var TraceVar(five) when $40 is true
+ 28. trace_line TraceLine(117) when $40 is true
+ 29. store_condition_mask $55 = CondMask
+ 30. store_condition_mask $66 = CondMask
+ 31. store_condition_mask $44 = CondMask
+ 32. store_condition_mask $98 = CondMask
+ 33. store_condition_mask $77 = CondMask
+ 34. store_condition_mask $33 = CondMask
+ 35. store_condition_mask $88 = CondMask
+ 36. store_condition_mask $23 = CondMask
+ 37. store_condition_mask $0 = CondMask
+ 38. branch_if_no_lanes_active branch_if_no_lanes_active +66 (label 10 at #104)
+ 39. copy_slot_unmasked five₁ = five
+ 40. trace_var TraceVar(five₁) when $40 is true
+ 41. trace_enter TraceEnter(float return_loop(float five)) when $40 is true
+ 42. store_return_mask $1 = RetMask
+ 43. zero_slot_unmasked $2 = 0
+ 44. copy_slot_unmasked $3 = $40
+ 45. copy_slot_masked $2 = Mask($3)
+ 46. trace_scope TraceScope(+1) when $2 is true
+ 47. zero_slot_unmasked $3 = 0
+ 48. copy_slot_unmasked $4 = $40
+ 49. copy_slot_masked $3 = Mask($4)
+ 50. trace_scope TraceScope(+1) when $3 is true
+ 51. trace_line TraceLine(8) when $40 is true
+ 52. copy_slot_unmasked i = kZero
+ 53. trace_var TraceVar(i) when $40 is true
+ 54. store_loop_mask $4 = LoopMask
+ 55. jump jump +30 (label 12 at #85)
+ 56. label label 0x0000000D
+ 57. zero_slot_unmasked $5 = 0
+ 58. copy_slot_unmasked $6 = $40
+ 59. copy_slot_masked $5 = Mask($6)
+ 60. trace_scope TraceScope(+1) when $5 is true
+ 61. trace_line TraceLine(9) when $40 is true
+ 62. store_condition_mask $6 = CondMask
+ 63. copy_slot_unmasked $7 = i
+ 64. copy_slot_unmasked $8 = five₁
+ 65. cmpeq_float $7 = equal($7, $8)
+ 66. merge_condition_mask CondMask = $6 & $7
+ 67. zero_slot_unmasked $8 = 0
+ 68. copy_slot_unmasked $9 = $40
+ 69. copy_slot_masked $8 = Mask($9)
+ 70. trace_scope TraceScope(+1) when $8 is true
+ 71. trace_line TraceLine(9) when $40 is true
+ 72. copy_slot_unmasked $9 = i
+ 73. copy_slot_masked [return_loop].result = Mask($9)
+ 74. trace_var TraceVar([return_loop].result) when $40 is true
+ 75. mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask)
+ 76. trace_scope TraceScope(-1) when $8 is true
+ 77. load_condition_mask CondMask = $6
+ 78. trace_scope TraceScope(-1) when $5 is true
+ 79. trace_line TraceLine(8) when $40 is true
+ 80. copy_slot_unmasked $5 = i
+ 81. copy_constant $6 = 0x3F800000 (1.0)
+ 82. add_float $5 += $6
+ 83. copy_slot_masked i = Mask($5)
+ 84. trace_var TraceVar(i) when $40 is true
+ 85. label label 0x0000000C
+ 86. copy_slot_unmasked $5 = i
+ 87. copy_constant $6 = 0x41200000 (10.0)
+ 88. cmplt_float $5 = lessThan($5, $6)
+ 89. merge_loop_mask LoopMask &= $5
+ 90. stack_rewind
+ 91. branch_if_any_lanes_active branch_if_any_lanes_active -35 (label 13 at #56)
+ 92. label label 0x0000000B
+ 93. load_loop_mask LoopMask = $4
+ 94. trace_scope TraceScope(-1) when $3 is true
+ 95. trace_line TraceLine(11) when $40 is true
+ 96. zero_slot_unmasked $3 = 0
+ 97. copy_slot_masked [return_loop].result = Mask($3)
+ 98. trace_var TraceVar([return_loop].result) when $40 is true
+ 99. mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask)
+ 100. trace_scope TraceScope(-1) when $2 is true
+ 101. load_return_mask RetMask = $1
+ 102. trace_exit TraceExit(float return_loop(float five)) when $40 is true
+ 103. copy_slot_unmasked $1 = [return_loop].result
+ 104. label label 0x0000000A
+ 105. copy_constant $2 = 0x40A00000 (5.0)
+ 106. cmpeq_float $1 = equal($1, $2)
+ 107. zero_slot_unmasked $24 = 0
+ 108. merge_condition_mask CondMask = $0 & $1
+ 109. branch_if_no_lanes_active branch_if_no_lanes_active +76 (label 9 at #185)
+ 110. copy_slot_unmasked five₂ = five
+ 111. trace_var TraceVar(five₂) when $40 is true
+ 112. trace_enter TraceEnter(float continue_loop(float five)) when $40 is true
+ 113. zero_slot_unmasked $25 = 0
+ 114. copy_slot_unmasked $26 = $40
+ 115. copy_slot_masked $25 = Mask($26)
+ 116. trace_scope TraceScope(+1) when $25 is true
+ 117. trace_line TraceLine(17) when $40 is true
+ 118. zero_slot_unmasked sum = 0
+ 119. trace_var TraceVar(sum) when $40 is true
+ 120. zero_slot_unmasked $26 = 0
+ 121. copy_slot_unmasked $27 = $40
+ 122. copy_slot_masked $26 = Mask($27)
+ 123. trace_scope TraceScope(+1) when $26 is true
+ 124. trace_line TraceLine(18) when $40 is true
+ 125. zero_slot_unmasked i₁ = 0
+ 126. trace_var TraceVar(i₁) when $40 is true
+ 127. store_loop_mask $27 = LoopMask
+ 128. jump jump +36 (label 16 at #164)
+ 129. label label 0x00000011
+ 130. zero_slot_unmasked $109 = 0
+ 131. zero_slot_unmasked $28 = 0
+ 132. copy_slot_unmasked $29 = $40
+ 133. copy_slot_masked $28 = Mask($29)
+ 134. trace_scope TraceScope(+1) when $28 is true
+ 135. trace_line TraceLine(19) when $40 is true
+ 136. store_condition_mask $29 = CondMask
+ 137. copy_slot_unmasked $30 = i₁
+ 138. copy_slot_unmasked $31 = five₂
+ 139. cmplt_float $30 = lessThan($30, $31)
+ 140. merge_condition_mask CondMask = $29 & $30
+ 141. zero_slot_unmasked $31 = 0
+ 142. copy_slot_unmasked $32 = $40
+ 143. copy_slot_masked $31 = Mask($32)
+ 144. trace_scope TraceScope(+1) when $31 is true
+ 145. trace_line TraceLine(19) when $40 is true
+ 146. copy_constant $110 = 0xFFFFFFFF
+ 147. copy_slot_masked $109 = Mask($110)
+ 148. mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask)
+ 149. trace_scope TraceScope(-1) when $31 is true
+ 150. load_condition_mask CondMask = $29
+ 151. trace_line TraceLine(20) when $40 is true
+ 152. copy_2_slots_unmasked $29..30 = sum, i₁
+ 153. add_float $29 += $30
+ 154. copy_slot_masked sum = Mask($29)
+ 155. trace_var TraceVar(sum) when $40 is true
+ 156. trace_scope TraceScope(-1) when $28 is true
+ 157. reenable_loop_mask LoopMask |= $109
+ 158. trace_line TraceLine(18) when $40 is true
+ 159. copy_slot_unmasked $28 = i₁
+ 160. copy_constant $29 = 0x3F800000 (1.0)
+ 161. add_float $28 += $29
+ 162. copy_slot_masked i₁ = Mask($28)
+ 163. trace_var TraceVar(i₁) when $40 is true
+ 164. label label 0x00000010
+ 165. copy_slot_unmasked $28 = i₁
+ 166. copy_slot_unmasked $29 = kTen
+ 167. cmplt_float $28 = lessThan($28, $29)
+ 168. merge_loop_mask LoopMask &= $28
+ 169. stack_rewind
+ 170. branch_if_any_lanes_active branch_if_any_lanes_active -41 (label 17 at #129)
+ 171. label label 0x0000000F
+ 172. load_loop_mask LoopMask = $27
+ 173. trace_scope TraceScope(-1) when $26 is true
+ 174. trace_line TraceLine(22) when $40 is true
+ 175. copy_slot_unmasked $26 = sum
+ 176. copy_slot_masked [continue_loop].result = Mask($26)
+ 177. trace_var TraceVar([continue_loop].result) when $40 is true
+ 178. trace_scope TraceScope(-1) when $25 is true
+ 179. trace_exit TraceExit(float continue_loop(float five)) when $40 is true
+ 180. copy_slot_unmasked $25 = [continue_loop].result
+ 181. label label 0x0000000E
+ 182. copy_constant $26 = 0x420C0000 (35.0)
+ 183. cmpeq_float $25 = equal($25, $26)
+ 184. copy_slot_masked $24 = Mask($25)
+ 185. label label 0x00000009
+ 186. load_condition_mask CondMask = $0
+ 187. zero_slot_unmasked $89 = 0
+ 188. merge_condition_mask CondMask = $23 & $24
+ 189. branch_if_no_lanes_active branch_if_no_lanes_active +77 (label 8 at #266)
+ 190. copy_slot_unmasked five₃ = five
+ 191. trace_var TraceVar(five₃) when $40 is true
+ 192. trace_enter TraceEnter(float break_loop(float five)) when $40 is true
+ 193. zero_slot_unmasked $90 = 0
+ 194. copy_slot_unmasked $91 = $40
+ 195. copy_slot_masked $90 = Mask($91)
+ 196. trace_scope TraceScope(+1) when $90 is true
+ 197. trace_line TraceLine(27) when $40 is true
+ 198. zero_slot_unmasked sum₁ = 0
+ 199. trace_var TraceVar(sum₁) when $40 is true
+ 200. trace_line TraceLine(28) when $40 is true
+ 201. copy_constant kOne = 0x3F800000 (1.0)
+ 202. trace_var TraceVar(kOne) when $40 is true
+ 203. zero_slot_unmasked $91 = 0
+ 204. copy_slot_unmasked $92 = $40
+ 205. copy_slot_masked $91 = Mask($92)
+ 206. trace_scope TraceScope(+1) when $91 is true
+ 207. trace_line TraceLine(29) when $40 is true
+ 208. zero_slot_unmasked i₂ = 0
+ 209. trace_var TraceVar(i₂) when $40 is true
+ 210. store_loop_mask $92 = LoopMask
+ 211. jump jump +34 (label 20 at #245)
+ 212. label label 0x00000015
+ 213. zero_slot_unmasked $93 = 0
+ 214. copy_slot_unmasked $94 = $40
+ 215. copy_slot_masked $93 = Mask($94)
+ 216. trace_scope TraceScope(+1) when $93 is true
+ 217. trace_line TraceLine(30) when $40 is true
+ 218. store_condition_mask $94 = CondMask
+ 219. copy_slot_unmasked $95 = five₃
+ 220. copy_slot_unmasked $96 = i₂
+ 221. cmplt_float $95 = lessThan($95, $96)
+ 222. merge_condition_mask CondMask = $94 & $95
+ 223. zero_slot_unmasked $96 = 0
+ 224. copy_slot_unmasked $97 = $40
+ 225. copy_slot_masked $96 = Mask($97)
+ 226. trace_scope TraceScope(+1) when $96 is true
+ 227. trace_line TraceLine(30) when $40 is true
+ 228. branch_if_all_lanes_active branch_if_all_lanes_active +24 (label 19 at #252)
+ 229. mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask)
+ 230. trace_scope TraceScope(-1) when $96 is true
+ 231. load_condition_mask CondMask = $94
+ 232. trace_line TraceLine(31) when $40 is true
+ 233. copy_slot_unmasked $94 = sum₁
+ 234. copy_slot_unmasked $95 = i₂
+ 235. add_float $94 += $95
+ 236. copy_slot_masked sum₁ = Mask($94)
+ 237. trace_var TraceVar(sum₁) when $40 is true
+ 238. trace_scope TraceScope(-1) when $93 is true
+ 239. trace_line TraceLine(29) when $40 is true
+ 240. copy_slot_unmasked $93 = i₂
+ 241. copy_slot_unmasked $94 = kOne
+ 242. add_float $93 += $94
+ 243. copy_slot_masked i₂ = Mask($93)
+ 244. trace_var TraceVar(i₂) when $40 is true
+ 245. label label 0x00000014
+ 246. copy_slot_unmasked $93 = i₂
+ 247. copy_constant $94 = 0x41200000 (10.0)
+ 248. cmplt_float $93 = lessThan($93, $94)
+ 249. merge_loop_mask LoopMask &= $93
+ 250. stack_rewind
+ 251. branch_if_any_lanes_active branch_if_any_lanes_active -39 (label 21 at #212)
+ 252. label label 0x00000013
+ 253. load_loop_mask LoopMask = $92
+ 254. trace_scope TraceScope(-1) when $91 is true
+ 255. trace_line TraceLine(33) when $40 is true
+ 256. copy_slot_unmasked $91 = sum₁
+ 257. copy_slot_masked [break_loop].result = Mask($91)
+ 258. trace_var TraceVar([break_loop].result) when $40 is true
+ 259. trace_scope TraceScope(-1) when $90 is true
+ 260. trace_exit TraceExit(float break_loop(float five)) when $40 is true
+ 261. copy_slot_unmasked $90 = [break_loop].result
+ 262. label label 0x00000012
+ 263. copy_constant $91 = 0x41700000 (15.0)
+ 264. cmpeq_float $90 = equal($90, $91)
+ 265. copy_slot_masked $89 = Mask($90)
+ 266. label label 0x00000008
+ 267. load_condition_mask CondMask = $23
+ 268. zero_slot_unmasked $34 = 0
+ 269. merge_condition_mask CondMask = $88 & $89
+ 270. branch_if_no_lanes_active branch_if_no_lanes_active +55 (label 7 at #325)
+ 271. trace_enter TraceEnter(float float_loop()) when $40 is true
+ 272. zero_slot_unmasked $35 = 0
+ 273. copy_slot_unmasked $36 = $40
+ 274. copy_slot_masked $35 = Mask($36)
+ 275. trace_scope TraceScope(+1) when $35 is true
+ 276. trace_line TraceLine(38) when $40 is true
+ 277. zero_slot_unmasked sum₂ = 0
+ 278. trace_var TraceVar(sum₂) when $40 is true
+ 279. zero_slot_unmasked $36 = 0
+ 280. copy_slot_unmasked $37 = $40
+ 281. copy_slot_masked $36 = Mask($37)
+ 282. trace_scope TraceScope(+1) when $36 is true
+ 283. branch_if_no_lanes_active branch_if_no_lanes_active +26 (label 23 at #309)
+ 284. trace_line TraceLine(39) when $40 is true
+ 285. copy_constant i₃ = 0x3DFBE76D (0.123)
+ 286. trace_var TraceVar(i₃) when $40 is true
+ 287. label label 0x00000018
+ 288. zero_slot_unmasked $37 = 0
+ 289. copy_slot_unmasked $38 = $40
+ 290. copy_slot_masked $37 = Mask($38)
+ 291. trace_scope TraceScope(+1) when $37 is true
+ 292. trace_line TraceLine(40) when $40 is true
+ 293. copy_2_slots_unmasked $38..39 = sum₂, i₃
+ 294. add_float $38 += $39
+ 295. copy_slot_masked sum₂ = Mask($38)
+ 296. trace_var TraceVar(sum₂) when $40 is true
+ 297. trace_scope TraceScope(-1) when $37 is true
+ 298. trace_line TraceLine(39) when $40 is true
+ 299. copy_slot_unmasked $37 = i₃
+ 300. copy_constant $38 = 0x3DE353F8 (0.111)
+ 301. add_float $37 += $38
+ 302. copy_slot_masked i₃ = Mask($37)
+ 303. trace_var TraceVar(i₃) when $40 is true
+ 304. copy_slot_unmasked $37 = i₃
+ 305. copy_constant $38 = 0x3F19999A (0.6)
+ 306. cmplt_float $37 = lessThan($37, $38)
+ 307. stack_rewind
+ 308. branch_if_no_active_lanes_eq branch -21 (label 24 at #287) if no lanes of $37 == 0x00000000 (0.0)
+ 309. label label 0x00000017
+ 310. trace_scope TraceScope(-1) when $36 is true
+ 311. trace_line TraceLine(42) when $40 is true
+ 312. copy_slot_unmasked $36 = sum₂
+ 313. copy_constant $37 = 0x3FDCCCCD (1.725)
+ 314. sub_float $36 -= $37
+ 315. copy_slot_masked [float_loop].result = Mask($36)
+ 316. trace_var TraceVar([float_loop].result) when $40 is true
+ 317. trace_scope TraceScope(-1) when $35 is true
+ 318. trace_exit TraceExit(float float_loop()) when $40 is true
+ 319. copy_slot_unmasked $35 = [float_loop].result
+ 320. label label 0x00000016
+ 321. abs_float $35 = abs($35)
+ 322. copy_constant $36 = 0x3CCCCCCD (0.025)
+ 323. cmplt_float $35 = lessThan($35, $36)
+ 324. copy_slot_masked $34 = Mask($35)
+ 325. label label 0x00000007
+ 326. load_condition_mask CondMask = $88
+ 327. zero_slot_unmasked $78 = 0
+ 328. merge_condition_mask CondMask = $33 & $34
+ 329. branch_if_no_lanes_active branch_if_no_lanes_active +60 (label 6 at #389)
+ 330. trace_enter TraceEnter(bool loop_operator_le()) when $40 is true
+ 331. zero_slot_unmasked $79 = 0
+ 332. copy_slot_unmasked $80 = $40
+ 333. copy_slot_masked $79 = Mask($80)
+ 334. trace_scope TraceScope(+1) when $79 is true
+ 335. trace_line TraceLine(47) when $40 is true
+ 336. trace_line TraceLine(48) when $40 is true
+ 337. trace_line TraceLine(50) when $40 is true
+ 338. copy_constant $80 = 0x41100000 (9.0)
+ 339. swizzle_4 $80..83 = ($80..83).xxxx
+ 340. copy_4_slots_unmasked result = $80..83
+ 341. trace_var TraceVar(result) when $40 is true
+ 342. zero_slot_unmasked $80 = 0
+ 343. copy_slot_unmasked $81 = $40
+ 344. copy_slot_masked $80 = Mask($81)
+ 345. trace_scope TraceScope(+1) when $80 is true
+ 346. branch_if_no_lanes_active branch_if_no_lanes_active +25 (label 26 at #371)
+ 347. trace_line TraceLine(51) when $40 is true
+ 348. copy_constant i₄ = 0x3F800000 (1.0)
+ 349. trace_var TraceVar(i₄) when $40 is true
+ 350. label label 0x0000001B
+ 351. zero_slot_unmasked $81 = 0
+ 352. copy_slot_unmasked $82 = $40
+ 353. copy_slot_masked $81 = Mask($82)
+ 354. trace_scope TraceScope(+1) when $81 is true
+ 355. trace_line TraceLine(52) when $40 is true
+ 356. copy_4_slots_unmasked $82..85 = result(1..3), i₄
+ 357. copy_4_slots_masked result = Mask($82..85)
+ 358. trace_var TraceVar(result) when $40 is true
+ 359. trace_scope TraceScope(-1) when $81 is true
+ 360. trace_line TraceLine(51) when $40 is true
+ 361. copy_slot_unmasked $81 = i₄
+ 362. copy_constant $82 = 0x3F800000 (1.0)
+ 363. add_float $81 += $82
+ 364. copy_slot_masked i₄ = Mask($81)
+ 365. trace_var TraceVar(i₄) when $40 is true
+ 366. copy_slot_unmasked $81 = i₄
+ 367. copy_constant $82 = 0x40400000 (3.0)
+ 368. cmple_float $81 = lessThanEqual($81, $82)
+ 369. stack_rewind
+ 370. branch_if_no_active_lanes_eq branch -20 (label 27 at #350) if no lanes of $81 == 0x00000000 (0.0)
+ 371. label label 0x0000001A
+ 372. trace_scope TraceScope(-1) when $80 is true
+ 373. trace_line TraceLine(54) when $40 is true
+ 374. copy_4_slots_unmasked $80..83 = result
+ 375. copy_constant $84 = 0x41100000 (9.0)
+ 376. copy_constant $85 = 0x3F800000 (1.0)
+ 377. copy_constant $86 = 0x40000000 (2.0)
+ 378. copy_constant $87 = 0x40400000 (3.0)
+ 379. cmpeq_4_floats $80..83 = equal($80..83, $84..87)
+ 380. bitwise_and_2_ints $80..81 &= $82..83
+ 381. bitwise_and_int $80 &= $81
+ 382. copy_slot_masked [loop_operator_le].result = Mask($80)
+ 383. trace_var TraceVar([loop_operator_le].result) when $40 is true
+ 384. trace_scope TraceScope(-1) when $79 is true
+ 385. trace_exit TraceExit(bool loop_operator_le()) when $40 is true
+ 386. copy_slot_unmasked $79 = [loop_operator_le].result
+ 387. label label 0x00000019
+ 388. copy_slot_masked $78 = Mask($79)
+ 389. label label 0x00000006
+ 390. load_condition_mask CondMask = $33
+ 391. zero_slot_unmasked $99 = 0
+ 392. merge_condition_mask CondMask = $77 & $78
+ 393. branch_if_no_lanes_active branch_if_no_lanes_active +60 (label 5 at #453)
+ 394. trace_enter TraceEnter(bool loop_operator_lt()) when $40 is true
+ 395. zero_slot_unmasked $100 = 0
+ 396. copy_slot_unmasked $101 = $40
+ 397. copy_slot_masked $100 = Mask($101)
+ 398. trace_scope TraceScope(+1) when $100 is true
+ 399. trace_line TraceLine(59) when $40 is true
+ 400. trace_line TraceLine(60) when $40 is true
+ 401. trace_line TraceLine(62) when $40 is true
+ 402. copy_constant $101 = 0x41100000 (9.0)
+ 403. swizzle_4 $101..104 = ($101..104).xxxx
+ 404. copy_4_slots_unmasked result₁ = $101..104
+ 405. trace_var TraceVar(result₁) when $40 is true
+ 406. zero_slot_unmasked $101 = 0
+ 407. copy_slot_unmasked $102 = $40
+ 408. copy_slot_masked $101 = Mask($102)
+ 409. trace_scope TraceScope(+1) when $101 is true
+ 410. branch_if_no_lanes_active branch_if_no_lanes_active +25 (label 29 at #435)
+ 411. trace_line TraceLine(63) when $40 is true
+ 412. copy_constant i₅ = 0x3F800000 (1.0)
+ 413. trace_var TraceVar(i₅) when $40 is true
+ 414. label label 0x0000001E
+ 415. zero_slot_unmasked $102 = 0
+ 416. copy_slot_unmasked $103 = $40
+ 417. copy_slot_masked $102 = Mask($103)
+ 418. trace_scope TraceScope(+1) when $102 is true
+ 419. trace_line TraceLine(64) when $40 is true
+ 420. copy_4_slots_unmasked $103..106 = result₁(1..3), i₅
+ 421. copy_4_slots_masked result₁ = Mask($103..106)
+ 422. trace_var TraceVar(result₁) when $40 is true
+ 423. trace_scope TraceScope(-1) when $102 is true
+ 424. trace_line TraceLine(63) when $40 is true
+ 425. copy_slot_unmasked $102 = i₅
+ 426. copy_constant $103 = 0x3F800000 (1.0)
+ 427. add_float $102 += $103
+ 428. copy_slot_masked i₅ = Mask($102)
+ 429. trace_var TraceVar(i₅) when $40 is true
+ 430. copy_slot_unmasked $102 = i₅
+ 431. copy_constant $103 = 0x40800000 (4.0)
+ 432. cmplt_float $102 = lessThan($102, $103)
+ 433. stack_rewind
+ 434. branch_if_no_active_lanes_eq branch -20 (label 30 at #414) if no lanes of $102 == 0x00000000 (0.0)
+ 435. label label 0x0000001D
+ 436. trace_scope TraceScope(-1) when $101 is true
+ 437. trace_line TraceLine(66) when $40 is true
+ 438. copy_4_slots_unmasked $101..104 = result₁
+ 439. copy_constant $105 = 0x41100000 (9.0)
+ 440. copy_constant $106 = 0x3F800000 (1.0)
+ 441. copy_constant $107 = 0x40000000 (2.0)
+ 442. copy_constant $108 = 0x40400000 (3.0)
+ 443. cmpeq_4_floats $101..104 = equal($101..104, $105..108)
+ 444. bitwise_and_2_ints $101..102 &= $103..104
+ 445. bitwise_and_int $101 &= $102
+ 446. copy_slot_masked [loop_operator_lt].result = Mask($101)
+ 447. trace_var TraceVar([loop_operator_lt].result) when $40 is true
+ 448. trace_scope TraceScope(-1) when $100 is true
+ 449. trace_exit TraceExit(bool loop_operator_lt()) when $40 is true
+ 450. copy_slot_unmasked $100 = [loop_operator_lt].result
+ 451. label label 0x0000001C
+ 452. copy_slot_masked $99 = Mask($100)
+ 453. label label 0x00000005
+ 454. load_condition_mask CondMask = $77
+ 455. zero_slot_unmasked $45 = 0
+ 456. merge_condition_mask CondMask = $98 & $99
+ 457. branch_if_no_lanes_active branch_if_no_lanes_active +60 (label 4 at #517)
+ 458. trace_enter TraceEnter(bool loop_operator_ge()) when $40 is true
+ 459. zero_slot_unmasked $46 = 0
+ 460. copy_slot_unmasked $47 = $40
+ 461. copy_slot_masked $46 = Mask($47)
+ 462. trace_scope TraceScope(+1) when $46 is true
+ 463. trace_line TraceLine(71) when $40 is true
+ 464. trace_line TraceLine(72) when $40 is true
+ 465. trace_line TraceLine(74) when $40 is true
+ 466. copy_constant $47 = 0x41100000 (9.0)
+ 467. swizzle_4 $47..50 = ($47..50).xxxx
+ 468. copy_4_slots_unmasked result₂ = $47..50
+ 469. trace_var TraceVar(result₂) when $40 is true
+ 470. zero_slot_unmasked $47 = 0
+ 471. copy_slot_unmasked $48 = $40
+ 472. copy_slot_masked $47 = Mask($48)
+ 473. trace_scope TraceScope(+1) when $47 is true
+ 474. branch_if_no_lanes_active branch_if_no_lanes_active +25 (label 32 at #499)
+ 475. trace_line TraceLine(75) when $40 is true
+ 476. copy_constant i₆ = 0x40400000 (3.0)
+ 477. trace_var TraceVar(i₆) when $40 is true
+ 478. label label 0x00000021
+ 479. zero_slot_unmasked $48 = 0
+ 480. copy_slot_unmasked $49 = $40
+ 481. copy_slot_masked $48 = Mask($49)
+ 482. trace_scope TraceScope(+1) when $48 is true
+ 483. trace_line TraceLine(76) when $40 is true
+ 484. copy_4_slots_unmasked $49..52 = result₂(1..3), i₆
+ 485. copy_4_slots_masked result₂ = Mask($49..52)
+ 486. trace_var TraceVar(result₂) when $40 is true
+ 487. trace_scope TraceScope(-1) when $48 is true
+ 488. trace_line TraceLine(75) when $40 is true
+ 489. copy_slot_unmasked $48 = i₆
+ 490. copy_constant $49 = 0x3F800000 (1.0)
+ 491. sub_float $48 -= $49
+ 492. copy_slot_masked i₆ = Mask($48)
+ 493. trace_var TraceVar(i₆) when $40 is true
+ 494. copy_constant $48 = 0x3F800000 (1.0)
+ 495. copy_slot_unmasked $49 = i₆
+ 496. cmple_float $48 = lessThanEqual($48, $49)
+ 497. stack_rewind
+ 498. branch_if_no_active_lanes_eq branch -20 (label 33 at #478) if no lanes of $48 == 0x00000000 (0.0)
+ 499. label label 0x00000020
+ 500. trace_scope TraceScope(-1) when $47 is true
+ 501. trace_line TraceLine(78) when $40 is true
+ 502. copy_4_slots_unmasked $47..50 = result₂
+ 503. copy_constant $51 = 0x41100000 (9.0)
+ 504. copy_constant $52 = 0x40400000 (3.0)
+ 505. copy_constant $53 = 0x40000000 (2.0)
+ 506. copy_constant $54 = 0x3F800000 (1.0)
+ 507. cmpeq_4_floats $47..50 = equal($47..50, $51..54)
+ 508. bitwise_and_2_ints $47..48 &= $49..50
+ 509. bitwise_and_int $47 &= $48
+ 510. copy_slot_masked [loop_operator_ge].result = Mask($47)
+ 511. trace_var TraceVar([loop_operator_ge].result) when $40 is true
+ 512. trace_scope TraceScope(-1) when $46 is true
+ 513. trace_exit TraceExit(bool loop_operator_ge()) when $40 is true
+ 514. copy_slot_unmasked $46 = [loop_operator_ge].result
+ 515. label label 0x0000001F
+ 516. copy_slot_masked $45 = Mask($46)
+ 517. label label 0x00000004
+ 518. load_condition_mask CondMask = $98
+ 519. zero_slot_unmasked $67 = 0
+ 520. merge_condition_mask CondMask = $44 & $45
+ 521. branch_if_no_lanes_active branch_if_no_lanes_active +60 (label 3 at #581)
+ 522. trace_enter TraceEnter(bool loop_operator_gt()) when $40 is true
+ 523. zero_slot_unmasked $68 = 0
+ 524. copy_slot_unmasked $69 = $40
+ 525. copy_slot_masked $68 = Mask($69)
+ 526. trace_scope TraceScope(+1) when $68 is true
+ 527. trace_line TraceLine(83) when $40 is true
+ 528. trace_line TraceLine(84) when $40 is true
+ 529. trace_line TraceLine(86) when $40 is true
+ 530. copy_constant $69 = 0x41100000 (9.0)
+ 531. swizzle_4 $69..72 = ($69..72).xxxx
+ 532. copy_4_slots_unmasked result₃ = $69..72
+ 533. trace_var TraceVar(result₃) when $40 is true
+ 534. zero_slot_unmasked $69 = 0
+ 535. copy_slot_unmasked $70 = $40
+ 536. copy_slot_masked $69 = Mask($70)
+ 537. trace_scope TraceScope(+1) when $69 is true
+ 538. branch_if_no_lanes_active branch_if_no_lanes_active +25 (label 35 at #563)
+ 539. trace_line TraceLine(87) when $40 is true
+ 540. copy_constant i₇ = 0x40400000 (3.0)
+ 541. trace_var TraceVar(i₇) when $40 is true
+ 542. label label 0x00000024
+ 543. zero_slot_unmasked $70 = 0
+ 544. copy_slot_unmasked $71 = $40
+ 545. copy_slot_masked $70 = Mask($71)
+ 546. trace_scope TraceScope(+1) when $70 is true
+ 547. trace_line TraceLine(88) when $40 is true
+ 548. copy_4_slots_unmasked $71..74 = result₃(1..3), i₇
+ 549. copy_4_slots_masked result₃ = Mask($71..74)
+ 550. trace_var TraceVar(result₃) when $40 is true
+ 551. trace_scope TraceScope(-1) when $70 is true
+ 552. trace_line TraceLine(87) when $40 is true
+ 553. copy_slot_unmasked $70 = i₇
+ 554. copy_constant $71 = 0x3F800000 (1.0)
+ 555. sub_float $70 -= $71
+ 556. copy_slot_masked i₇ = Mask($70)
+ 557. trace_var TraceVar(i₇) when $40 is true
+ 558. zero_slot_unmasked $70 = 0
+ 559. copy_slot_unmasked $71 = i₇
+ 560. cmplt_float $70 = lessThan($70, $71)
+ 561. stack_rewind
+ 562. branch_if_no_active_lanes_eq branch -20 (label 36 at #542) if no lanes of $70 == 0x00000000 (0.0)
+ 563. label label 0x00000023
+ 564. trace_scope TraceScope(-1) when $69 is true
+ 565. trace_line TraceLine(90) when $40 is true
+ 566. copy_4_slots_unmasked $69..72 = result₃
+ 567. copy_constant $73 = 0x41100000 (9.0)
+ 568. copy_constant $74 = 0x40400000 (3.0)
+ 569. copy_constant $75 = 0x40000000 (2.0)
+ 570. copy_constant $76 = 0x3F800000 (1.0)
+ 571. cmpeq_4_floats $69..72 = equal($69..72, $73..76)
+ 572. bitwise_and_2_ints $69..70 &= $71..72
+ 573. bitwise_and_int $69 &= $70
+ 574. copy_slot_masked [loop_operator_gt].result = Mask($69)
+ 575. trace_var TraceVar([loop_operator_gt].result) when $40 is true
+ 576. trace_scope TraceScope(-1) when $68 is true
+ 577. trace_exit TraceExit(bool loop_operator_gt()) when $40 is true
+ 578. copy_slot_unmasked $68 = [loop_operator_gt].result
+ 579. label label 0x00000022
+ 580. copy_slot_masked $67 = Mask($68)
+ 581. label label 0x00000003
+ 582. load_condition_mask CondMask = $44
+ 583. zero_slot_unmasked $56 = 0
+ 584. merge_condition_mask CondMask = $66 & $67
+ 585. branch_if_no_lanes_active branch_if_no_lanes_active +49 (label 2 at #634)
+ 586. trace_enter TraceEnter(bool loop_operator_eq()) when $40 is true
+ 587. zero_slot_unmasked $57 = 0
+ 588. copy_slot_unmasked $58 = $40
+ 589. copy_slot_masked $57 = Mask($58)
+ 590. trace_scope TraceScope(+1) when $57 is true
+ 591. trace_line TraceLine(106) when $40 is true
+ 592. trace_line TraceLine(108) when $40 is true
+ 593. copy_constant $58 = 0x41100000 (9.0)
+ 594. swizzle_4 $58..61 = ($58..61).xxxx
+ 595. copy_4_slots_unmasked result₄ = $58..61
+ 596. trace_var TraceVar(result₄) when $40 is true
+ 597. zero_slot_unmasked $58 = 0
+ 598. copy_slot_unmasked $59 = $40
+ 599. copy_slot_masked $58 = Mask($59)
+ 600. trace_scope TraceScope(+1) when $58 is true
+ 601. branch_if_no_lanes_active branch_if_no_lanes_active +15 (label 38 at #616)
+ 602. trace_line TraceLine(109) when $40 is true
+ 603. copy_constant i₈ = 0x3F800000 (1.0)
+ 604. trace_var TraceVar(i₈) when $40 is true
+ 605. label label 0x00000027
+ 606. zero_slot_unmasked $59 = 0
+ 607. copy_slot_unmasked $60 = $40
+ 608. copy_slot_masked $59 = Mask($60)
+ 609. trace_scope TraceScope(+1) when $59 is true
+ 610. trace_line TraceLine(110) when $40 is true
+ 611. copy_4_slots_unmasked $60..63 = result₄(1..3), i₈
+ 612. copy_4_slots_masked result₄ = Mask($60..63)
+ 613. trace_var TraceVar(result₄) when $40 is true
+ 614. trace_scope TraceScope(-1) when $59 is true
+ 615. trace_line TraceLine(109) when $40 is true
+ 616. label label 0x00000026
+ 617. trace_scope TraceScope(-1) when $58 is true
+ 618. trace_line TraceLine(112) when $40 is true
+ 619. copy_4_slots_unmasked $58..61 = result₄
+ 620. copy_constant $62 = 0x41100000 (9.0)
+ 621. copy_constant $63 = 0x41100000 (9.0)
+ 622. copy_constant $64 = 0x41100000 (9.0)
+ 623. copy_constant $65 = 0x3F800000 (1.0)
+ 624. cmpeq_4_floats $58..61 = equal($58..61, $62..65)
+ 625. bitwise_and_2_ints $58..59 &= $60..61
+ 626. bitwise_and_int $58 &= $59
+ 627. copy_slot_masked [loop_operator_eq].result = Mask($58)
+ 628. trace_var TraceVar([loop_operator_eq].result) when $40 is true
+ 629. trace_scope TraceScope(-1) when $57 is true
+ 630. trace_exit TraceExit(bool loop_operator_eq()) when $40 is true
+ 631. copy_slot_unmasked $57 = [loop_operator_eq].result
+ 632. label label 0x00000025
+ 633. copy_slot_masked $56 = Mask($57)
+ 634. label label 0x00000002
+ 635. load_condition_mask CondMask = $66
+ 636. zero_slot_unmasked $11 = 0
+ 637. merge_condition_mask CondMask = $55 & $56
+ 638. branch_if_no_lanes_active branch_if_no_lanes_active +59 (label 1 at #697)
+ 639. trace_enter TraceEnter(bool loop_operator_ne()) when $40 is true
+ 640. zero_slot_unmasked $12 = 0
+ 641. copy_slot_unmasked $13 = $40
+ 642. copy_slot_masked $12 = Mask($13)
+ 643. trace_scope TraceScope(+1) when $12 is true
+ 644. trace_line TraceLine(95) when $40 is true
+ 645. trace_line TraceLine(97) when $40 is true
+ 646. copy_constant $13 = 0x41100000 (9.0)
+ 647. swizzle_4 $13..16 = ($13..16).xxxx
+ 648. copy_4_slots_unmasked result₅ = $13..16
+ 649. trace_var TraceVar(result₅) when $40 is true
+ 650. zero_slot_unmasked $13 = 0
+ 651. copy_slot_unmasked $14 = $40
+ 652. copy_slot_masked $13 = Mask($14)
+ 653. trace_scope TraceScope(+1) when $13 is true
+ 654. branch_if_no_lanes_active branch_if_no_lanes_active +25 (label 41 at #679)
+ 655. trace_line TraceLine(98) when $40 is true
+ 656. copy_constant i₉ = 0x3F800000 (1.0)
+ 657. trace_var TraceVar(i₉) when $40 is true
+ 658. label label 0x0000002A
+ 659. zero_slot_unmasked $14 = 0
+ 660. copy_slot_unmasked $15 = $40
+ 661. copy_slot_masked $14 = Mask($15)
+ 662. trace_scope TraceScope(+1) when $14 is true
+ 663. trace_line TraceLine(99) when $40 is true
+ 664. copy_4_slots_unmasked $15..18 = result₅(1..3), i₉
+ 665. copy_4_slots_masked result₅ = Mask($15..18)
+ 666. trace_var TraceVar(result₅) when $40 is true
+ 667. trace_scope TraceScope(-1) when $14 is true
+ 668. trace_line TraceLine(98) when $40 is true
+ 669. copy_slot_unmasked $14 = i₉
+ 670. copy_constant $15 = 0x3F800000 (1.0)
+ 671. add_float $14 += $15
+ 672. copy_slot_masked i₉ = Mask($14)
+ 673. trace_var TraceVar(i₉) when $40 is true
+ 674. copy_slot_unmasked $14 = i₉
+ 675. copy_constant $15 = 0x40800000 (4.0)
+ 676. cmpne_float $14 = notEqual($14, $15)
+ 677. stack_rewind
+ 678. branch_if_no_active_lanes_eq branch -20 (label 42 at #658) if no lanes of $14 == 0x00000000 (0.0)
+ 679. label label 0x00000029
+ 680. trace_scope TraceScope(-1) when $13 is true
+ 681. trace_line TraceLine(101) when $40 is true
+ 682. copy_4_slots_unmasked $13..16 = result₅
+ 683. copy_constant $17 = 0x41100000 (9.0)
+ 684. copy_constant $18 = 0x3F800000 (1.0)
+ 685. copy_constant $19 = 0x40000000 (2.0)
+ 686. copy_constant $20 = 0x40400000 (3.0)
+ 687. cmpeq_4_floats $13..16 = equal($13..16, $17..20)
+ 688. bitwise_and_2_ints $13..14 &= $15..16
+ 689. bitwise_and_int $13 &= $14
+ 690. copy_slot_masked [loop_operator_ne].result = Mask($13)
+ 691. trace_var TraceVar([loop_operator_ne].result) when $40 is true
+ 692. trace_scope TraceScope(-1) when $12 is true
+ 693. trace_exit TraceExit(bool loop_operator_ne()) when $40 is true
+ 694. copy_slot_unmasked $12 = [loop_operator_ne].result
+ 695. label label 0x00000028
+ 696. copy_slot_masked $11 = Mask($12)
+ 697. label label 0x00000001
+ 698. load_condition_mask CondMask = $55
+ 699. swizzle_4 $11..14 = ($11..14).xxxx
+ 700. copy_4_constants $15..18 = colorRed
+ 701. copy_4_constants $19..22 = colorGreen
+ 702. mix_4_ints $11..14 = mix($15..18, $19..22, $11..14)
+ 703. copy_4_slots_unmasked [main].result = $11..14
+ 704. trace_var TraceVar([main].result) when $40 is true
+ 705. trace_scope TraceScope(-1) when $10 is true
+ 706. trace_exit TraceExit(half4 main(float2 pos)) when $40 is true
+ 707. load_src src.rgba = [main].result
diff --git a/tests/sksl/runtime/LoopInt.skrp b/tests/sksl/runtime/LoopInt.skrp
index 54ebbeb..8c75435 100644
--- a/tests/sksl/runtime/LoopInt.skrp
+++ b/tests/sksl/runtime/LoopInt.skrp
@@ -1,555 +1,648 @@
- 1. store_device_xy01 $26..29 = DeviceCoords.xy01
- 2. copy_constant $28 = 0x3F000000 (0.5)
- 3. copy_constant $29 = 0x3F000000 (0.5)
- 4. cmpeq_2_floats $26..27 = equal($26..27, $28..29)
- 5. bitwise_and_int $26 &= $27
+ 1. store_device_xy01 $35..38 = DeviceCoords.xy01
+ 2. copy_constant $37 = 0x3F000000 (0.5)
+ 3. copy_constant $38 = 0x3F000000 (0.5)
+ 4. cmpeq_2_floats $35..36 = equal($35..36, $37..38)
+ 5. bitwise_and_int $35 &= $36
6. store_src_rg pos = src.rg
7. init_lane_masks CondMask = LoopMask = RetMask = true
8. zero_slot_unmasked kZero = 0
- 9. trace_var TraceVar(kZero) when $26 is true
+ 9. trace_var TraceVar(kZero) when $35 is true
10. copy_constant kTen = 0x0000000A (1.401298e-44)
- 11. trace_var TraceVar(kTen) when $26 is true
- 12. trace_enter TraceEnter(half4 main(float2 pos)) when $26 is true
- 13. trace_var TraceVar(pos) when $26 is true
- 14. trace_scope TraceScope(+1) when $26 is true
- 15. trace_line TraceLine(107) when $26 is true
- 16. copy_slot_unmasked $2 = pos(0)
- 17. copy_constant $3 = colorGreen(1)
- 18. max_float $2 = max($2, $3)
- 19. copy_constant $3 = colorGreen(3)
- 20. min_float $2 = min($2, $3)
- 21. cast_to_int_from_float $2 = FloatToInt($2)
- 22. copy_constant $3 = 0x00000005 (7.006492e-45)
- 23. mul_int $2 *= $3
- 24. copy_slot_unmasked five = $2
- 25. trace_var TraceVar(five) when $26 is true
- 26. trace_line TraceLine(111) when $26 is true
- 27. store_condition_mask $40 = CondMask
- 28. store_condition_mask $50 = CondMask
- 29. store_condition_mask $30 = CondMask
- 30. store_condition_mask $76 = CondMask
- 31. store_condition_mask $60 = CondMask
- 32. store_condition_mask $20 = CondMask
- 33. store_condition_mask $70 = CondMask
- 34. store_condition_mask $14 = CondMask
- 35. branch_if_no_lanes_active branch_if_no_lanes_active +54 (label 9 at #89)
- 36. copy_slot_unmasked five₁ = five
- 37. trace_var TraceVar(five₁) when $26 is true
- 38. trace_enter TraceEnter(int return_loop(int five)) when $26 is true
- 39. store_return_mask $15 = RetMask
- 40. trace_scope TraceScope(+1) when $26 is true
- 41. trace_scope TraceScope(+1) when $26 is true
- 42. trace_line TraceLine(8) when $26 is true
- 43. copy_slot_unmasked i = kZero
- 44. trace_var TraceVar(i) when $26 is true
- 45. store_loop_mask $16 = LoopMask
- 46. jump jump +24 (label 11 at #70)
- 47. label label 0x0000000C
- 48. trace_scope TraceScope(+1) when $26 is true
- 49. trace_line TraceLine(9) when $26 is true
- 50. store_condition_mask $17 = CondMask
- 51. copy_slot_unmasked $18 = i
- 52. copy_slot_unmasked $19 = five₁
- 53. cmpeq_int $18 = equal($18, $19)
- 54. merge_condition_mask CondMask = $17 & $18
- 55. trace_scope TraceScope(+1) when $26 is true
- 56. trace_line TraceLine(9) when $26 is true
- 57. copy_slot_unmasked $19 = i
- 58. copy_slot_masked [return_loop].result = Mask($19)
- 59. trace_var TraceVar([return_loop].result) when $26 is true
- 60. mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask)
- 61. trace_scope TraceScope(-1) when $26 is true
- 62. load_condition_mask CondMask = $17
- 63. trace_scope TraceScope(-1) when $26 is true
- 64. trace_line TraceLine(8) when $26 is true
- 65. copy_slot_unmasked $17 = i
- 66. copy_constant $18 = 0x00000001 (1.401298e-45)
- 67. add_int $17 += $18
- 68. copy_slot_masked i = Mask($17)
- 69. trace_var TraceVar(i) when $26 is true
- 70. label label 0x0000000B
- 71. copy_slot_unmasked $17 = i
- 72. copy_constant $18 = 0x0000000A (1.401298e-44)
- 73. cmplt_int $17 = lessThan($17, $18)
- 74. merge_loop_mask LoopMask &= $17
- 75. stack_rewind
- 76. branch_if_any_lanes_active branch_if_any_lanes_active -29 (label 12 at #47)
- 77. label label 0x0000000A
- 78. load_loop_mask LoopMask = $16
- 79. trace_scope TraceScope(-1) when $26 is true
- 80. trace_line TraceLine(11) when $26 is true
- 81. zero_slot_unmasked $16 = 0
- 82. copy_slot_masked [return_loop].result = Mask($16)
- 83. trace_var TraceVar([return_loop].result) when $26 is true
- 84. mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask)
- 85. trace_scope TraceScope(-1) when $26 is true
- 86. load_return_mask RetMask = $15
- 87. trace_exit TraceExit(int return_loop(int five)) when $26 is true
- 88. copy_slot_unmasked $15 = [return_loop].result
- 89. label label 0x00000009
- 90. copy_constant $16 = 0x00000005 (7.006492e-45)
- 91. cmpeq_int $15 = equal($15, $16)
- 92. zero_slot_unmasked $71 = 0
- 93. merge_condition_mask CondMask = $14 & $15
- 94. branch_if_no_lanes_active branch_if_no_lanes_active +64 (label 8 at #158)
- 95. copy_slot_unmasked five₂ = five
- 96. trace_var TraceVar(five₂) when $26 is true
- 97. trace_enter TraceEnter(int continue_loop(int five)) when $26 is true
- 98. trace_scope TraceScope(+1) when $26 is true
- 99. trace_line TraceLine(17) when $26 is true
- 100. zero_slot_unmasked sum = 0
- 101. trace_var TraceVar(sum) when $26 is true
- 102. trace_scope TraceScope(+1) when $26 is true
- 103. trace_line TraceLine(18) when $26 is true
- 104. zero_slot_unmasked i₁ = 0
- 105. trace_var TraceVar(i₁) when $26 is true
- 106. store_loop_mask $72 = LoopMask
- 107. jump jump +30 (label 15 at #137)
- 108. label label 0x00000010
- 109. zero_slot_unmasked $0 = 0
- 110. trace_scope TraceScope(+1) when $26 is true
- 111. trace_line TraceLine(19) when $26 is true
- 112. store_condition_mask $73 = CondMask
- 113. copy_slot_unmasked $74 = i₁
- 114. copy_slot_unmasked $75 = five₂
- 115. cmplt_int $74 = lessThan($74, $75)
- 116. merge_condition_mask CondMask = $73 & $74
- 117. trace_scope TraceScope(+1) when $26 is true
- 118. trace_line TraceLine(19) when $26 is true
- 119. copy_constant $1 = 0xFFFFFFFF
- 120. copy_slot_masked $0 = Mask($1)
- 121. mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask)
- 122. trace_scope TraceScope(-1) when $26 is true
- 123. load_condition_mask CondMask = $73
- 124. trace_line TraceLine(20) when $26 is true
- 125. copy_2_slots_unmasked $73..74 = sum, i₁
- 126. add_int $73 += $74
- 127. copy_slot_masked sum = Mask($73)
- 128. trace_var TraceVar(sum) when $26 is true
- 129. trace_scope TraceScope(-1) when $26 is true
- 130. reenable_loop_mask LoopMask |= $0
- 131. trace_line TraceLine(18) when $26 is true
- 132. copy_slot_unmasked $73 = i₁
- 133. copy_constant $74 = 0x00000001 (1.401298e-45)
- 134. add_int $73 += $74
- 135. copy_slot_masked i₁ = Mask($73)
- 136. trace_var TraceVar(i₁) when $26 is true
- 137. label label 0x0000000F
- 138. copy_slot_unmasked $73 = i₁
- 139. copy_slot_unmasked $74 = kTen
- 140. cmplt_int $73 = lessThan($73, $74)
- 141. merge_loop_mask LoopMask &= $73
- 142. stack_rewind
- 143. branch_if_any_lanes_active branch_if_any_lanes_active -35 (label 16 at #108)
- 144. label label 0x0000000E
- 145. load_loop_mask LoopMask = $72
- 146. trace_scope TraceScope(-1) when $26 is true
- 147. trace_line TraceLine(22) when $26 is true
- 148. copy_slot_unmasked $72 = sum
- 149. copy_slot_masked [continue_loop].result = Mask($72)
- 150. trace_var TraceVar([continue_loop].result) when $26 is true
- 151. trace_scope TraceScope(-1) when $26 is true
- 152. trace_exit TraceExit(int continue_loop(int five)) when $26 is true
- 153. copy_slot_unmasked $72 = [continue_loop].result
- 154. label label 0x0000000D
- 155. copy_constant $73 = 0x00000023 (4.904545e-44)
- 156. cmpeq_int $72 = equal($72, $73)
- 157. copy_slot_masked $71 = Mask($72)
- 158. label label 0x00000008
- 159. load_condition_mask CondMask = $14
- 160. zero_slot_unmasked $21 = 0
- 161. merge_condition_mask CondMask = $70 & $71
- 162. branch_if_no_lanes_active branch_if_no_lanes_active +65 (label 7 at #227)
- 163. copy_constant five₃ = 0x00000005 (7.006492e-45)
- 164. trace_var TraceVar(five₃) when $26 is true
- 165. trace_enter TraceEnter(int break_loop(int five)) when $26 is true
- 166. trace_scope TraceScope(+1) when $26 is true
- 167. trace_line TraceLine(27) when $26 is true
- 168. zero_slot_unmasked sum₁ = 0
- 169. trace_var TraceVar(sum₁) when $26 is true
- 170. trace_line TraceLine(28) when $26 is true
- 171. copy_constant kOne = 0x00000001 (1.401298e-45)
- 172. trace_var TraceVar(kOne) when $26 is true
- 173. trace_scope TraceScope(+1) when $26 is true
- 174. trace_line TraceLine(29) when $26 is true
- 175. zero_slot_unmasked i₂ = 0
- 176. trace_var TraceVar(i₂) when $26 is true
- 177. store_loop_mask $22 = LoopMask
- 178. jump jump +28 (label 19 at #206)
- 179. label label 0x00000014
- 180. trace_scope TraceScope(+1) when $26 is true
- 181. trace_line TraceLine(30) when $26 is true
- 182. store_condition_mask $23 = CondMask
- 183. copy_slot_unmasked $24 = five₃
- 184. copy_slot_unmasked $25 = i₂
- 185. cmplt_int $24 = lessThan($24, $25)
- 186. merge_condition_mask CondMask = $23 & $24
- 187. trace_scope TraceScope(+1) when $26 is true
- 188. trace_line TraceLine(30) when $26 is true
- 189. branch_if_all_lanes_active branch_if_all_lanes_active +24 (label 18 at #213)
- 190. mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask)
- 191. trace_scope TraceScope(-1) when $26 is true
- 192. load_condition_mask CondMask = $23
- 193. trace_line TraceLine(31) when $26 is true
- 194. copy_slot_unmasked $23 = sum₁
- 195. copy_slot_unmasked $24 = i₂
- 196. add_int $23 += $24
- 197. copy_slot_masked sum₁ = Mask($23)
- 198. trace_var TraceVar(sum₁) when $26 is true
- 199. trace_scope TraceScope(-1) when $26 is true
- 200. trace_line TraceLine(29) when $26 is true
- 201. copy_slot_unmasked $23 = i₂
- 202. copy_slot_unmasked $24 = kOne
- 203. add_int $23 += $24
- 204. copy_slot_masked i₂ = Mask($23)
- 205. trace_var TraceVar(i₂) when $26 is true
- 206. label label 0x00000013
- 207. copy_slot_unmasked $23 = i₂
- 208. copy_constant $24 = 0x0000000A (1.401298e-44)
- 209. cmplt_int $23 = lessThan($23, $24)
- 210. merge_loop_mask LoopMask &= $23
- 211. stack_rewind
- 212. branch_if_any_lanes_active branch_if_any_lanes_active -33 (label 20 at #179)
- 213. label label 0x00000012
- 214. load_loop_mask LoopMask = $22
- 215. trace_scope TraceScope(-1) when $26 is true
- 216. trace_line TraceLine(33) when $26 is true
- 217. copy_slot_unmasked $22 = sum₁
- 218. copy_slot_masked [break_loop].result = Mask($22)
- 219. trace_var TraceVar([break_loop].result) when $26 is true
- 220. trace_scope TraceScope(-1) when $26 is true
- 221. trace_exit TraceExit(int break_loop(int five)) when $26 is true
- 222. copy_slot_unmasked $22 = [break_loop].result
- 223. label label 0x00000011
- 224. copy_constant $23 = 0x0000000F (2.101948e-44)
- 225. cmpeq_int $22 = equal($22, $23)
- 226. copy_slot_masked $21 = Mask($22)
- 227. label label 0x00000007
- 228. load_condition_mask CondMask = $70
- 229. zero_slot_unmasked $61 = 0
- 230. merge_condition_mask CondMask = $20 & $21
- 231. branch_if_no_lanes_active branch_if_no_lanes_active +51 (label 6 at #282)
- 232. trace_enter TraceEnter(bool loop_operator_le()) when $26 is true
- 233. trace_scope TraceScope(+1) when $26 is true
- 234. trace_line TraceLine(38) when $26 is true
- 235. trace_line TraceLine(39) when $26 is true
- 236. trace_line TraceLine(41) when $26 is true
- 237. copy_constant $62 = 0x00000009 (1.261169e-44)
- 238. swizzle_4 $62..65 = ($62..65).xxxx
- 239. copy_4_slots_unmasked result = $62..65
- 240. trace_var TraceVar(result) when $26 is true
- 241. trace_scope TraceScope(+1) when $26 is true
- 242. branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 22 at #264)
- 243. trace_line TraceLine(42) when $26 is true
- 244. copy_constant i₃ = 0x00000001 (1.401298e-45)
- 245. trace_var TraceVar(i₃) when $26 is true
- 246. label label 0x00000017
- 247. trace_scope TraceScope(+1) when $26 is true
- 248. trace_line TraceLine(43) when $26 is true
- 249. copy_4_slots_unmasked $62..65 = result(1..3), i₃
- 250. copy_4_slots_masked result = Mask($62..65)
- 251. trace_var TraceVar(result) when $26 is true
- 252. trace_scope TraceScope(-1) when $26 is true
- 253. trace_line TraceLine(42) when $26 is true
- 254. copy_slot_unmasked $62 = i₃
- 255. copy_constant $63 = 0x00000001 (1.401298e-45)
- 256. add_int $62 += $63
- 257. copy_slot_masked i₃ = Mask($62)
- 258. trace_var TraceVar(i₃) when $26 is true
- 259. copy_slot_unmasked $62 = i₃
- 260. copy_constant $63 = 0x00000003 (4.203895e-45)
- 261. cmple_int $62 = lessThanEqual($62, $63)
- 262. stack_rewind
- 263. branch_if_no_active_lanes_eq branch -17 (label 23 at #246) if no lanes of $62 == 0x00000000 (0.0)
- 264. label label 0x00000016
- 265. trace_scope TraceScope(-1) when $26 is true
- 266. trace_line TraceLine(45) when $26 is true
- 267. copy_4_slots_unmasked $62..65 = result
- 268. copy_constant $66 = 0x00000009 (1.261169e-44)
- 269. copy_constant $67 = 0x00000001 (1.401298e-45)
- 270. copy_constant $68 = 0x00000002 (2.802597e-45)
- 271. copy_constant $69 = 0x00000003 (4.203895e-45)
- 272. cmpeq_4_ints $62..65 = equal($62..65, $66..69)
- 273. bitwise_and_2_ints $62..63 &= $64..65
- 274. bitwise_and_int $62 &= $63
- 275. copy_slot_masked [loop_operator_le].result = Mask($62)
- 276. trace_var TraceVar([loop_operator_le].result) when $26 is true
- 277. trace_scope TraceScope(-1) when $26 is true
- 278. trace_exit TraceExit(bool loop_operator_le()) when $26 is true
- 279. copy_slot_unmasked $62 = [loop_operator_le].result
- 280. label label 0x00000015
- 281. copy_slot_masked $61 = Mask($62)
- 282. label label 0x00000006
- 283. load_condition_mask CondMask = $20
- 284. zero_slot_unmasked $77 = 0
- 285. merge_condition_mask CondMask = $60 & $61
- 286. branch_if_no_lanes_active branch_if_no_lanes_active +51 (label 5 at #337)
- 287. trace_enter TraceEnter(bool loop_operator_lt()) when $26 is true
- 288. trace_scope TraceScope(+1) when $26 is true
- 289. trace_line TraceLine(50) when $26 is true
- 290. trace_line TraceLine(51) when $26 is true
- 291. trace_line TraceLine(53) when $26 is true
- 292. copy_constant $78 = 0x00000009 (1.261169e-44)
- 293. swizzle_4 $78..81 = ($78..81).xxxx
- 294. copy_4_slots_unmasked result₁ = $78..81
- 295. trace_var TraceVar(result₁) when $26 is true
- 296. trace_scope TraceScope(+1) when $26 is true
- 297. branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 25 at #319)
- 298. trace_line TraceLine(54) when $26 is true
- 299. copy_constant i₄ = 0x00000001 (1.401298e-45)
- 300. trace_var TraceVar(i₄) when $26 is true
- 301. label label 0x0000001A
- 302. trace_scope TraceScope(+1) when $26 is true
- 303. trace_line TraceLine(55) when $26 is true
- 304. copy_4_slots_unmasked $78..81 = result₁(1..3), i₄
- 305. copy_4_slots_masked result₁ = Mask($78..81)
- 306. trace_var TraceVar(result₁) when $26 is true
- 307. trace_scope TraceScope(-1) when $26 is true
- 308. trace_line TraceLine(54) when $26 is true
- 309. copy_slot_unmasked $78 = i₄
- 310. copy_constant $79 = 0x00000001 (1.401298e-45)
- 311. add_int $78 += $79
- 312. copy_slot_masked i₄ = Mask($78)
- 313. trace_var TraceVar(i₄) when $26 is true
- 314. copy_slot_unmasked $78 = i₄
- 315. copy_constant $79 = 0x00000004 (5.605194e-45)
- 316. cmplt_int $78 = lessThan($78, $79)
- 317. stack_rewind
- 318. branch_if_no_active_lanes_eq branch -17 (label 26 at #301) if no lanes of $78 == 0x00000000 (0.0)
- 319. label label 0x00000019
- 320. trace_scope TraceScope(-1) when $26 is true
- 321. trace_line TraceLine(57) when $26 is true
- 322. copy_4_slots_unmasked $78..81 = result₁
- 323. copy_constant $82 = 0x00000009 (1.261169e-44)
- 324. copy_constant $83 = 0x00000001 (1.401298e-45)
- 325. copy_constant $84 = 0x00000002 (2.802597e-45)
- 326. copy_constant $85 = 0x00000003 (4.203895e-45)
- 327. cmpeq_4_ints $78..81 = equal($78..81, $82..85)
- 328. bitwise_and_2_ints $78..79 &= $80..81
- 329. bitwise_and_int $78 &= $79
- 330. copy_slot_masked [loop_operator_lt].result = Mask($78)
- 331. trace_var TraceVar([loop_operator_lt].result) when $26 is true
- 332. trace_scope TraceScope(-1) when $26 is true
- 333. trace_exit TraceExit(bool loop_operator_lt()) when $26 is true
- 334. copy_slot_unmasked $78 = [loop_operator_lt].result
- 335. label label 0x00000018
- 336. copy_slot_masked $77 = Mask($78)
- 337. label label 0x00000005
- 338. load_condition_mask CondMask = $60
- 339. zero_slot_unmasked $31 = 0
- 340. merge_condition_mask CondMask = $76 & $77
- 341. branch_if_no_lanes_active branch_if_no_lanes_active +51 (label 4 at #392)
- 342. trace_enter TraceEnter(bool loop_operator_ge()) when $26 is true
- 343. trace_scope TraceScope(+1) when $26 is true
- 344. trace_line TraceLine(62) when $26 is true
- 345. trace_line TraceLine(63) when $26 is true
- 346. trace_line TraceLine(65) when $26 is true
- 347. copy_constant $32 = 0x00000009 (1.261169e-44)
- 348. swizzle_4 $32..35 = ($32..35).xxxx
- 349. copy_4_slots_unmasked result₂ = $32..35
- 350. trace_var TraceVar(result₂) when $26 is true
- 351. trace_scope TraceScope(+1) when $26 is true
- 352. branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 28 at #374)
- 353. trace_line TraceLine(66) when $26 is true
- 354. copy_constant i₅ = 0x00000003 (4.203895e-45)
- 355. trace_var TraceVar(i₅) when $26 is true
- 356. label label 0x0000001D
- 357. trace_scope TraceScope(+1) when $26 is true
- 358. trace_line TraceLine(67) when $26 is true
- 359. copy_4_slots_unmasked $32..35 = result₂(1..3), i₅
- 360. copy_4_slots_masked result₂ = Mask($32..35)
- 361. trace_var TraceVar(result₂) when $26 is true
- 362. trace_scope TraceScope(-1) when $26 is true
- 363. trace_line TraceLine(66) when $26 is true
- 364. copy_slot_unmasked $32 = i₅
- 365. copy_constant $33 = 0x00000001 (1.401298e-45)
- 366. sub_int $32 -= $33
- 367. copy_slot_masked i₅ = Mask($32)
- 368. trace_var TraceVar(i₅) when $26 is true
- 369. copy_constant $32 = 0x00000001 (1.401298e-45)
- 370. copy_slot_unmasked $33 = i₅
- 371. cmple_int $32 = lessThanEqual($32, $33)
- 372. stack_rewind
- 373. branch_if_no_active_lanes_eq branch -17 (label 29 at #356) if no lanes of $32 == 0x00000000 (0.0)
- 374. label label 0x0000001C
- 375. trace_scope TraceScope(-1) when $26 is true
- 376. trace_line TraceLine(69) when $26 is true
- 377. copy_4_slots_unmasked $32..35 = result₂
- 378. copy_constant $36 = 0x00000009 (1.261169e-44)
- 379. copy_constant $37 = 0x00000003 (4.203895e-45)
- 380. copy_constant $38 = 0x00000002 (2.802597e-45)
- 381. copy_constant $39 = 0x00000001 (1.401298e-45)
- 382. cmpeq_4_ints $32..35 = equal($32..35, $36..39)
- 383. bitwise_and_2_ints $32..33 &= $34..35
- 384. bitwise_and_int $32 &= $33
- 385. copy_slot_masked [loop_operator_ge].result = Mask($32)
- 386. trace_var TraceVar([loop_operator_ge].result) when $26 is true
- 387. trace_scope TraceScope(-1) when $26 is true
- 388. trace_exit TraceExit(bool loop_operator_ge()) when $26 is true
- 389. copy_slot_unmasked $32 = [loop_operator_ge].result
- 390. label label 0x0000001B
- 391. copy_slot_masked $31 = Mask($32)
- 392. label label 0x00000004
- 393. load_condition_mask CondMask = $76
- 394. zero_slot_unmasked $51 = 0
- 395. merge_condition_mask CondMask = $30 & $31
- 396. branch_if_no_lanes_active branch_if_no_lanes_active +51 (label 3 at #447)
- 397. trace_enter TraceEnter(bool loop_operator_gt()) when $26 is true
- 398. trace_scope TraceScope(+1) when $26 is true
- 399. trace_line TraceLine(74) when $26 is true
- 400. trace_line TraceLine(75) when $26 is true
- 401. trace_line TraceLine(77) when $26 is true
- 402. copy_constant $52 = 0x00000009 (1.261169e-44)
- 403. swizzle_4 $52..55 = ($52..55).xxxx
- 404. copy_4_slots_unmasked result₃ = $52..55
- 405. trace_var TraceVar(result₃) when $26 is true
- 406. trace_scope TraceScope(+1) when $26 is true
- 407. branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 31 at #429)
- 408. trace_line TraceLine(78) when $26 is true
- 409. copy_constant i₆ = 0x00000003 (4.203895e-45)
- 410. trace_var TraceVar(i₆) when $26 is true
- 411. label label 0x00000020
- 412. trace_scope TraceScope(+1) when $26 is true
- 413. trace_line TraceLine(79) when $26 is true
- 414. copy_4_slots_unmasked $52..55 = result₃(1..3), i₆
- 415. copy_4_slots_masked result₃ = Mask($52..55)
- 416. trace_var TraceVar(result₃) when $26 is true
- 417. trace_scope TraceScope(-1) when $26 is true
- 418. trace_line TraceLine(78) when $26 is true
- 419. copy_slot_unmasked $52 = i₆
- 420. copy_constant $53 = 0x00000001 (1.401298e-45)
- 421. sub_int $52 -= $53
- 422. copy_slot_masked i₆ = Mask($52)
- 423. trace_var TraceVar(i₆) when $26 is true
- 424. zero_slot_unmasked $52 = 0
- 425. copy_slot_unmasked $53 = i₆
- 426. cmplt_int $52 = lessThan($52, $53)
- 427. stack_rewind
- 428. branch_if_no_active_lanes_eq branch -17 (label 32 at #411) if no lanes of $52 == 0x00000000 (0.0)
- 429. label label 0x0000001F
- 430. trace_scope TraceScope(-1) when $26 is true
- 431. trace_line TraceLine(81) when $26 is true
- 432. copy_4_slots_unmasked $52..55 = result₃
- 433. copy_constant $56 = 0x00000009 (1.261169e-44)
- 434. copy_constant $57 = 0x00000003 (4.203895e-45)
- 435. copy_constant $58 = 0x00000002 (2.802597e-45)
- 436. copy_constant $59 = 0x00000001 (1.401298e-45)
- 437. cmpeq_4_ints $52..55 = equal($52..55, $56..59)
- 438. bitwise_and_2_ints $52..53 &= $54..55
- 439. bitwise_and_int $52 &= $53
- 440. copy_slot_masked [loop_operator_gt].result = Mask($52)
- 441. trace_var TraceVar([loop_operator_gt].result) when $26 is true
- 442. trace_scope TraceScope(-1) when $26 is true
- 443. trace_exit TraceExit(bool loop_operator_gt()) when $26 is true
- 444. copy_slot_unmasked $52 = [loop_operator_gt].result
- 445. label label 0x0000001E
- 446. copy_slot_masked $51 = Mask($52)
- 447. label label 0x00000003
- 448. load_condition_mask CondMask = $30
- 449. zero_slot_unmasked $41 = 0
- 450. merge_condition_mask CondMask = $50 & $51
- 451. branch_if_no_lanes_active branch_if_no_lanes_active +40 (label 2 at #491)
- 452. trace_enter TraceEnter(bool loop_operator_eq()) when $26 is true
- 453. trace_scope TraceScope(+1) when $26 is true
- 454. trace_line TraceLine(97) when $26 is true
- 455. trace_line TraceLine(99) when $26 is true
- 456. copy_constant $42 = 0x00000009 (1.261169e-44)
- 457. swizzle_4 $42..45 = ($42..45).xxxx
- 458. copy_4_slots_unmasked result₄ = $42..45
- 459. trace_var TraceVar(result₄) when $26 is true
- 460. trace_scope TraceScope(+1) when $26 is true
- 461. branch_if_no_lanes_active branch_if_no_lanes_active +12 (label 34 at #473)
- 462. trace_line TraceLine(100) when $26 is true
- 463. copy_constant i₇ = 0x00000001 (1.401298e-45)
- 464. trace_var TraceVar(i₇) when $26 is true
- 465. label label 0x00000023
- 466. trace_scope TraceScope(+1) when $26 is true
- 467. trace_line TraceLine(101) when $26 is true
- 468. copy_4_slots_unmasked $42..45 = result₄(1..3), i₇
- 469. copy_4_slots_masked result₄ = Mask($42..45)
- 470. trace_var TraceVar(result₄) when $26 is true
- 471. trace_scope TraceScope(-1) when $26 is true
- 472. trace_line TraceLine(100) when $26 is true
- 473. label label 0x00000022
- 474. trace_scope TraceScope(-1) when $26 is true
- 475. trace_line TraceLine(103) when $26 is true
- 476. copy_4_slots_unmasked $42..45 = result₄
- 477. copy_constant $46 = 0x00000009 (1.261169e-44)
- 478. copy_constant $47 = 0x00000009 (1.261169e-44)
- 479. copy_constant $48 = 0x00000009 (1.261169e-44)
- 480. copy_constant $49 = 0x00000001 (1.401298e-45)
- 481. cmpeq_4_ints $42..45 = equal($42..45, $46..49)
- 482. bitwise_and_2_ints $42..43 &= $44..45
- 483. bitwise_and_int $42 &= $43
- 484. copy_slot_masked [loop_operator_eq].result = Mask($42)
- 485. trace_var TraceVar([loop_operator_eq].result) when $26 is true
- 486. trace_scope TraceScope(-1) when $26 is true
- 487. trace_exit TraceExit(bool loop_operator_eq()) when $26 is true
- 488. copy_slot_unmasked $42 = [loop_operator_eq].result
- 489. label label 0x00000021
- 490. copy_slot_masked $41 = Mask($42)
- 491. label label 0x00000002
- 492. load_condition_mask CondMask = $50
- 493. zero_slot_unmasked $2 = 0
- 494. merge_condition_mask CondMask = $40 & $41
- 495. branch_if_no_lanes_active branch_if_no_lanes_active +50 (label 1 at #545)
- 496. trace_enter TraceEnter(bool loop_operator_ne()) when $26 is true
- 497. trace_scope TraceScope(+1) when $26 is true
- 498. trace_line TraceLine(86) when $26 is true
- 499. trace_line TraceLine(88) when $26 is true
- 500. copy_constant $3 = 0x00000009 (1.261169e-44)
- 501. swizzle_4 $3..6 = ($3..6).xxxx
- 502. copy_4_slots_unmasked result₅ = $3..6
- 503. trace_var TraceVar(result₅) when $26 is true
- 504. trace_scope TraceScope(+1) when $26 is true
- 505. branch_if_no_lanes_active branch_if_no_lanes_active +22 (label 37 at #527)
- 506. trace_line TraceLine(89) when $26 is true
- 507. copy_constant i₈ = 0x00000001 (1.401298e-45)
- 508. trace_var TraceVar(i₈) when $26 is true
- 509. label label 0x00000026
- 510. trace_scope TraceScope(+1) when $26 is true
- 511. trace_line TraceLine(90) when $26 is true
- 512. copy_4_slots_unmasked $3..6 = result₅(1..3), i₈
- 513. copy_4_slots_masked result₅ = Mask($3..6)
- 514. trace_var TraceVar(result₅) when $26 is true
- 515. trace_scope TraceScope(-1) when $26 is true
- 516. trace_line TraceLine(89) when $26 is true
- 517. copy_slot_unmasked $3 = i₈
- 518. copy_constant $4 = 0x00000001 (1.401298e-45)
- 519. add_int $3 += $4
- 520. copy_slot_masked i₈ = Mask($3)
- 521. trace_var TraceVar(i₈) when $26 is true
- 522. copy_slot_unmasked $3 = i₈
- 523. copy_constant $4 = 0x00000004 (5.605194e-45)
- 524. cmpne_int $3 = notEqual($3, $4)
- 525. stack_rewind
- 526. branch_if_no_active_lanes_eq branch -17 (label 38 at #509) if no lanes of $3 == 0x00000000 (0.0)
- 527. label label 0x00000025
- 528. trace_scope TraceScope(-1) when $26 is true
- 529. trace_line TraceLine(92) when $26 is true
- 530. copy_4_slots_unmasked $3..6 = result₅
- 531. copy_constant $7 = 0x00000009 (1.261169e-44)
- 532. copy_constant $8 = 0x00000001 (1.401298e-45)
- 533. copy_constant $9 = 0x00000002 (2.802597e-45)
- 534. copy_constant $10 = 0x00000003 (4.203895e-45)
- 535. cmpeq_4_ints $3..6 = equal($3..6, $7..10)
- 536. bitwise_and_2_ints $3..4 &= $5..6
- 537. bitwise_and_int $3 &= $4
- 538. copy_slot_masked [loop_operator_ne].result = Mask($3)
- 539. trace_var TraceVar([loop_operator_ne].result) when $26 is true
- 540. trace_scope TraceScope(-1) when $26 is true
- 541. trace_exit TraceExit(bool loop_operator_ne()) when $26 is true
- 542. copy_slot_unmasked $3 = [loop_operator_ne].result
- 543. label label 0x00000024
- 544. copy_slot_masked $2 = Mask($3)
- 545. label label 0x00000001
- 546. load_condition_mask CondMask = $40
- 547. swizzle_4 $2..5 = ($2..5).xxxx
- 548. copy_4_constants $6..9 = colorRed
- 549. copy_4_constants $10..13 = colorGreen
- 550. mix_4_ints $2..5 = mix($6..9, $10..13, $2..5)
- 551. copy_4_slots_unmasked [main].result = $2..5
- 552. trace_var TraceVar([main].result) when $26 is true
- 553. trace_scope TraceScope(-1) when $26 is true
- 554. trace_exit TraceExit(half4 main(float2 pos)) when $26 is true
- 555. load_src src.rgba = [main].result
+ 11. trace_var TraceVar(kTen) when $35 is true
+ 12. trace_enter TraceEnter(half4 main(float2 pos)) when $35 is true
+ 13. trace_var TraceVar(pos) when $35 is true
+ 14. zero_slot_unmasked $2 = 0
+ 15. copy_slot_unmasked $3 = $35
+ 16. copy_slot_masked $2 = Mask($3)
+ 17. trace_scope TraceScope(+1) when $2 is true
+ 18. trace_line TraceLine(107) when $35 is true
+ 19. copy_slot_unmasked $3 = pos(0)
+ 20. copy_constant $4 = colorGreen(1)
+ 21. max_float $3 = max($3, $4)
+ 22. copy_constant $4 = colorGreen(3)
+ 23. min_float $3 = min($3, $4)
+ 24. cast_to_int_from_float $3 = FloatToInt($3)
+ 25. copy_constant $4 = 0x00000005 (7.006492e-45)
+ 26. mul_int $3 *= $4
+ 27. copy_slot_unmasked five = $3
+ 28. trace_var TraceVar(five) when $35 is true
+ 29. trace_line TraceLine(111) when $35 is true
+ 30. store_condition_mask $50 = CondMask
+ 31. store_condition_mask $61 = CondMask
+ 32. store_condition_mask $39 = CondMask
+ 33. store_condition_mask $93 = CondMask
+ 34. store_condition_mask $72 = CondMask
+ 35. store_condition_mask $25 = CondMask
+ 36. store_condition_mask $83 = CondMask
+ 37. store_condition_mask $15 = CondMask
+ 38. branch_if_no_lanes_active branch_if_no_lanes_active +66 (label 9 at #104)
+ 39. copy_slot_unmasked five₁ = five
+ 40. trace_var TraceVar(five₁) when $35 is true
+ 41. trace_enter TraceEnter(int return_loop(int five)) when $35 is true
+ 42. store_return_mask $16 = RetMask
+ 43. zero_slot_unmasked $17 = 0
+ 44. copy_slot_unmasked $18 = $35
+ 45. copy_slot_masked $17 = Mask($18)
+ 46. trace_scope TraceScope(+1) when $17 is true
+ 47. zero_slot_unmasked $18 = 0
+ 48. copy_slot_unmasked $19 = $35
+ 49. copy_slot_masked $18 = Mask($19)
+ 50. trace_scope TraceScope(+1) when $18 is true
+ 51. trace_line TraceLine(8) when $35 is true
+ 52. copy_slot_unmasked i = kZero
+ 53. trace_var TraceVar(i) when $35 is true
+ 54. store_loop_mask $19 = LoopMask
+ 55. jump jump +30 (label 11 at #85)
+ 56. label label 0x0000000C
+ 57. zero_slot_unmasked $20 = 0
+ 58. copy_slot_unmasked $21 = $35
+ 59. copy_slot_masked $20 = Mask($21)
+ 60. trace_scope TraceScope(+1) when $20 is true
+ 61. trace_line TraceLine(9) when $35 is true
+ 62. store_condition_mask $21 = CondMask
+ 63. copy_slot_unmasked $22 = i
+ 64. copy_slot_unmasked $23 = five₁
+ 65. cmpeq_int $22 = equal($22, $23)
+ 66. merge_condition_mask CondMask = $21 & $22
+ 67. zero_slot_unmasked $23 = 0
+ 68. copy_slot_unmasked $24 = $35
+ 69. copy_slot_masked $23 = Mask($24)
+ 70. trace_scope TraceScope(+1) when $23 is true
+ 71. trace_line TraceLine(9) when $35 is true
+ 72. copy_slot_unmasked $24 = i
+ 73. copy_slot_masked [return_loop].result = Mask($24)
+ 74. trace_var TraceVar([return_loop].result) when $35 is true
+ 75. mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask)
+ 76. trace_scope TraceScope(-1) when $23 is true
+ 77. load_condition_mask CondMask = $21
+ 78. trace_scope TraceScope(-1) when $20 is true
+ 79. trace_line TraceLine(8) when $35 is true
+ 80. copy_slot_unmasked $20 = i
+ 81. copy_constant $21 = 0x00000001 (1.401298e-45)
+ 82. add_int $20 += $21
+ 83. copy_slot_masked i = Mask($20)
+ 84. trace_var TraceVar(i) when $35 is true
+ 85. label label 0x0000000B
+ 86. copy_slot_unmasked $20 = i
+ 87. copy_constant $21 = 0x0000000A (1.401298e-44)
+ 88. cmplt_int $20 = lessThan($20, $21)
+ 89. merge_loop_mask LoopMask &= $20
+ 90. stack_rewind
+ 91. branch_if_any_lanes_active branch_if_any_lanes_active -35 (label 12 at #56)
+ 92. label label 0x0000000A
+ 93. load_loop_mask LoopMask = $19
+ 94. trace_scope TraceScope(-1) when $18 is true
+ 95. trace_line TraceLine(11) when $35 is true
+ 96. zero_slot_unmasked $18 = 0
+ 97. copy_slot_masked [return_loop].result = Mask($18)
+ 98. trace_var TraceVar([return_loop].result) when $35 is true
+ 99. mask_off_return_mask RetMask &= ~(CondMask & LoopMask & RetMask)
+ 100. trace_scope TraceScope(-1) when $17 is true
+ 101. load_return_mask RetMask = $16
+ 102. trace_exit TraceExit(int return_loop(int five)) when $35 is true
+ 103. copy_slot_unmasked $16 = [return_loop].result
+ 104. label label 0x00000009
+ 105. copy_constant $17 = 0x00000005 (7.006492e-45)
+ 106. cmpeq_int $16 = equal($16, $17)
+ 107. zero_slot_unmasked $84 = 0
+ 108. merge_condition_mask CondMask = $15 & $16
+ 109. branch_if_no_lanes_active branch_if_no_lanes_active +76 (label 8 at #185)
+ 110. copy_slot_unmasked five₂ = five
+ 111. trace_var TraceVar(five₂) when $35 is true
+ 112. trace_enter TraceEnter(int continue_loop(int five)) when $35 is true
+ 113. zero_slot_unmasked $85 = 0
+ 114. copy_slot_unmasked $86 = $35
+ 115. copy_slot_masked $85 = Mask($86)
+ 116. trace_scope TraceScope(+1) when $85 is true
+ 117. trace_line TraceLine(17) when $35 is true
+ 118. zero_slot_unmasked sum = 0
+ 119. trace_var TraceVar(sum) when $35 is true
+ 120. zero_slot_unmasked $86 = 0
+ 121. copy_slot_unmasked $87 = $35
+ 122. copy_slot_masked $86 = Mask($87)
+ 123. trace_scope TraceScope(+1) when $86 is true
+ 124. trace_line TraceLine(18) when $35 is true
+ 125. zero_slot_unmasked i₁ = 0
+ 126. trace_var TraceVar(i₁) when $35 is true
+ 127. store_loop_mask $87 = LoopMask
+ 128. jump jump +36 (label 15 at #164)
+ 129. label label 0x00000010
+ 130. zero_slot_unmasked $0 = 0
+ 131. zero_slot_unmasked $88 = 0
+ 132. copy_slot_unmasked $89 = $35
+ 133. copy_slot_masked $88 = Mask($89)
+ 134. trace_scope TraceScope(+1) when $88 is true
+ 135. trace_line TraceLine(19) when $35 is true
+ 136. store_condition_mask $89 = CondMask
+ 137. copy_slot_unmasked $90 = i₁
+ 138. copy_slot_unmasked $91 = five₂
+ 139. cmplt_int $90 = lessThan($90, $91)
+ 140. merge_condition_mask CondMask = $89 & $90
+ 141. zero_slot_unmasked $91 = 0
+ 142. copy_slot_unmasked $92 = $35
+ 143. copy_slot_masked $91 = Mask($92)
+ 144. trace_scope TraceScope(+1) when $91 is true
+ 145. trace_line TraceLine(19) when $35 is true
+ 146. copy_constant $1 = 0xFFFFFFFF
+ 147. copy_slot_masked $0 = Mask($1)
+ 148. mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask)
+ 149. trace_scope TraceScope(-1) when $91 is true
+ 150. load_condition_mask CondMask = $89
+ 151. trace_line TraceLine(20) when $35 is true
+ 152. copy_2_slots_unmasked $89..90 = sum, i₁
+ 153. add_int $89 += $90
+ 154. copy_slot_masked sum = Mask($89)
+ 155. trace_var TraceVar(sum) when $35 is true
+ 156. trace_scope TraceScope(-1) when $88 is true
+ 157. reenable_loop_mask LoopMask |= $0
+ 158. trace_line TraceLine(18) when $35 is true
+ 159. copy_slot_unmasked $88 = i₁
+ 160. copy_constant $89 = 0x00000001 (1.401298e-45)
+ 161. add_int $88 += $89
+ 162. copy_slot_masked i₁ = Mask($88)
+ 163. trace_var TraceVar(i₁) when $35 is true
+ 164. label label 0x0000000F
+ 165. copy_slot_unmasked $88 = i₁
+ 166. copy_slot_unmasked $89 = kTen
+ 167. cmplt_int $88 = lessThan($88, $89)
+ 168. merge_loop_mask LoopMask &= $88
+ 169. stack_rewind
+ 170. branch_if_any_lanes_active branch_if_any_lanes_active -41 (label 16 at #129)
+ 171. label label 0x0000000E
+ 172. load_loop_mask LoopMask = $87
+ 173. trace_scope TraceScope(-1) when $86 is true
+ 174. trace_line TraceLine(22) when $35 is true
+ 175. copy_slot_unmasked $86 = sum
+ 176. copy_slot_masked [continue_loop].result = Mask($86)
+ 177. trace_var TraceVar([continue_loop].result) when $35 is true
+ 178. trace_scope TraceScope(-1) when $85 is true
+ 179. trace_exit TraceExit(int continue_loop(int five)) when $35 is true
+ 180. copy_slot_unmasked $85 = [continue_loop].result
+ 181. label label 0x0000000D
+ 182. copy_constant $86 = 0x00000023 (4.904545e-44)
+ 183. cmpeq_int $85 = equal($85, $86)
+ 184. copy_slot_masked $84 = Mask($85)
+ 185. label label 0x00000008
+ 186. load_condition_mask CondMask = $15
+ 187. zero_slot_unmasked $26 = 0
+ 188. merge_condition_mask CondMask = $83 & $84
+ 189. branch_if_no_lanes_active branch_if_no_lanes_active +77 (label 7 at #266)
+ 190. copy_constant five₃ = 0x00000005 (7.006492e-45)
+ 191. trace_var TraceVar(five₃) when $35 is true
+ 192. trace_enter TraceEnter(int break_loop(int five)) when $35 is true
+ 193. zero_slot_unmasked $27 = 0
+ 194. copy_slot_unmasked $28 = $35
+ 195. copy_slot_masked $27 = Mask($28)
+ 196. trace_scope TraceScope(+1) when $27 is true
+ 197. trace_line TraceLine(27) when $35 is true
+ 198. zero_slot_unmasked sum₁ = 0
+ 199. trace_var TraceVar(sum₁) when $35 is true
+ 200. trace_line TraceLine(28) when $35 is true
+ 201. copy_constant kOne = 0x00000001 (1.401298e-45)
+ 202. trace_var TraceVar(kOne) when $35 is true
+ 203. zero_slot_unmasked $28 = 0
+ 204. copy_slot_unmasked $29 = $35
+ 205. copy_slot_masked $28 = Mask($29)
+ 206. trace_scope TraceScope(+1) when $28 is true
+ 207. trace_line TraceLine(29) when $35 is true
+ 208. zero_slot_unmasked i₂ = 0
+ 209. trace_var TraceVar(i₂) when $35 is true
+ 210. store_loop_mask $29 = LoopMask
+ 211. jump jump +34 (label 19 at #245)
+ 212. label label 0x00000014
+ 213. zero_slot_unmasked $30 = 0
+ 214. copy_slot_unmasked $31 = $35
+ 215. copy_slot_masked $30 = Mask($31)
+ 216. trace_scope TraceScope(+1) when $30 is true
+ 217. trace_line TraceLine(30) when $35 is true
+ 218. store_condition_mask $31 = CondMask
+ 219. copy_slot_unmasked $32 = five₃
+ 220. copy_slot_unmasked $33 = i₂
+ 221. cmplt_int $32 = lessThan($32, $33)
+ 222. merge_condition_mask CondMask = $31 & $32
+ 223. zero_slot_unmasked $33 = 0
+ 224. copy_slot_unmasked $34 = $35
+ 225. copy_slot_masked $33 = Mask($34)
+ 226. trace_scope TraceScope(+1) when $33 is true
+ 227. trace_line TraceLine(30) when $35 is true
+ 228. branch_if_all_lanes_active branch_if_all_lanes_active +24 (label 18 at #252)
+ 229. mask_off_loop_mask LoopMask &= ~(CondMask & LoopMask & RetMask)
+ 230. trace_scope TraceScope(-1) when $33 is true
+ 231. load_condition_mask CondMask = $31
+ 232. trace_line TraceLine(31) when $35 is true
+ 233. copy_slot_unmasked $31 = sum₁
+ 234. copy_slot_unmasked $32 = i₂
+ 235. add_int $31 += $32
+ 236. copy_slot_masked sum₁ = Mask($31)
+ 237. trace_var TraceVar(sum₁) when $35 is true
+ 238. trace_scope TraceScope(-1) when $30 is true
+ 239. trace_line TraceLine(29) when $35 is true
+ 240. copy_slot_unmasked $30 = i₂
+ 241. copy_slot_unmasked $31 = kOne
+ 242. add_int $30 += $31
+ 243. copy_slot_masked i₂ = Mask($30)
+ 244. trace_var TraceVar(i₂) when $35 is true
+ 245. label label 0x00000013
+ 246. copy_slot_unmasked $30 = i₂
+ 247. copy_constant $31 = 0x0000000A (1.401298e-44)
+ 248. cmplt_int $30 = lessThan($30, $31)
+ 249. merge_loop_mask LoopMask &= $30
+ 250. stack_rewind
+ 251. branch_if_any_lanes_active branch_if_any_lanes_active -39 (label 20 at #212)
+ 252. label label 0x00000012
+ 253. load_loop_mask LoopMask = $29
+ 254. trace_scope TraceScope(-1) when $28 is true
+ 255. trace_line TraceLine(33) when $35 is true
+ 256. copy_slot_unmasked $28 = sum₁
+ 257. copy_slot_masked [break_loop].result = Mask($28)
+ 258. trace_var TraceVar([break_loop].result) when $35 is true
+ 259. trace_scope TraceScope(-1) when $27 is true
+ 260. trace_exit TraceExit(int break_loop(int five)) when $35 is true
+ 261. copy_slot_unmasked $27 = [break_loop].result
+ 262. label label 0x00000011
+ 263. copy_constant $28 = 0x0000000F (2.101948e-44)
+ 264. cmpeq_int $27 = equal($27, $28)
+ 265. copy_slot_masked $26 = Mask($27)
+ 266. label label 0x00000007
+ 267. load_condition_mask CondMask = $83
+ 268. zero_slot_unmasked $73 = 0
+ 269. merge_condition_mask CondMask = $25 & $26
+ 270. branch_if_no_lanes_active branch_if_no_lanes_active +60 (label 6 at #330)
+ 271. trace_enter TraceEnter(bool loop_operator_le()) when $35 is true
+ 272. zero_slot_unmasked $74 = 0
+ 273. copy_slot_unmasked $75 = $35
+ 274. copy_slot_masked $74 = Mask($75)
+ 275. trace_scope TraceScope(+1) when $74 is true
+ 276. trace_line TraceLine(38) when $35 is true
+ 277. trace_line TraceLine(39) when $35 is true
+ 278. trace_line TraceLine(41) when $35 is true
+ 279. copy_constant $75 = 0x00000009 (1.261169e-44)
+ 280. swizzle_4 $75..78 = ($75..78).xxxx
+ 281. copy_4_slots_unmasked result = $75..78
+ 282. trace_var TraceVar(result) when $35 is true
+ 283. zero_slot_unmasked $75 = 0
+ 284. copy_slot_unmasked $76 = $35
+ 285. copy_slot_masked $75 = Mask($76)
+ 286. trace_scope TraceScope(+1) when $75 is true
+ 287. branch_if_no_lanes_active branch_if_no_lanes_active +25 (label 22 at #312)
+ 288. trace_line TraceLine(42) when $35 is true
+ 289. copy_constant i₃ = 0x00000001 (1.401298e-45)
+ 290. trace_var TraceVar(i₃) when $35 is true
+ 291. label label 0x00000017
+ 292. zero_slot_unmasked $76 = 0
+ 293. copy_slot_unmasked $77 = $35
+ 294. copy_slot_masked $76 = Mask($77)
+ 295. trace_scope TraceScope(+1) when $76 is true
+ 296. trace_line TraceLine(43) when $35 is true
+ 297. copy_4_slots_unmasked $77..80 = result(1..3), i₃
+ 298. copy_4_slots_masked result = Mask($77..80)
+ 299. trace_var TraceVar(result) when $35 is true
+ 300. trace_scope TraceScope(-1) when $76 is true
+ 301. trace_line TraceLine(42) when $35 is true
+ 302. copy_slot_unmasked $76 = i₃
+ 303. copy_constant $77 = 0x00000001 (1.401298e-45)
+ 304. add_int $76 += $77
+ 305. copy_slot_masked i₃ = Mask($76)
+ 306. trace_var TraceVar(i₃) when $35 is true
+ 307. copy_slot_unmasked $76 = i₃
+ 308. copy_constant $77 = 0x00000003 (4.203895e-45)
+ 309. cmple_int $76 = lessThanEqual($76, $77)
+ 310. stack_rewind
+ 311. branch_if_no_active_lanes_eq branch -20 (label 23 at #291) if no lanes of $76 == 0x00000000 (0.0)
+ 312. label label 0x00000016
+ 313. trace_scope TraceScope(-1) when $75 is true
+ 314. trace_line TraceLine(45) when $35 is true
+ 315. copy_4_slots_unmasked $75..78 = result
+ 316. copy_constant $79 = 0x00000009 (1.261169e-44)
+ 317. copy_constant $80 = 0x00000001 (1.401298e-45)
+ 318. copy_constant $81 = 0x00000002 (2.802597e-45)
+ 319. copy_constant $82 = 0x00000003 (4.203895e-45)
+ 320. cmpeq_4_ints $75..78 = equal($75..78, $79..82)
+ 321. bitwise_and_2_ints $75..76 &= $77..78
+ 322. bitwise_and_int $75 &= $76
+ 323. copy_slot_masked [loop_operator_le].result = Mask($75)
+ 324. trace_var TraceVar([loop_operator_le].result) when $35 is true
+ 325. trace_scope TraceScope(-1) when $74 is true
+ 326. trace_exit TraceExit(bool loop_operator_le()) when $35 is true
+ 327. copy_slot_unmasked $74 = [loop_operator_le].result
+ 328. label label 0x00000015
+ 329. copy_slot_masked $73 = Mask($74)
+ 330. label label 0x00000006
+ 331. load_condition_mask CondMask = $25
+ 332. zero_slot_unmasked $94 = 0
+ 333. merge_condition_mask CondMask = $72 & $73
+ 334. branch_if_no_lanes_active branch_if_no_lanes_active +60 (label 5 at #394)
+ 335. trace_enter TraceEnter(bool loop_operator_lt()) when $35 is true
+ 336. zero_slot_unmasked $95 = 0
+ 337. copy_slot_unmasked $96 = $35
+ 338. copy_slot_masked $95 = Mask($96)
+ 339. trace_scope TraceScope(+1) when $95 is true
+ 340. trace_line TraceLine(50) when $35 is true
+ 341. trace_line TraceLine(51) when $35 is true
+ 342. trace_line TraceLine(53) when $35 is true
+ 343. copy_constant $96 = 0x00000009 (1.261169e-44)
+ 344. swizzle_4 $96..99 = ($96..99).xxxx
+ 345. copy_4_slots_unmasked result₁ = $96..99
+ 346. trace_var TraceVar(result₁) when $35 is true
+ 347. zero_slot_unmasked $96 = 0
+ 348. copy_slot_unmasked $97 = $35
+ 349. copy_slot_masked $96 = Mask($97)
+ 350. trace_scope TraceScope(+1) when $96 is true
+ 351. branch_if_no_lanes_active branch_if_no_lanes_active +25 (label 25 at #376)
+ 352. trace_line TraceLine(54) when $35 is true
+ 353. copy_constant i₄ = 0x00000001 (1.401298e-45)
+ 354. trace_var TraceVar(i₄) when $35 is true
+ 355. label label 0x0000001A
+ 356. zero_slot_unmasked $97 = 0
+ 357. copy_slot_unmasked $98 = $35
+ 358. copy_slot_masked $97 = Mask($98)
+ 359. trace_scope TraceScope(+1) when $97 is true
+ 360. trace_line TraceLine(55) when $35 is true
+ 361. copy_4_slots_unmasked $98..101 = result₁(1..3), i₄
+ 362. copy_4_slots_masked result₁ = Mask($98..101)
+ 363. trace_var TraceVar(result₁) when $35 is true
+ 364. trace_scope TraceScope(-1) when $97 is true
+ 365. trace_line TraceLine(54) when $35 is true
+ 366. copy_slot_unmasked $97 = i₄
+ 367. copy_constant $98 = 0x00000001 (1.401298e-45)
+ 368. add_int $97 += $98
+ 369. copy_slot_masked i₄ = Mask($97)
+ 370. trace_var TraceVar(i₄) when $35 is true
+ 371. copy_slot_unmasked $97 = i₄
+ 372. copy_constant $98 = 0x00000004 (5.605194e-45)
+ 373. cmplt_int $97 = lessThan($97, $98)
+ 374. stack_rewind
+ 375. branch_if_no_active_lanes_eq branch -20 (label 26 at #355) if no lanes of $97 == 0x00000000 (0.0)
+ 376. label label 0x00000019
+ 377. trace_scope TraceScope(-1) when $96 is true
+ 378. trace_line TraceLine(57) when $35 is true
+ 379. copy_4_slots_unmasked $96..99 = result₁
+ 380. copy_constant $100 = 0x00000009 (1.261169e-44)
+ 381. copy_constant $101 = 0x00000001 (1.401298e-45)
+ 382. copy_constant $102 = 0x00000002 (2.802597e-45)
+ 383. copy_constant $103 = 0x00000003 (4.203895e-45)
+ 384. cmpeq_4_ints $96..99 = equal($96..99, $100..103)
+ 385. bitwise_and_2_ints $96..97 &= $98..99
+ 386. bitwise_and_int $96 &= $97
+ 387. copy_slot_masked [loop_operator_lt].result = Mask($96)
+ 388. trace_var TraceVar([loop_operator_lt].result) when $35 is true
+ 389. trace_scope TraceScope(-1) when $95 is true
+ 390. trace_exit TraceExit(bool loop_operator_lt()) when $35 is true
+ 391. copy_slot_unmasked $95 = [loop_operator_lt].result
+ 392. label label 0x00000018
+ 393. copy_slot_masked $94 = Mask($95)
+ 394. label label 0x00000005
+ 395. load_condition_mask CondMask = $72
+ 396. zero_slot_unmasked $40 = 0
+ 397. merge_condition_mask CondMask = $93 & $94
+ 398. branch_if_no_lanes_active branch_if_no_lanes_active +60 (label 4 at #458)
+ 399. trace_enter TraceEnter(bool loop_operator_ge()) when $35 is true
+ 400. zero_slot_unmasked $41 = 0
+ 401. copy_slot_unmasked $42 = $35
+ 402. copy_slot_masked $41 = Mask($42)
+ 403. trace_scope TraceScope(+1) when $41 is true
+ 404. trace_line TraceLine(62) when $35 is true
+ 405. trace_line TraceLine(63) when $35 is true
+ 406. trace_line TraceLine(65) when $35 is true
+ 407. copy_constant $42 = 0x00000009 (1.261169e-44)
+ 408. swizzle_4 $42..45 = ($42..45).xxxx
+ 409. copy_4_slots_unmasked result₂ = $42..45
+ 410. trace_var TraceVar(result₂) when $35 is true
+ 411. zero_slot_unmasked $42 = 0
+ 412. copy_slot_unmasked $43 = $35
+ 413. copy_slot_masked $42 = Mask($43)
+ 414. trace_scope TraceScope(+1) when $42 is true
+ 415. branch_if_no_lanes_active branch_if_no_lanes_active +25 (label 28 at #440)
+ 416. trace_line TraceLine(66) when $35 is true
+ 417. copy_constant i₅ = 0x00000003 (4.203895e-45)
+ 418. trace_var TraceVar(i₅) when $35 is true
+ 419. label label 0x0000001D
+ 420. zero_slot_unmasked $43 = 0
+ 421. copy_slot_unmasked $44 = $35
+ 422. copy_slot_masked $43 = Mask($44)
+ 423. trace_scope TraceScope(+1) when $43 is true
+ 424. trace_line TraceLine(67) when $35 is true
+ 425. copy_4_slots_unmasked $44..47 = result₂(1..3), i₅
+ 426. copy_4_slots_masked result₂ = Mask($44..47)
+ 427. trace_var TraceVar(result₂) when $35 is true
+ 428. trace_scope TraceScope(-1) when $43 is true
+ 429. trace_line TraceLine(66) when $35 is true
+ 430. copy_slot_unmasked $43 = i₅
+ 431. copy_constant $44 = 0x00000001 (1.401298e-45)
+ 432. sub_int $43 -= $44
+ 433. copy_slot_masked i₅ = Mask($43)
+ 434. trace_var TraceVar(i₅) when $35 is true
+ 435. copy_constant $43 = 0x00000001 (1.401298e-45)
+ 436. copy_slot_unmasked $44 = i₅
+ 437. cmple_int $43 = lessThanEqual($43, $44)
+ 438. stack_rewind
+ 439. branch_if_no_active_lanes_eq branch -20 (label 29 at #419) if no lanes of $43 == 0x00000000 (0.0)
+ 440. label label 0x0000001C
+ 441. trace_scope TraceScope(-1) when $42 is true
+ 442. trace_line TraceLine(69) when $35 is true
+ 443. copy_4_slots_unmasked $42..45 = result₂
+ 444. copy_constant $46 = 0x00000009 (1.261169e-44)
+ 445. copy_constant $47 = 0x00000003 (4.203895e-45)
+ 446. copy_constant $48 = 0x00000002 (2.802597e-45)
+ 447. copy_constant $49 = 0x00000001 (1.401298e-45)
+ 448. cmpeq_4_ints $42..45 = equal($42..45, $46..49)
+ 449. bitwise_and_2_ints $42..43 &= $44..45
+ 450. bitwise_and_int $42 &= $43
+ 451. copy_slot_masked [loop_operator_ge].result = Mask($42)
+ 452. trace_var TraceVar([loop_operator_ge].result) when $35 is true
+ 453. trace_scope TraceScope(-1) when $41 is true
+ 454. trace_exit TraceExit(bool loop_operator_ge()) when $35 is true
+ 455. copy_slot_unmasked $41 = [loop_operator_ge].result
+ 456. label label 0x0000001B
+ 457. copy_slot_masked $40 = Mask($41)
+ 458. label label 0x00000004
+ 459. load_condition_mask CondMask = $93
+ 460. zero_slot_unmasked $62 = 0
+ 461. merge_condition_mask CondMask = $39 & $40
+ 462. branch_if_no_lanes_active branch_if_no_lanes_active +60 (label 3 at #522)
+ 463. trace_enter TraceEnter(bool loop_operator_gt()) when $35 is true
+ 464. zero_slot_unmasked $63 = 0
+ 465. copy_slot_unmasked $64 = $35
+ 466. copy_slot_masked $63 = Mask($64)
+ 467. trace_scope TraceScope(+1) when $63 is true
+ 468. trace_line TraceLine(74) when $35 is true
+ 469. trace_line TraceLine(75) when $35 is true
+ 470. trace_line TraceLine(77) when $35 is true
+ 471. copy_constant $64 = 0x00000009 (1.261169e-44)
+ 472. swizzle_4 $64..67 = ($64..67).xxxx
+ 473. copy_4_slots_unmasked result₃ = $64..67
+ 474. trace_var TraceVar(result₃) when $35 is true
+ 475. zero_slot_unmasked $64 = 0
+ 476. copy_slot_unmasked $65 = $35
+ 477. copy_slot_masked $64 = Mask($65)
+ 478. trace_scope TraceScope(+1) when $64 is true
+ 479. branch_if_no_lanes_active branch_if_no_lanes_active +25 (label 31 at #504)
+ 480. trace_line TraceLine(78) when $35 is true
+ 481. copy_constant i₆ = 0x00000003 (4.203895e-45)
+ 482. trace_var TraceVar(i₆) when $35 is true
+ 483. label label 0x00000020
+ 484. zero_slot_unmasked $65 = 0
+ 485. copy_slot_unmasked $66 = $35
+ 486. copy_slot_masked $65 = Mask($66)
+ 487. trace_scope TraceScope(+1) when $65 is true
+ 488. trace_line TraceLine(79) when $35 is true
+ 489. copy_4_slots_unmasked $66..69 = result₃(1..3), i₆
+ 490. copy_4_slots_masked result₃ = Mask($66..69)
+ 491. trace_var TraceVar(result₃) when $35 is true
+ 492. trace_scope TraceScope(-1) when $65 is true
+ 493. trace_line TraceLine(78) when $35 is true
+ 494. copy_slot_unmasked $65 = i₆
+ 495. copy_constant $66 = 0x00000001 (1.401298e-45)
+ 496. sub_int $65 -= $66
+ 497. copy_slot_masked i₆ = Mask($65)
+ 498. trace_var TraceVar(i₆) when $35 is true
+ 499. zero_slot_unmasked $65 = 0
+ 500. copy_slot_unmasked $66 = i₆
+ 501. cmplt_int $65 = lessThan($65, $66)
+ 502. stack_rewind
+ 503. branch_if_no_active_lanes_eq branch -20 (label 32 at #483) if no lanes of $65 == 0x00000000 (0.0)
+ 504. label label 0x0000001F
+ 505. trace_scope TraceScope(-1) when $64 is true
+ 506. trace_line TraceLine(81) when $35 is true
+ 507. copy_4_slots_unmasked $64..67 = result₃
+ 508. copy_constant $68 = 0x00000009 (1.261169e-44)
+ 509. copy_constant $69 = 0x00000003 (4.203895e-45)
+ 510. copy_constant $70 = 0x00000002 (2.802597e-45)
+ 511. copy_constant $71 = 0x00000001 (1.401298e-45)
+ 512. cmpeq_4_ints $64..67 = equal($64..67, $68..71)
+ 513. bitwise_and_2_ints $64..65 &= $66..67
+ 514. bitwise_and_int $64 &= $65
+ 515. copy_slot_masked [loop_operator_gt].result = Mask($64)
+ 516. trace_var TraceVar([loop_operator_gt].result) when $35 is true
+ 517. trace_scope TraceScope(-1) when $63 is true
+ 518. trace_exit TraceExit(bool loop_operator_gt()) when $35 is true
+ 519. copy_slot_unmasked $63 = [loop_operator_gt].result
+ 520. label label 0x0000001E
+ 521. copy_slot_masked $62 = Mask($63)
+ 522. label label 0x00000003
+ 523. load_condition_mask CondMask = $39
+ 524. zero_slot_unmasked $51 = 0
+ 525. merge_condition_mask CondMask = $61 & $62
+ 526. branch_if_no_lanes_active branch_if_no_lanes_active +49 (label 2 at #575)
+ 527. trace_enter TraceEnter(bool loop_operator_eq()) when $35 is true
+ 528. zero_slot_unmasked $52 = 0
+ 529. copy_slot_unmasked $53 = $35
+ 530. copy_slot_masked $52 = Mask($53)
+ 531. trace_scope TraceScope(+1) when $52 is true
+ 532. trace_line TraceLine(97) when $35 is true
+ 533. trace_line TraceLine(99) when $35 is true
+ 534. copy_constant $53 = 0x00000009 (1.261169e-44)
+ 535. swizzle_4 $53..56 = ($53..56).xxxx
+ 536. copy_4_slots_unmasked result₄ = $53..56
+ 537. trace_var TraceVar(result₄) when $35 is true
+ 538. zero_slot_unmasked $53 = 0
+ 539. copy_slot_unmasked $54 = $35
+ 540. copy_slot_masked $53 = Mask($54)
+ 541. trace_scope TraceScope(+1) when $53 is true
+ 542. branch_if_no_lanes_active branch_if_no_lanes_active +15 (label 34 at #557)
+ 543. trace_line TraceLine(100) when $35 is true
+ 544. copy_constant i₇ = 0x00000001 (1.401298e-45)
+ 545. trace_var TraceVar(i₇) when $35 is true
+ 546. label label 0x00000023
+ 547. zero_slot_unmasked $54 = 0
+ 548. copy_slot_unmasked $55 = $35
+ 549. copy_slot_masked $54 = Mask($55)
+ 550. trace_scope TraceScope(+1) when $54 is true
+ 551. trace_line TraceLine(101) when $35 is true
+ 552. copy_4_slots_unmasked $55..58 = result₄(1..3), i₇
+ 553. copy_4_slots_masked result₄ = Mask($55..58)
+ 554. trace_var TraceVar(result₄) when $35 is true
+ 555. trace_scope TraceScope(-1) when $54 is true
+ 556. trace_line TraceLine(100) when $35 is true
+ 557. label label 0x00000022
+ 558. trace_scope TraceScope(-1) when $53 is true
+ 559. trace_line TraceLine(103) when $35 is true
+ 560. copy_4_slots_unmasked $53..56 = result₄
+ 561. copy_constant $57 = 0x00000009 (1.261169e-44)
+ 562. copy_constant $58 = 0x00000009 (1.261169e-44)
+ 563. copy_constant $59 = 0x00000009 (1.261169e-44)
+ 564. copy_constant $60 = 0x00000001 (1.401298e-45)
+ 565. cmpeq_4_ints $53..56 = equal($53..56, $57..60)
+ 566. bitwise_and_2_ints $53..54 &= $55..56
+ 567. bitwise_and_int $53 &= $54
+ 568. copy_slot_masked [loop_operator_eq].result = Mask($53)
+ 569. trace_var TraceVar([loop_operator_eq].result) when $35 is true
+ 570. trace_scope TraceScope(-1) when $52 is true
+ 571. trace_exit TraceExit(bool loop_operator_eq()) when $35 is true
+ 572. copy_slot_unmasked $52 = [loop_operator_eq].result
+ 573. label label 0x00000021
+ 574. copy_slot_masked $51 = Mask($52)
+ 575. label label 0x00000002
+ 576. load_condition_mask CondMask = $61
+ 577. zero_slot_unmasked $3 = 0
+ 578. merge_condition_mask CondMask = $50 & $51
+ 579. branch_if_no_lanes_active branch_if_no_lanes_active +59 (label 1 at #638)
+ 580. trace_enter TraceEnter(bool loop_operator_ne()) when $35 is true
+ 581. zero_slot_unmasked $4 = 0
+ 582. copy_slot_unmasked $5 = $35
+ 583. copy_slot_masked $4 = Mask($5)
+ 584. trace_scope TraceScope(+1) when $4 is true
+ 585. trace_line TraceLine(86) when $35 is true
+ 586. trace_line TraceLine(88) when $35 is true
+ 587. copy_constant $5 = 0x00000009 (1.261169e-44)
+ 588. swizzle_4 $5..8 = ($5..8).xxxx
+ 589. copy_4_slots_unmasked result₅ = $5..8
+ 590. trace_var TraceVar(result₅) when $35 is true
+ 591. zero_slot_unmasked $5 = 0
+ 592. copy_slot_unmasked $6 = $35
+ 593. copy_slot_masked $5 = Mask($6)
+ 594. trace_scope TraceScope(+1) when $5 is true
+ 595. branch_if_no_lanes_active branch_if_no_lanes_active +25 (label 37 at #620)
+ 596. trace_line TraceLine(89) when $35 is true
+ 597. copy_constant i₈ = 0x00000001 (1.401298e-45)
+ 598. trace_var TraceVar(i₈) when $35 is true
+ 599. label label 0x00000026
+ 600. zero_slot_unmasked $6 = 0
+ 601. copy_slot_unmasked $7 = $35
+ 602. copy_slot_masked $6 = Mask($7)
+ 603. trace_scope TraceScope(+1) when $6 is true
+ 604. trace_line TraceLine(90) when $35 is true
+ 605. copy_4_slots_unmasked $7..10 = result₅(1..3), i₈
+ 606. copy_4_slots_masked result₅ = Mask($7..10)
+ 607. trace_var TraceVar(result₅) when $35 is true
+ 608. trace_scope TraceScope(-1) when $6 is true
+ 609. trace_line TraceLine(89) when $35 is true
+ 610. copy_slot_unmasked $6 = i₈
+ 611. copy_constant $7 = 0x00000001 (1.401298e-45)
+ 612. add_int $6 += $7
+ 613. copy_slot_masked i₈ = Mask($6)
+ 614. trace_var TraceVar(i₈) when $35 is true
+ 615. copy_slot_unmasked $6 = i₈
+ 616. copy_constant $7 = 0x00000004 (5.605194e-45)
+ 617. cmpne_int $6 = notEqual($6, $7)
+ 618. stack_rewind
+ 619. branch_if_no_active_lanes_eq branch -20 (label 38 at #599) if no lanes of $6 == 0x00000000 (0.0)
+ 620. label label 0x00000025
+ 621. trace_scope TraceScope(-1) when $5 is true
+ 622. trace_line TraceLine(92) when $35 is true
+ 623. copy_4_slots_unmasked $5..8 = result₅
+ 624. copy_constant $9 = 0x00000009 (1.261169e-44)
+ 625. copy_constant $10 = 0x00000001 (1.401298e-45)
+ 626. copy_constant $11 = 0x00000002 (2.802597e-45)
+ 627. copy_constant $12 = 0x00000003 (4.203895e-45)
+ 628. cmpeq_4_ints $5..8 = equal($5..8, $9..12)
+ 629. bitwise_and_2_ints $5..6 &= $7..8
+ 630. bitwise_and_int $5 &= $6
+ 631. copy_slot_masked [loop_operator_ne].result = Mask($5)
+ 632. trace_var TraceVar([loop_operator_ne].result) when $35 is true
+ 633. trace_scope TraceScope(-1) when $4 is true
+ 634. trace_exit TraceExit(bool loop_operator_ne()) when $35 is true
+ 635. copy_slot_unmasked $4 = [loop_operator_ne].result
+ 636. label label 0x00000024
+ 637. copy_slot_masked $3 = Mask($4)
+ 638. label label 0x00000001
+ 639. load_condition_mask CondMask = $50
+ 640. swizzle_4 $3..6 = ($3..6).xxxx
+ 641. copy_4_constants $7..10 = colorRed
+ 642. copy_4_constants $11..14 = colorGreen
+ 643. mix_4_ints $3..6 = mix($7..10, $11..14, $3..6)
+ 644. copy_4_slots_unmasked [main].result = $3..6
+ 645. trace_var TraceVar([main].result) when $35 is true
+ 646. trace_scope TraceScope(-1) when $2 is true
+ 647. trace_exit TraceExit(half4 main(float2 pos)) when $35 is true
+ 648. load_src src.rgba = [main].result
diff --git a/tests/sksl/runtime/MultipleCallsInOneStatement.skrp b/tests/sksl/runtime/MultipleCallsInOneStatement.skrp
index a60b0fd..6e1fa0a 100644
--- a/tests/sksl/runtime/MultipleCallsInOneStatement.skrp
+++ b/tests/sksl/runtime/MultipleCallsInOneStatement.skrp
@@ -1,61 +1,73 @@
- 1. store_device_xy01 $12..15 = DeviceCoords.xy01
- 2. copy_constant $14 = 0x3F000000 (0.5)
- 3. copy_constant $15 = 0x3F000000 (0.5)
- 4. cmpeq_2_floats $12..13 = equal($12..13, $14..15)
- 5. bitwise_and_int $12 &= $13
+ 1. store_device_xy01 $13..16 = DeviceCoords.xy01
+ 2. copy_constant $15 = 0x3F000000 (0.5)
+ 3. copy_constant $16 = 0x3F000000 (0.5)
+ 4. cmpeq_2_floats $13..14 = equal($13..14, $15..16)
+ 5. bitwise_and_int $13 &= $14
6. store_src_rg pos = src.rg
7. init_lane_masks CondMask = LoopMask = RetMask = true
- 8. trace_enter TraceEnter(half4 main(float2 pos)) when $12 is true
- 9. trace_var TraceVar(pos) when $12 is true
- 10. trace_scope TraceScope(+1) when $12 is true
- 11. trace_line TraceLine(11) when $12 is true
- 12. copy_constant x = 0x00000005 (7.006492e-45)
- 13. trace_var TraceVar(x) when $12 is true
- 14. trace_enter TraceEnter(int get(int x)) when $12 is true
- 15. trace_scope TraceScope(+1) when $12 is true
- 16. trace_line TraceLine(6) when $12 is true
- 17. copy_slot_unmasked [get].result = x
- 18. trace_var TraceVar([get].result) when $12 is true
- 19. trace_scope TraceScope(-1) when $12 is true
- 20. trace_exit TraceExit(int get(int x)) when $12 is true
- 21. copy_slot_unmasked $0 = [get].result
- 22. label label 0x00000000
- 23. copy_constant x = 0x00000003 (4.203895e-45)
- 24. trace_var TraceVar(x) when $12 is true
- 25. trace_enter TraceEnter(int get(int x)) when $12 is true
- 26. trace_scope TraceScope(+1) when $12 is true
- 27. trace_line TraceLine(6) when $12 is true
- 28. copy_slot_unmasked [get].result = x
- 29. trace_var TraceVar([get].result) when $12 is true
- 30. trace_scope TraceScope(-1) when $12 is true
- 31. trace_exit TraceExit(int get(int x)) when $12 is true
- 32. copy_slot_unmasked $1 = [get].result
- 33. label label 0x00000001
- 34. add_int $0 += $1
- 35. copy_constant x = 0x00000002 (2.802597e-45)
- 36. trace_var TraceVar(x) when $12 is true
- 37. trace_enter TraceEnter(int get(int x)) when $12 is true
- 38. trace_scope TraceScope(+1) when $12 is true
- 39. trace_line TraceLine(6) when $12 is true
- 40. copy_slot_unmasked [get].result = x
- 41. trace_var TraceVar([get].result) when $12 is true
- 42. trace_scope TraceScope(-1) when $12 is true
- 43. trace_exit TraceExit(int get(int x)) when $12 is true
- 44. copy_slot_unmasked $1 = [get].result
- 45. label label 0x00000002
- 46. add_int $0 += $1
- 47. copy_slot_unmasked ten = $0
- 48. trace_var TraceVar(ten) when $12 is true
- 49. trace_line TraceLine(12) when $12 is true
- 50. copy_slot_unmasked $0 = ten
- 51. copy_constant $1 = 0x0000000A (1.401298e-44)
- 52. cmpeq_int $0 = equal($0, $1)
- 53. swizzle_4 $0..3 = ($0..3).xxxx
- 54. copy_4_constants $4..7 = colorRed
- 55. copy_4_constants $8..11 = colorGreen
- 56. mix_4_ints $0..3 = mix($4..7, $8..11, $0..3)
- 57. copy_4_slots_unmasked [main].result = $0..3
- 58. trace_var TraceVar([main].result) when $12 is true
- 59. trace_scope TraceScope(-1) when $12 is true
- 60. trace_exit TraceExit(half4 main(float2 pos)) when $12 is true
- 61. load_src src.rgba = [main].result
+ 8. trace_enter TraceEnter(half4 main(float2 pos)) when $13 is true
+ 9. trace_var TraceVar(pos) when $13 is true
+ 10. zero_slot_unmasked $0 = 0
+ 11. copy_slot_unmasked $1 = $13
+ 12. copy_slot_masked $0 = Mask($1)
+ 13. trace_scope TraceScope(+1) when $0 is true
+ 14. trace_line TraceLine(11) when $13 is true
+ 15. copy_constant x = 0x00000005 (7.006492e-45)
+ 16. trace_var TraceVar(x) when $13 is true
+ 17. trace_enter TraceEnter(int get(int x)) when $13 is true
+ 18. zero_slot_unmasked $1 = 0
+ 19. copy_slot_unmasked $2 = $13
+ 20. copy_slot_masked $1 = Mask($2)
+ 21. trace_scope TraceScope(+1) when $1 is true
+ 22. trace_line TraceLine(6) when $13 is true
+ 23. copy_slot_unmasked [get].result = x
+ 24. trace_var TraceVar([get].result) when $13 is true
+ 25. trace_scope TraceScope(-1) when $1 is true
+ 26. trace_exit TraceExit(int get(int x)) when $13 is true
+ 27. copy_slot_unmasked $1 = [get].result
+ 28. label label 0x00000000
+ 29. copy_constant x = 0x00000003 (4.203895e-45)
+ 30. trace_var TraceVar(x) when $13 is true
+ 31. trace_enter TraceEnter(int get(int x)) when $13 is true
+ 32. zero_slot_unmasked $2 = 0
+ 33. copy_slot_unmasked $3 = $13
+ 34. copy_slot_masked $2 = Mask($3)
+ 35. trace_scope TraceScope(+1) when $2 is true
+ 36. trace_line TraceLine(6) when $13 is true
+ 37. copy_slot_unmasked [get].result = x
+ 38. trace_var TraceVar([get].result) when $13 is true
+ 39. trace_scope TraceScope(-1) when $2 is true
+ 40. trace_exit TraceExit(int get(int x)) when $13 is true
+ 41. copy_slot_unmasked $2 = [get].result
+ 42. label label 0x00000001
+ 43. add_int $1 += $2
+ 44. copy_constant x = 0x00000002 (2.802597e-45)
+ 45. trace_var TraceVar(x) when $13 is true
+ 46. trace_enter TraceEnter(int get(int x)) when $13 is true
+ 47. zero_slot_unmasked $2 = 0
+ 48. copy_slot_unmasked $3 = $13
+ 49. copy_slot_masked $2 = Mask($3)
+ 50. trace_scope TraceScope(+1) when $2 is true
+ 51. trace_line TraceLine(6) when $13 is true
+ 52. copy_slot_unmasked [get].result = x
+ 53. trace_var TraceVar([get].result) when $13 is true
+ 54. trace_scope TraceScope(-1) when $2 is true
+ 55. trace_exit TraceExit(int get(int x)) when $13 is true
+ 56. copy_slot_unmasked $2 = [get].result
+ 57. label label 0x00000002
+ 58. add_int $1 += $2
+ 59. copy_slot_unmasked ten = $1
+ 60. trace_var TraceVar(ten) when $13 is true
+ 61. trace_line TraceLine(12) when $13 is true
+ 62. copy_slot_unmasked $1 = ten
+ 63. copy_constant $2 = 0x0000000A (1.401298e-44)
+ 64. cmpeq_int $1 = equal($1, $2)
+ 65. swizzle_4 $1..4 = ($1..4).xxxx
+ 66. copy_4_constants $5..8 = colorRed
+ 67. copy_4_constants $9..12 = colorGreen
+ 68. mix_4_ints $1..4 = mix($5..8, $9..12, $1..4)
+ 69. copy_4_slots_unmasked [main].result = $1..4
+ 70. trace_var TraceVar([main].result) when $13 is true
+ 71. trace_scope TraceScope(-1) when $0 is true
+ 72. trace_exit TraceExit(half4 main(float2 pos)) when $13 is true
+ 73. load_src src.rgba = [main].result
diff --git a/tests/sksl/runtime/PrecisionQualifiers.skrp b/tests/sksl/runtime/PrecisionQualifiers.skrp
index aa2e16f..bb6a7f7 100644
--- a/tests/sksl/runtime/PrecisionQualifiers.skrp
+++ b/tests/sksl/runtime/PrecisionQualifiers.skrp
@@ -1,391 +1,415 @@
- 1. store_device_xy01 $16..19 = DeviceCoords.xy01
- 2. copy_constant $18 = 0x3F000000 (0.5)
- 3. copy_constant $19 = 0x3F000000 (0.5)
- 4. cmpeq_2_floats $16..17 = equal($16..17, $18..19)
- 5. bitwise_and_int $16 &= $17
+ 1. store_device_xy01 $18..21 = DeviceCoords.xy01
+ 2. copy_constant $20 = 0x3F000000 (0.5)
+ 3. copy_constant $21 = 0x3F000000 (0.5)
+ 4. cmpeq_2_floats $18..19 = equal($18..19, $20..21)
+ 5. bitwise_and_int $18 &= $19
6. store_src_rg coords = src.rg
7. init_lane_masks CondMask = LoopMask = RetMask = true
- 8. trace_enter TraceEnter(vec4 main(vec2 coords)) when $16 is true
- 9. trace_var TraceVar(coords) when $16 is true
- 10. trace_scope TraceScope(+1) when $16 is true
- 11. trace_line TraceLine(58) when $16 is true
- 12. zero_4_slots_unmasked zero = 0
- 13. trace_var TraceVar(zero) when $16 is true
- 14. trace_line TraceLine(59) when $16 is true
- 15. copy_constant $0 = 0x3F800000 (1.0)
- 16. swizzle_4 $0..3 = ($0..3).xxxx
- 17. copy_4_slots_unmasked one = $0..3
- 18. trace_var TraceVar(one) when $16 is true
- 19. trace_line TraceLine(60) when $16 is true
- 20. copy_4_constants $0..3 = colorGreen
- 21. copy_4_slots_unmasked green = $0..3
- 22. trace_var TraceVar(green) when $16 is true
- 23. trace_line TraceLine(61) when $16 is true
- 24. copy_4_slots_unmasked $0..3 = green
- 25. copy_4_slots_unmasked $4..7 = one
- 26. mul_4_floats $0..3 *= $4..7
- 27. copy_4_slots_unmasked $4..7 = zero
- 28. add_4_floats $0..3 += $4..7
- 29. copy_4_slots_unmasked green = $0..3
- 30. trace_var TraceVar(green) when $16 is true
- 31. trace_line TraceLine(63) when $16 is true
- 32. copy_4_constants $0..3 = colorRed
- 33. copy_4_slots_unmasked red = $0..3
- 34. trace_var TraceVar(red) when $16 is true
- 35. trace_line TraceLine(64) when $16 is true
- 36. copy_4_slots_unmasked $0..3 = red
- 37. copy_4_slots_unmasked $4..7 = zero
- 38. add_4_floats $0..3 += $4..7
- 39. copy_4_slots_unmasked $4..7 = one
- 40. mul_4_floats $0..3 *= $4..7
- 41. copy_4_slots_unmasked red = $0..3
- 42. trace_var TraceVar(red) when $16 is true
- 43. trace_line TraceLine(66) when $16 is true
- 44. store_condition_mask $27 = CondMask
- 45. store_condition_mask $31 = CondMask
- 46. store_condition_mask $20 = CondMask
- 47. store_condition_mask $46 = CondMask
+ 8. trace_enter TraceEnter(vec4 main(vec2 coords)) when $18 is true
+ 9. trace_var TraceVar(coords) when $18 is true
+ 10. zero_slot_unmasked $0 = 0
+ 11. copy_slot_unmasked $1 = $18
+ 12. copy_slot_masked $0 = Mask($1)
+ 13. trace_scope TraceScope(+1) when $0 is true
+ 14. trace_line TraceLine(58) when $18 is true
+ 15. zero_4_slots_unmasked zero = 0
+ 16. trace_var TraceVar(zero) when $18 is true
+ 17. trace_line TraceLine(59) when $18 is true
+ 18. copy_constant $1 = 0x3F800000 (1.0)
+ 19. swizzle_4 $1..4 = ($1..4).xxxx
+ 20. copy_4_slots_unmasked one = $1..4
+ 21. trace_var TraceVar(one) when $18 is true
+ 22. trace_line TraceLine(60) when $18 is true
+ 23. copy_4_constants $1..4 = colorGreen
+ 24. copy_4_slots_unmasked green = $1..4
+ 25. trace_var TraceVar(green) when $18 is true
+ 26. trace_line TraceLine(61) when $18 is true
+ 27. copy_4_slots_unmasked $1..4 = green
+ 28. copy_4_slots_unmasked $5..8 = one
+ 29. mul_4_floats $1..4 *= $5..8
+ 30. copy_4_slots_unmasked $5..8 = zero
+ 31. add_4_floats $1..4 += $5..8
+ 32. copy_4_slots_unmasked green = $1..4
+ 33. trace_var TraceVar(green) when $18 is true
+ 34. trace_line TraceLine(63) when $18 is true
+ 35. copy_4_constants $1..4 = colorRed
+ 36. copy_4_slots_unmasked red = $1..4
+ 37. trace_var TraceVar(red) when $18 is true
+ 38. trace_line TraceLine(64) when $18 is true
+ 39. copy_4_slots_unmasked $1..4 = red
+ 40. copy_4_slots_unmasked $5..8 = zero
+ 41. add_4_floats $1..4 += $5..8
+ 42. copy_4_slots_unmasked $5..8 = one
+ 43. mul_4_floats $1..4 *= $5..8
+ 44. copy_4_slots_unmasked red = $1..4
+ 45. trace_var TraceVar(red) when $18 is true
+ 46. trace_line TraceLine(66) when $18 is true
+ 47. store_condition_mask $30 = CondMask
48. store_condition_mask $35 = CondMask
- 49. store_condition_mask $12 = CondMask
- 50. branch_if_no_lanes_active branch_if_no_lanes_active +26 (label 7 at #76)
- 51. trace_enter TraceEnter(bool test_scalar()) when $16 is true
- 52. trace_scope TraceScope(+1) when $16 is true
- 53. trace_line TraceLine(6) when $16 is true
- 54. copy_constant mp = 0x3F000000 (0.5)
- 55. trace_var TraceVar(mp) when $16 is true
- 56. trace_line TraceLine(7) when $16 is true
- 57. copy_slot_unmasked hp = mp
- 58. trace_var TraceVar(hp) when $16 is true
- 59. trace_line TraceLine(8) when $16 is true
- 60. copy_constant ihp = 0x00000002 (2.802597e-45)
- 61. trace_var TraceVar(ihp) when $16 is true
- 62. trace_line TraceLine(9) when $16 is true
- 63. copy_slot_unmasked imp = ihp
- 64. trace_var TraceVar(imp) when $16 is true
- 65. trace_line TraceLine(11) when $16 is true
- 66. copy_2_slots_unmasked $13..14 = mp, hp
- 67. cmpeq_float $13 = equal($13, $14)
- 68. copy_2_slots_unmasked $14..15 = ihp, imp
- 69. cmpeq_int $14 = equal($14, $15)
- 70. bitwise_and_int $13 &= $14
- 71. copy_slot_masked [test_scalar].result = Mask($13)
- 72. trace_var TraceVar([test_scalar].result) when $16 is true
- 73. trace_scope TraceScope(-1) when $16 is true
- 74. trace_exit TraceExit(bool test_scalar()) when $16 is true
- 75. copy_slot_unmasked $13 = [test_scalar].result
- 76. label label 0x00000007
- 77. zero_slot_unmasked $36 = 0
- 78. merge_condition_mask CondMask = $12 & $13
- 79. branch_if_no_lanes_active branch_if_no_lanes_active +91 (label 6 at #170)
- 80. trace_enter TraceEnter(bool test_vector()) when $16 is true
- 81. trace_scope TraceScope(+1) when $16 is true
- 82. trace_line TraceLine(15) when $16 is true
- 83. copy_constant $37 = 0x40000000 (2.0)
- 84. copy_slot_unmasked $38 = $37
- 85. copy_2_slots_unmasked mp2 = $37..38
- 86. trace_var TraceVar(mp2) when $16 is true
- 87. trace_line TraceLine(16) when $16 is true
- 88. copy_2_slots_unmasked hp2 = mp2
- 89. trace_var TraceVar(hp2) when $16 is true
- 90. trace_line TraceLine(17) when $16 is true
- 91. copy_constant $37 = 0x40400000 (3.0)
- 92. swizzle_3 $37..39 = ($37..39).xxx
- 93. copy_3_slots_unmasked mp3 = $37..39
- 94. trace_var TraceVar(mp3) when $16 is true
- 95. trace_line TraceLine(18) when $16 is true
- 96. copy_3_slots_unmasked hp3 = mp3
- 97. trace_var TraceVar(hp3) when $16 is true
- 98. trace_line TraceLine(19) when $16 is true
- 99. copy_constant $37 = 0x40800000 (4.0)
- 100. swizzle_4 $37..40 = ($37..40).xxxx
- 101. copy_4_slots_unmasked mp4 = $37..40
- 102. trace_var TraceVar(mp4) when $16 is true
- 103. trace_line TraceLine(20) when $16 is true
- 104. copy_4_slots_unmasked hp4 = mp4
- 105. trace_var TraceVar(hp4) when $16 is true
- 106. trace_line TraceLine(22) when $16 is true
- 107. copy_constant $37 = 0x00000002 (2.802597e-45)
- 108. copy_slot_unmasked $38 = $37
- 109. copy_2_slots_unmasked ihp2 = $37..38
- 110. trace_var TraceVar(ihp2) when $16 is true
- 111. trace_line TraceLine(23) when $16 is true
- 112. copy_2_slots_unmasked imp2 = ihp2
- 113. trace_var TraceVar(imp2) when $16 is true
- 114. trace_line TraceLine(24) when $16 is true
- 115. copy_constant $37 = 0x00000003 (4.203895e-45)
- 116. swizzle_3 $37..39 = ($37..39).xxx
- 117. copy_3_slots_unmasked ihp3 = $37..39
- 118. trace_var TraceVar(ihp3) when $16 is true
- 119. trace_line TraceLine(25) when $16 is true
- 120. copy_3_slots_unmasked imp3 = ihp3
- 121. trace_var TraceVar(imp3) when $16 is true
- 122. trace_line TraceLine(26) when $16 is true
- 123. copy_constant $37 = 0x00000004 (5.605194e-45)
- 124. swizzle_4 $37..40 = ($37..40).xxxx
- 125. copy_4_slots_unmasked ihp4 = $37..40
- 126. trace_var TraceVar(ihp4) when $16 is true
- 127. trace_line TraceLine(27) when $16 is true
- 128. copy_4_slots_unmasked imp4 = ihp4
- 129. trace_var TraceVar(imp4) when $16 is true
- 130. trace_line TraceLine(29) when $16 is true
- 131. copy_4_slots_unmasked $37..40 = mp2, hp2
- 132. cmpeq_2_floats $37..38 = equal($37..38, $39..40)
- 133. bitwise_and_int $37 &= $38
- 134. copy_3_slots_unmasked $38..40 = hp3
- 135. copy_3_slots_unmasked $41..43 = mp3
- 136. cmpeq_3_floats $38..40 = equal($38..40, $41..43)
- 137. bitwise_and_int $39 &= $40
- 138. bitwise_and_int $38 &= $39
- 139. bitwise_and_int $37 &= $38
- 140. copy_4_slots_unmasked $38..41 = mp4
- 141. copy_4_slots_unmasked $42..45 = hp4
- 142. cmpeq_4_floats $38..41 = equal($38..41, $42..45)
- 143. bitwise_and_2_ints $38..39 &= $40..41
- 144. bitwise_and_int $38 &= $39
- 145. bitwise_and_int $37 &= $38
- 146. copy_2_slots_unmasked $38..39 = imp2
- 147. copy_2_slots_unmasked $40..41 = ihp2
- 148. cmpeq_2_ints $38..39 = equal($38..39, $40..41)
- 149. bitwise_and_int $38 &= $39
- 150. bitwise_and_int $37 &= $38
- 151. copy_4_slots_unmasked $38..41 = ihp3, imp3(0)
- 152. copy_2_slots_unmasked $42..43 = imp3(1..2)
- 153. cmpeq_3_ints $38..40 = equal($38..40, $41..43)
- 154. bitwise_and_int $39 &= $40
- 155. bitwise_and_int $38 &= $39
- 156. bitwise_and_int $37 &= $38
- 157. copy_4_slots_unmasked $38..41 = imp4
- 158. copy_4_slots_unmasked $42..45 = ihp4
- 159. cmpeq_4_ints $38..41 = equal($38..41, $42..45)
- 160. bitwise_and_2_ints $38..39 &= $40..41
- 161. bitwise_and_int $38 &= $39
- 162. bitwise_and_int $37 &= $38
- 163. copy_slot_masked [test_vector].result = Mask($37)
- 164. trace_var TraceVar([test_vector].result) when $16 is true
- 165. trace_scope TraceScope(-1) when $16 is true
- 166. trace_exit TraceExit(bool test_vector()) when $16 is true
- 167. copy_slot_unmasked $37 = [test_vector].result
- 168. label label 0x00000008
- 169. copy_slot_masked $36 = Mask($37)
- 170. label label 0x00000006
- 171. load_condition_mask CondMask = $12
- 172. zero_slot_unmasked $47 = 0
- 173. merge_condition_mask CondMask = $35 & $36
- 174. branch_if_no_lanes_active branch_if_no_lanes_active +80 (label 5 at #254)
- 175. trace_enter TraceEnter(bool test_matrix()) when $16 is true
- 176. trace_scope TraceScope(+1) when $16 is true
- 177. trace_line TraceLine(34) when $16 is true
- 178. zero_slot_unmasked $48 = 0
- 179. copy_constant $49 = 0x40000000 (2.0)
- 180. swizzle_4 $48..51 = ($48..51).yxxy
- 181. copy_4_slots_unmasked mp2₁ = $48..51
- 182. trace_var TraceVar(mp2₁) when $16 is true
- 183. trace_line TraceLine(35) when $16 is true
- 184. copy_4_slots_unmasked hp2₁ = mp2₁
- 185. trace_var TraceVar(hp2₁) when $16 is true
- 186. trace_line TraceLine(36) when $16 is true
- 187. zero_slot_unmasked $48 = 0
- 188. copy_constant $49 = 0x40400000 (3.0)
- 189. shuffle $48..56 = ($48..56)[1 0 0 0 1 0 0 0 1]
- 190. copy_4_slots_unmasked mp3₁(0..3) = $48..51
- 191. copy_4_slots_unmasked mp3₁(4..7) = $52..55
- 192. copy_slot_unmasked mp3₁(8) = $56
- 193. trace_var TraceVar(mp3₁) when $16 is true
- 194. trace_line TraceLine(37) when $16 is true
- 195. copy_4_slots_unmasked hp3₁(0..3) = mp3₁(0..3)
- 196. copy_4_slots_unmasked hp3₁(4..7) = mp3₁(4..7)
- 197. copy_slot_unmasked hp3₁(8) = mp3₁(8)
- 198. trace_var TraceVar(hp3₁) when $16 is true
- 199. trace_line TraceLine(38) when $16 is true
- 200. zero_slot_unmasked $48 = 0
- 201. copy_constant $49 = 0x40800000 (4.0)
- 202. shuffle $48..63 = ($48..63)[1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1]
- 203. copy_4_slots_unmasked mp4₁(0..3) = $48..51
- 204. copy_4_slots_unmasked mp4₁(4..7) = $52..55
- 205. copy_4_slots_unmasked mp4₁(8..11) = $56..59
- 206. copy_4_slots_unmasked mp4₁(12..15) = $60..63
- 207. trace_var TraceVar(mp4₁) when $16 is true
- 208. trace_line TraceLine(39) when $16 is true
- 209. copy_4_slots_unmasked hp4₁(0..3) = mp4₁(0..3)
- 210. copy_4_slots_unmasked hp4₁(4..7) = mp4₁(4..7)
- 211. copy_4_slots_unmasked hp4₁(8..11) = mp4₁(8..11)
- 212. copy_4_slots_unmasked hp4₁(12..15) = mp4₁(12..15)
- 213. trace_var TraceVar(hp4₁) when $16 is true
- 214. trace_line TraceLine(41) when $16 is true
- 215. copy_4_slots_unmasked $48..51 = mp2₁
- 216. copy_4_slots_unmasked $52..55 = hp2₁
- 217. cmpeq_4_floats $48..51 = equal($48..51, $52..55)
- 218. bitwise_and_2_ints $48..49 &= $50..51
- 219. bitwise_and_int $48 &= $49
- 220. copy_4_slots_unmasked $49..52 = hp3₁(0..3)
- 221. copy_4_slots_unmasked $53..56 = hp3₁(4..7)
- 222. copy_slot_unmasked $57 = hp3₁(8)
- 223. copy_4_slots_unmasked $58..61 = mp3₁(0..3)
- 224. copy_4_slots_unmasked $62..65 = mp3₁(4..7)
- 225. copy_slot_unmasked $66 = mp3₁(8)
- 226. cmpeq_n_floats $49..57 = equal($49..57, $58..66)
- 227. bitwise_and_4_ints $50..53 &= $54..57
- 228. bitwise_and_2_ints $50..51 &= $52..53
- 229. bitwise_and_int $50 &= $51
- 230. bitwise_and_int $49 &= $50
- 231. bitwise_and_int $48 &= $49
- 232. copy_4_slots_unmasked $49..52 = mp4₁(0..3)
- 233. copy_4_slots_unmasked $53..56 = mp4₁(4..7)
- 234. copy_4_slots_unmasked $57..60 = mp4₁(8..11)
- 235. copy_4_slots_unmasked $61..64 = mp4₁(12..15)
- 236. copy_4_slots_unmasked $65..68 = hp4₁(0..3)
- 237. copy_4_slots_unmasked $69..72 = hp4₁(4..7)
- 238. copy_4_slots_unmasked $73..76 = hp4₁(8..11)
- 239. copy_4_slots_unmasked $77..80 = hp4₁(12..15)
- 240. cmpeq_n_floats $49..64 = equal($49..64, $65..80)
- 241. bitwise_and_4_ints $57..60 &= $61..64
- 242. bitwise_and_4_ints $53..56 &= $57..60
- 243. bitwise_and_4_ints $49..52 &= $53..56
- 244. bitwise_and_2_ints $49..50 &= $51..52
- 245. bitwise_and_int $49 &= $50
- 246. bitwise_and_int $48 &= $49
- 247. copy_slot_masked [test_matrix].result = Mask($48)
- 248. trace_var TraceVar([test_matrix].result) when $16 is true
- 249. trace_scope TraceScope(-1) when $16 is true
- 250. trace_exit TraceExit(bool test_matrix()) when $16 is true
- 251. copy_slot_unmasked $48 = [test_matrix].result
- 252. label label 0x00000009
- 253. copy_slot_masked $47 = Mask($48)
- 254. label label 0x00000005
- 255. load_condition_mask CondMask = $35
- 256. zero_slot_unmasked $21 = 0
- 257. merge_condition_mask CondMask = $46 & $47
- 258. branch_if_no_lanes_active branch_if_no_lanes_active +63 (label 4 at #321)
- 259. trace_enter TraceEnter(bool test_array()) when $16 is true
- 260. trace_scope TraceScope(+1) when $16 is true
- 261. trace_line TraceLine(45) when $16 is true
- 262. zero_slot_unmasked mf[0] = 0
- 263. trace_var TraceVar(mf[0]) when $16 is true
- 264. trace_line TraceLine(45) when $16 is true
- 265. copy_constant $22 = 0x3F800000 (1.0)
- 266. copy_slot_masked mf[0] = Mask($22)
- 267. trace_var TraceVar(mf[0]) when $16 is true
- 268. trace_line TraceLine(46) when $16 is true
- 269. zero_slot_unmasked hf[0] = 0
- 270. trace_var TraceVar(hf[0]) when $16 is true
- 271. trace_line TraceLine(46) when $16 is true
- 272. copy_constant $22 = 0x3F800000 (1.0)
- 273. copy_slot_masked hf[0] = Mask($22)
- 274. trace_var TraceVar(hf[0]) when $16 is true
- 275. trace_line TraceLine(47) when $16 is true
- 276. zero_4_slots_unmasked mv[0], mv[1] = 0
- 277. trace_var TraceVar(mv[0], mv[1]) when $16 is true
- 278. trace_line TraceLine(47) when $16 is true
- 279. zero_slot_unmasked $22 = 0
- 280. copy_constant $23 = 0x3F800000 (1.0)
- 281. copy_2_slots_masked mv[0] = Mask($22..23)
- 282. trace_var TraceVar(mv[0]) when $16 is true
- 283. trace_line TraceLine(47) when $16 is true
- 284. copy_constant $22 = 0x40000000 (2.0)
- 285. copy_constant $23 = 0x40400000 (3.0)
- 286. copy_2_slots_masked mv[1] = Mask($22..23)
- 287. trace_var TraceVar(mv[1]) when $16 is true
- 288. trace_line TraceLine(48) when $16 is true
- 289. zero_4_slots_unmasked hv[0], hv[1] = 0
- 290. trace_var TraceVar(hv[0], hv[1]) when $16 is true
- 291. trace_line TraceLine(48) when $16 is true
- 292. zero_slot_unmasked $22 = 0
- 293. copy_constant $23 = 0x3F800000 (1.0)
- 294. copy_2_slots_masked hv[0] = Mask($22..23)
- 295. trace_var TraceVar(hv[0]) when $16 is true
- 296. trace_line TraceLine(48) when $16 is true
- 297. copy_constant $22 = 0x40000000 (2.0)
- 298. copy_constant $23 = 0x40400000 (3.0)
- 299. copy_2_slots_masked hv[1] = Mask($22..23)
- 300. trace_var TraceVar(hv[1]) when $16 is true
- 301. trace_line TraceLine(50) when $16 is true
- 302. copy_2_slots_unmasked $22..23 = mf[0], hf[0]
- 303. cmpeq_float $22 = equal($22, $23)
- 304. copy_2_slots_unmasked $23..24 = hv[0]
- 305. copy_2_slots_unmasked $25..26 = mv[0]
- 306. cmpeq_2_floats $23..24 = equal($23..24, $25..26)
- 307. bitwise_and_int $23 &= $24
- 308. bitwise_and_int $22 &= $23
- 309. copy_2_slots_unmasked $23..24 = mv[1]
- 310. copy_2_slots_unmasked $25..26 = hv[1]
- 311. cmpeq_2_floats $23..24 = equal($23..24, $25..26)
- 312. bitwise_and_int $23 &= $24
- 313. bitwise_and_int $22 &= $23
- 314. copy_slot_masked [test_array].result = Mask($22)
- 315. trace_var TraceVar([test_array].result) when $16 is true
- 316. trace_scope TraceScope(-1) when $16 is true
- 317. trace_exit TraceExit(bool test_array()) when $16 is true
- 318. copy_slot_unmasked $22 = [test_array].result
- 319. label label 0x0000000A
- 320. copy_slot_masked $21 = Mask($22)
- 321. label label 0x00000004
- 322. load_condition_mask CondMask = $46
- 323. zero_slot_unmasked $32 = 0
- 324. merge_condition_mask CondMask = $20 & $21
- 325. branch_if_no_lanes_active branch_if_no_lanes_active +16 (label 3 at #341)
- 326. copy_constant value = 0x3F800000 (1.0)
- 327. trace_var TraceVar(value) when $16 is true
- 328. trace_enter TraceEnter(bool highp_param(float value)) when $16 is true
- 329. trace_scope TraceScope(+1) when $16 is true
- 330. trace_line TraceLine(53) when $16 is true
- 331. copy_slot_unmasked $33 = value
- 332. copy_constant $34 = 0x3F800000 (1.0)
- 333. cmpeq_float $33 = equal($33, $34)
- 334. copy_slot_masked [highp_param].result = Mask($33)
- 335. trace_var TraceVar([highp_param].result) when $16 is true
- 336. trace_scope TraceScope(-1) when $16 is true
- 337. trace_exit TraceExit(bool highp_param(float value)) when $16 is true
- 338. copy_slot_unmasked $33 = [highp_param].result
- 339. label label 0x0000000B
- 340. copy_slot_masked $32 = Mask($33)
- 341. label label 0x00000003
- 342. load_condition_mask CondMask = $20
- 343. zero_slot_unmasked $28 = 0
- 344. merge_condition_mask CondMask = $31 & $32
- 345. branch_if_no_lanes_active branch_if_no_lanes_active +16 (label 2 at #361)
- 346. copy_constant value₁ = 0x40000000 (2.0)
- 347. trace_var TraceVar(value₁) when $16 is true
- 348. trace_enter TraceEnter(bool mediump_param(half value)) when $16 is true
- 349. trace_scope TraceScope(+1) when $16 is true
- 350. trace_line TraceLine(54) when $16 is true
- 351. copy_slot_unmasked $29 = value₁
- 352. copy_constant $30 = 0x40000000 (2.0)
- 353. cmpeq_float $29 = equal($29, $30)
- 354. copy_slot_masked [mediump_param].result = Mask($29)
- 355. trace_var TraceVar([mediump_param].result) when $16 is true
- 356. trace_scope TraceScope(-1) when $16 is true
- 357. trace_exit TraceExit(bool mediump_param(half value)) when $16 is true
- 358. copy_slot_unmasked $29 = [mediump_param].result
- 359. label label 0x0000000C
- 360. copy_slot_masked $28 = Mask($29)
- 361. label label 0x00000002
- 362. load_condition_mask CondMask = $31
- 363. zero_slot_unmasked $0 = 0
- 364. merge_condition_mask CondMask = $27 & $28
- 365. branch_if_no_lanes_active branch_if_no_lanes_active +16 (label 1 at #381)
- 366. copy_constant value₂ = 0x40400000 (3.0)
- 367. trace_var TraceVar(value₂) when $16 is true
- 368. trace_enter TraceEnter(bool lowp_param(half value)) when $16 is true
- 369. trace_scope TraceScope(+1) when $16 is true
- 370. trace_line TraceLine(55) when $16 is true
- 371. copy_slot_unmasked $1 = value₂
- 372. copy_constant $2 = 0x40400000 (3.0)
- 373. cmpeq_float $1 = equal($1, $2)
- 374. copy_slot_masked [lowp_param].result = Mask($1)
- 375. trace_var TraceVar([lowp_param].result) when $16 is true
- 376. trace_scope TraceScope(-1) when $16 is true
- 377. trace_exit TraceExit(bool lowp_param(half value)) when $16 is true
- 378. copy_slot_unmasked $1 = [lowp_param].result
- 379. label label 0x0000000D
- 380. copy_slot_masked $0 = Mask($1)
- 381. label label 0x00000001
- 382. load_condition_mask CondMask = $27
- 383. swizzle_4 $0..3 = ($0..3).xxxx
- 384. copy_4_slots_unmasked $4..7 = red
- 385. copy_4_slots_unmasked $8..11 = green
- 386. mix_4_ints $0..3 = mix($4..7, $8..11, $0..3)
- 387. copy_4_slots_unmasked [main].result = $0..3
- 388. trace_var TraceVar([main].result) when $16 is true
- 389. trace_scope TraceScope(-1) when $16 is true
- 390. trace_exit TraceExit(vec4 main(vec2 coords)) when $16 is true
- 391. load_src src.rgba = [main].result
+ 49. store_condition_mask $22 = CondMask
+ 50. store_condition_mask $52 = CondMask
+ 51. store_condition_mask $40 = CondMask
+ 52. store_condition_mask $13 = CondMask
+ 53. branch_if_no_lanes_active branch_if_no_lanes_active +29 (label 7 at #82)
+ 54. trace_enter TraceEnter(bool test_scalar()) when $18 is true
+ 55. zero_slot_unmasked $14 = 0
+ 56. copy_slot_unmasked $15 = $18
+ 57. copy_slot_masked $14 = Mask($15)
+ 58. trace_scope TraceScope(+1) when $14 is true
+ 59. trace_line TraceLine(6) when $18 is true
+ 60. copy_constant mp = 0x3F000000 (0.5)
+ 61. trace_var TraceVar(mp) when $18 is true
+ 62. trace_line TraceLine(7) when $18 is true
+ 63. copy_slot_unmasked hp = mp
+ 64. trace_var TraceVar(hp) when $18 is true
+ 65. trace_line TraceLine(8) when $18 is true
+ 66. copy_constant ihp = 0x00000002 (2.802597e-45)
+ 67. trace_var TraceVar(ihp) when $18 is true
+ 68. trace_line TraceLine(9) when $18 is true
+ 69. copy_slot_unmasked imp = ihp
+ 70. trace_var TraceVar(imp) when $18 is true
+ 71. trace_line TraceLine(11) when $18 is true
+ 72. copy_2_slots_unmasked $15..16 = mp, hp
+ 73. cmpeq_float $15 = equal($15, $16)
+ 74. copy_2_slots_unmasked $16..17 = ihp, imp
+ 75. cmpeq_int $16 = equal($16, $17)
+ 76. bitwise_and_int $15 &= $16
+ 77. copy_slot_masked [test_scalar].result = Mask($15)
+ 78. trace_var TraceVar([test_scalar].result) when $18 is true
+ 79. trace_scope TraceScope(-1) when $14 is true
+ 80. trace_exit TraceExit(bool test_scalar()) when $18 is true
+ 81. copy_slot_unmasked $14 = [test_scalar].result
+ 82. label label 0x00000007
+ 83. zero_slot_unmasked $41 = 0
+ 84. merge_condition_mask CondMask = $13 & $14
+ 85. branch_if_no_lanes_active branch_if_no_lanes_active +94 (label 6 at #179)
+ 86. trace_enter TraceEnter(bool test_vector()) when $18 is true
+ 87. zero_slot_unmasked $42 = 0
+ 88. copy_slot_unmasked $43 = $18
+ 89. copy_slot_masked $42 = Mask($43)
+ 90. trace_scope TraceScope(+1) when $42 is true
+ 91. trace_line TraceLine(15) when $18 is true
+ 92. copy_constant $43 = 0x40000000 (2.0)
+ 93. copy_slot_unmasked $44 = $43
+ 94. copy_2_slots_unmasked mp2 = $43..44
+ 95. trace_var TraceVar(mp2) when $18 is true
+ 96. trace_line TraceLine(16) when $18 is true
+ 97. copy_2_slots_unmasked hp2 = mp2
+ 98. trace_var TraceVar(hp2) when $18 is true
+ 99. trace_line TraceLine(17) when $18 is true
+ 100. copy_constant $43 = 0x40400000 (3.0)
+ 101. swizzle_3 $43..45 = ($43..45).xxx
+ 102. copy_3_slots_unmasked mp3 = $43..45
+ 103. trace_var TraceVar(mp3) when $18 is true
+ 104. trace_line TraceLine(18) when $18 is true
+ 105. copy_3_slots_unmasked hp3 = mp3
+ 106. trace_var TraceVar(hp3) when $18 is true
+ 107. trace_line TraceLine(19) when $18 is true
+ 108. copy_constant $43 = 0x40800000 (4.0)
+ 109. swizzle_4 $43..46 = ($43..46).xxxx
+ 110. copy_4_slots_unmasked mp4 = $43..46
+ 111. trace_var TraceVar(mp4) when $18 is true
+ 112. trace_line TraceLine(20) when $18 is true
+ 113. copy_4_slots_unmasked hp4 = mp4
+ 114. trace_var TraceVar(hp4) when $18 is true
+ 115. trace_line TraceLine(22) when $18 is true
+ 116. copy_constant $43 = 0x00000002 (2.802597e-45)
+ 117. copy_slot_unmasked $44 = $43
+ 118. copy_2_slots_unmasked ihp2 = $43..44
+ 119. trace_var TraceVar(ihp2) when $18 is true
+ 120. trace_line TraceLine(23) when $18 is true
+ 121. copy_2_slots_unmasked imp2 = ihp2
+ 122. trace_var TraceVar(imp2) when $18 is true
+ 123. trace_line TraceLine(24) when $18 is true
+ 124. copy_constant $43 = 0x00000003 (4.203895e-45)
+ 125. swizzle_3 $43..45 = ($43..45).xxx
+ 126. copy_3_slots_unmasked ihp3 = $43..45
+ 127. trace_var TraceVar(ihp3) when $18 is true
+ 128. trace_line TraceLine(25) when $18 is true
+ 129. copy_3_slots_unmasked imp3 = ihp3
+ 130. trace_var TraceVar(imp3) when $18 is true
+ 131. trace_line TraceLine(26) when $18 is true
+ 132. copy_constant $43 = 0x00000004 (5.605194e-45)
+ 133. swizzle_4 $43..46 = ($43..46).xxxx
+ 134. copy_4_slots_unmasked ihp4 = $43..46
+ 135. trace_var TraceVar(ihp4) when $18 is true
+ 136. trace_line TraceLine(27) when $18 is true
+ 137. copy_4_slots_unmasked imp4 = ihp4
+ 138. trace_var TraceVar(imp4) when $18 is true
+ 139. trace_line TraceLine(29) when $18 is true
+ 140. copy_4_slots_unmasked $43..46 = mp2, hp2
+ 141. cmpeq_2_floats $43..44 = equal($43..44, $45..46)
+ 142. bitwise_and_int $43 &= $44
+ 143. copy_3_slots_unmasked $44..46 = hp3
+ 144. copy_3_slots_unmasked $47..49 = mp3
+ 145. cmpeq_3_floats $44..46 = equal($44..46, $47..49)
+ 146. bitwise_and_int $45 &= $46
+ 147. bitwise_and_int $44 &= $45
+ 148. bitwise_and_int $43 &= $44
+ 149. copy_4_slots_unmasked $44..47 = mp4
+ 150. copy_4_slots_unmasked $48..51 = hp4
+ 151. cmpeq_4_floats $44..47 = equal($44..47, $48..51)
+ 152. bitwise_and_2_ints $44..45 &= $46..47
+ 153. bitwise_and_int $44 &= $45
+ 154. bitwise_and_int $43 &= $44
+ 155. copy_2_slots_unmasked $44..45 = imp2
+ 156. copy_2_slots_unmasked $46..47 = ihp2
+ 157. cmpeq_2_ints $44..45 = equal($44..45, $46..47)
+ 158. bitwise_and_int $44 &= $45
+ 159. bitwise_and_int $43 &= $44
+ 160. copy_4_slots_unmasked $44..47 = ihp3, imp3(0)
+ 161. copy_2_slots_unmasked $48..49 = imp3(1..2)
+ 162. cmpeq_3_ints $44..46 = equal($44..46, $47..49)
+ 163. bitwise_and_int $45 &= $46
+ 164. bitwise_and_int $44 &= $45
+ 165. bitwise_and_int $43 &= $44
+ 166. copy_4_slots_unmasked $44..47 = imp4
+ 167. copy_4_slots_unmasked $48..51 = ihp4
+ 168. cmpeq_4_ints $44..47 = equal($44..47, $48..51)
+ 169. bitwise_and_2_ints $44..45 &= $46..47
+ 170. bitwise_and_int $44 &= $45
+ 171. bitwise_and_int $43 &= $44
+ 172. copy_slot_masked [test_vector].result = Mask($43)
+ 173. trace_var TraceVar([test_vector].result) when $18 is true
+ 174. trace_scope TraceScope(-1) when $42 is true
+ 175. trace_exit TraceExit(bool test_vector()) when $18 is true
+ 176. copy_slot_unmasked $42 = [test_vector].result
+ 177. label label 0x00000008
+ 178. copy_slot_masked $41 = Mask($42)
+ 179. label label 0x00000006
+ 180. load_condition_mask CondMask = $13
+ 181. zero_slot_unmasked $53 = 0
+ 182. merge_condition_mask CondMask = $40 & $41
+ 183. branch_if_no_lanes_active branch_if_no_lanes_active +83 (label 5 at #266)
+ 184. trace_enter TraceEnter(bool test_matrix()) when $18 is true
+ 185. zero_slot_unmasked $54 = 0
+ 186. copy_slot_unmasked $55 = $18
+ 187. copy_slot_masked $54 = Mask($55)
+ 188. trace_scope TraceScope(+1) when $54 is true
+ 189. trace_line TraceLine(34) when $18 is true
+ 190. zero_slot_unmasked $55 = 0
+ 191. copy_constant $56 = 0x40000000 (2.0)
+ 192. swizzle_4 $55..58 = ($55..58).yxxy
+ 193. copy_4_slots_unmasked mp2₁ = $55..58
+ 194. trace_var TraceVar(mp2₁) when $18 is true
+ 195. trace_line TraceLine(35) when $18 is true
+ 196. copy_4_slots_unmasked hp2₁ = mp2₁
+ 197. trace_var TraceVar(hp2₁) when $18 is true
+ 198. trace_line TraceLine(36) when $18 is true
+ 199. zero_slot_unmasked $55 = 0
+ 200. copy_constant $56 = 0x40400000 (3.0)
+ 201. shuffle $55..63 = ($55..63)[1 0 0 0 1 0 0 0 1]
+ 202. copy_4_slots_unmasked mp3₁(0..3) = $55..58
+ 203. copy_4_slots_unmasked mp3₁(4..7) = $59..62
+ 204. copy_slot_unmasked mp3₁(8) = $63
+ 205. trace_var TraceVar(mp3₁) when $18 is true
+ 206. trace_line TraceLine(37) when $18 is true
+ 207. copy_4_slots_unmasked hp3₁(0..3) = mp3₁(0..3)
+ 208. copy_4_slots_unmasked hp3₁(4..7) = mp3₁(4..7)
+ 209. copy_slot_unmasked hp3₁(8) = mp3₁(8)
+ 210. trace_var TraceVar(hp3₁) when $18 is true
+ 211. trace_line TraceLine(38) when $18 is true
+ 212. zero_slot_unmasked $55 = 0
+ 213. copy_constant $56 = 0x40800000 (4.0)
+ 214. shuffle $55..70 = ($55..70)[1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1]
+ 215. copy_4_slots_unmasked mp4₁(0..3) = $55..58
+ 216. copy_4_slots_unmasked mp4₁(4..7) = $59..62
+ 217. copy_4_slots_unmasked mp4₁(8..11) = $63..66
+ 218. copy_4_slots_unmasked mp4₁(12..15) = $67..70
+ 219. trace_var TraceVar(mp4₁) when $18 is true
+ 220. trace_line TraceLine(39) when $18 is true
+ 221. copy_4_slots_unmasked hp4₁(0..3) = mp4₁(0..3)
+ 222. copy_4_slots_unmasked hp4₁(4..7) = mp4₁(4..7)
+ 223. copy_4_slots_unmasked hp4₁(8..11) = mp4₁(8..11)
+ 224. copy_4_slots_unmasked hp4₁(12..15) = mp4₁(12..15)
+ 225. trace_var TraceVar(hp4₁) when $18 is true
+ 226. trace_line TraceLine(41) when $18 is true
+ 227. copy_4_slots_unmasked $55..58 = mp2₁
+ 228. copy_4_slots_unmasked $59..62 = hp2₁
+ 229. cmpeq_4_floats $55..58 = equal($55..58, $59..62)
+ 230. bitwise_and_2_ints $55..56 &= $57..58
+ 231. bitwise_and_int $55 &= $56
+ 232. copy_4_slots_unmasked $56..59 = hp3₁(0..3)
+ 233. copy_4_slots_unmasked $60..63 = hp3₁(4..7)
+ 234. copy_slot_unmasked $64 = hp3₁(8)
+ 235. copy_4_slots_unmasked $65..68 = mp3₁(0..3)
+ 236. copy_4_slots_unmasked $69..72 = mp3₁(4..7)
+ 237. copy_slot_unmasked $73 = mp3₁(8)
+ 238. cmpeq_n_floats $56..64 = equal($56..64, $65..73)
+ 239. bitwise_and_4_ints $57..60 &= $61..64
+ 240. bitwise_and_2_ints $57..58 &= $59..60
+ 241. bitwise_and_int $57 &= $58
+ 242. bitwise_and_int $56 &= $57
+ 243. bitwise_and_int $55 &= $56
+ 244. copy_4_slots_unmasked $56..59 = mp4₁(0..3)
+ 245. copy_4_slots_unmasked $60..63 = mp4₁(4..7)
+ 246. copy_4_slots_unmasked $64..67 = mp4₁(8..11)
+ 247. copy_4_slots_unmasked $68..71 = mp4₁(12..15)
+ 248. copy_4_slots_unmasked $72..75 = hp4₁(0..3)
+ 249. copy_4_slots_unmasked $76..79 = hp4₁(4..7)
+ 250. copy_4_slots_unmasked $80..83 = hp4₁(8..11)
+ 251. copy_4_slots_unmasked $84..87 = hp4₁(12..15)
+ 252. cmpeq_n_floats $56..71 = equal($56..71, $72..87)
+ 253. bitwise_and_4_ints $64..67 &= $68..71
+ 254. bitwise_and_4_ints $60..63 &= $64..67
+ 255. bitwise_and_4_ints $56..59 &= $60..63
+ 256. bitwise_and_2_ints $56..57 &= $58..59
+ 257. bitwise_and_int $56 &= $57
+ 258. bitwise_and_int $55 &= $56
+ 259. copy_slot_masked [test_matrix].result = Mask($55)
+ 260. trace_var TraceVar([test_matrix].result) when $18 is true
+ 261. trace_scope TraceScope(-1) when $54 is true
+ 262. trace_exit TraceExit(bool test_matrix()) when $18 is true
+ 263. copy_slot_unmasked $54 = [test_matrix].result
+ 264. label label 0x00000009
+ 265. copy_slot_masked $53 = Mask($54)
+ 266. label label 0x00000005
+ 267. load_condition_mask CondMask = $40
+ 268. zero_slot_unmasked $23 = 0
+ 269. merge_condition_mask CondMask = $52 & $53
+ 270. branch_if_no_lanes_active branch_if_no_lanes_active +66 (label 4 at #336)
+ 271. trace_enter TraceEnter(bool test_array()) when $18 is true
+ 272. zero_slot_unmasked $24 = 0
+ 273. copy_slot_unmasked $25 = $18
+ 274. copy_slot_masked $24 = Mask($25)
+ 275. trace_scope TraceScope(+1) when $24 is true
+ 276. trace_line TraceLine(45) when $18 is true
+ 277. zero_slot_unmasked mf[0] = 0
+ 278. trace_var TraceVar(mf[0]) when $18 is true
+ 279. trace_line TraceLine(45) when $18 is true
+ 280. copy_constant $25 = 0x3F800000 (1.0)
+ 281. copy_slot_masked mf[0] = Mask($25)
+ 282. trace_var TraceVar(mf[0]) when $18 is true
+ 283. trace_line TraceLine(46) when $18 is true
+ 284. zero_slot_unmasked hf[0] = 0
+ 285. trace_var TraceVar(hf[0]) when $18 is true
+ 286. trace_line TraceLine(46) when $18 is true
+ 287. copy_constant $25 = 0x3F800000 (1.0)
+ 288. copy_slot_masked hf[0] = Mask($25)
+ 289. trace_var TraceVar(hf[0]) when $18 is true
+ 290. trace_line TraceLine(47) when $18 is true
+ 291. zero_4_slots_unmasked mv[0], mv[1] = 0
+ 292. trace_var TraceVar(mv[0], mv[1]) when $18 is true
+ 293. trace_line TraceLine(47) when $18 is true
+ 294. zero_slot_unmasked $25 = 0
+ 295. copy_constant $26 = 0x3F800000 (1.0)
+ 296. copy_2_slots_masked mv[0] = Mask($25..26)
+ 297. trace_var TraceVar(mv[0]) when $18 is true
+ 298. trace_line TraceLine(47) when $18 is true
+ 299. copy_constant $25 = 0x40000000 (2.0)
+ 300. copy_constant $26 = 0x40400000 (3.0)
+ 301. copy_2_slots_masked mv[1] = Mask($25..26)
+ 302. trace_var TraceVar(mv[1]) when $18 is true
+ 303. trace_line TraceLine(48) when $18 is true
+ 304. zero_4_slots_unmasked hv[0], hv[1] = 0
+ 305. trace_var TraceVar(hv[0], hv[1]) when $18 is true
+ 306. trace_line TraceLine(48) when $18 is true
+ 307. zero_slot_unmasked $25 = 0
+ 308. copy_constant $26 = 0x3F800000 (1.0)
+ 309. copy_2_slots_masked hv[0] = Mask($25..26)
+ 310. trace_var TraceVar(hv[0]) when $18 is true
+ 311. trace_line TraceLine(48) when $18 is true
+ 312. copy_constant $25 = 0x40000000 (2.0)
+ 313. copy_constant $26 = 0x40400000 (3.0)
+ 314. copy_2_slots_masked hv[1] = Mask($25..26)
+ 315. trace_var TraceVar(hv[1]) when $18 is true
+ 316. trace_line TraceLine(50) when $18 is true
+ 317. copy_2_slots_unmasked $25..26 = mf[0], hf[0]
+ 318. cmpeq_float $25 = equal($25, $26)
+ 319. copy_2_slots_unmasked $26..27 = hv[0]
+ 320. copy_2_slots_unmasked $28..29 = mv[0]
+ 321. cmpeq_2_floats $26..27 = equal($26..27, $28..29)
+ 322. bitwise_and_int $26 &= $27
+ 323. bitwise_and_int $25 &= $26
+ 324. copy_2_slots_unmasked $26..27 = mv[1]
+ 325. copy_2_slots_unmasked $28..29 = hv[1]
+ 326. cmpeq_2_floats $26..27 = equal($26..27, $28..29)
+ 327. bitwise_and_int $26 &= $27
+ 328. bitwise_and_int $25 &= $26
+ 329. copy_slot_masked [test_array].result = Mask($25)
+ 330. trace_var TraceVar([test_array].result) when $18 is true
+ 331. trace_scope TraceScope(-1) when $24 is true
+ 332. trace_exit TraceExit(bool test_array()) when $18 is true
+ 333. copy_slot_unmasked $24 = [test_array].result
+ 334. label label 0x0000000A
+ 335. copy_slot_masked $23 = Mask($24)
+ 336. label label 0x00000004
+ 337. load_condition_mask CondMask = $52
+ 338. zero_slot_unmasked $36 = 0
+ 339. merge_condition_mask CondMask = $22 & $23
+ 340. branch_if_no_lanes_active branch_if_no_lanes_active +19 (label 3 at #359)
+ 341. copy_constant value = 0x3F800000 (1.0)
+ 342. trace_var TraceVar(value) when $18 is true
+ 343. trace_enter TraceEnter(bool highp_param(float value)) when $18 is true
+ 344. zero_slot_unmasked $37 = 0
+ 345. copy_slot_unmasked $38 = $18
+ 346. copy_slot_masked $37 = Mask($38)
+ 347. trace_scope TraceScope(+1) when $37 is true
+ 348. trace_line TraceLine(53) when $18 is true
+ 349. copy_slot_unmasked $38 = value
+ 350. copy_constant $39 = 0x3F800000 (1.0)
+ 351. cmpeq_float $38 = equal($38, $39)
+ 352. copy_slot_masked [highp_param].result = Mask($38)
+ 353. trace_var TraceVar([highp_param].result) when $18 is true
+ 354. trace_scope TraceScope(-1) when $37 is true
+ 355. trace_exit TraceExit(bool highp_param(float value)) when $18 is true
+ 356. copy_slot_unmasked $37 = [highp_param].result
+ 357. label label 0x0000000B
+ 358. copy_slot_masked $36 = Mask($37)
+ 359. label label 0x00000003
+ 360. load_condition_mask CondMask = $22
+ 361. zero_slot_unmasked $31 = 0
+ 362. merge_condition_mask CondMask = $35 & $36
+ 363. branch_if_no_lanes_active branch_if_no_lanes_active +19 (label 2 at #382)
+ 364. copy_constant value₁ = 0x40000000 (2.0)
+ 365. trace_var TraceVar(value₁) when $18 is true
+ 366. trace_enter TraceEnter(bool mediump_param(half value)) when $18 is true
+ 367. zero_slot_unmasked $32 = 0
+ 368. copy_slot_unmasked $33 = $18
+ 369. copy_slot_masked $32 = Mask($33)
+ 370. trace_scope TraceScope(+1) when $32 is true
+ 371. trace_line TraceLine(54) when $18 is true
+ 372. copy_slot_unmasked $33 = value₁
+ 373. copy_constant $34 = 0x40000000 (2.0)
+ 374. cmpeq_float $33 = equal($33, $34)
+ 375. copy_slot_masked [mediump_param].result = Mask($33)
+ 376. trace_var TraceVar([mediump_param].result) when $18 is true
+ 377. trace_scope TraceScope(-1) when $32 is true
+ 378. trace_exit TraceExit(bool mediump_param(half value)) when $18 is true
+ 379. copy_slot_unmasked $32 = [mediump_param].result
+ 380. label label 0x0000000C
+ 381. copy_slot_masked $31 = Mask($32)
+ 382. label label 0x00000002
+ 383. load_condition_mask CondMask = $35
+ 384. zero_slot_unmasked $1 = 0
+ 385. merge_condition_mask CondMask = $30 & $31
+ 386. branch_if_no_lanes_active branch_if_no_lanes_active +19 (label 1 at #405)
+ 387. copy_constant value₂ = 0x40400000 (3.0)
+ 388. trace_var TraceVar(value₂) when $18 is true
+ 389. trace_enter TraceEnter(bool lowp_param(half value)) when $18 is true
+ 390. zero_slot_unmasked $2 = 0
+ 391. copy_slot_unmasked $3 = $18
+ 392. copy_slot_masked $2 = Mask($3)
+ 393. trace_scope TraceScope(+1) when $2 is true
+ 394. trace_line TraceLine(55) when $18 is true
+ 395. copy_slot_unmasked $3 = value₂
+ 396. copy_constant $4 = 0x40400000 (3.0)
+ 397. cmpeq_float $3 = equal($3, $4)
+ 398. copy_slot_masked [lowp_param].result = Mask($3)
+ 399. trace_var TraceVar([lowp_param].result) when $18 is true
+ 400. trace_scope TraceScope(-1) when $2 is true
+ 401. trace_exit TraceExit(bool lowp_param(half value)) when $18 is true
+ 402. copy_slot_unmasked $2 = [lowp_param].result
+ 403. label label 0x0000000D
+ 404. copy_slot_masked $1 = Mask($2)
+ 405. label label 0x00000001
+ 406. load_condition_mask CondMask = $30
+ 407. swizzle_4 $1..4 = ($1..4).xxxx
+ 408. copy_4_slots_unmasked $5..8 = red
+ 409. copy_4_slots_unmasked $9..12 = green
+ 410. mix_4_ints $1..4 = mix($5..8, $9..12, $1..4)
+ 411. copy_4_slots_unmasked [main].result = $1..4
+ 412. trace_var TraceVar([main].result) when $18 is true
+ 413. trace_scope TraceScope(-1) when $0 is true
+ 414. trace_exit TraceExit(vec4 main(vec2 coords)) when $18 is true
+ 415. load_src src.rgba = [main].result
diff --git a/tests/sksl/shared/MatrixIndexStore.skrp b/tests/sksl/shared/MatrixIndexStore.skrp
index 4c19074..3518ccc 100644
--- a/tests/sksl/shared/MatrixIndexStore.skrp
+++ b/tests/sksl/shared/MatrixIndexStore.skrp
@@ -1,163 +1,184 @@
- 1. store_device_xy01 $54..57 = DeviceCoords.xy01
- 2. copy_constant $56 = 0x3F000000 (0.5)
- 3. copy_constant $57 = 0x3F000000 (0.5)
- 4. cmpeq_2_floats $54..55 = equal($54..55, $56..57)
- 5. bitwise_and_int $54 &= $55
+ 1. store_device_xy01 $57..60 = DeviceCoords.xy01
+ 2. copy_constant $59 = 0x3F000000 (0.5)
+ 3. copy_constant $60 = 0x3F000000 (0.5)
+ 4. cmpeq_2_floats $57..58 = equal($57..58, $59..60)
+ 5. bitwise_and_int $57 &= $58
6. store_src_rg coords = src.rg
7. init_lane_masks CondMask = LoopMask = RetMask = true
- 8. trace_enter TraceEnter(half4 main(float2 coords)) when $54 is true
- 9. trace_var TraceVar(coords) when $54 is true
- 10. trace_scope TraceScope(+1) when $54 is true
- 11. trace_line TraceLine(28) when $54 is true
- 12. store_condition_mask $35 = CondMask
- 13. branch_if_no_lanes_active branch_if_no_lanes_active +65 (label 2 at #78)
- 14. trace_enter TraceEnter(bool test3x3()) when $54 is true
- 15. trace_scope TraceScope(+1) when $54 is true
- 16. trace_line TraceLine(8) when $54 is true
- 17. zero_4_slots_unmasked matrix(0..3) = 0
- 18. zero_4_slots_unmasked matrix(4..7) = 0
- 19. zero_slot_unmasked matrix(8) = 0
- 20. trace_var TraceVar(matrix) when $54 is true
- 21. trace_line TraceLine(9) when $54 is true
- 22. copy_constant values(0) = 0x3F800000 (1.0)
- 23. copy_constant values(1) = 0x40000000 (2.0)
- 24. copy_constant values(2) = 0x40400000 (3.0)
- 25. trace_var TraceVar(values) when $54 is true
- 26. trace_scope TraceScope(+1) when $54 is true
- 27. branch_if_no_lanes_active branch_if_no_lanes_active +32 (label 3 at #59)
- 28. trace_line TraceLine(10) when $54 is true
- 29. zero_slot_unmasked index = 0
- 30. trace_var TraceVar(index) when $54 is true
- 31. label label 0x00000004
- 32. trace_scope TraceScope(+1) when $54 is true
- 33. trace_line TraceLine(11) when $54 is true
- 34. copy_slot_unmasked $33 = index
- 35. copy_constant $34 = 0x00000003 (4.203895e-45)
- 36. mul_int $33 *= $34
- 37. copy_3_slots_unmasked $36..38 = values
- 38. copy_to_indirect_masked Indirect(matrix(0..2) + $33) = Mask($36..38)
- 39. trace_var TraceVar(matrix(0..2) + $33) when $54 is true
- 40. trace_line TraceLine(12) when $54 is true
- 41. copy_3_slots_unmasked $36..38 = values
- 42. copy_constant $39 = 0x40400000 (3.0)
- 43. swizzle_3 $39..41 = ($39..41).xxx
- 44. add_3_floats $36..38 += $39..41
- 45. copy_3_slots_masked values = Mask($36..38)
- 46. trace_var TraceVar(values) when $54 is true
- 47. trace_scope TraceScope(-1) when $54 is true
- 48. trace_line TraceLine(10) when $54 is true
- 49. copy_slot_unmasked $36 = index
- 50. copy_constant $37 = 0x00000001 (1.401298e-45)
- 51. add_int $36 += $37
- 52. copy_slot_masked index = Mask($36)
- 53. trace_var TraceVar(index) when $54 is true
- 54. copy_slot_unmasked $36 = index
- 55. copy_constant $37 = 0x00000003 (4.203895e-45)
- 56. cmplt_int $36 = lessThan($36, $37)
- 57. stack_rewind
- 58. branch_if_no_active_lanes_eq branch -27 (label 4 at #31) if no lanes of $36 == 0x00000000 (0.0)
- 59. label label 0x00000003
- 60. trace_scope TraceScope(-1) when $54 is true
- 61. trace_line TraceLine(14) when $54 is true
- 62. copy_4_slots_unmasked $36..39 = matrix(0..3)
- 63. copy_4_slots_unmasked $40..43 = matrix(4..7)
- 64. copy_slot_unmasked $44 = matrix(8)
- 65. copy_4_constants $45..48 = testMatrix3x3(0..3)
- 66. copy_4_constants $49..52 = testMatrix3x3(4..7)
- 67. copy_constant $53 = testMatrix3x3(8)
- 68. cmpeq_n_floats $36..44 = equal($36..44, $45..53)
- 69. bitwise_and_4_ints $37..40 &= $41..44
- 70. bitwise_and_2_ints $37..38 &= $39..40
- 71. bitwise_and_int $37 &= $38
- 72. bitwise_and_int $36 &= $37
- 73. copy_slot_masked [test3x3].result = Mask($36)
- 74. trace_var TraceVar([test3x3].result) when $54 is true
- 75. trace_scope TraceScope(-1) when $54 is true
- 76. trace_exit TraceExit(bool test3x3()) when $54 is true
- 77. copy_slot_unmasked $36 = [test3x3].result
- 78. label label 0x00000002
- 79. zero_slot_unmasked $0 = 0
- 80. merge_condition_mask CondMask = $35 & $36
- 81. branch_if_no_lanes_active branch_if_no_lanes_active +72 (label 1 at #153)
- 82. trace_enter TraceEnter(bool test4x4()) when $54 is true
- 83. trace_scope TraceScope(+1) when $54 is true
- 84. trace_line TraceLine(18) when $54 is true
- 85. zero_4_slots_unmasked matrix₁(0..3) = 0
- 86. zero_4_slots_unmasked matrix₁(4..7) = 0
- 87. zero_4_slots_unmasked matrix₁(8..11) = 0
- 88. zero_4_slots_unmasked matrix₁(12..15) = 0
- 89. trace_var TraceVar(matrix₁) when $54 is true
- 90. trace_line TraceLine(19) when $54 is true
- 91. copy_constant values₁(0) = 0x3F800000 (1.0)
- 92. copy_constant values₁(1) = 0x40000000 (2.0)
- 93. copy_constant values₁(2) = 0x40400000 (3.0)
- 94. copy_constant values₁(3) = 0x40800000 (4.0)
- 95. trace_var TraceVar(values₁) when $54 is true
- 96. trace_scope TraceScope(+1) when $54 is true
- 97. branch_if_no_lanes_active branch_if_no_lanes_active +32 (label 6 at #129)
- 98. trace_line TraceLine(20) when $54 is true
- 99. zero_slot_unmasked index₁ = 0
- 100. trace_var TraceVar(index₁) when $54 is true
- 101. label label 0x00000007
- 102. trace_scope TraceScope(+1) when $54 is true
- 103. trace_line TraceLine(21) when $54 is true
- 104. copy_slot_unmasked $33 = index₁
- 105. copy_constant $34 = 0x00000004 (5.605194e-45)
- 106. mul_int $33 *= $34
- 107. copy_4_slots_unmasked $1..4 = values₁
- 108. copy_to_indirect_masked Indirect(matrix₁(0..3) + $33) = Mask($1..4)
- 109. trace_var TraceVar(matrix₁(0..3) + $33) when $54 is true
- 110. trace_line TraceLine(22) when $54 is true
- 111. copy_4_slots_unmasked $1..4 = values₁
- 112. copy_constant $5 = 0x40800000 (4.0)
- 113. swizzle_4 $5..8 = ($5..8).xxxx
- 114. add_4_floats $1..4 += $5..8
- 115. copy_4_slots_masked values₁ = Mask($1..4)
- 116. trace_var TraceVar(values₁) when $54 is true
- 117. trace_scope TraceScope(-1) when $54 is true
- 118. trace_line TraceLine(20) when $54 is true
- 119. copy_slot_unmasked $1 = index₁
- 120. copy_constant $2 = 0x00000001 (1.401298e-45)
- 121. add_int $1 += $2
- 122. copy_slot_masked index₁ = Mask($1)
- 123. trace_var TraceVar(index₁) when $54 is true
- 124. copy_slot_unmasked $1 = index₁
- 125. copy_constant $2 = 0x00000004 (5.605194e-45)
- 126. cmplt_int $1 = lessThan($1, $2)
- 127. stack_rewind
- 128. branch_if_no_active_lanes_eq branch -27 (label 7 at #101) if no lanes of $1 == 0x00000000 (0.0)
- 129. label label 0x00000006
- 130. trace_scope TraceScope(-1) when $54 is true
- 131. trace_line TraceLine(24) when $54 is true
- 132. copy_4_slots_unmasked $1..4 = matrix₁(0..3)
- 133. copy_4_slots_unmasked $5..8 = matrix₁(4..7)
- 134. copy_4_slots_unmasked $9..12 = matrix₁(8..11)
- 135. copy_4_slots_unmasked $13..16 = matrix₁(12..15)
- 136. copy_4_constants $17..20 = testMatrix4x4(0..3)
- 137. copy_4_constants $21..24 = testMatrix4x4(4..7)
- 138. copy_4_constants $25..28 = testMatrix4x4(8..11)
- 139. copy_4_constants $29..32 = testMatrix4x4(12..15)
- 140. cmpeq_n_floats $1..16 = equal($1..16, $17..32)
- 141. bitwise_and_4_ints $9..12 &= $13..16
- 142. bitwise_and_4_ints $5..8 &= $9..12
- 143. bitwise_and_4_ints $1..4 &= $5..8
- 144. bitwise_and_2_ints $1..2 &= $3..4
- 145. bitwise_and_int $1 &= $2
- 146. copy_slot_masked [test4x4].result = Mask($1)
- 147. trace_var TraceVar([test4x4].result) when $54 is true
- 148. trace_scope TraceScope(-1) when $54 is true
- 149. trace_exit TraceExit(bool test4x4()) when $54 is true
- 150. copy_slot_unmasked $1 = [test4x4].result
- 151. label label 0x00000005
- 152. copy_slot_masked $0 = Mask($1)
- 153. label label 0x00000001
- 154. load_condition_mask CondMask = $35
- 155. swizzle_4 $0..3 = ($0..3).xxxx
- 156. copy_4_constants $4..7 = colorRed
- 157. copy_4_constants $8..11 = colorGreen
- 158. mix_4_ints $0..3 = mix($4..7, $8..11, $0..3)
- 159. copy_4_slots_unmasked [main].result = $0..3
- 160. trace_var TraceVar([main].result) when $54 is true
- 161. trace_scope TraceScope(-1) when $54 is true
- 162. trace_exit TraceExit(half4 main(float2 coords)) when $54 is true
- 163. load_src src.rgba = [main].result
+ 8. trace_enter TraceEnter(half4 main(float2 coords)) when $57 is true
+ 9. trace_var TraceVar(coords) when $57 is true
+ 10. zero_slot_unmasked $0 = 0
+ 11. copy_slot_unmasked $1 = $57
+ 12. copy_slot_masked $0 = Mask($1)
+ 13. trace_scope TraceScope(+1) when $0 is true
+ 14. trace_line TraceLine(28) when $57 is true
+ 15. store_condition_mask $37 = CondMask
+ 16. branch_if_no_lanes_active branch_if_no_lanes_active +74 (label 2 at #90)
+ 17. trace_enter TraceEnter(bool test3x3()) when $57 is true
+ 18. zero_slot_unmasked $38 = 0
+ 19. copy_slot_unmasked $39 = $57
+ 20. copy_slot_masked $38 = Mask($39)
+ 21. trace_scope TraceScope(+1) when $38 is true
+ 22. trace_line TraceLine(8) when $57 is true
+ 23. zero_4_slots_unmasked matrix(0..3) = 0
+ 24. zero_4_slots_unmasked matrix(4..7) = 0
+ 25. zero_slot_unmasked matrix(8) = 0
+ 26. trace_var TraceVar(matrix) when $57 is true
+ 27. trace_line TraceLine(9) when $57 is true
+ 28. copy_constant values(0) = 0x3F800000 (1.0)
+ 29. copy_constant values(1) = 0x40000000 (2.0)
+ 30. copy_constant values(2) = 0x40400000 (3.0)
+ 31. trace_var TraceVar(values) when $57 is true
+ 32. zero_slot_unmasked $39 = 0
+ 33. copy_slot_unmasked $40 = $57
+ 34. copy_slot_masked $39 = Mask($40)
+ 35. trace_scope TraceScope(+1) when $39 is true
+ 36. branch_if_no_lanes_active branch_if_no_lanes_active +35 (label 3 at #71)
+ 37. trace_line TraceLine(10) when $57 is true
+ 38. zero_slot_unmasked index = 0
+ 39. trace_var TraceVar(index) when $57 is true
+ 40. label label 0x00000004
+ 41. zero_slot_unmasked $40 = 0
+ 42. copy_slot_unmasked $41 = $57
+ 43. copy_slot_masked $40 = Mask($41)
+ 44. trace_scope TraceScope(+1) when $40 is true
+ 45. trace_line TraceLine(11) when $57 is true
+ 46. copy_slot_unmasked $35 = index
+ 47. copy_constant $36 = 0x00000003 (4.203895e-45)
+ 48. mul_int $35 *= $36
+ 49. copy_3_slots_unmasked $41..43 = values
+ 50. copy_to_indirect_masked Indirect(matrix(0..2) + $35) = Mask($41..43)
+ 51. trace_var TraceVar(matrix(0..2) + $35) when $57 is true
+ 52. trace_line TraceLine(12) when $57 is true
+ 53. copy_3_slots_unmasked $41..43 = values
+ 54. copy_constant $44 = 0x40400000 (3.0)
+ 55. swizzle_3 $44..46 = ($44..46).xxx
+ 56. add_3_floats $41..43 += $44..46
+ 57. copy_3_slots_masked values = Mask($41..43)
+ 58. trace_var TraceVar(values) when $57 is true
+ 59. trace_scope TraceScope(-1) when $40 is true
+ 60. trace_line TraceLine(10) when $57 is true
+ 61. copy_slot_unmasked $40 = index
+ 62. copy_constant $41 = 0x00000001 (1.401298e-45)
+ 63. add_int $40 += $41
+ 64. copy_slot_masked index = Mask($40)
+ 65. trace_var TraceVar(index) when $57 is true
+ 66. copy_slot_unmasked $40 = index
+ 67. copy_constant $41 = 0x00000003 (4.203895e-45)
+ 68. cmplt_int $40 = lessThan($40, $41)
+ 69. stack_rewind
+ 70. branch_if_no_active_lanes_eq branch -30 (label 4 at #40) if no lanes of $40 == 0x00000000 (0.0)
+ 71. label label 0x00000003
+ 72. trace_scope TraceScope(-1) when $39 is true
+ 73. trace_line TraceLine(14) when $57 is true
+ 74. copy_4_slots_unmasked $39..42 = matrix(0..3)
+ 75. copy_4_slots_unmasked $43..46 = matrix(4..7)
+ 76. copy_slot_unmasked $47 = matrix(8)
+ 77. copy_4_constants $48..51 = testMatrix3x3(0..3)
+ 78. copy_4_constants $52..55 = testMatrix3x3(4..7)
+ 79. copy_constant $56 = testMatrix3x3(8)
+ 80. cmpeq_n_floats $39..47 = equal($39..47, $48..56)
+ 81. bitwise_and_4_ints $40..43 &= $44..47
+ 82. bitwise_and_2_ints $40..41 &= $42..43
+ 83. bitwise_and_int $40 &= $41
+ 84. bitwise_and_int $39 &= $40
+ 85. copy_slot_masked [test3x3].result = Mask($39)
+ 86. trace_var TraceVar([test3x3].result) when $57 is true
+ 87. trace_scope TraceScope(-1) when $38 is true
+ 88. trace_exit TraceExit(bool test3x3()) when $57 is true
+ 89. copy_slot_unmasked $38 = [test3x3].result
+ 90. label label 0x00000002
+ 91. zero_slot_unmasked $1 = 0
+ 92. merge_condition_mask CondMask = $37 & $38
+ 93. branch_if_no_lanes_active branch_if_no_lanes_active +81 (label 1 at #174)
+ 94. trace_enter TraceEnter(bool test4x4()) when $57 is true
+ 95. zero_slot_unmasked $2 = 0
+ 96. copy_slot_unmasked $3 = $57
+ 97. copy_slot_masked $2 = Mask($3)
+ 98. trace_scope TraceScope(+1) when $2 is true
+ 99. trace_line TraceLine(18) when $57 is true
+ 100. zero_4_slots_unmasked matrix₁(0..3) = 0
+ 101. zero_4_slots_unmasked matrix₁(4..7) = 0
+ 102. zero_4_slots_unmasked matrix₁(8..11) = 0
+ 103. zero_4_slots_unmasked matrix₁(12..15) = 0
+ 104. trace_var TraceVar(matrix₁) when $57 is true
+ 105. trace_line TraceLine(19) when $57 is true
+ 106. copy_constant values₁(0) = 0x3F800000 (1.0)
+ 107. copy_constant values₁(1) = 0x40000000 (2.0)
+ 108. copy_constant values₁(2) = 0x40400000 (3.0)
+ 109. copy_constant values₁(3) = 0x40800000 (4.0)
+ 110. trace_var TraceVar(values₁) when $57 is true
+ 111. zero_slot_unmasked $3 = 0
+ 112. copy_slot_unmasked $4 = $57
+ 113. copy_slot_masked $3 = Mask($4)
+ 114. trace_scope TraceScope(+1) when $3 is true
+ 115. branch_if_no_lanes_active branch_if_no_lanes_active +35 (label 6 at #150)
+ 116. trace_line TraceLine(20) when $57 is true
+ 117. zero_slot_unmasked index₁ = 0
+ 118. trace_var TraceVar(index₁) when $57 is true
+ 119. label label 0x00000007
+ 120. zero_slot_unmasked $4 = 0
+ 121. copy_slot_unmasked $5 = $57
+ 122. copy_slot_masked $4 = Mask($5)
+ 123. trace_scope TraceScope(+1) when $4 is true
+ 124. trace_line TraceLine(21) when $57 is true
+ 125. copy_slot_unmasked $35 = index₁
+ 126. copy_constant $36 = 0x00000004 (5.605194e-45)
+ 127. mul_int $35 *= $36
+ 128. copy_4_slots_unmasked $5..8 = values₁
+ 129. copy_to_indirect_masked Indirect(matrix₁(0..3) + $35) = Mask($5..8)
+ 130. trace_var TraceVar(matrix₁(0..3) + $35) when $57 is true
+ 131. trace_line TraceLine(22) when $57 is true
+ 132. copy_4_slots_unmasked $5..8 = values₁
+ 133. copy_constant $9 = 0x40800000 (4.0)
+ 134. swizzle_4 $9..12 = ($9..12).xxxx
+ 135. add_4_floats $5..8 += $9..12
+ 136. copy_4_slots_masked values₁ = Mask($5..8)
+ 137. trace_var TraceVar(values₁) when $57 is true
+ 138. trace_scope TraceScope(-1) when $4 is true
+ 139. trace_line TraceLine(20) when $57 is true
+ 140. copy_slot_unmasked $4 = index₁
+ 141. copy_constant $5 = 0x00000001 (1.401298e-45)
+ 142. add_int $4 += $5
+ 143. copy_slot_masked index₁ = Mask($4)
+ 144. trace_var TraceVar(index₁) when $57 is true
+ 145. copy_slot_unmasked $4 = index₁
+ 146. copy_constant $5 = 0x00000004 (5.605194e-45)
+ 147. cmplt_int $4 = lessThan($4, $5)
+ 148. stack_rewind
+ 149. branch_if_no_active_lanes_eq branch -30 (label 7 at #119) if no lanes of $4 == 0x00000000 (0.0)
+ 150. label label 0x00000006
+ 151. trace_scope TraceScope(-1) when $3 is true
+ 152. trace_line TraceLine(24) when $57 is true
+ 153. copy_4_slots_unmasked $3..6 = matrix₁(0..3)
+ 154. copy_4_slots_unmasked $7..10 = matrix₁(4..7)
+ 155. copy_4_slots_unmasked $11..14 = matrix₁(8..11)
+ 156. copy_4_slots_unmasked $15..18 = matrix₁(12..15)
+ 157. copy_4_constants $19..22 = testMatrix4x4(0..3)
+ 158. copy_4_constants $23..26 = testMatrix4x4(4..7)
+ 159. copy_4_constants $27..30 = testMatrix4x4(8..11)
+ 160. copy_4_constants $31..34 = testMatrix4x4(12..15)
+ 161. cmpeq_n_floats $3..18 = equal($3..18, $19..34)
+ 162. bitwise_and_4_ints $11..14 &= $15..18
+ 163. bitwise_and_4_ints $7..10 &= $11..14
+ 164. bitwise_and_4_ints $3..6 &= $7..10
+ 165. bitwise_and_2_ints $3..4 &= $5..6
+ 166. bitwise_and_int $3 &= $4
+ 167. copy_slot_masked [test4x4].result = Mask($3)
+ 168. trace_var TraceVar([test4x4].result) when $57 is true
+ 169. trace_scope TraceScope(-1) when $2 is true
+ 170. trace_exit TraceExit(bool test4x4()) when $57 is true
+ 171. copy_slot_unmasked $2 = [test4x4].result
+ 172. label label 0x00000005
+ 173. copy_slot_masked $1 = Mask($2)
+ 174. label label 0x00000001
+ 175. load_condition_mask CondMask = $37
+ 176. swizzle_4 $1..4 = ($1..4).xxxx
+ 177. copy_4_constants $5..8 = colorRed
+ 178. copy_4_constants $9..12 = colorGreen
+ 179. mix_4_ints $1..4 = mix($5..8, $9..12, $1..4)
+ 180. copy_4_slots_unmasked [main].result = $1..4
+ 181. trace_var TraceVar([main].result) when $57 is true
+ 182. trace_scope TraceScope(-1) when $0 is true
+ 183. trace_exit TraceExit(half4 main(float2 coords)) when $57 is true
+ 184. load_src src.rgba = [main].result