xref: /aosp_15_r20/external/skia/tests/sksl/shared/MatrixScalarMath.skrp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1363 instructions
2
3[immutable slots]
4i0 = 0x00000002 (2.802597e-45)
5i1 = 0x00000003 (4.203895e-45)
6i2 = 0x00000004 (5.605194e-45)
7
8store_src_rg                   coords = src.rg
9init_lane_masks                CondMask = LoopMask = RetMask = true
10copy_uniform                   f1 = colorGreen(1)
11copy_uniform                   $0 = colorGreen(1)
12mul_imm_float                  $0 *= 0x40000000 (2.0)
13copy_slot_unmasked             f2 = $0
14copy_uniform                   $0 = colorGreen(1)
15mul_imm_float                  $0 *= 0x40400000 (3.0)
16copy_slot_unmasked             f3 = $0
17copy_uniform                   $0 = colorGreen(1)
18mul_imm_float                  $0 *= 0x40800000 (4.0)
19copy_slot_unmasked             f4 = $0
20copy_slot_unmasked             $0 = f1
21add_imm_float                  $0 += 0x3F800000 (1.0)
22copy_slot_unmasked             $1 = f2
23add_imm_float                  $1 += 0x3F800000 (1.0)
24copy_slot_unmasked             $2 = f3
25add_imm_float                  $2 += 0x3F800000 (1.0)
26copy_slot_unmasked             $3 = f4
27add_imm_float                  $3 += 0x3F800000 (1.0)
28copy_4_slots_unmasked          _0_expected = $0..3
29copy_uniform                   _1_one = colorRed(0)
30copy_slot_unmasked             $0 = f1
31copy_slot_unmasked             $1 = _1_one
32mul_float                      $0 *= $1
33copy_slot_unmasked             $1 = f2
34copy_slot_unmasked             $2 = _1_one
35mul_float                      $1 *= $2
36copy_slot_unmasked             $2 = f3
37copy_slot_unmasked             $3 = _1_one
38mul_float                      $2 *= $3
39copy_slot_unmasked             $3 = f4
40copy_slot_unmasked             $4 = _1_one
41mul_float                      $3 *= $4
42copy_4_slots_unmasked          _2_m2 = $0..3
43splat_4_constants              $4..7 = 0x3F800000 (1.0)
44add_4_floats                   $0..3 += $4..7
45copy_4_slots_unmasked          _2_m2 = $0..3
46store_condition_mask           $12 = CondMask
47store_condition_mask           $25 = CondMask
48store_condition_mask           $38 = CondMask
49store_condition_mask           $51 = CondMask
50copy_slot_unmasked             $52 = _2_m2(0)
51copy_slot_unmasked             $53 = _0_expected(0)
52cmpeq_float                    $52 = equal($52, $53)
53copy_2_slots_unmasked          $53..54 = _2_m2(0..1)
54copy_slot_unmasked             $53 = $54
55copy_2_slots_unmasked          $54..55 = _0_expected(0..1)
56copy_slot_unmasked             $54 = $55
57cmpeq_float                    $53 = equal($53, $54)
58bitwise_and_int                $52 &= $53
59copy_slot_unmasked             $53 = _2_m2(2)
60copy_slot_unmasked             $54 = _0_expected(2)
61cmpeq_float                    $53 = equal($53, $54)
62bitwise_and_int                $52 &= $53
63copy_2_slots_unmasked          $53..54 = _2_m2(2..3)
64copy_slot_unmasked             $53 = $54
65copy_2_slots_unmasked          $54..55 = _0_expected(2..3)
66copy_slot_unmasked             $54 = $55
67cmpeq_float                    $53 = equal($53, $54)
68bitwise_and_int                $52 &= $53
69copy_constant                  $39 = 0
70merge_condition_mask           CondMask = $51 & $52
71branch_if_no_lanes_active      branch_if_no_lanes_active +88 (label 4 at #152)
72copy_constant                  op = 0x00000002 (2.802597e-45)
73copy_slot_unmasked             $40 = f1
74add_imm_float                  $40 += 0xBF800000 (-1.0)
75copy_slot_unmasked             $41 = f2
76add_imm_float                  $41 += 0xBF800000 (-1.0)
77copy_slot_unmasked             $42 = f3
78add_imm_float                  $42 += 0xBF800000 (-1.0)
79copy_slot_unmasked             $43 = f4
80add_imm_float                  $43 += 0xBF800000 (-1.0)
81copy_4_slots_unmasked          expected = $40..43
82copy_uniform                   one = colorRed(0)
83copy_slot_unmasked             $40 = f1
84copy_slot_unmasked             $41 = one
85mul_float                      $40 *= $41
86copy_slot_unmasked             $41 = f2
87copy_slot_unmasked             $42 = one
88mul_float                      $41 *= $42
89copy_slot_unmasked             $42 = f3
90copy_slot_unmasked             $43 = one
91mul_float                      $42 *= $43
92copy_slot_unmasked             $43 = f4
93copy_slot_unmasked             $44 = one
94mul_float                      $43 *= $44
95copy_4_slots_unmasked          m2 = $40..43
96store_loop_mask                $40 = LoopMask
97copy_slot_unmasked             $41 = op
98store_loop_mask                $42 = LoopMask
99mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
100case_op                        if ($41 == 0x00000001) { LoopMask = true; $42 = false; }
101branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 7 at #101)
102copy_4_slots_unmasked          $43..46 = m2
103splat_4_constants              $47..50 = 0x3F800000 (1.0)
104add_4_floats                   $43..46 += $47..50
105copy_4_slots_masked            m2 = Mask($43..46)
106branch_if_all_lanes_active     branch_if_all_lanes_active +30 (label 6 at #129)
107mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
108label                          label 0x00000007
109case_op                        if ($41 == 0x00000002) { LoopMask = true; $42 = false; }
110branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 8 at #110)
111copy_4_slots_unmasked          $43..46 = m2
112splat_4_constants              $47..50 = 0x3F800000 (1.0)
113sub_4_floats                   $43..46 -= $47..50
114copy_4_slots_masked            m2 = Mask($43..46)
115branch_if_all_lanes_active     branch_if_all_lanes_active +21 (label 6 at #129)
116mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
117label                          label 0x00000008
118case_op                        if ($41 == 0x00000003) { LoopMask = true; $42 = false; }
119branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 9 at #119)
120copy_4_slots_unmasked          $43..46 = m2
121splat_4_constants              $47..50 = 0x40000000 (2.0)
122mul_4_floats                   $43..46 *= $47..50
123copy_4_slots_masked            m2 = Mask($43..46)
124branch_if_all_lanes_active     branch_if_all_lanes_active +12 (label 6 at #129)
125mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
126label                          label 0x00000009
127case_op                        if ($41 == 0x00000004) { LoopMask = true; $42 = false; }
128branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 10 at #128)
129copy_4_slots_unmasked          $43..46 = m2
130splat_4_constants              $47..50 = 0x3F000000 (0.5)
131mul_4_floats                   $43..46 *= $47..50
132copy_4_slots_masked            m2 = Mask($43..46)
133branch_if_all_lanes_active     branch_if_all_lanes_active +3 (label 6 at #129)
134mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
135label                          label 0x0000000A
136label                          label 0x00000006
137load_loop_mask                 LoopMask = $40
138copy_slot_unmasked             $40 = m2(0)
139copy_slot_unmasked             $41 = expected(0)
140cmpeq_float                    $40 = equal($40, $41)
141copy_2_slots_unmasked          $41..42 = m2(0..1)
142copy_slot_unmasked             $41 = $42
143copy_2_slots_unmasked          $42..43 = expected(0..1)
144copy_slot_unmasked             $42 = $43
145cmpeq_float                    $41 = equal($41, $42)
146bitwise_and_int                $40 &= $41
147copy_slot_unmasked             $41 = m2(2)
148copy_slot_unmasked             $42 = expected(2)
149cmpeq_float                    $41 = equal($41, $42)
150bitwise_and_int                $40 &= $41
151copy_2_slots_unmasked          $41..42 = m2(2..3)
152copy_slot_unmasked             $41 = $42
153copy_2_slots_unmasked          $42..43 = expected(2..3)
154copy_slot_unmasked             $42 = $43
155cmpeq_float                    $41 = equal($41, $42)
156bitwise_and_int                $40 &= $41
157label                          label 0x00000005
158copy_slot_masked               $39 = Mask($40)
159label                          label 0x00000004
160load_condition_mask            CondMask = $51
161copy_constant                  $26 = 0
162merge_condition_mask           CondMask = $38 & $39
163branch_if_no_lanes_active      branch_if_no_lanes_active +88 (label 3 at #244)
164copy_constant                  op = 0x00000003 (4.203895e-45)
165copy_slot_unmasked             $27 = f1
166mul_imm_float                  $27 *= 0x40000000 (2.0)
167copy_slot_unmasked             $28 = f2
168mul_imm_float                  $28 *= 0x40000000 (2.0)
169copy_slot_unmasked             $29 = f3
170mul_imm_float                  $29 *= 0x40000000 (2.0)
171copy_slot_unmasked             $30 = f4
172mul_imm_float                  $30 *= 0x40000000 (2.0)
173copy_4_slots_unmasked          expected = $27..30
174copy_uniform                   one = colorRed(0)
175copy_slot_unmasked             $27 = f1
176copy_slot_unmasked             $28 = one
177mul_float                      $27 *= $28
178copy_slot_unmasked             $28 = f2
179copy_slot_unmasked             $29 = one
180mul_float                      $28 *= $29
181copy_slot_unmasked             $29 = f3
182copy_slot_unmasked             $30 = one
183mul_float                      $29 *= $30
184copy_slot_unmasked             $30 = f4
185copy_slot_unmasked             $31 = one
186mul_float                      $30 *= $31
187copy_4_slots_unmasked          m2 = $27..30
188store_loop_mask                $27 = LoopMask
189copy_slot_unmasked             $28 = op
190store_loop_mask                $29 = LoopMask
191mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
192case_op                        if ($28 == 0x00000001) { LoopMask = true; $29 = false; }
193branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 13 at #193)
194copy_4_slots_unmasked          $30..33 = m2
195splat_4_constants              $34..37 = 0x3F800000 (1.0)
196add_4_floats                   $30..33 += $34..37
197copy_4_slots_masked            m2 = Mask($30..33)
198branch_if_all_lanes_active     branch_if_all_lanes_active +30 (label 12 at #221)
199mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
200label                          label 0x0000000D
201case_op                        if ($28 == 0x00000002) { LoopMask = true; $29 = false; }
202branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 14 at #202)
203copy_4_slots_unmasked          $30..33 = m2
204splat_4_constants              $34..37 = 0x3F800000 (1.0)
205sub_4_floats                   $30..33 -= $34..37
206copy_4_slots_masked            m2 = Mask($30..33)
207branch_if_all_lanes_active     branch_if_all_lanes_active +21 (label 12 at #221)
208mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
209label                          label 0x0000000E
210case_op                        if ($28 == 0x00000003) { LoopMask = true; $29 = false; }
211branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 15 at #211)
212copy_4_slots_unmasked          $30..33 = m2
213splat_4_constants              $34..37 = 0x40000000 (2.0)
214mul_4_floats                   $30..33 *= $34..37
215copy_4_slots_masked            m2 = Mask($30..33)
216branch_if_all_lanes_active     branch_if_all_lanes_active +12 (label 12 at #221)
217mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
218label                          label 0x0000000F
219case_op                        if ($28 == 0x00000004) { LoopMask = true; $29 = false; }
220branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 16 at #220)
221copy_4_slots_unmasked          $30..33 = m2
222splat_4_constants              $34..37 = 0x3F000000 (0.5)
223mul_4_floats                   $30..33 *= $34..37
224copy_4_slots_masked            m2 = Mask($30..33)
225branch_if_all_lanes_active     branch_if_all_lanes_active +3 (label 12 at #221)
226mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
227label                          label 0x00000010
228label                          label 0x0000000C
229load_loop_mask                 LoopMask = $27
230copy_slot_unmasked             $27 = m2(0)
231copy_slot_unmasked             $28 = expected(0)
232cmpeq_float                    $27 = equal($27, $28)
233copy_2_slots_unmasked          $28..29 = m2(0..1)
234copy_slot_unmasked             $28 = $29
235copy_2_slots_unmasked          $29..30 = expected(0..1)
236copy_slot_unmasked             $29 = $30
237cmpeq_float                    $28 = equal($28, $29)
238bitwise_and_int                $27 &= $28
239copy_slot_unmasked             $28 = m2(2)
240copy_slot_unmasked             $29 = expected(2)
241cmpeq_float                    $28 = equal($28, $29)
242bitwise_and_int                $27 &= $28
243copy_2_slots_unmasked          $28..29 = m2(2..3)
244copy_slot_unmasked             $28 = $29
245copy_2_slots_unmasked          $29..30 = expected(2..3)
246copy_slot_unmasked             $29 = $30
247cmpeq_float                    $28 = equal($28, $29)
248bitwise_and_int                $27 &= $28
249label                          label 0x0000000B
250copy_slot_masked               $26 = Mask($27)
251label                          label 0x00000003
252load_condition_mask            CondMask = $38
253copy_constant                  $13 = 0
254merge_condition_mask           CondMask = $25 & $26
255branch_if_no_lanes_active      branch_if_no_lanes_active +88 (label 2 at #336)
256copy_constant                  op = 0x00000004 (5.605194e-45)
257copy_slot_unmasked             $14 = f1
258mul_imm_float                  $14 *= 0x3F000000 (0.5)
259copy_slot_unmasked             $15 = f2
260mul_imm_float                  $15 *= 0x3F000000 (0.5)
261copy_slot_unmasked             $16 = f3
262mul_imm_float                  $16 *= 0x3F000000 (0.5)
263copy_slot_unmasked             $17 = f4
264mul_imm_float                  $17 *= 0x3F000000 (0.5)
265copy_4_slots_unmasked          expected = $14..17
266copy_uniform                   one = colorRed(0)
267copy_slot_unmasked             $14 = f1
268copy_slot_unmasked             $15 = one
269mul_float                      $14 *= $15
270copy_slot_unmasked             $15 = f2
271copy_slot_unmasked             $16 = one
272mul_float                      $15 *= $16
273copy_slot_unmasked             $16 = f3
274copy_slot_unmasked             $17 = one
275mul_float                      $16 *= $17
276copy_slot_unmasked             $17 = f4
277copy_slot_unmasked             $18 = one
278mul_float                      $17 *= $18
279copy_4_slots_unmasked          m2 = $14..17
280store_loop_mask                $14 = LoopMask
281copy_slot_unmasked             $15 = op
282store_loop_mask                $16 = LoopMask
283mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
284case_op                        if ($15 == 0x00000001) { LoopMask = true; $16 = false; }
285branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 19 at #285)
286copy_4_slots_unmasked          $17..20 = m2
287splat_4_constants              $21..24 = 0x3F800000 (1.0)
288add_4_floats                   $17..20 += $21..24
289copy_4_slots_masked            m2 = Mask($17..20)
290branch_if_all_lanes_active     branch_if_all_lanes_active +30 (label 18 at #313)
291mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
292label                          label 0x00000013
293case_op                        if ($15 == 0x00000002) { LoopMask = true; $16 = false; }
294branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 20 at #294)
295copy_4_slots_unmasked          $17..20 = m2
296splat_4_constants              $21..24 = 0x3F800000 (1.0)
297sub_4_floats                   $17..20 -= $21..24
298copy_4_slots_masked            m2 = Mask($17..20)
299branch_if_all_lanes_active     branch_if_all_lanes_active +21 (label 18 at #313)
300mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
301label                          label 0x00000014
302case_op                        if ($15 == 0x00000003) { LoopMask = true; $16 = false; }
303branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 21 at #303)
304copy_4_slots_unmasked          $17..20 = m2
305splat_4_constants              $21..24 = 0x40000000 (2.0)
306mul_4_floats                   $17..20 *= $21..24
307copy_4_slots_masked            m2 = Mask($17..20)
308branch_if_all_lanes_active     branch_if_all_lanes_active +12 (label 18 at #313)
309mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
310label                          label 0x00000015
311case_op                        if ($15 == 0x00000004) { LoopMask = true; $16 = false; }
312branch_if_no_lanes_active      branch_if_no_lanes_active +7 (label 22 at #312)
313copy_4_slots_unmasked          $17..20 = m2
314splat_4_constants              $21..24 = 0x3F000000 (0.5)
315mul_4_floats                   $17..20 *= $21..24
316copy_4_slots_masked            m2 = Mask($17..20)
317branch_if_all_lanes_active     branch_if_all_lanes_active +3 (label 18 at #313)
318mask_off_loop_mask             LoopMask &= ~(CondMask & LoopMask & RetMask)
319label                          label 0x00000016
320label                          label 0x00000012
321load_loop_mask                 LoopMask = $14
322copy_slot_unmasked             $14 = m2(0)
323copy_slot_unmasked             $15 = expected(0)
324cmpeq_float                    $14 = equal($14, $15)
325copy_2_slots_unmasked          $15..16 = m2(0..1)
326copy_slot_unmasked             $15 = $16
327copy_2_slots_unmasked          $16..17 = expected(0..1)
328copy_slot_unmasked             $16 = $17
329cmpeq_float                    $15 = equal($15, $16)
330bitwise_and_int                $14 &= $15
331copy_slot_unmasked             $15 = m2(2)
332copy_slot_unmasked             $16 = expected(2)
333cmpeq_float                    $15 = equal($15, $16)
334bitwise_and_int                $14 &= $15
335copy_2_slots_unmasked          $15..16 = m2(2..3)
336copy_slot_unmasked             $15 = $16
337copy_2_slots_unmasked          $16..17 = expected(2..3)
338copy_slot_unmasked             $16 = $17
339cmpeq_float                    $15 = equal($15, $16)
340bitwise_and_int                $14 &= $15
341label                          label 0x00000011
342copy_slot_masked               $13 = Mask($14)
343label                          label 0x00000002
344load_condition_mask            CondMask = $25
345copy_constant                  $0 = 0
346merge_condition_mask           CondMask = $12 & $13
347branch_if_no_lanes_active      branch_if_no_lanes_active +40 (label 1 at #380)
348copy_uniform                   $1 = colorRed(0)
349mul_imm_float                  $1 *= 0x41200000 (10.0)
350copy_slot_unmasked             ten = $1
351copy_slot_unmasked             $2 = $1
352copy_slot_unmasked             $3 = ten
353copy_slot_unmasked             $4 = $3
354copy_4_slots_unmasked          mat = $1..4
355copy_constant                  $5 = 0x3F800000 (1.0)
356copy_uniform                   $6 = testInputs(0)
357div_float                      $5 /= $6
358swizzle_4                      $5..8 = ($5..8).xxxx
359mul_4_floats                   $1..4 *= $5..8
360copy_4_slots_unmasked          div = $1..4
361copy_4_slots_unmasked          $1..4 = mat
362copy_constant                  $5 = 0x3F800000 (1.0)
363copy_uniform                   $6 = testInputs(0)
364div_float                      $5 /= $6
365swizzle_4                      $5..8 = ($5..8).xxxx
366mul_4_floats                   $1..4 *= $5..8
367copy_4_slots_masked            mat = Mask($1..4)
368copy_4_slots_unmasked          $1..4 = div
369splat_4_constants              $5..8 = 0x41000000 (8.0)
370add_4_floats                   $1..4 += $5..8
371bitwise_and_imm_4_ints         $1..4 &= 0x7FFFFFFF
372splat_4_constants              $5..8 = 0x3C23D70A (0.01)
373cmplt_4_floats                 $1..4 = lessThan($1..4, $5..8)
374bitwise_and_2_ints             $1..2 &= $3..4
375bitwise_and_int                $1 &= $2
376copy_4_slots_unmasked          $2..5 = mat
377splat_4_constants              $6..9 = 0x41000000 (8.0)
378add_4_floats                   $2..5 += $6..9
379bitwise_and_imm_4_ints         $2..5 &= 0x7FFFFFFF
380splat_4_constants              $6..9 = 0x3C23D70A (0.01)
381cmplt_4_floats                 $2..5 = lessThan($2..5, $6..9)
382bitwise_and_2_ints             $2..3 &= $4..5
383bitwise_and_int                $2 &= $3
384bitwise_and_int                $1 &= $2
385label                          label 0x00000017
386copy_slot_masked               $0 = Mask($1)
387label                          label 0x00000001
388load_condition_mask            CondMask = $12
389swizzle_4                      $0..3 = ($0..3).xxxx
390copy_4_uniforms                $4..7 = colorRed
391copy_4_uniforms                $8..11 = colorGreen
392mix_4_ints                     $0..3 = mix($4..7, $8..11, $0..3)
393load_src                       src.rgba = $0..3
394