1((function outerProduct
2   (signature mat2
3     (parameters
4       (declare (in) vec2 u)
5       (declare (in) vec2 v))
6     ((declare () mat2 m)
7      (assign (xy) (array_ref (var_ref m) (constant int (0))) (expression vec2 * (var_ref u) (swiz x (var_ref v))))
8      (assign (xy) (array_ref (var_ref m) (constant int (1))) (expression vec2 * (var_ref u) (swiz y (var_ref v))))
9      (return (var_ref m))))
10
11   (signature mat2x3
12     (parameters
13       (declare (in) vec3 u)
14       (declare (in) vec2 v))
15     ((declare () mat2x3 m)
16      (assign (xyz) (array_ref (var_ref m) (constant int (0))) (expression vec3 * (var_ref u) (swiz x (var_ref v))))
17      (assign (xyz) (array_ref (var_ref m) (constant int (1))) (expression vec3 * (var_ref u) (swiz y (var_ref v))))
18      (return (var_ref m))))
19
20   (signature mat2x4
21     (parameters
22       (declare (in) vec4 u)
23       (declare (in) vec2 v))
24     ((declare () mat2x4 m)
25      (assign (xyzw) (array_ref (var_ref m) (constant int (0))) (expression vec4 * (var_ref u) (swiz x (var_ref v))))
26      (assign (xyzw) (array_ref (var_ref m) (constant int (1))) (expression vec4 * (var_ref u) (swiz y (var_ref v))))
27      (return (var_ref m))))
28
29   (signature mat3x2
30     (parameters
31       (declare (in) vec2 u)
32       (declare (in) vec3 v))
33     ((declare () mat3x2 m)
34      (assign (xy) (array_ref (var_ref m) (constant int (0))) (expression vec2 * (var_ref u) (swiz x (var_ref v))))
35      (assign (xy) (array_ref (var_ref m) (constant int (1))) (expression vec2 * (var_ref u) (swiz y (var_ref v))))
36      (assign (xy) (array_ref (var_ref m) (constant int (2))) (expression vec2 * (var_ref u) (swiz z (var_ref v))))
37      (return (var_ref m))
38 ))
39
40   (signature mat3
41     (parameters
42       (declare (in) vec3 u)
43       (declare (in) vec3 v))
44     ((declare () mat3 m)
45      (assign (xyz) (array_ref (var_ref m) (constant int (0))) (expression vec3 * (var_ref u) (swiz x (var_ref v))))
46      (assign (xyz) (array_ref (var_ref m) (constant int (1))) (expression vec3 * (var_ref u) (swiz y (var_ref v))))
47      (assign (xyz) (array_ref (var_ref m) (constant int (2))) (expression vec3 * (var_ref u) (swiz z (var_ref v))))
48      (return (var_ref m))))
49
50   (signature mat3x4
51     (parameters
52       (declare (in) vec4 u)
53       (declare (in) vec3 v))
54     ((declare () mat3x4 m)
55      (assign (xyzw) (array_ref (var_ref m) (constant int (0))) (expression vec4 * (var_ref u) (swiz x (var_ref v))))
56      (assign (xyzw) (array_ref (var_ref m) (constant int (1))) (expression vec4 * (var_ref u) (swiz y (var_ref v))))
57      (assign (xyzw) (array_ref (var_ref m) (constant int (2))) (expression vec4 * (var_ref u) (swiz z (var_ref v))))
58      (return (var_ref m))))
59
60   (signature mat4x2
61     (parameters
62       (declare (in) vec2 u)
63       (declare (in) vec4 v))
64     ((declare () mat4x2 m)
65      (assign (xy) (array_ref (var_ref m) (constant int (0))) (expression vec2 * (var_ref u) (swiz x (var_ref v))))
66      (assign (xy) (array_ref (var_ref m) (constant int (1))) (expression vec2 * (var_ref u) (swiz y (var_ref v))))
67      (assign (xy) (array_ref (var_ref m) (constant int (2))) (expression vec2 * (var_ref u) (swiz z (var_ref v))))
68      (assign (xy) (array_ref (var_ref m) (constant int (3))) (expression vec2 * (var_ref u) (swiz w (var_ref v))))
69      (return (var_ref m))))
70
71   (signature mat4x3
72     (parameters
73       (declare (in) vec3 u)
74       (declare (in) vec4 v))
75     ((declare () mat4x3 m)
76      (assign (xyz) (array_ref (var_ref m) (constant int (0))) (expression vec3 * (var_ref u) (swiz x (var_ref v))))
77      (assign (xyz) (array_ref (var_ref m) (constant int (1))) (expression vec3 * (var_ref u) (swiz y (var_ref v))))
78      (assign (xyz) (array_ref (var_ref m) (constant int (2))) (expression vec3 * (var_ref u) (swiz z (var_ref v))))
79      (assign (xyz) (array_ref (var_ref m) (constant int (3))) (expression vec3 * (var_ref u) (swiz w (var_ref v))))
80      (return (var_ref m))))
81
82   (signature mat4
83     (parameters
84       (declare (in) vec4 u)
85       (declare (in) vec4 v))
86     ((declare () mat4 m)
87      (assign (xyzw) (array_ref (var_ref m) (constant int (0))) (expression vec4 * (var_ref u) (swiz x (var_ref v))))
88      (assign (xyzw) (array_ref (var_ref m) (constant int (1))) (expression vec4 * (var_ref u) (swiz y (var_ref v))))
89      (assign (xyzw) (array_ref (var_ref m) (constant int (2))) (expression vec4 * (var_ref u) (swiz z (var_ref v))))
90      (assign (xyzw) (array_ref (var_ref m) (constant int (3))) (expression vec4 * (var_ref u) (swiz w (var_ref v))))
91      (return (var_ref m))))
92))
93