builtins: Add atan().
authorEric Anholt <eric@anholt.net>
Wed, 19 May 2010 19:44:23 +0000 (12:44 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 1 Jun 2010 22:15:04 +0000 (15:15 -0700)
builtin_function.cpp
builtins/110/atan [new file with mode: 0644]

index f9fdd48..1d847a6 100644 (file)
@@ -199,6 +199,163 @@ static const char *builtins_110_asin = {
    "))\n"
 };
 
+static const char *builtins_110_atan = {
+   "((function atan\n"
+   "   (signature float\n"
+   "     (parameters\n"
+   "       (declare (in) float x))\n"
+   "     ((return (call asin ((expression float *\n"
+   "                      (var_ref x)\n"
+   "                      (expression float rsq\n"
+   "                       (expression float +\n"
+   "                        (expression float *\n"
+   "                         (var_ref x)\n"
+   "                         (var_ref x))\n"
+   "                        (constant float (1.0))))))))))\n"
+   "\n"
+   "   (signature vec2\n"
+   "     (parameters\n"
+   "       (declare (in) vec2 y_over_x))\n"
+   "     ((return (call asin ((expression vec2 *\n"
+   "                      (var_ref y_over_x)\n"
+   "                      (expression vec2 rsq\n"
+   "                       (expression vec2 +\n"
+   "                        (expression vec2 *\n"
+   "                         (var_ref y_over_x)\n"
+   "                         (var_ref y_over_x))\n"
+   "                        (constant float (1.0))))))))))\n"
+   "\n"
+   "   (signature vec3\n"
+   "     (parameters\n"
+   "       (declare (in) vec3 y_over_x))\n"
+   "     ((return (call asin ((expression vec3 *\n"
+   "                      (var_ref y_over_x)\n"
+   "                      (expression vec3 rsq\n"
+   "                       (expression vec3 +\n"
+   "                        (expression vec3 *\n"
+   "                         (var_ref y_over_x)\n"
+   "                         (var_ref y_over_x))\n"
+   "                        (constant float (1.0))))))))))\n"
+   "\n"
+   "   (signature vec4\n"
+   "     (parameters\n"
+   "       (declare (in) vec4 y_over_x))\n"
+   "     ((return (call asin ((expression vec4 *\n"
+   "                      (var_ref y_over_x)\n"
+   "                      (expression vec4 rsq\n"
+   "                       (expression vec4 +\n"
+   "                        (expression vec4 *\n"
+   "                         (var_ref y_over_x)\n"
+   "                         (var_ref y_over_x))\n"
+   "                        (constant float (1.0))))))))))\n"
+   "\n"
+   "   (signature float\n"
+   "     (parameters\n"
+   "       (declare (in) float y)\n"
+   "       (declare (in) float x))\n"
+   "     ((declare () float r)\n"
+   "      (if (expression bool >\n"
+   "      (expression float abs (var_ref x))\n"
+   "      (constant float (.0001)))\n"
+   "       ((assign (constant bool (1))\n"
+   "    (var_ref r) (call atan ((expression float /\n"
+   "                             (var_ref y)\n"
+   "                             (var_ref x)))))\n"
+   "   (if (expression bool <\n"
+   "        (var_ref x)\n"
+   "        (constant float (0.0)))\n"
+   "    ((assign (constant bool (1))\n"
+   "      (var_ref r)\n"
+   "      (expression float +\n"
+   "       (var_ref r)\n"
+   "       (expression float *\n"
+   "        (expression int sign (var_ref y))\n"
+   "        (constant float (3.1415926))))))\n"
+   "    ()))\n"
+   "       ())\n"
+   "      (return (var_ref r))))\n"
+   "\n"
+   "   (signature vec2\n"
+   "     (parameters\n"
+   "       (declare (in) vec2 y)\n"
+   "       (declare (in) vec2 x))\n"
+   "     ((declare () vec2 r)\n"
+   "      (if (expression bool >\n"
+   "      (expression vec2 abs (var_ref x))\n"
+   "      (constant float (.0001)))\n"
+   "       ((assign (constant bool (1))\n"
+   "    (var_ref r) (call atan ((expression vec2 /\n"
+   "                             (var_ref y)\n"
+   "                             (var_ref x)))))\n"
+   "   (if (expression bool <\n"
+   "        (var_ref x)\n"
+   "        (constant float (0.0)))\n"
+   "    ((assign (constant bool (1))\n"
+   "      (var_ref r)\n"
+   "      (expression vec2 +\n"
+   "       (var_ref r)\n"
+   "       (expression vec2 *\n"
+   "        (expression int sign (var_ref y))\n"
+   "        (constant float (3.1415926))))))\n"
+   "    ()))\n"
+   "       ())\n"
+   "      (return (var_ref r))))\n"
+   "\n"
+   "   (signature vec3\n"
+   "     (parameters\n"
+   "       (declare (in) vec3 y)\n"
+   "       (declare (in) vec3 x))\n"
+   "     ((declare () vec3 r)\n"
+   "      (if (expression bool >\n"
+   "      (expression vec3 abs (var_ref x))\n"
+   "      (constant float (.0001)))\n"
+   "       ((assign (constant bool (1))\n"
+   "    (var_ref r) (call atan ((expression vec3 /\n"
+   "                             (var_ref y)\n"
+   "                             (var_ref x)))))\n"
+   "   (if (expression bool <\n"
+   "        (var_ref x)\n"
+   "        (constant float (0.0)))\n"
+   "    ((assign (constant bool (1))\n"
+   "      (var_ref r)\n"
+   "      (expression vec3 +\n"
+   "       (var_ref r)\n"
+   "       (expression vec3 *\n"
+   "        (expression int sign (var_ref y))\n"
+   "        (constant float (3.1415926))))))\n"
+   "    ()))\n"
+   "       ())\n"
+   "      (return (var_ref r))))\n"
+   "\n"
+   "   (signature vec4\n"
+   "     (parameters\n"
+   "       (declare (in) vec4 y)\n"
+   "       (declare (in) vec4 x))\n"
+   "     ((declare () vec4 r)\n"
+   "      (if (expression bool >\n"
+   "      (expression vec4 abs (var_ref x))\n"
+   "      (constant float (.0001)))\n"
+   "       ((assign (constant bool (1))\n"
+   "    (var_ref r) (call atan ((expression vec4 /\n"
+   "                             (var_ref y)\n"
+   "                             (var_ref x)))))\n"
+   "   (if (expression bool <\n"
+   "        (var_ref x)\n"
+   "        (constant float (0.0)))\n"
+   "    ((assign (constant bool (1))\n"
+   "      (var_ref r)\n"
+   "      (expression vec4 +\n"
+   "       (var_ref r)\n"
+   "       (expression vec4 *\n"
+   "        (expression int sign (var_ref y))\n"
+   "        (constant float (3.1415926))))))\n"
+   "    ()))\n"
+   "       ())\n"
+   "      (return (var_ref r))))\n"
+   "\n"
+   "))\n"
+};
+
 static const char *builtins_110_ceil = {
    "((function ceil\n"
    "   (signature float\n"
@@ -1563,6 +1720,7 @@ static const char *functions_for_110 [] = {
    builtins_110_all,
    builtins_110_any,
    builtins_110_asin,
+   builtins_110_atan,
    builtins_110_ceil,
    builtins_110_clamp,
    builtins_110_cos,
diff --git a/builtins/110/atan b/builtins/110/atan
new file mode 100644 (file)
index 0000000..e554235
--- /dev/null
@@ -0,0 +1,154 @@
+((function atan
+   (signature float
+     (parameters
+       (declare (in) float x))
+     ((return (call asin ((expression float *
+                          (var_ref x)
+                          (expression float rsq
+                           (expression float +
+                            (expression float *
+                             (var_ref x)
+                             (var_ref x))
+                            (constant float (1.0))))))))))
+
+   (signature vec2
+     (parameters
+       (declare (in) vec2 y_over_x))
+     ((return (call asin ((expression vec2 *
+                          (var_ref y_over_x)
+                          (expression vec2 rsq
+                           (expression vec2 +
+                            (expression vec2 *
+                             (var_ref y_over_x)
+                             (var_ref y_over_x))
+                            (constant float (1.0))))))))))
+
+   (signature vec3
+     (parameters
+       (declare (in) vec3 y_over_x))
+     ((return (call asin ((expression vec3 *
+                          (var_ref y_over_x)
+                          (expression vec3 rsq
+                           (expression vec3 +
+                            (expression vec3 *
+                             (var_ref y_over_x)
+                             (var_ref y_over_x))
+                            (constant float (1.0))))))))))
+
+   (signature vec4
+     (parameters
+       (declare (in) vec4 y_over_x))
+     ((return (call asin ((expression vec4 *
+                          (var_ref y_over_x)
+                          (expression vec4 rsq
+                           (expression vec4 +
+                            (expression vec4 *
+                             (var_ref y_over_x)
+                             (var_ref y_over_x))
+                            (constant float (1.0))))))))))
+
+   (signature float
+     (parameters
+       (declare (in) float y)
+       (declare (in) float x))
+     ((declare () float r)
+      (if (expression bool >
+          (expression float abs (var_ref x))
+          (constant float (.0001)))
+       ((assign (constant bool (1))
+        (var_ref r) (call atan ((expression float /
+                                 (var_ref y)
+                                 (var_ref x)))))
+       (if (expression bool <
+            (var_ref x)
+            (constant float (0.0)))
+        ((assign (constant bool (1))
+          (var_ref r)
+          (expression float +
+           (var_ref r)
+           (expression float *
+            (expression int sign (var_ref y))
+            (constant float (3.1415926))))))
+        ()))
+       ())
+      (return (var_ref r))))
+
+   (signature vec2
+     (parameters
+       (declare (in) vec2 y)
+       (declare (in) vec2 x))
+     ((declare () vec2 r)
+      (if (expression bool >
+          (expression vec2 abs (var_ref x))
+          (constant float (.0001)))
+       ((assign (constant bool (1))
+        (var_ref r) (call atan ((expression vec2 /
+                                 (var_ref y)
+                                 (var_ref x)))))
+       (if (expression bool <
+            (var_ref x)
+            (constant float (0.0)))
+        ((assign (constant bool (1))
+          (var_ref r)
+          (expression vec2 +
+           (var_ref r)
+           (expression vec2 *
+            (expression int sign (var_ref y))
+            (constant float (3.1415926))))))
+        ()))
+       ())
+      (return (var_ref r))))
+
+   (signature vec3
+     (parameters
+       (declare (in) vec3 y)
+       (declare (in) vec3 x))
+     ((declare () vec3 r)
+      (if (expression bool >
+          (expression vec3 abs (var_ref x))
+          (constant float (.0001)))
+       ((assign (constant bool (1))
+        (var_ref r) (call atan ((expression vec3 /
+                                 (var_ref y)
+                                 (var_ref x)))))
+       (if (expression bool <
+            (var_ref x)
+            (constant float (0.0)))
+        ((assign (constant bool (1))
+          (var_ref r)
+          (expression vec3 +
+           (var_ref r)
+           (expression vec3 *
+            (expression int sign (var_ref y))
+            (constant float (3.1415926))))))
+        ()))
+       ())
+      (return (var_ref r))))
+
+   (signature vec4
+     (parameters
+       (declare (in) vec4 y)
+       (declare (in) vec4 x))
+     ((declare () vec4 r)
+      (if (expression bool >
+          (expression vec4 abs (var_ref x))
+          (constant float (.0001)))
+       ((assign (constant bool (1))
+        (var_ref r) (call atan ((expression vec4 /
+                                 (var_ref y)
+                                 (var_ref x)))))
+       (if (expression bool <
+            (var_ref x)
+            (constant float (0.0)))
+        ((assign (constant bool (1))
+          (var_ref r)
+          (expression vec4 +
+           (var_ref r)
+           (expression vec4 *
+            (expression int sign (var_ref y))
+            (constant float (3.1415926))))))
+        ()))
+       ())
+      (return (var_ref r))))
+
+))