From c6c6e44978d8020ec39dbdd3933bb94f9d75aaeb Mon Sep 17 00:00:00 2001
From: Gary Frost <frost.gary@gmail.com>
Date: Thu, 3 Nov 2011 15:45:36 +0000
Subject: [PATCH] Committed patch from kenneth@hexad.dk which added support for
 NAN and INFINITY mappings between Java and OpenCL

---
 CREDITS.txt                                   |  1 +
 .../src/java/com/amd/aparapi/BlockWriter.java | 37 ++++++++++++++++---
 2 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/CREDITS.txt b/CREDITS.txt
index 8187186f..f2756caf 100644
--- a/CREDITS.txt
+++ b/CREDITS.txt
@@ -5,6 +5,7 @@ We discourage including attribution as comments in the code, instead we intend t
 Aparapi Contributors.  Thanks to all. 
 
 Witold Bolt provided patch for issue #5. Added and tested Mac OS support. Oct 12th 2011 
+kenneth@hexad.dk provided patch for issue #11 (correcting conversion of Java Nan and Infinity values to OpenCL equiv). Oct 28th 2011
 
   
 
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/BlockWriter.java b/com.amd.aparapi/src/java/com/amd/aparapi/BlockWriter.java
index e46728b7..d37ea95b 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/BlockWriter.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/BlockWriter.java
@@ -442,12 +442,39 @@ abstract class BlockWriter{
       } else if (_instruction instanceof Constant<?>) {
          Constant<?> constantInstruction = (Constant<?>) _instruction;
          Object value = constantInstruction.getValue();
-         write(value.toString());
+
          if (value instanceof Float) {
-            write("f");
-         }
-         if (value instanceof Long) {
-            write("L");
+
+            Float f = (Float) value;
+            if (f.isNaN()) {
+               write("NAN");
+            } else if (f.isInfinite()) {
+               if (f < 0){
+                  write("-");
+               }
+               write("INFINITY");
+            } else {
+               write(value.toString());
+               write("f");
+            }
+         } else if (value instanceof Double) {
+
+            Double d = (Double) value;
+            if (d.isNaN()) {
+               write("NAN");
+            } else if (d.isInfinite()) {
+               if (d < 0){
+                  write("-");
+               }
+               write("INFINITY");
+            } else {
+               write(value.toString());
+            }
+         } else {
+            write(value.toString());
+            if (value instanceof Long) {
+               write("L");
+            }
          }
 
       } else if (_instruction instanceof AccessLocalVariable) {
-- 
GitLab