mesa: remove unused/obsolete __NormalMatrixTranspose matrix
[mesa.git] / src / mesa / shader / slang / library / slang_core.gc
index b5c33692f356602992cd117af2a07b82dc5a8dec..10a6bb5cb15d2a2c6d6bb6777931ff3aead3303b 100644 (file)
 
 int __constructor(const float f)
 {
-   __asm float_to_int __retVal, f;
+   __asm vec4_to_ivec4 __retVal, f;
 }
 
-bool __constructor(const int i)
+int __constructor(const bool b)
 {
-   const float zero = 0.0;
-   __asm vec4_seq __retVal.x, i.x, zero;
+   __retVal = b;
 }
 
-bool __constructor(const float f)
+int __constructor(const int i)
 {
-   const float zero = 0.0;
-   __asm vec4_seq __retVal.x, i.x, zero;
+   __retVal = i;
 }
 
-int __constructor(const bool b)
+bool __constructor(const int i)
 {
-   __retVal.x = b.x;
+   __asm vec4_sne __retVal, i, 0.0;
 }
 
-float __constructor(const bool b)
+bool __constructor(const float f)
 {
-   __retVal.x = b.x;
+   __asm vec4_sne __retVal, f, 0.0;
 }
 
-float __constructor(const int i)
+bool __constructor(const bool b)
 {
-    __asm int_to_float __retVal, i;
+   __retVal = b;
 }
 
-bool __constructor(const bool b)
+float __constructor(const int i)
 {
-   __retVal = b.x;
+    __asm ivec4_to_vec4 __retVal, i;
 }
 
-int __constructor(const int i)
+float __constructor(const bool b)
 {
-   __retVal = i.x;
+    __asm ivec4_to_vec4 __retVal, b;
 }
 
 float __constructor(const float f)
 {
-   __retVal = f.x;
+   __retVal = f;
 }
 
 
@@ -163,22 +161,33 @@ vec2 __constructor(const float x, const float y)
 
 vec2 __constructor(const float f)
 {
-   __retVal.xy = f.xx;
+   __asm vec4_move __retVal.xy, f;
 }
 
 vec2 __constructor(const int i)
 {
-   __retVal.xy = i.xx;
+   __asm ivec4_to_vec4 __retVal.xy, i;
 }
 
 vec2 __constructor(const bool b)
 {
-   __retVal.xy = b.xx;
+   __asm ivec4_to_vec4 __retVal.xy, b;
+}
+
+vec2 __constructor(const bvec2 b)
+{
+//   __retVal = b;
+   __asm ivec4_to_vec4 __retVal.xy, b;
 }
 
 vec2 __constructor(const vec3 v)
 {
-   __retVal.xy = v.xy;
+   __asm vec4_move __retVal.xy, v.xy;
+}
+
+vec2 __constructor(const vec4 v)
+{
+   __asm vec4_move __retVal.xy, v.xy;
 }
 
 
@@ -193,22 +202,28 @@ vec3 __constructor(const float x, const float y, const float z)
 
 vec3 __constructor(const float f)
 {
-   __retVal.xyz = f.xxx;
+   // Note: this could be "__retVal.xyz = f" but that's an illegal assignment
+   __asm vec4_move __retVal.xyz, f;
 }
 
 vec3 __constructor(const int i)
 {
-   __asm int_to_float __retVal.xyz, i.xxx;
+   __asm ivec4_to_vec4 __retVal.xyz, i;
 }
 
 vec3 __constructor(const bool b)
 {
-   __retVal.xyz = b.xxx;
+   __asm ivec4_to_vec4 __retVal.xyz, b;
+}
+
+vec3 __constructor(const bvec3 b)
+{
+   __asm ivec4_to_vec4 __retVal.xyz, b;
 }
 
 vec3 __constructor(const vec4 v)
 {
-   __retVal.xyz = v.xyz;
+   __asm vec4_move __retVal.xyz, v;
 }
 
 
@@ -224,17 +239,28 @@ vec4 __constructor(const float x, const float y, const float z, const float w)
 
 vec4 __constructor(const float f)
 {
-   __retVal = f.xxxx;
+   // Note: this could be "__retVal = f" but that's an illegal assignment
+   __asm vec4_move __retVal, f;
 }
 
 vec4 __constructor(const int i)
 {
-   __retVal = i.xxxx;
+   __asm ivec4_to_vec4 __retVal, i;
 }
 
 vec4 __constructor(const bool b)
 {
-   __retVal = b.xxxx;
+   __asm ivec4_to_vec4 __retVal, b;
+}
+
+vec4 __constructor(const bvec4 b)
+{
+   __asm ivec4_to_vec4 __retVal, b;
+}
+
+vec4 __constructor(const ivec4 i)
+{
+   __asm ivec4_to_vec4 __retVal, i;
 }
 
 vec4 __constructor(const vec3 v3, const float f)
@@ -244,6 +270,14 @@ vec4 __constructor(const vec3 v3, const float f)
    __retVal.w = f;
 }
 
+vec4 __constructor(const vec2 v2, const float f1, const float f2)
+{
+   // XXX this constructor shouldn't be needed anymore
+   __retVal.xy = v2;
+   __retVal.z = f1;
+   __retVal.w = f2;
+}
+
 
 //// ivec2 constructors
 
@@ -255,17 +289,17 @@ ivec2 __constructor(const int i, const int j)
 
 ivec2 __constructor(const int i)
 {
-   __retVal.xy = i.xx;
+   __asm vec4_move __retVal.xy, i;
 }
 
 ivec2 __constructor(const float f)
 {
-   __asm float_to_int __retVal.xy, f.xx;
+   __asm vec4_to_ivec4 __retVal.xy, f;
 }
 
 ivec2 __constructor(const bool b)
 {
-   __asm float_to_int __retVal.xy, b.xx;
+   __asm vec4_to_ivec4 __retVal.xy, b;
 }
 
 
@@ -280,17 +314,17 @@ ivec3 __constructor(const int i, const int j, const int k)
 
 ivec3 __constructor(const int i)
 {
-   __retVal.xyz = i.xxx;
+   __asm vec4_move __retVal.xyz, i;
 }
 
 ivec3 __constructor(const float f)
 {
-   __retVal.xyz = f.xxx;
+   __asm vec4_to_ivec4 __retVal.xyz, f;
 }
 
 ivec3 __constructor(const bool b)
 {
-   __retVal.xyz = b.xxx;
+   __asm vec4_move __retVal.xyz, b;
 }
 
 
@@ -306,77 +340,147 @@ ivec4 __constructor(const int x, const int y, const int z, const int w)
 
 ivec4 __constructor(const int i)
 {
-   __retVal = i.xxxx;
+   __asm vec4_move __retVal, i;
 }
 
 ivec4 __constructor(const float f)
 {
-   __asm float_to_int __retVal, f.xxxx;
+   __asm vec4_to_ivec4 __retVal, f;
 }
 
 ivec4 __constructor(const bool b)
 {
-   __retVal = b.xxxx;
+   __asm vec4_to_ivec4 __retVal, b;
 }
 
 
 //// bvec2 constructors
 
+bvec2 __constructor(const bool b1, const bool b2)
+{
+   __retVal.x = b1;
+   __retVal.y = b2;
+}
+
+bvec2 __constructor(const int i1, const int i2)
+{
+   __asm vec4_sne __retVal.x, i1, 0.0;
+   __asm vec4_sne __retVal.y, i2, 0.0;
+}
+
+
 bvec2 __constructor(const bool b)
 {
-   __retVal.xy = b.xx;
+   __asm vec4_move __retVal.xy, b;
 }
 
 bvec2 __constructor(const float f)
 {
-   const vec2 zero = vec2(0.0, 0.0);
-   __asm vec4_seq __retVal.xy, f.xx, zero;
+   __asm vec4_sne __retVal.xy, f, 0.0;
 }
 
 bvec2 __constructor(const int i)
 {
-   const ivec2 zero = ivec2(0, 0);
-   __asm vec4_seq __retVal.xy, i.xx, zero;
+   __asm vec4_sne __retVal.xy, i, 0.0;
+}
+
+bvec2 __constructor(const vec2 v)
+{
+   __asm vec4_sne __retVal.xy, v, 0.0;
+}
+
+bvec2 __constructor(const ivec2 v)
+{
+   __asm vec4_sne __retVal.xy, v, 0.0;
 }
 
 
+
 //// bvec3 constructors
 
+bvec3 __constructor(const bool b1, const bool b2, const bool b3)
+{
+   __retVal.x = b1;
+   __retVal.y = b2;
+   __retVal.z = b3;
+}
+
+bvec3 __constructor(const float f1, const float f2, const float f3)
+{
+   __asm vec4_sne __retVal.x, f1, 0.0;
+   __asm vec4_sne __retVal.y, f2, 0.0;
+   __asm vec4_sne __retVal.z, f3, 0.0;
+}
+
 bvec3 __constructor(const bool b)
 {
-   __retVal.xyz = b.xxx;
+   __asm vec4_move __retVal.xyz, b;
 }
 
 bvec3 __constructor(const float f)
 {
-   const vec3 zero = vec3(0.0, 0.0, 0.0);
-   __asm vec4_seq __retVal.xyz, f.xxx, zero;
+   __asm vec4_sne __retVal.xyz, f, 0.0;
 }
 
 bvec3 __constructor(const int i)
 {
-   const ivec3 zero = ivec3(0, 0, 0);
-   __asm vec4_seq __retVal.xyz, i.xxx, zero;
+   __asm vec4_sne __retVal.xyz, i, 0.0;
 }
 
+bvec3 __constructor(const vec3 v)
+{
+   __asm vec4_sne __retVal.xyz, v, 0.0;
+}
+
+bvec3 __constructor(const ivec3 v)
+{
+   __asm vec4_sne __retVal.xyz, v, 0.0;
+}
+
+
 
 //// bvec4 constructors
 
+bvec4 __constructor(const bool b1, const bool b2, const bool b3, const bool b4)
+{
+   __retVal.x = b1;
+   __retVal.y = b2;
+   __retVal.z = b3;
+   __retVal.w = b4;
+}
+
+bvec4 __constructor(const float f1, const float f2, const float f3, const float f4)
+{
+   const float zero = 0.0;
+   __asm vec4_sne __retVal.x, f1, zero;   
+   __asm vec4_sne __retVal.y, f2, zero;   
+   __asm vec4_sne __retVal.z, f3, zero;   
+   __asm vec4_sne __retVal.w, f4, zero;   
+}
+
 bvec4 __constructor(const bool b)
 {
-   __retVal.xyzw = b.xxxx;
+   __asm vec4_move __retVal.xyzw, b;
 }
 
 bvec4 __constructor(const float f)
 {
-   const vec4 zero = vec4(0.0, 0.0, 0.0, 0.0);
-   __asm vec4_seq __retVal, f.xxxx, zero;
+   __asm vec4_sne __retVal.xyzw, f, 0.0;
 }
 
 bvec4 __constructor(const int i)
 {
-   const ivec4 zero = ivec4(0, 0, 0, 0);
-   __asm vec4_seq __retVal, i.xxxx, zero;
+   __asm vec4_sne __retVal.xyzw, i, 0.0;
+}
+
+bvec4 __constructor(const vec4 v)
+{
+   __asm vec4_sne __retVal.xyzw, v, 0.0;
+}
+
+bvec4 __constructor(const ivec4 v)
+{
+   __asm vec4_sne __retVal.xyzw, v, 0.0;
 }
 
 
@@ -386,7 +490,6 @@ bvec4 __constructor(const int i)
 mat2 __constructor(const float m00, const float m10,
                    const float m01, const float m11)
 {
-   // xxx verify:
    __retVal[0].x = m00;
    __retVal[0].y = m10;
    __retVal[1].x = m01;
@@ -411,10 +514,10 @@ mat2 __constructor(const bool b)
    return mat2(float(b));
 }
 
-mat2 __constructor(const vec2 r0, const vec2 r1)
+mat2 __constructor(const vec2 c0, const vec2 c1)
 {
-   __retVal[0] = r0;
-   __retVal[1] = r1;
+   __retVal[0] = c0;
+   __retVal[1] = c1;
 }
 
 
@@ -424,7 +527,6 @@ mat3 __constructor(const float m00, const float m10, const float m20,
                    const float m01, const float m11, const float m21,
                    const float m02, const float m12, const float m22)
 {
-   // xxx verify:
    __retVal[0].x = m00;
    __retVal[0].y = m10;
    __retVal[0].z = m20;
@@ -438,15 +540,10 @@ mat3 __constructor(const float m00, const float m10, const float m20,
 
 mat3 __constructor(const float f)
 {
-   __retVal[0].x = f;
-   __retVal[0].y = 0.0;
-   __retVal[0].z = 0.0;
-   __retVal[1].x = 0.0;
-   __retVal[1].y = f;
-   __retVal[1].z = 0.0;
-   __retVal[2].x = 0.0;
-   __retVal[2].y = 0.0;
-   __retVal[2].z = f;
+   vec2 v = vec2(f, 0.0);
+   __retVal[0] = v.xyy;
+   __retVal[1] = v.yxy;
+   __retVal[2] = v.yyx;
 }
 
 mat3 __constructor(const int i)
@@ -459,11 +556,11 @@ mat3 __constructor(const bool b)
    return mat3(float(b));
 }
 
-mat3 __constructor(const vec3 r0, const vec3 r1, const vec3 r2)
+mat3 __constructor(const vec3 c0, const vec3 c1, const vec3 c2)
 {
-   __retVal[0] = r0;
-   __retVal[1] = r1;
-   __retVal[2] = r2;
+   __retVal[0] = c0;
+   __retVal[1] = c1;
+   __retVal[2] = c2;
 }
 
 
@@ -495,22 +592,11 @@ mat4 __constructor(const float m00, const float m10, const float m20, const floa
 
 mat4 __constructor(const float f)
 {
-   __retVal[0].x = f;
-   __retVal[0].y = 0.0;
-   __retVal[0].z = 0.0;
-   __retVal[0].w = 0.0;
-   __retVal[1].x = 0.0;
-   __retVal[1].y = f;
-   __retVal[1].z = 0.0;
-   __retVal[1].w = 0.0;
-   __retVal[2].x = 0.0;
-   __retVal[2].y = 0.0;
-   __retVal[2].z = f;
-   __retVal[2].w = 0.0;
-   __retVal[3].x = 0.0;
-   __retVal[3].y = 0.0;
-   __retVal[3].z = 0.0;
-   __retVal[3].w = f;
+   vec2 v = vec2(f, 0.0);
+   __retVal[0] = v.xyyy;
+   __retVal[1] = v.yxyy;
+   __retVal[2] = v.yyxy;
+   __retVal[3] = v.yyyx;
 }
 
 mat4 __constructor(const int i)
@@ -523,12 +609,12 @@ mat4 __constructor(const bool b)
    return mat4(float(b));
 }
 
-mat4 __constructor(const vec4 r0, const vec4 r1, const vec4 r2, const vec4 r3)
+mat4 __constructor(const vec4 c0, const vec4 c1, const vec4 c2, const vec4 c3)
 {
-   __retVal[0] = r0;
-   __retVal[1] = r1;
-   __retVal[2] = r2;
-   __retVal[3] = r3;
+   __retVal[0] = c0;
+   __retVal[1] = c1;
+   __retVal[2] = c2;
+   __retVal[3] = c3;
 }
 
 
@@ -537,116 +623,109 @@ mat4 __constructor(const vec4 r0, const vec4 r1, const vec4 r2, const vec4 r3)
 
 int __operator + (const int a, const int b)
 {
-    float x, y;
-    int c;
-    __asm int_to_float x, a;
-    __asm int_to_float y, b;
-    __asm vec4_add    x.x, x.x, y.x;
-    __asm float_to_int c, x;
-    return c;
+   __asm vec4_add __retVal, a, b;
 }
 
 int __operator - (const int a, const int b)
 {
-    float x, y;
-    int c;
-    __asm int_to_float x, a;
-    __asm int_to_float y, b;
-    __asm float_negate y, y;
-    __asm vec4_add    x.x, x.x, y.x;
-    __asm float_to_int c, x;
-    return c;
+   __asm vec4_subtract __retVal, a, b;
 }
 
 int __operator * (const int a, const int b)
 {
-    float x, y;
-    int c;
-    __asm int_to_float   x, a;
-    __asm int_to_float   y, b;
-    __asm float_multiply x, x, y;
-    __asm float_to_int   c, x;
-    return c;
+   __asm vec4_multiply __retVal, a, b;
 }
 
 int __operator / (const int a, const int b)
 {
-    float x, y;
-    int c;
-    __asm int_to_float x, a;
-    __asm int_to_float y, b;
-    __asm float_divide x, x, y;
-    __asm float_to_int c, x;
-    return c;
+   float bInv, x;
+   __asm float_rcp bInv, b;
+   __asm vec4_multiply x, a, bInv;
+   __asm vec4_to_ivec4 __retVal, x;
 }
 
 
 //// Basic ivec2 operators
 
-ivec2 __operator + (const ivec2 v, const ivec2 u)
+ivec2 __operator + (const ivec2 a, const ivec2 b)
 {
-    return ivec2 (v.x + u.x, v.y + u.y);
+   __asm vec4_add __retVal, a, b;
 }
 
-ivec2 __operator - (const ivec2 v, const ivec2 u)
+ivec2 __operator - (const ivec2 a, const ivec2 b)
 {
-    return ivec2 (v.x - u.x, v.y - u.y);
+   __asm vec4_subtract __retVal, a, b;
 }
 
-ivec2 __operator * (const ivec2 v, const ivec2 u)
+ivec2 __operator * (const ivec2 a, const ivec2 b)
 {
-    return ivec2 (v.x * u.x, v.y * u.y);
+   __asm vec4_multiply __retVal, a, b;
 }
 
-ivec2 __operator / (const ivec2 v, const ivec2 u)
+ivec2 __operator / (const ivec2 a, const ivec2 b)
 {
-    return ivec2 (v.x / u.x, v.y / u.y);
+   vec2 bInv, x;
+   __asm float_rcp bInv.x, b.x;
+   __asm float_rcp bInv.y, b.y;
+   __asm vec4_multiply x, a, bInv;
+   __asm vec4_to_ivec4 __retVal, x;
 }
 
 
 //// Basic ivec3 operators
 
-ivec3 __operator + (const ivec3 v, const ivec3 u)
+ivec3 __operator + (const ivec3 a, const ivec3 b)
 {
-    return ivec3 (v.x + u.x, v.y + u.y, v.z + u.z);
+   __asm vec4_add __retVal, a, b;
 }
 
-ivec3 __operator - (const ivec3 v, const ivec3 u)
+ivec3 __operator - (const ivec3 a, const ivec3 b)
 {
-    return ivec3 (v.x - u.x, v.y - u.y, v.z - u.z);
+   __asm vec4_subtract __retVal, a, b;
 }
 
-ivec3 __operator * (const ivec3 v, const ivec3 u)
+ivec3 __operator * (const ivec3 a, const ivec3 b)
 {
-    return ivec3 (v.x * u.x, v.y * u.y, v.z * u.z);
+   __asm vec4_multiply __retVal, a, b;
 }
 
-ivec3 __operator / (const ivec3 v, const ivec3 u)
+ivec3 __operator / (const ivec3 a, const ivec3 b)
 {
-    return ivec3 (v.x / u.x, v.y / u.y, v.z / u.z);
+   vec3 bInv, x;
+   __asm float_rcp bInv.x, b.x;
+   __asm float_rcp bInv.y, b.y;
+   __asm float_rcp bInv.z, b.z;
+   __asm vec4_multiply x, a, bInv;
+   __asm vec4_to_ivec4 __retVal, x;
 }
 
 
 //// Basic ivec4 operators
 
-ivec4 __operator + (const ivec4 v, const ivec4 u)
+ivec4 __operator + (const ivec4 a, const ivec4 b)
 {
-    return ivec4 (v.x + u.x, v.y + u.y, v.z + u.z, v.w + u.w);
+   __asm vec4_add __retVal, a, b;
 }
 
-ivec4 __operator - (const ivec4 v, const ivec4 u)
+ivec4 __operator - (const ivec4 a, const ivec4 b)
 {
-    return ivec4 (v.x - u.x, v.y - u.y, v.z - u.z, v.w - u.w);
+   __asm vec4_subtract __retVal, a, b;
 }
 
-ivec4 __operator * (const ivec4 v, const ivec4 u)
+ivec4 __operator * (const ivec4 a, const ivec4 b)
 {
-    return ivec4 (v.x * u.x, v.y * u.y, v.z * u.z, v.w * u.w);
+   __asm vec4_multiply __retVal, a, b;
 }
 
-ivec4 __operator / (const ivec4 v, const ivec4 u)
+ivec4 __operator / (const ivec4 a, const ivec4 b)
 {
-    return ivec4 (v.x / u.x, v.y / u.y, v.z / u.z, v.w / u.w);
+   vec4 bInv, x;
+   __asm float_rcp bInv.x, b.x;
+   __asm float_rcp bInv.y, b.y;
+   __asm float_rcp bInv.z, b.z;
+   __asm float_rcp bInv.w, b.w;
+   __asm vec4_multiply x, a, bInv;
+   __asm vec4_to_ivec4 __retVal, x;
 }
 
 
@@ -654,24 +733,24 @@ ivec4 __operator / (const ivec4 v, const ivec4 u)
 
 float __operator + (const float a, const float b)
 {
-   __asm vec4_add __retVal.x, a, b;
+   __asm vec4_add __retVal, a, b;
 }
 
 float __operator - (const float a, const float b)
 {
-   __asm vec4_subtract __retVal.x, a, b;
+   __asm vec4_subtract __retVal, a, b;
 }
 
 float __operator * (const float a, const float b)
 {
-    __asm float_multiply __retVal, a, b;
+    __asm vec4_multiply __retVal, a, b;
 }
 
 float __operator / (const float a, const float b)
 {
    float bInv;
-   __asm float_rcp bInv.x, b.x;
-   __asm vec4_multiply __retVal.x, a, bInv;
+   __asm float_rcp bInv.x, b;
+   __asm vec4_multiply __retVal, a, bInv;
 }
 
 
@@ -762,32 +841,32 @@ vec4 __operator / (const vec4 v, const vec4 u)
 
 vec2 __operator + (const float a, const vec2 u)
 {
-   __asm vec4_add __retVal.xy, a.xx, u.xy;
+   __asm vec4_add __retVal.xy, a, u.xy;
 }
 
 vec2 __operator + (const vec2 v, const float b)
 {
-   __asm vec4_add __retVal.xy, v.xy, b.xx;
+   __asm vec4_add __retVal.xy, v.xy, b;
 }
 
 vec2 __operator - (const float a, const vec2 u)
 {
-   __asm vec4_subtract __retVal.xy, a.xx, u.xy;
+   __asm vec4_subtract __retVal.xy, a, u.xy;
 }
 
 vec2 __operator - (const vec2 v, const float b)
 {
-   __asm vec4_subtract __retVal.xy, v.xy, b.xx;
+   __asm vec4_subtract __retVal.xy, v.xy, b;
 }
 
 vec2 __operator * (const float a, const vec2 u)
 {
-   __asm vec4_multiply __retVal.xy, a.xx, u.xy;
+   __asm vec4_multiply __retVal.xy, a, u.xy;
 }
 
 vec2 __operator * (const vec2 v, const float b)
 {
-   __asm vec4_multiply __retVal.xy, v.xy, b.xx;
+   __asm vec4_multiply __retVal.xy, v.xy, b;
 }
 
 vec2 __operator / (const float a, const vec2 u)
@@ -795,14 +874,14 @@ vec2 __operator / (const float a, const vec2 u)
    vec2 invU;
    __asm float_rcp invU.x, u.x;
    __asm float_rcp invU.y, u.y;
-   __asm vec4_multiply __retVal.xy, a.xx, invU.xy;
+   __asm vec4_multiply __retVal.xy, a, invU.xy;
 }
 
 vec2 __operator / (const vec2 v, const float b)
 {
    float invB;
    __asm float_rcp invB, b;
-   __asm vec4_multiply __retVal.xy, v.xy, invB.xx;
+   __asm vec4_multiply __retVal.xy, v.xy, invB;
 }
 
 
@@ -810,32 +889,32 @@ vec2 __operator / (const vec2 v, const float b)
 
 vec3 __operator + (const float a, const vec3 u)
 {
-   __asm vec4_add __retVal.xyz, a.xxx, u.xyz;
+   __asm vec4_add __retVal.xyz, a, u.xyz;
 }
 
 vec3 __operator + (const vec3 v, const float b)
 {
-   __asm vec4_add __retVal.xyz, v.xyz, b.xxx;
+   __asm vec4_add __retVal.xyz, v.xyz, b;
 }
 
 vec3 __operator - (const float a, const vec3 u)
 {
-   __asm vec4_subtract __retVal.xyz, a.xxx, u.xyz;
+   __asm vec4_subtract __retVal.xyz, a, u.xyz;
 }
 
 vec3 __operator - (const vec3 v, const float b)
 {
-   __asm vec4_subtract __retVal.xyz, v.xyz, b.xxx;
+   __asm vec4_subtract __retVal.xyz, v.xyz, b;
 }
 
 vec3 __operator * (const float a, const vec3 u)
 {
-   __asm vec4_multiply __retVal.xyz, a.xxx, u.xyz;
+   __asm vec4_multiply __retVal.xyz, a, u.xyz;
 }
 
 vec3 __operator * (const vec3 v, const float b)
 {
-   __asm vec4_multiply __retVal.xyz, v.xyz, b.xxx;
+   __asm vec4_multiply __retVal.xyz, v.xyz, b;
 }
 
 vec3 __operator / (const float a, const vec3 u)
@@ -844,14 +923,14 @@ vec3 __operator / (const float a, const vec3 u)
    __asm float_rcp invU.x, u.x;
    __asm float_rcp invU.y, u.y;
    __asm float_rcp invU.z, u.z;
-   __asm vec4_multiply __retVal.xyz, a.xxx, invU.xyz;
+   __asm vec4_multiply __retVal.xyz, a, invU.xyz;
 }
 
 vec3 __operator / (const vec3 v, const float b)
 {
    float invB;
    __asm float_rcp invB, b;
-   __asm vec4_multiply __retVal.xyz, v.xyz, invB.xxx;
+   __asm vec4_multiply __retVal.xyz, v.xyz, invB;
 }
 
 
@@ -859,32 +938,32 @@ vec3 __operator / (const vec3 v, const float b)
 
 vec4 __operator + (const float a, const vec4 u)
 {
-   __asm vec4_add __retVal, a.xxxx, u;
+   __asm vec4_add __retVal, a, u;
 }
 
 vec4 __operator + (const vec4 v, const float b)
 {
-   __asm vec4_add __retVal, v, b.xxxx;
+   __asm vec4_add __retVal, v, b;
 }
 
 vec4 __operator - (const float a, const vec4 u)
 {
-   __asm vec4_subtract __retVal, a.xxxx, u;
+   __asm vec4_subtract __retVal, a, u;
 }
 
 vec4 __operator - (const vec4 v, const float b)
 {
-   __asm vec4_subtract __retVal, v, b.xxxx;
+   __asm vec4_subtract __retVal, v, b;
 }
 
 vec4 __operator * (const float a, const vec4 u)
 {
-   __asm vec4_multiply __retVal, a.xxxx, u;
+   __asm vec4_multiply __retVal, a, u;
 }
 
 vec4 __operator * (const vec4 v, const float b)
 {
-   __asm vec4_multiply __retVal, v, b.xxxx;
+   __asm vec4_multiply __retVal, v, b;
 }
 
 vec4 __operator / (const float a, const vec4 u)
@@ -894,120 +973,144 @@ vec4 __operator / (const float a, const vec4 u)
    __asm float_rcp invU.y, u.y;
    __asm float_rcp invU.z, u.z;
    __asm float_rcp invU.w, u.w;
-   __asm vec4_multiply __retVal, a.xxxx, invU;
+   __asm vec4_multiply __retVal, a, invU;
 }
 
 vec4 __operator / (const vec4 v, const float b)
 {
    float invB;
    __asm float_rcp invB, b;
-   __asm vec4_multiply __retVal, v, invB.xxxx;
+   __asm vec4_multiply __retVal, v, invB;
 }
 
 
 
 //// Basic ivec2/int operators
 
-ivec2 __operator + (const int a, const ivec2 u) {
-    return ivec2 (a) + u;
+ivec2 __operator + (const int a, const ivec2 u)
+{
+   __retVal = ivec2(a) + u;
 }
 
-ivec2 __operator + (const ivec2 v, const int b) {
-    return v + ivec2 (b);
+ivec2 __operator + (const ivec2 v, const int b)
+{
+   __retVal = v + ivec2(b);
 }
 
-ivec2 __operator - (const int a, const ivec2 u) {
-    return ivec2 (a) - u;
+ivec2 __operator - (const int a, const ivec2 u)
+{
+   __retVal = ivec2(a) - u;
 }
 
-ivec2 __operator - (const ivec2 v, const int b) {
-    return v - ivec2 (b);
+ivec2 __operator - (const ivec2 v, const int b)
+{
+   __retVal = v - ivec2(b);
 }
 
-ivec2 __operator * (const int a, const ivec2 u) {
-    return ivec2 (a) * u;
+ivec2 __operator * (const int a, const ivec2 u)
+{
+   __retVal = ivec2(a) * u;
 }
 
-ivec2 __operator * (const ivec2 v, const int b) {
-    return v * ivec2 (b);
+ivec2 __operator * (const ivec2 v, const int b)
+{
+   __retVal = v * ivec2(b);
 }
 
-ivec2 __operator / (const int a, const ivec2 u) {
-    return ivec2 (a) / u;
+ivec2 __operator / (const int a, const ivec2 u)
+{
+   __retVal = ivec2(a) / u;
 }
 
-ivec2 __operator / (const ivec2 v, const int b) {
-    return v / ivec2 (b);
+ivec2 __operator / (const ivec2 v, const int b)
+{
+   __retVal = v / ivec2(b);
 }
 
 
 //// Basic ivec3/int operators
 
-ivec3 __operator + (const int a, const ivec3 u) {
-    return ivec3 (a) + u;
+ivec3 __operator + (const int a, const ivec3 u)
+{
+   __retVal = ivec3(a) + u;
 }
 
-ivec3 __operator + (const ivec3 v, const int b) {
-    return v + ivec3 (b);
+ivec3 __operator + (const ivec3 v, const int b)
+{
+   __retVal = v + ivec3(b);
 }
 
-ivec3 __operator - (const int a, const ivec3 u) {
-    return ivec3 (a) - u;
+ivec3 __operator - (const int a, const ivec3 u)
+{
+   __retVal = ivec3(a) - u;
 }
 
-ivec3 __operator - (const ivec3 v, const int b) {
-    return v - ivec3 (b);
+ivec3 __operator - (const ivec3 v, const int b)
+{
+   __retVal = v - ivec3(b);
 }
 
-ivec3 __operator * (const int a, const ivec3 u) {
-    return ivec3 (a) * u;
+ivec3 __operator * (const int a, const ivec3 u)
+{
+   __retVal = ivec3(a) * u;
 }
 
-ivec3 __operator * (const ivec3 v, const int b) {
-    return v * ivec3 (b);
+ivec3 __operator * (const ivec3 v, const int b)
+{
+   __retVal = v * ivec3(b);
 }
 
-ivec3 __operator / (const int a, const ivec3 u) {
-    return ivec3 (a) / u;
+ivec3 __operator / (const int a, const ivec3 u)
+{
+   __retVal = ivec3(a) / u;
 }
 
-ivec3 __operator / (const ivec3 v, const int b) {
-    return v / ivec3 (b);
+ivec3 __operator / (const ivec3 v, const int b)
+{
+   __retVal = v / ivec3(b);
 }
 
 
 //// Basic ivec4/int operators
 
-ivec4 __operator + (const int a, const ivec4 u) {
-    return ivec4 (a) + u;
+ivec4 __operator + (const int a, const ivec4 u)
+{
+   __retVal = ivec4(a) + u;
 }
 
-ivec4 __operator + (const ivec4 v, const int b) {
-    return v + ivec4 (b);
+ivec4 __operator + (const ivec4 v, const int b)
+{
+   __retVal = v + ivec4(b);
 }
 
-ivec4 __operator - (const int a, const ivec4 u) {
-    return ivec4 (a) - u;
+ivec4 __operator - (const int a, const ivec4 u)
+{
+   __retVal = ivec4(a) - u;
 }
 
-ivec4 __operator - (const ivec4 v, const int b) {
-    return v - ivec4 (b);
+ivec4 __operator - (const ivec4 v, const int b)
+{
+   __retVal = v - ivec4(b);
 }
 
-ivec4 __operator * (const int a, const ivec4 u) {
-    return ivec4 (a) * u;
+ivec4 __operator * (const int a, const ivec4 u)
+{
+   __retVal = ivec4(a) * u;
 }
 
-ivec4 __operator * (const ivec4 v, const int b) {
-    return v * ivec4 (b);
+ivec4 __operator * (const ivec4 v, const int b)
+{
+   __retVal = v * ivec4(b);
 }
 
-ivec4 __operator / (const int a, const ivec4 u) {
-    return ivec4 (a) / u;
+ivec4 __operator / (const int a, const ivec4 u)
+{
+   __retVal = ivec4(a) / u;
 }
 
-ivec4 __operator / (const ivec4 v, const int b) {
-    return v / ivec4 (b);
+ivec4 __operator / (const ivec4 v, const int b)
+{
+   __retVal = v / ivec4(b);
 }
 
 
@@ -1017,25 +1120,22 @@ ivec4 __operator / (const ivec4 v, const int b) {
 
 int __operator - (const int a)
 {
-   __asm float_negate __retVal.x, a;
+   __asm vec4_negate __retVal.x, a;
 }
 
 ivec2 __operator - (const ivec2 v)
 {
-// XXX redo
-    return ivec2 (-v.x, -v.y);
+   __asm vec4_negate __retVal, v;
 }
 
 ivec3 __operator - (const ivec3 v)
 {
-// XXX redo
-    return ivec3 (-v.x, -v.y, -v.z);
+   __asm vec4_negate __retVal, v;
 }
 
 ivec4 __operator - (const ivec4 v)
 {
-// XXX redo
-    return ivec4 (-v.x, -v.y, -v.z, -v.w);
+   __asm vec4_negate __retVal, v;
 }
 
 float __operator - (const float a)
@@ -1085,12 +1185,12 @@ mat4 __operator - (const mat4 m)
 
 float dot(const float a, const float b)
 {
-   return a * b;
+   __retVal = a * b;
 }
 
 float dot(const vec2 a, const vec2 b)
 {
-   return a.x * b.x + a.y * b.y;
+   __retVal = a.x * b.x + a.y * b.y;
 }
 
 float dot(const vec3 a, const vec3 b)
@@ -1109,22 +1209,25 @@ float dot(const vec4 a, const vec4 b)
 
 void __operator += (inout int a, const int b)
 {
-    a = int (float (a) + float (b));
+   __asm vec4_add a, a, b;
 }
 
 void __operator -= (inout int a, const int b)
 {
-    a += -b;
+   __asm vec4_subtract a, a, b;
 }
 
 void __operator *= (inout int a, const int b)
 {
-    a = int (float (a) * float (b));
+   __asm vec4_multiply a, a, b;
 }
 
 void __operator /= (inout int a, const int b)
 {
-    a = int (float (a) / float (b));
+   float invB;
+   __asm float_rcp invB, b;
+   __asm vec4_multiply a, a, invB;
+   __asm vec4_to_ivec4 a, a;
 }
 
 
@@ -1132,26 +1235,26 @@ void __operator /= (inout int a, const int b)
 
 void __operator += (inout ivec2 v, const ivec2 u)
 {
-    v.x += u.x;
-    v.y += u.y;
+   __asm vec4_add v, v, u;
 }
 
 void __operator -= (inout ivec2 v, const ivec2 u)
 {
-    v.x -= u.x;
-    v.y -= u.y;
+   __asm vec4_subtract v, v, u;
 }
 
 void __operator *= (inout ivec2 v, const ivec2 u)
 {
-    v.x *= u.x;
-    v.y *= u.y;
+   __asm vec4_multiply v, v, u;
 }
 
 void __operator /= (inout ivec2 v, const ivec2 u)
 {
-    v.x /= u.x;
-    v.y /= u.y;
+   ivec2 inv, z;
+   __asm float_rcp inv.x, u.x;
+   __asm float_rcp inv.y, u.y;
+   __asm vec4_multiply z, v, inv;
+   __asm vec4_to_ivec4 v, z;
 }
 
 
@@ -1159,61 +1262,53 @@ void __operator /= (inout ivec2 v, const ivec2 u)
 
 void __operator += (inout ivec3 v, const ivec3 u)
 {
-    v.x += u.x;
-    v.y += u.y;
-    v.z += u.z;
+   __asm vec4_add v, v, u;
 }
 
 void __operator -= (inout ivec3 v, const ivec3 u)
 {
-    v.x -= u.x;
-    v.y -= u.y;
-    v.z -= u.z;
+   __asm vec4_subtract v, v, u;
 }
 
 void __operator *= (inout ivec3 v, const ivec3 u)
 {
-    v.x *= u.x;
-    v.y *= u.y;
-    v.z *= u.z;
+   __asm vec4_multiply v, v, u;
 }
 
 void __operator /= (inout ivec3 v, const ivec3 u)
 {
-    v.x /= u.x;
-    v.y /= u.y;
-    v.z /= u.z;
+   ivec3 inv, z;
+   __asm float_rcp inv.x, u.x;
+   __asm float_rcp inv.y, u.y;
+   __asm vec4_multiply z, v, inv;
+   __asm vec4_to_ivec4 v, z;
 }
 
 
 //// ivec4 assignment operators
 
-void __operator += (inout ivec4 v, const ivec4 u) {
-    v.x += u.x;
-    v.y += u.y;
-    v.z += u.z;
-    v.w += u.w;
+void __operator += (inout ivec4 v, const ivec4 u)
+{
+   __asm vec4_add v, v, u;
 }
 
-void __operator -= (inout ivec4 v, const ivec4 u) {
-    v.x -= u.x;
-    v.y -= u.y;
-    v.z -= u.z;
-    v.w -= u.w;
+void __operator -= (inout ivec4 v, const ivec4 u)
+{
+   __asm vec4_subtract v, v, u;
 }
 
-void __operator *= (inout ivec4 v, const ivec4 u) {
-    v.x *= u.x;
-    v.y *= u.y;
-    v.z *= u.z;
-    v.w *= u.w;
+void __operator *= (inout ivec4 v, const ivec4 u)
+{
+   __asm vec4_multiply v, v, u;
 }
 
-void __operator /= (inout ivec4 v, const ivec4 u) {
-    v.x /= u.x;
-    v.y /= u.y;
-    v.z /= u.z;
-    v.w /= u.w;
+void __operator /= (inout ivec4 v, const ivec4 u)
+{
+   ivec4 inv, z;
+   __asm float_rcp inv.x, u.x;
+   __asm float_rcp inv.y, u.y;
+   __asm vec4_multiply z, v, inv;
+   __asm vec4_to_ivec4 v, z;
 }
 
 
@@ -1221,7 +1316,7 @@ void __operator /= (inout ivec4 v, const ivec4 u) {
 
 void __operator += (inout float a, const float b)
 {
-    __asm vec4_add a.x, a.x, b;
+    __asm vec4_add a.x, a.x, b.x;
 }
 
 void __operator -= (inout float a, const float b)
@@ -1246,26 +1341,25 @@ void __operator /= (inout float a, const float b)
 
 void __operator += (inout vec2 v, const vec2 u)
 {
-    v.x += u.x;
-    v.y += u.y;
+   __asm vec4_add v.xy, v.xy, u.xy;
 }
 
 void __operator -= (inout vec2 v, const vec2 u)
 {
-    v.x -= u.x;
-    v.y -= u.y;
+   __asm vec4_subtract v.xy, v.xy, u.xy;
 }
 
 void __operator *= (inout vec2 v, const vec2 u)
 {
-    v.x *= u.x;
-    v.y *= u.y;
+   __asm vec4_multiply v.xy, v.xy, u.xy;
 }
 
 void __operator /= (inout vec2 v, const vec2 u)
 {
-    v.x /= u.x;
-    v.y /= u.y;
+   vec2 w;
+   __asm float_rcp w.x, u.x;
+   __asm float_rcp w.y, u.y;
+   __asm vec4_multiply v.xy, v.xy, w.xy;
 }
 
 
@@ -1288,10 +1382,11 @@ void __operator *= (inout vec3 v, const vec3 u)
 
 void __operator /= (inout vec3 v, const vec3 u)
 {
-// XXX rcp
-    v.x /= u.x;
-    v.y /= u.y;
-    v.z /= u.z;
+   vec3 w;
+   __asm float_rcp w.x, u.x;
+   __asm float_rcp w.y, u.y;
+   __asm float_rcp w.z, u.z;
+   __asm vec4_multiply v.xyz, v.xyz, w.xyz;
 }
 
 
@@ -1314,11 +1409,12 @@ void __operator *= (inout vec4 v, const vec4 u)
 
 void __operator /= (inout vec4 v, const vec4 u)
 {
-// XXX rcp
-    v.x /= u.x;
-    v.y /= u.y;
-    v.z /= u.z;
-    v.w /= u.w;
+   vec4 w;
+   __asm float_rcp w.x, u.x;
+   __asm float_rcp w.y, u.y;
+   __asm float_rcp w.z, u.z;
+   __asm float_rcp w.w, u.w;
+   __asm vec4_multiply v, v, w;
 }
 
 
@@ -1327,18 +1423,17 @@ void __operator /= (inout vec4 v, const vec4 u)
 
 void __operator += (inout ivec2 v, const int a)
 {
-   v.x += a;
-   v.y += a;
+   __asm vec4_add v.xy, v.xy, a;
 }
 
 void __operator -= (inout ivec2 v, const int a)
 {
-   v.x -= a;
-   v.y -= a;
+   __asm vec4_subtract v.xy, v.xy, a;
 }
 
 void __operator *= (inout ivec2 v, const int a)
 {
+   __asm vec4_multiply v.xy, v.xy, a;
    v.x *= a;
    v.y *= a;
 }
@@ -1355,27 +1450,22 @@ void __operator /= (inout ivec2 v, const int a)
 
 void __operator += (inout ivec3 v, const int a)
 {
-   v.x += a;
-   v.y += a;
-   v.z += a;
+   __asm vec4_add v.xyz, v.xyz, a;
 }
 
 void __operator -= (inout ivec3 v, const int a)
 {
-   v.x -= a;
-   v.y -= a;
-   v.z -= a;
+   __asm vec4_subtract v.xyz, v.xyz, a;
 }
 
 void __operator *= (inout ivec3 v, const int a)
 {
-   v.x *= a;
-   v.y *= a;
-   v.z *= a;
+   __asm vec4_multiply v.xyz, v.xyz, a;
 }
 
 void __operator /= (inout ivec3 v, const int a)
 {
+   // XXX rcp
     v.x /= a;
     v.y /= a;
     v.z /= a;
@@ -1386,17 +1476,17 @@ void __operator /= (inout ivec3 v, const int a)
 
 void __operator += (inout ivec4 v, const int a)
 {
-   __asm vec4_add v, v, a.xxxx;
+   __asm vec4_add v, v, a;
 }
 
 void __operator -= (inout ivec4 v, const int a)
 {
-   __asm vec4_subtract v, v, a.xxxx;
+   __asm vec4_subtract v, v, a;
 }
 
 void __operator *= (inout ivec4 v, const int a)
 {
-   __asm vec4_multiply v, v, a.xxxx;
+   __asm vec4_multiply v, v, a;
 }
 
 void __operator /= (inout ivec4 v, const int a)
@@ -1413,24 +1503,24 @@ void __operator /= (inout ivec4 v, const int a)
 
 void __operator += (inout vec2 v, const float a)
 {
-   __asm vec4_add v.xy, v, a.xx;
+   __asm vec4_add v.xy, v, a;
 }
 
 void __operator -= (inout vec2 v, const float a)
 {
-   __asm vec4_subtract v.xy, v, a.xx;
+   __asm vec4_subtract v.xy, v, a;
 }
 
 void __operator *= (inout vec2 v, const float a)
 {
-   __asm vec4_multiply v.xy, v, a.xx;
+   __asm vec4_multiply v.xy, v, a;
 }
 
 void __operator /= (inout vec2 v, const float a)
 {
    float invA;
    __asm float_rcp invA, a;
-   __asm vec4_multiply v.xy, v.xy, a.xx;
+   __asm vec4_multiply v.xy, v.xy, invA;
 }
 
 
@@ -1438,24 +1528,24 @@ void __operator /= (inout vec2 v, const float a)
 
 void __operator += (inout vec3 v, const float a)
 {
-   __asm vec4_add v.xyz, v, a.xxx;
+   __asm vec4_add v.xyz, v, a;
 }
 
 void __operator -= (inout vec3 v, const float a)
 {
-   __asm vec4_subtract v.xyz, v, a.xxx;
+   __asm vec4_subtract v.xyz, v, a;
 }
 
 void __operator *= (inout vec3 v, const float a)
 {
-   __asm vec4_multiply v.xyz, v, a.xxx;
+   __asm vec4_multiply v.xyz, v, a;
 }
 
 void __operator /= (inout vec3 v, const float a)
 {
    float invA;
    __asm float_rcp invA, a;
-   __asm vec4_multiply v.xyz, v.xyz, a.xxx;
+   __asm vec4_multiply v.xyz, v.xyz, invA;
 }
 
 
@@ -1463,24 +1553,24 @@ void __operator /= (inout vec3 v, const float a)
 
 void __operator += (inout vec4 v, const float a)
 {
-   __asm vec4_add v, v, a.xxxx;
+   __asm vec4_add v, v, a;
 }
 
 void __operator -= (inout vec4 v, const float a)
 {
-   __asm vec4_subtract v, v, a.xxxx;
+   __asm vec4_subtract v, v, a;
 }
 
 void __operator *= (inout vec4 v, const float a)
 {
-   __asm vec4_multiply v, v, a.xxxx;
+   __asm vec4_multiply v, v, a;
 }
 
 void __operator /= (inout vec4 v, const float a)
 {
    float invA;
    __asm float_rcp invA, a;
-   __asm vec4_multiply v, v, a.xxxx;
+   __asm vec4_multiply v, v, invA;
 }
 
 
@@ -1503,15 +1593,8 @@ mat2 __operator - (const mat2 m, const mat2 n)
 
 mat2 __operator * (const mat2 m, const mat2 n)
 {
-   vec2 mRow0, mRow1;
-   mRow0.x = m[0].x;
-   mRow0.y = m[1].x;
-   mRow1.x = m[0].y;
-   mRow1.y = m[1].y;
-   __retVal[0].x = dot(mRow0, n[0]);
-   __retVal[1].x = dot(mRow0, n[1]);
-   __retVal[0].y = dot(mRow1, n[0]);
-   __retVal[1].y = dot(mRow1, n[1]);
+   __retVal[0] = m[0] * n[0].xx + m[1] * n[0].yy;
+   __retVal[1] = m[0] * n[1].xx + m[1] * n[1].yy;
 }
 
 mat2 __operator / (const mat2 m, const mat2 n)
@@ -1539,25 +1622,9 @@ mat3 __operator - (const mat3 m, const mat3 n)
 
 mat3 __operator * (const mat3 m, const mat3 n)
 {
-   vec3 mRow0, mRow1, mRow2;
-   mRow0.x = m[0].x;
-   mRow0.y = m[1].x;
-   mRow0.z = m[2].x;
-   mRow1.x = m[0].y;
-   mRow1.y = m[1].y;
-   mRow1.z = m[2].y;
-   mRow2.x = m[0].z;
-   mRow2.y = m[1].z;
-   mRow2.z = m[2].z;
-   __retVal[0].x = dot(mRow0, n[0]);
-   __retVal[1].x = dot(mRow0, n[1]);
-   __retVal[2].x = dot(mRow0, n[2]);
-   __retVal[0].y = dot(mRow1, n[0]);
-   __retVal[1].y = dot(mRow1, n[1]);
-   __retVal[2].y = dot(mRow1, n[2]);
-   __retVal[0].z = dot(mRow2, n[0]);
-   __retVal[1].z = dot(mRow2, n[1]);
-   __retVal[2].z = dot(mRow2, n[2]);
+   __retVal[0] = m[0] * n[0].xxx + m[1] * n[0].yyy + m[2] * n[0].zzz;
+   __retVal[1] = m[0] * n[1].xxx + m[1] * n[1].yyy + m[2] * n[1].zzz;
+   __retVal[2] = m[0] * n[2].xxx + m[1] * n[2].yyy + m[2] * n[2].zzz;
 }
 
 mat3 __operator / (const mat3 m, const mat3 n)
@@ -1588,51 +1655,10 @@ mat4 __operator - (const mat4 m, const mat4 n)
 
 mat4 __operator * (const mat4 m, const mat4 n)
 {
-   // sub-blocks to reduce temporary usage
-   {
-      vec4 mRow0;
-      mRow0.x = m[0].x;
-      mRow0.y = m[1].x;
-      mRow0.z = m[2].x;
-      mRow0.w = m[3].x;
-      __retVal[0].x = dot(mRow0, n[0]);
-      __retVal[1].x = dot(mRow0, n[1]);
-      __retVal[2].x = dot(mRow0, n[2]);
-      __retVal[3].x = dot(mRow0, n[3]);
-   }
-   {
-      vec4 mRow1;
-      mRow1.x = m[0].y;
-      mRow1.y = m[1].y;
-      mRow1.z = m[2].y;
-      mRow1.w = m[3].y;
-      __retVal[0].y = dot(mRow1, n[0]);
-      __retVal[1].y = dot(mRow1, n[1]);
-      __retVal[2].y = dot(mRow1, n[2]);
-      __retVal[3].y = dot(mRow1, n[3]);
-   }
-   {
-      vec4 mRow2;
-      mRow2.x = m[0].z;
-      mRow2.y = m[1].z;
-      mRow2.z = m[2].z;
-      mRow2.w = m[3].z;
-      __retVal[0].z = dot(mRow2, n[0]);
-      __retVal[1].z = dot(mRow2, n[1]);
-      __retVal[2].z = dot(mRow2, n[2]);
-      __retVal[3].z = dot(mRow2, n[3]);
-   }
-   {
-      vec4 mRow3;
-      mRow3.x = m[0].w;
-      mRow3.y = m[1].w;
-      mRow3.z = m[2].w;
-      mRow3.w = m[3].w;
-      __retVal[0].w = dot(mRow3, n[0]);
-      __retVal[1].w = dot(mRow3, n[1]);
-      __retVal[2].w = dot(mRow3, n[2]);
-      __retVal[3].w = dot(mRow3, n[3]);
-   }
+   __retVal[0] = m[0] * n[0].xxxx + m[1] * n[0].yyyy + m[2] * n[0].zzzz + m[3] * n[0].wwww;
+   __retVal[1] = m[0] * n[1].xxxx + m[1] * n[1].yyyy + m[2] * n[1].zzzz + m[3] * n[1].wwww;
+   __retVal[2] = m[0] * n[2].xxxx + m[1] * n[2].yyyy + m[2] * n[2].zzzz + m[3] * n[2].wwww;
+   __retVal[3] = m[0] * n[3].xxxx + m[1] * n[3].yyyy + m[2] * n[3].zzzz + m[3] * n[3].wwww;
 }
 
 mat4 __operator / (const mat4 m, const mat4 n)
@@ -1826,76 +1852,44 @@ mat4 __operator / (const mat4 m, const float b)
 
 vec2 __operator * (const mat2 m, const vec2 v)
 {
-   __retVal.x = dot(m[0], v);
-   __retVal.y = dot(m[1], v);
+   __retVal = m[0] * v.xx
+            + m[1] * v.yy;
 }
 
 vec2 __operator * (const vec2 v, const mat2 m)
 {
-   vec2 r0, r1;
-   r0.x = m[0].x;
-   r0.y = m[1].x;
-   r1.x = m[0].y;
-   r1.y = m[1].y;
-   __retVal.x = dot(v, r0);
-   __retVal.y = dot(v, r1);
+   __retVal.x = dot(v, m[0]);
+   __retVal.y = dot(v, m[1]);
 }
 
 vec3 __operator * (const mat3 m, const vec3 v)
 {
-   __retVal.x = dot(m[0], v);
-   __retVal.y = dot(m[1], v);
-   __retVal.z = dot(m[2], v);
+   __retVal = m[0] * v.xxx
+            + m[1] * v.yyy
+            + m[2] * v.zzz;
 }
 
 vec3 __operator * (const vec3 v, const mat3 m)
 {
-   vec3 r0, r1, r2;
-   r0.x = m[0].x;
-   r0.y = m[1].x;
-   r0.z = m[2].x;
-   r1.x = m[0].y;
-   r1.y = m[1].y;
-   r1.z = m[2].y;
-   r2.x = m[0].z;
-   r2.y = m[1].z;
-   r2.z = m[2].z;
-   __asm vec3_dot __retVal.x, v, r0;
-   __asm vec3_dot __retVal.y, v, r1;
-   __asm vec3_dot __retVal.z, v, r2;
+   __retVal.x = dot(v, m[0]);
+   __retVal.y = dot(v, m[1]);
+   __retVal.z = dot(v, m[2]);
 }
 
 vec4 __operator * (const mat4 m, const vec4 v)
 {
-   __retVal.x = dot(m[0], v);
-   __retVal.y = dot(m[1], v);
-   __retVal.z = dot(m[2], v);
-   __retVal.w = dot(m[3], v);
+   __retVal = m[0] * v.xxxx
+            + m[1] * v.yyyy
+            + m[2] * v.zzzz
+            + m[3] * v.wwww;
 }
 
 vec4 __operator * (const vec4 v, const mat4 m)
 {
-   vec4 r0, r1, r2, r3;
-   r0.x = m[0].x;
-   r0.y = m[1].x;
-   r0.z = m[2].x;
-   r0.w = m[3].x;
-   r1.x = m[0].y;
-   r1.y = m[1].y;
-   r1.z = m[2].y;
-   r1.w = m[3].y;
-   r2.x = m[0].z;
-   r2.y = m[1].z;
-   r2.z = m[2].z;
-   r2.w = m[3].z;
-   r3.x = m[0].w;
-   r3.y = m[1].w;
-   r3.z = m[2].w;
-   r3.w = m[3].w;
-   __asm vec4_dot __retVal.x, v, r0;
-   __asm vec4_dot __retVal.y, v, r1;
-   __asm vec4_dot __retVal.z, v, r2;
-   __asm vec4_dot __retVal.w, v, r3;
+   __retVal.x = dot(v, m[0]);
+   __retVal.y = dot(v, m[1]);
+   __retVal.z = dot(v, m[2]);
+   __retVal.w = dot(v, m[3]);
 }
 
 
@@ -2271,8 +2265,8 @@ ivec4 __postDecr(inout ivec4 v)
 
 float __postDecr(inout float a)
 {
-   __retVal = v;
-   v = v - 1.0;
+   __retVal = a;
+   a = a - 1.0;
 }
 
 vec2 __postDecr(inout vec2 v)
@@ -2321,18 +2315,22 @@ mat4 __postDecr(inout mat4 m)
 
 //// post-increment
 
-float __postIncr(inout float a) {
-    float b = a;
-    ++a;
-    return b;
+float __postIncr(inout float a)
+{
+   __retVal = a;
+   a = a + 1;
 }
 
-vec2 __postIncr(inout vec2 v) {
-    return vec2 (v.x++, v.y++);
+vec2 __postIncr(inout vec2 v)
+{
+   __retVal = v;
+   v = v + vec2(1.0);
 }
 
-vec3 __postIncr(inout vec3 v) {
-    return vec3 (v.x++, v.y++, v.z++);
+vec3 __postIncr(inout vec3 v)
+{
+   __retVal = v;
+   v = v + vec3(1.0);
 }
 
 vec4 __postIncr(inout vec4 v)
@@ -2342,36 +2340,56 @@ vec4 __postIncr(inout vec4 v)
 }
 
 
-int __postIncr(inout int a) {
-    int b = a;
-    ++a;
-    return b;
+int __postIncr(inout int a)
+{
+   __retVal = a;
+   a = a + 1;
 }
 
-ivec2 __postIncr(inout ivec2 v) {
-    return ivec2 (v.x++, v.y++);
+ivec2 __postIncr(inout ivec2 v)
+{
+   __retVal = v;
+   v = v + ivec2(1);
 }
 
-ivec3 __postIncr(inout ivec3 v) {
-    return ivec3 (v.x++, v.y++, v.z++);
+ivec3 __postIncr(inout ivec3 v)
+{
+   __retVal = v;
+   v = v + ivec3(1);
 }
 
-ivec4 __postIncr(inout ivec4 v) {
-    return ivec4 (v.x++, v.y++, v.z++, v.w++);
+ivec4 __postIncr(inout ivec4 v)
+{
+   __retVal = v;
+   v = v + ivec3(1);
 }
 
 
-
-mat2 __postIncr(inout mat2 m) {
-    return mat2 (m[0]++, m[1]++);
+mat2 __postIncr(inout mat2 m)
+{
+   mat2 n = m;
+   m[0] = m[0] + vec2(1.0);
+   m[1] = m[1] + vec2(1.0);
+   return n;
 }
 
-mat3 __postIncr(inout mat3 m) {
-    return mat3 (m[0]++, m[1]++, m[2]++);
+mat3 __postIncr(inout mat3 m)
+{
+   mat3 n = m;
+   m[0] = m[0] + vec3(1.0);
+   m[1] = m[1] + vec3(1.0);
+   m[2] = m[2] + vec3(1.0);
+   return n;
 }
 
-mat4 __postIncr(inout mat4 m) {
-    return mat4 (m[0]++, m[1]++, m[2]++, m[3]++);
+mat4 __postIncr(inout mat4 m)
+{
+   mat4 n = m;
+   m[0] = m[0] + vec4(1.0);
+   m[1] = m[1] + vec4(1.0);
+   m[2] = m[2] + vec4(1.0);
+   m[3] = m[3] + vec4(1.0);
+   return n;
 }
 
 
@@ -2423,42 +2441,6 @@ bool __operator <= (const int a, const int b) {
 }
 
 
-//bool __operator ^^ (const bool a, const bool b) {
-//    return a != b;
-//}
-
-
-
-bool __logicalNot(const bool a)
-{
-   if (a)
-      return false;
-   return true;
-}
-
-bool __logicalAnd(const bool a, const bool b)
-{
-   if (a)
-      return b;
-   return false;
-}
-
-bool __logicalOr(const bool a, const bool b)
-{
-   if (a)
-      return true;
-   return b;
-}
-
-bool __logicalXor(const bool a, const bool b)
-{
-   // XXX   return a != b;
-   if (a)
-      return __logicalNot(b);
-   return b;
-}
-
-
 
 //
 // MESA-specific extension functions.