List of usage examples for org.objectweb.asm.commons GeneratorAdapter dup2
public void dup2()
From source file:com.changingbits.Builder.java
License:Apache License
private void buildCounterAsm(GeneratorAdapter gen, Node node, boolean sawOutputs) { sawOutputs |= node.outputs != null;//ww w . j a v a2 s. c o m if (node.left != null) { assert node.left.end + 1 == node.right.start; // Recurse on either left or right Label labelLeft = new Label(); Label labelEnd = new Label(); gen.loadArg(0); gen.push(node.left.end); gen.ifCmp(Type.LONG_TYPE, GeneratorAdapter.LE, labelLeft); buildCounterAsm(gen, node.right, sawOutputs); gen.goTo(labelEnd); gen.visitLabel(labelLeft); buildCounterAsm(gen, node.left, sawOutputs); gen.visitLabel(labelEnd); } else if (sawOutputs) { // leaf: elementaryCounts[node.leafIndex]++ gen.loadThis(); gen.getField(BASE_LONG_RANGE_COUNTER_TYPE, "elementaryCounts", INT_ARRAY_TYPE); gen.push(node.leafIndex); gen.dup2(); gen.arrayLoad(Type.INT_TYPE); gen.push(1); gen.visitInsn(Opcodes.IADD); gen.arrayStore(Type.INT_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);//w w w.j a v a2s . c o 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; }