diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/writer/KernelWriter.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/writer/KernelWriter.java index 40929ff177dd328fd0121e37393ba7b86f105a78..92ce2fe930cda4a348b1c8b26b42eb0fb5cb19a7 100644 --- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/writer/KernelWriter.java +++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/writer/KernelWriter.java @@ -38,7 +38,6 @@ under those regulations, please refer to the U.S. Bureau of Industry and Securit package com.amd.aparapi.internal.writer; import com.amd.aparapi.*; -import com.amd.aparapi.Kernel; import com.amd.aparapi.internal.exception.*; import com.amd.aparapi.internal.instruction.*; import com.amd.aparapi.internal.instruction.InstructionSet.*; @@ -47,6 +46,7 @@ import com.amd.aparapi.internal.model.ClassModel.AttributePool.*; import com.amd.aparapi.internal.model.ClassModel.AttributePool.RuntimeAnnotationsEntry.*; import com.amd.aparapi.internal.model.ClassModel.*; import com.amd.aparapi.internal.model.ClassModel.ConstantPool.*; + import java.util.*; public abstract class KernelWriter extends BlockWriter{ @@ -195,7 +195,7 @@ public abstract class KernelWriter extends BlockWriter{ if (m != null && m.isGetter()) { getterField = m.getAccessorVariableFieldEntry(); } - if (getterField != null) { + if (getterField != null && isThis(_methodCall.getArg(0))) { String fieldName = getterField.getNameAndTypeEntry().getNameUTF8Entry().getUTF8(); write("this->"); write(fieldName); @@ -258,6 +258,10 @@ public abstract class KernelWriter extends BlockWriter{ } } + private boolean isThis(Instruction instruction) { + return instruction instanceof I_ALOAD_0; + } + public void writePragma(String _name, boolean _enable) { write("#pragma OPENCL EXTENSION " + _name + " : " + (_enable ? "en" : "dis") + "able"); newLine(); @@ -306,7 +310,7 @@ public abstract class KernelWriter extends BlockWriter{ throw new CodeGenException(e); } - if (privateMemorySize != null) { + if (privateMemorySize != null) { type = __private; } final RuntimeAnnotationsEntry visibleAnnotations = field.getAttributePool().getRuntimeVisibleAnnotationsEntry(); @@ -387,11 +391,9 @@ public abstract class KernelWriter extends BlockWriter{ final StringBuilder lenStructLine = new StringBuilder(); final StringBuilder lenArgLine = new StringBuilder(); final StringBuilder lenAssignLine = new StringBuilder(); - final StringBuilder dimStructLine = new StringBuilder(); - final StringBuilder dimArgLine = new StringBuilder(); - final StringBuilder dimAssignLine = new StringBuilder(); - String lenName = field.getName() + BlockWriter.arrayLengthMangleSuffix + Integer.toString(i); + String suffix = numDimensions == 1 ? "" : Integer.toString(i); + String lenName = field.getName() + BlockWriter.arrayLengthMangleSuffix + suffix; lenStructLine.append("int " + lenName); @@ -406,20 +408,25 @@ public abstract class KernelWriter extends BlockWriter{ argLines.add(lenArgLine.toString()); thisStruct.add(lenStructLine.toString()); - String dimName = field.getName() + BlockWriter.arrayDimMangleSuffix + Integer.toString(i); + if (numDimensions > 1) { + final StringBuilder dimStructLine = new StringBuilder(); + final StringBuilder dimArgLine = new StringBuilder(); + final StringBuilder dimAssignLine = new StringBuilder(); + String dimName = field.getName() + BlockWriter.arrayDimMangleSuffix + suffix; - dimStructLine.append("int " + dimName); + dimStructLine.append("int " + dimName); - dimAssignLine.append("this->"); - dimAssignLine.append(dimName); - dimAssignLine.append(" = "); - dimAssignLine.append(dimName); + dimAssignLine.append("this->"); + dimAssignLine.append(dimName); + dimAssignLine.append(" = "); + dimAssignLine.append(dimName); - dimArgLine.append("int " + dimName); + dimArgLine.append("int " + dimName); - assigns.add(dimAssignLine.toString()); - argLines.add(dimArgLine.toString()); - thisStruct.add(dimStructLine.toString()); + assigns.add(dimAssignLine.toString()); + argLines.add(dimArgLine.toString()); + thisStruct.add(dimStructLine.toString()); + } } } }