diff --git a/CREDITS.txt b/CREDITS.txt index 8187186f9b9733396dfeccc15e512a328a5ce129..f2756caf9f524efb5edd4b960c43be42f61f733e 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 e46728b797189de28aa84da80e66ee2ee6e9813a..d37ea95b79b166d9f5b9d5ffead4a5f2820de904 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) {