X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fconstants%2FJavaComparisonToZeroOperation.java;h=058faf9c349ccaea8b8af8403a029d53d141867c;hp=e5a58bb77cb44d5b9bfd1cd2fd52a7d43a0351ba;hb=a8758de5bc19e5adb3f618d3038743a164f09912;hpb=12d9af17384d960b75d58c3935d2b7b46d93e87b diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/constants/JavaComparisonToZeroOperation.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/constants/JavaComparisonToZeroOperation.java index e5a58bb77..058faf9c3 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/constants/JavaComparisonToZeroOperation.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/constants/JavaComparisonToZeroOperation.java @@ -1,13 +1,20 @@ package org.simantics.scl.compiler.constants; import org.objectweb.asm.Label; +import org.simantics.scl.compiler.internal.codegen.continuations.Cont; import org.simantics.scl.compiler.internal.codegen.references.Val; import org.simantics.scl.compiler.internal.codegen.utils.MethodBuilder; import org.simantics.scl.compiler.types.TVar; import org.simantics.scl.compiler.types.Type; import org.simantics.scl.compiler.types.Types; -public class JavaComparisonToZeroOperation extends FunctionValue { +public class JavaComparisonToZeroOperation extends FunctionValue implements ComparisonFunction { + public static final JavaComparisonToZeroOperation IEQUAL = new JavaComparisonToZeroOperation("=="); + public static final JavaComparisonToZeroOperation INOT_EQUAL = new JavaComparisonToZeroOperation("!="); + public static final JavaComparisonToZeroOperation ILESS = new JavaComparisonToZeroOperation("<"); + public static final JavaComparisonToZeroOperation ILESS_OR_EQUAL = new JavaComparisonToZeroOperation("<="); + public static final JavaComparisonToZeroOperation IGREATER = new JavaComparisonToZeroOperation(">"); + public static final JavaComparisonToZeroOperation IGREATER_OR_EQUAL = new JavaComparisonToZeroOperation(">="); String op; @@ -34,6 +41,14 @@ public class JavaComparisonToZeroOperation extends FunctionValue { return getReturnType(); } + @Override + public void generateCondition(MethodBuilder mb, Val[] parameters, Cont then_, Cont else_) { + mb.push(parameters[0], Types.INTEGER); + mb.ifZeroComparisonBranch(mb.getLabel(then_), op); + mb.jump(else_); + mb.ensureExists(then_); + } + @Override public String toString() { return op;