Add decompositions for some HLSL intrinsics.
diff --git a/Test/hlsl.intrinsics.vert b/Test/hlsl.intrinsics.vert
index efafb4a..cab79a8 100644
--- a/Test/hlsl.intrinsics.vert
+++ b/Test/hlsl.intrinsics.vert
@@ -30,6 +30,7 @@
     isnan(inF0);
     ldexp(inF0, inF1);
     log(inF0);
+    log10(inF0);
     log2(inF0);
     max(inF0, inF1);
     min(inF0, inF1);
@@ -39,8 +40,10 @@
     reversebits(2);
     round(inF0);
     rsqrt(inF0);
+    saturate(inF0);
     sign(inF0);
     sin(inF0);
+    sincos(inF0, inF1, inF2);
     sinh(inF0);
     smoothstep(inF0, inF1, inF2);
     sqrt(inF0);
@@ -95,6 +98,7 @@
     ldexp(inF0, inF1);
     length(inF0);
     log(inF0);
+    log10(inF0);
     log2(inF0);
     max(inF0, inF1);
     min(inF0, inF1);
@@ -107,8 +111,10 @@
     reversebits(int2(1,2));
     round(inF0);
     rsqrt(inF0);
+    saturate(inF0);
     sign(inF0);
     sin(inF0);
+    sincos(inF0, inF1, inF2);
     sinh(inF0);
     smoothstep(inF0, inF1, inF2);
     sqrt(inF0);
@@ -159,6 +165,7 @@
     ldexp(inF0, inF1);
     length(inF0);
     log(inF0);
+    log10(inF0);
     log2(inF0);
     max(inF0, inF1);
     min(inF0, inF1);
@@ -171,8 +178,10 @@
     reversebits(int3(1,2,3));
     round(inF0);
     rsqrt(inF0);
+    saturate(inF0);
     sign(inF0);
     sin(inF0);
+    sincos(inF0, inF1, inF2);
     sinh(inF0);
     smoothstep(inF0, inF1, inF2);
     sqrt(inF0);
@@ -203,6 +212,7 @@
     degrees(inF0);
     distance(inF0, inF1);
     dot(inF0, inF1);
+    dst(inF0, inF1);
     // EvaluateAttributeAtCentroid(inF0);
     // EvaluateAttributeAtSample(inF0, 0);
     // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
@@ -222,6 +232,7 @@
     ldexp(inF0, inF1);
     length(inF0);
     log(inF0);
+    log10(inF0);
     log2(inF0);
     max(inF0, inF1);
     min(inF0, inF1);
@@ -234,8 +245,10 @@
     reversebits(int4(1,2,3,4));
     round(inF0);
     rsqrt(inF0);
+    saturate(inF0);
     sign(inF0);
     sin(inF0);
+    sincos(inF0, inF1, inF2);
     sinh(inF0);
     smoothstep(inF0, inF1, inF2);
     sqrt(inF0);
@@ -275,6 +288,7 @@
     fwidth(inF0); \
     ldexp(inF0, inF1); \
     log(inF0); \
+    log10(inF0); \
     log2(inF0); \
     max(inF0, inF1); \
     min(inF0, inF1); \
@@ -282,8 +296,10 @@
     radians(inF0); \
     round(inF0); \
     rsqrt(inF0); \
+    saturate(inF0); \
     sign(inF0); \
     sin(inF0); \
+    sincos(inF0, inF1, inF2); \
     sinh(inF0); \
     smoothstep(inF0, inF1, inF2); \
     sqrt(inF0); \
@@ -321,3 +337,36 @@
     // TODO: ... add when float1 prototypes are generated
     return float4x4(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4);
 }
+
+#define TESTGENMUL(ST, VT, MT) \
+    ST r0 = mul(inF0,  inF1);  \
+    VT r1 = mul(inFV0, inF0);  \
+    VT r2 = mul(inF0,  inFV0); \
+    ST r3 = mul(inFV0, inFV1); \
+    VT r4 = mul(inFM0, inFV0); \
+    VT r5 = mul(inFV0, inFM0); \
+    MT r6 = mul(inFM0, inF0);  \
+    MT r7 = mul(inF0, inFM0);  \
+    MT r8 = mul(inFM0, inFM1);
+
+
+void TestGenMul(float inF0, float inF1,
+                float2 inFV0, float2 inFV1,
+                float2x2 inFM0, float2x2 inFM1)
+{
+    TESTGENMUL(float, float2, float2x2);
+}
+
+void TestGenMul(float inF0, float inF1,
+                float3 inFV0, float3 inFV1,
+                float3x3 inFM0, float3x3 inFM1)
+{
+    TESTGENMUL(float, float3, float3x3);
+}
+
+void TestGenMul(float inF0, float inF1,
+                float4 inFV0, float4 inFV1,
+                float4x4 inFM0, float4x4 inFM1)
+{
+    TESTGENMUL(float, float4, float4x4);
+}