From 49e37360971dea6a62051e7b33952c35635ae771 Mon Sep 17 00:00:00 2001
From: WavePropagation <joergen_lundgren@hotmail.com>
Date: Mon, 17 Oct 2016 18:06:46 +0200
Subject: [PATCH] feat: Add some missing triginometric methods for functions in
 OpenCL.

---
 src/main/java/com/aparapi/Kernel.java | 193 ++++++++++++++++++++++++++
 1 file changed, 193 insertions(+)

diff --git a/src/main/java/com/aparapi/Kernel.java b/src/main/java/com/aparapi/Kernel.java
index 0692c1d7..6fb7637c 100644
--- a/src/main/java/com/aparapi/Kernel.java
+++ b/src/main/java/com/aparapi/Kernel.java
@@ -1856,6 +1856,199 @@ public abstract class Kernel implements Cloneable {
       return Math.tan(_d);
    }
 
+    private static final double LOG_2_RECIPROCAL = 1.0D / Math.log(2.0D);
+    private static final double PI_RECIPROCAL = 1.0D / Math.PI;
+
+    @OpenCLMapping(mapTo = "acospi")
+    protected final double acospi(final double a) {
+        return Math.acos(a) * PI_RECIPROCAL;
+    }
+
+    @OpenCLMapping(mapTo = "acospi")
+    protected final float acospi(final float a) {
+        return (float)(Math.acos(a) * PI_RECIPROCAL);
+    }
+
+    @OpenCLMapping(mapTo = "asinpi")
+    protected final double asinpi(final double a) {
+        return Math.asin(a) * PI_RECIPROCAL;
+    }
+
+    @OpenCLMapping(mapTo = "asinpi")
+    protected final float asinpi(final float a) {
+        return (float)(Math.asin(a) * PI_RECIPROCAL);
+    }
+
+    @OpenCLMapping(mapTo = "atanpi")
+    protected final double atanpi(final double a) {
+        return Math.atan(a) * PI_RECIPROCAL;
+    }
+
+    @OpenCLMapping(mapTo = "atanpi")
+    protected final float atanpi(final float a) {
+        return (float)(Math.atan(a) * PI_RECIPROCAL);
+    }
+
+    @OpenCLMapping(mapTo = "atan2pi")
+    protected final double atan2pi(final double y, final double x) {
+        return Math.atan2(y, x) * PI_RECIPROCAL;
+    }
+
+    @OpenCLMapping(mapTo = "atan2pi")
+    protected final float atan2pi(final float y, final double x) {
+        return (float)(Math.atan2(y, x) * PI_RECIPROCAL);
+    }
+
+    @OpenCLMapping(mapTo = "cbrt")
+    protected final double cbrt(final double a) {
+        return Math.cbrt(a);
+    }
+
+    @OpenCLMapping(mapTo = "cbrt")
+    protected final float cbrt(final float a) {
+        return (float)(Math.cbrt(a));
+    }
+
+    @OpenCLMapping(mapTo = "cosh")
+    protected final double cosh(final double x) {
+        return Math.cosh(x);
+    }
+
+    @OpenCLMapping(mapTo = "cosh")
+    protected final float cosh(final float x) {
+        return (float)(Math.cosh(x));
+    }
+
+    @OpenCLMapping(mapTo = "cospi")
+    protected final double cospi(final double a) {
+        return Math.cos(a * Math.PI);
+    }
+
+    @OpenCLMapping(mapTo = "cospi")
+    protected final float cospi(final float a) {
+        return (float)(Math.cos(a * Math.PI));
+    }
+
+    @OpenCLMapping(mapTo = "exp2")
+    protected final double exp2(final double a) {
+        return Math.pow(2.0D, a);
+    }
+
+    @OpenCLMapping(mapTo = "exp2")
+    protected final float exp2(final float a) {
+        return (float)(Math.pow(2.0D, a));
+    }
+
+    @OpenCLMapping(mapTo = "exp10")
+    protected final double exp10(final double a) {
+        return Math.pow(10.0D, a);
+    }
+
+    @OpenCLMapping(mapTo = "exp10")
+    protected final float exp10(final float a) {
+        return (float)(Math.pow(10.0D, a));
+    }
+
+    @OpenCLMapping(mapTo = "expm1")
+    protected final double expm1(final double x) {
+        return Math.expm1(x);
+    }
+
+    @OpenCLMapping(mapTo = "expm1")
+    protected final float expm1(final float x) {
+        return (float)(Math.expm1(x));
+    }
+
+    @OpenCLMapping(mapTo = "log2")
+    protected final double log2(final double a) {
+        return log(a) * LOG_2_RECIPROCAL;
+    }
+
+    @OpenCLMapping(mapTo = "log2")
+    protected final float log2(final float a) {
+        return (float)(log(a) * LOG_2_RECIPROCAL);
+    }
+
+    @OpenCLMapping(mapTo = "log10")
+    protected final double log10(final double a) {
+        return Math.log10(a);
+    }
+
+    @OpenCLMapping(mapTo = "log10")
+    protected final float log10(final float a) {
+        return (float)(Math.log10(a));
+    }
+
+    @OpenCLMapping(mapTo = "log1p")
+    protected final double log1p(final double x) {
+        return Math.log1p(x);
+    }
+
+    @OpenCLMapping(mapTo = "log1p")
+    protected final float log1p(final float x) {
+        return (float)(Math.log1p(x));
+    }
+
+    @OpenCLMapping(mapTo = "mad")
+    protected final double mad(final double a, final double b, final double c) {
+        return a * b + c;
+    }
+
+    @OpenCLMapping(mapTo = "mad")
+    protected final float mad(final float a, final float b, final float c) {
+        return a * b + c;
+    }
+
+    @OpenCLMapping(mapTo = "nextafter")
+    protected final double nextAfter(final double start, final double direction) {
+        return Math.nextAfter(start, direction);
+    }
+
+    @OpenCLMapping(mapTo = "nextafter")
+    protected final float nextAfter(final float start, final float direction) {
+        return (float)(Math.nextAfter(start, direction));
+    }
+
+    @OpenCLMapping(mapTo = "sinh")
+    protected final double sinh(final double x) {
+        return Math.sinh(x);
+    }
+
+    @OpenCLMapping(mapTo = "sinh")
+    protected final float sinh(final float x) {
+        return (float)(Math.sinh(x));
+    }
+
+    @OpenCLMapping(mapTo = "sinpi")
+    protected final double sinpi(final double a) {
+        return Math.sin(a * Math.PI);
+    }
+
+    @OpenCLMapping(mapTo = "sinpi")
+    protected final float sinpi(final float a) {
+        return (float)(Math.sin(a * Math.PI));
+    }
+
+    @OpenCLMapping(mapTo = "tanh")
+    protected final double tanh(final double x) {
+        return Math.tanh(x);
+    }
+
+    @OpenCLMapping(mapTo = "tanh")
+    protected final float tanh(final float x) {
+        return (float)(Math.tanh(x));
+    }
+
+    @OpenCLMapping(mapTo = "tanpi")
+    protected final double tanpi(final double a) {
+        return Math.tan(a * Math.PI);
+    }
+
+    @OpenCLMapping(mapTo = "tanpi")
+    protected final float tanpi(final float a) {
+        return (float)(Math.tan(a * Math.PI));
+    }
+
    // the following rsqrt and native_sqrt and native_rsqrt don't exist in java Math
    // but added them here for nbody testing, not sure if we want to expose them
    /**
-- 
GitLab