((function asinh
   (signature float
     (parameters
       (declare (in) float x))
     ((return (expression float *
               (expression float sign (var_ref x))
               (expression float log
                (expression float +
                 (expression float abs (var_ref x))
                 (expression float sqrt
                  (expression float +
                   (expression float * (var_ref x) (var_ref x))
                   (constant float (1))))))))))

   (signature vec2
     (parameters
       (declare (in) vec2 x))
     ((return (expression vec2 *
               (expression vec2 sign (var_ref x))
               (expression vec2 log
                (expression vec2 +
                 (expression vec2 abs (var_ref x))
                 (expression vec2 sqrt
                  (expression vec2 +
                   (expression vec2 * (var_ref x) (var_ref x))
                   (constant float (1))))))))))

   (signature vec3
     (parameters
       (declare (in) vec3 x))
     ((return (expression vec3 *
               (expression vec3 sign (var_ref x))
               (expression vec3 log
                (expression vec3 +
                 (expression vec3 abs (var_ref x))
                 (expression vec3 sqrt
                  (expression vec3 +
                   (expression vec3 * (var_ref x) (var_ref x))
                   (constant float (1))))))))))

   (signature vec4
     (parameters
       (declare (in) vec4 x))
     ((return (expression vec4 *
               (expression vec4 sign (var_ref x))
               (expression vec4 log
                (expression vec4 +
                 (expression vec4 abs (var_ref x))
                 (expression vec4 sqrt
                  (expression vec4 +
                   (expression vec4 * (var_ref x) (var_ref x))
                   (constant float (1))))))))))
))