Implement "sin" and "cos" builtins via new expression operators.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 4 May 2010 05:11:17 +0000 (22:11 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 14 May 2010 23:34:46 +0000 (16:34 -0700)
builtins/110/cos [new file with mode: 0644]
builtins/110/sin [new file with mode: 0644]
ir.cpp
ir.h

diff --git a/builtins/110/cos b/builtins/110/cos
new file mode 100644 (file)
index 0000000..88f266e
--- /dev/null
@@ -0,0 +1,21 @@
+((function cos
+   (signature float
+     (parameters
+       (declare (in) float angle))
+     ((return (expression float cos (var_ref angle)))))
+
+   (signature vec2
+     (parameters
+       (declare (in) vec2 angle))
+     ((return (expression vec2 cos (var_ref angle)))))
+
+   (signature vec3
+     (parameters
+       (declare (in) vec3 angle))
+     ((return (expression vec3 cos (var_ref angle)))))
+
+   (signature vec4
+     (parameters
+       (declare (in) vec4 angle))
+     ((return (expression vec4 cos (var_ref angle)))))
+))
diff --git a/builtins/110/sin b/builtins/110/sin
new file mode 100644 (file)
index 0000000..e6009d8
--- /dev/null
@@ -0,0 +1,21 @@
+((function sin
+   (signature float
+     (parameters
+       (declare (in) float angle))
+     ((return (expression float sin (var_ref angle)))))
+
+   (signature vec2
+     (parameters
+       (declare (in) vec2 angle))
+     ((return (expression vec2 sin (var_ref angle)))))
+
+   (signature vec3
+     (parameters
+       (declare (in) vec3 angle))
+     ((return (expression vec3 sin (var_ref angle)))))
+
+   (signature vec4
+     (parameters
+       (declare (in) vec4 angle))
+     ((return (expression vec4 sin (var_ref angle)))))
+))
diff --git a/ir.cpp b/ir.cpp
index b927c73ccb6bbc59a5602fa7a200a278f145a8d1..eb12b5fe77fa108b5cfb8fc78159568adafd621e 100644 (file)
--- a/ir.cpp
+++ b/ir.cpp
@@ -73,6 +73,9 @@ ir_expression::get_num_operands(ir_expression_operation op)
       1, /* ir_unop_ceil */
       1, /* ir_unop_floor */
 
+      1, /* ir_unop_sin */
+      1, /* ir_unop_cos */
+
       2, /* ir_binop_add */
       2, /* ir_binop_sub */
       2, /* ir_binop_mul */
@@ -131,6 +134,8 @@ static const char *const operator_strs[] = {
    "trunc",
    "ceil",
    "floor",
+   "sin",
+   "cos",
    "+",
    "-",
    "*",
diff --git a/ir.h b/ir.h
index 55a67733fe7df9ae9992cda3bd50786c75461bd4..df9a8c4174d7902aa679a22c1dd1dbe55d11c8e6 100644 (file)
--- a/ir.h
+++ b/ir.h
@@ -449,6 +449,14 @@ enum ir_expression_operation {
    ir_unop_floor,
    /*@}*/
 
+   /**
+    * \name Trigonometric operations.
+    */
+   /*@{*/
+   ir_unop_sin,
+   ir_unop_cos,
+   /*@}*/
+
    ir_binop_add,
    ir_binop_sub,
    ir_binop_mul,