diff --git a/src/main/java/com/aparapi/Kernel.java b/src/main/java/com/aparapi/Kernel.java
index f697ff4a202298d391dee7851014a2218b448c4c..72bac0cadcbdae629dc8efd27764feb39a08c805 100644
--- a/src/main/java/com/aparapi/Kernel.java
+++ b/src/main/java/com/aparapi/Kernel.java
@@ -1316,7 +1316,64 @@ public abstract class Kernel implements Cloneable {
       return Math.abs(_f);
    }
 
+
    /**
+    * Delegates to either {@link java.lang.Integer#bitCount(int)} (Java) or <code><a href="https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/popcount.html">popcount(int)</a></code> (OpenCL).
+     *
+     * @param _i value to delegate to {@link java.lang.Integer#bitCount(int)}/<code><a href="https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/popcount.html">popcount(int)</a></code>
+     * @return {@link java.lang.Integer#bitCount(int)}/<code><a href="https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/popcount.html">popcount(int)</a></code>
+     * @see java.lang.Integer#bitCount(int)
+     * @see <code><a href="http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/popcount.html">popcount(int)</a></code>
+     */
+   @OpenCLMapping(mapTo = "popcount")
+   protected int popcount(int _i) {
+      return Integer.bitCount(_i);
+   }
+
+   /**
+    * Delegates to either {@link java.lang.Long#bitCount(long)} (Java) or <code><a href="https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/popcount.html">popcount(long)</a></code> (OpenCL).
+     *
+     * @param _i value to delegate to {@link java.lang.Long#bitCount(long)}/<code><a href="https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/popcount.html">popcount(long)</a></code>
+     * @return {@link java.lang.Long#bitCount(long)}/<code><a href="https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/popcount.html">popcount(long)</a></code>
+     * @see java.lang.Long#bitCount(long)
+     * @see <code><a href="http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/popcount.html">popcount(long)</a></code>
+     */
+   @OpenCLMapping(mapTo = "popcount")
+   protected long popcount(long _i) {
+      return Long.bitCount(_i);
+   }
+
+   /**
+    * Delegates to either {@link java.lang.Integer#numberOfLeadingZeros(int)} (Java) or <code><a href="https://www.khronos.org/registry/OpenCL/sdk/1.1/docs/man/xhtml/clz.html">clz(int)</a></code> (OpenCL).
+     *
+     * @param _i value to delegate to {@link java.lang.Integer#numberOfLeadingZeros(int)}/<code><a href="http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clz.html">clz(int)</a></code>
+     * @return {@link java.lang.Integer#numberOfLeadingZeros(int)}/<code><a href="http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clz.html">clz(int)</a></code>
+     * @see java.lang.Integer#numberOfLeadingZeros(int)
+     * @see <code><a href="http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clz.html">clz(int)</a></code>
+     */
+
+   @OpenCLMapping(mapTo = "clz")
+   protected int clz(int _i) {
+      return Integer.numberOfLeadingZeros(_i);
+   }
+
+
+   /**
+    * Delegates to either {@link java.lang.Long#numberOfLeadingZeros(long)} (Java) or <code><a href="https://www.khronos.org/registry/OpenCL/sdk/1.1/docs/man/xhtml/clz.html">clz(long)</a></code> (OpenCL).
+     *
+     * @param _l value to delegate to {@link java.lang.Long#numberOfLeadingZeros(long)}/<code><a href="http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clz.html">clz(long)</a></code>
+     * @return {@link java.lang.Long#numberOfLeadingZeros(long)}/<code><a href="http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clz.html">clz(long)</a></code>
+     * @see java.lang.Long#numberOfLeadingZeros(long)
+     * @see <code><a href="http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clz.html">clz(long)</a></code>
+     */
+
+
+   @OpenCLMapping(mapTo = "clz")
+   protected long clz(long _l) {
+      return Long.numberOfLeadingZeros(_l);
+   }
+
+    /**
     * Delegates to either {@link java.lang.Math#abs(double)} (Java) or <code><a href="http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/fabs.html">fabs(double)</a></code> (OpenCL).
      *
      * User should note the differences in precision between Java and OpenCL's implementation of arithmetic functions to determine whether the difference in precision is acceptable.
diff --git a/src/test/java/com/aparapi/codegen/test/MathFallThru.java b/src/test/java/com/aparapi/codegen/test/MathFallThru.java
index d6b6875d92e3b5e806b58951020e624294c05ae0..76a2dd893f0c4d62bc8d3225c982d34bccc2618a 100644
--- a/src/test/java/com/aparapi/codegen/test/MathFallThru.java
+++ b/src/test/java/com/aparapi/codegen/test/MathFallThru.java
@@ -19,14 +19,18 @@ import com.aparapi.Kernel;
 
 public class MathFallThru extends Kernel {
 
-    long longout[] = new long[1];
-    int intout[] = new int[1];
+    long longout[] = new long[3];
+    int intout[] = new int[3];
 
     public void run() {
         float f1 = 1.0f;
         double d1 = 1.0;
         longout[0] = round(ceil(cos(exp(floor(log(pow(d1, d1)))))) + tan(sqrt(sin(rint(acos(asin(atan(atan2(d1, d1)))))))));
+        longout[1] = popcount(longout[0]);
+        longout[2] = clz(longout[0]);
         intout[0] = round(ceil(cos(exp(floor(log(pow(f1, f1)))))) + tan(sqrt(sin(rint(acos(asin(atan(atan2(f1, f1)))))))));
+        intout[1] = popcount(intout[0]);
+        intout[2] = clz(intout[0]);
         @SuppressWarnings("unused") boolean pass = false;
     }
 }
@@ -56,7 +60,11 @@ public class MathFallThru extends Kernel {
  float f1 = 1.0f;
  double d1 = 1.0;
  this->longout[0]  = round((ceil(cos(exp(floor(log(pow(d1, d1)))))) + tan(sqrt(sin(rint(acos(asin(atan(atan2(d1, d1))))))))));
+ this->longout[1]  = popcount(this->longout[0]);
+ this->longout[2]  = clz(this->longout[0]);
  this->intout[0]  = round((ceil(cos(exp(floor(log(pow(f1, f1)))))) + tan(sqrt(sin(rint(acos(asin(atan(atan2(f1, f1))))))))));
+ this->intout[1]  = popcount(this->intout[0]);
+ this->intout[2]  = clz(this->intout[0]);
  char pass = 0;
  return;
  }
diff --git a/src/test/java/com/aparapi/codegen/test/MathFallThruTest.java b/src/test/java/com/aparapi/codegen/test/MathFallThruTest.java
index ced44207788fd5b877d9e2ce3b299533493e6788..0c7f28939c0d65816df40d3fcae864051f7b4288 100644
--- a/src/test/java/com/aparapi/codegen/test/MathFallThruTest.java
+++ b/src/test/java/com/aparapi/codegen/test/MathFallThruTest.java
@@ -44,7 +44,11 @@ public class MathFallThruTest extends com.aparapi.codegen.CodeGenJUnitBase {
 " float f1 = 1.0f;\n" +
 " double d1 = 1.0;\n" +
 " this->longout[0]  = round((ceil(cos(exp(floor(log(pow(d1, d1)))))) + tan(sqrt(sin(rint(acos(asin(atan(atan2(d1, d1))))))))));\n" +
+" this->longout[1]  = popcount(this->longout[0]);\n" +
+" this->longout[2]  = clz(this->longout[0]);\n" +
 " this->intout[0]  = round((ceil(cos(exp(floor(log(pow(f1, f1)))))) + tan(sqrt(sin(rint(acos(asin(atan(atan2(f1, f1))))))))));\n" +
+" this->intout[1]  = popcount(this->intout[0]);\n" +
+" this->intout[2]  = clz(this->intout[0]);\n" +
 " char pass = 0;\n" +
 " return;\n" +
 " }\n" +