List of usage examples for org.objectweb.asm.commons GeneratorAdapter math
public void math(final int op, final Type type)
From source file:io.datakernel.codegen.ExpressionFor.java
License:Apache License
@Override public Type load(Context ctx) { GeneratorAdapter g = ctx.getGeneratorAdapter(); Label labelLoop = new Label(); Label labelExit = new Label(); VarLocal len = newLocal(ctx, Type.INT_TYPE); add(length, start).load(ctx);/*from w ww. j ava 2 s . c om*/ len.store(ctx); start.load(ctx); VarLocal varPosition = newLocal(ctx, Type.INT_TYPE); varPosition.store(ctx); g.mark(labelLoop); varPosition.load(ctx); len.load(ctx); g.ifCmp(Type.INT_TYPE, GeneratorAdapter.GE, labelExit); this.forVar.forVar(varPosition).load(ctx); varPosition.load(ctx); g.push(1); g.math(GeneratorAdapter.ADD, Type.INT_TYPE); varPosition.store(ctx); g.goTo(labelLoop); g.mark(labelExit); return Type.VOID_TYPE; }
From source file:io.datakernel.codegen.ExpressionHash.java
License:Apache License
@Override public Type load(Context ctx) { GeneratorAdapter g = ctx.getGeneratorAdapter(); int resultVar = g.newLocal(INT_TYPE); boolean firstIteration = true; for (Expression argument : this.arguments) { if (firstIteration) { g.push(0);//from w w w .j a v a2 s .co m firstIteration = false; } else { g.push(31); g.loadLocal(resultVar); g.math(IMUL, INT_TYPE); } Type fieldType = argument.load(ctx); if (isPrimitiveType(fieldType)) { if (fieldType.getSort() == Type.LONG) { g.dup2(); g.push(32); g.visitInsn(LUSHR); g.visitInsn(LXOR); g.visitInsn(L2I); } if (fieldType.getSort() == Type.FLOAT) { g.invokeStatic(getType(Float.class), getMethod("int floatToRawIntBits (float)")); } if (fieldType.getSort() == Type.DOUBLE) { g.invokeStatic(getType(Double.class), getMethod("long doubleToRawLongBits (double)")); g.dup2(); g.push(32); g.visitInsn(LUSHR); g.visitInsn(LXOR); g.visitInsn(L2I); } g.visitInsn(IADD); } else { int tmpVar = g.newLocal(fieldType); g.storeLocal(tmpVar); g.loadLocal(tmpVar); Label ifNullLabel = g.newLabel(); g.ifNull(ifNullLabel); g.loadLocal(tmpVar); g.invokeVirtual(fieldType, getMethod("int hashCode()")); g.visitInsn(IADD); g.mark(ifNullLabel); } g.storeLocal(resultVar); } if (firstIteration) { g.push(0); } else { g.loadLocal(resultVar); } return INT_TYPE; }
From source file:io.datakernel.codegen.ExpressionNeg.java
License:Apache License
@Override public Type load(Context ctx) { GeneratorAdapter g = ctx.getGeneratorAdapter(); int sort = arg.type(ctx).getSort(); arg.load(ctx);//from w w w.j av a 2 s . c o m if (sort == Type.DOUBLE || sort == Type.FLOAT || sort == Type.LONG || sort == Type.INT) { g.math(GeneratorAdapter.NEG, arg.type(ctx)); return arg.type(ctx); } if (sort == Type.BYTE || sort == Type.SHORT || sort == Type.CHAR) { g.cast(arg.type(ctx), INT_TYPE); g.math(GeneratorAdapter.NEG, INT_TYPE); return arg.type(ctx); } if (sort == Type.BOOLEAN) { Label labelTrue = new Label(); Label labelExit = new Label(); g.push(true); g.ifCmp(BOOLEAN_TYPE, GeneratorAdapter.EQ, labelTrue); g.push(true); g.goTo(labelExit); g.mark(labelTrue); g.push(false); g.mark(labelExit); return INT_TYPE; } throw new RuntimeException(format("%s is not primitive. %s", getJavaType(ctx.getClassLoader(), arg.type(ctx)), exceptionInGeneratedClass(ctx))); }