List of usage examples for org.objectweb.asm Opcodes IF_ICMPNE
int IF_ICMPNE
To view the source code for org.objectweb.asm Opcodes IF_ICMPNE.
Click Source Link
From source file:com.offbynull.coroutines.instrumenter.asm.InstructionUtils.java
License:Open Source License
/** * Compares two integers and performs some action if the integers are equal. * @param lhs left hand side instruction list -- must leave an int on top of the stack * @param rhs right hand side instruction list -- must leave an int on top of the stack * @param action action to perform if results of {@code lhs} and {@code rhs} are equal * @return instructions instruction list to perform some action if two ints are equal * @throws NullPointerException if any argument is {@code null} *///from w ww . java 2 s. c om public static InsnList ifIntegersEqual(InsnList lhs, InsnList rhs, InsnList action) { Validate.notNull(lhs); Validate.notNull(rhs); Validate.notNull(action); InsnList ret = new InsnList(); LabelNode notEqualLabelNode = new LabelNode(); ret.add(lhs); ret.add(rhs); ret.add(new JumpInsnNode(Opcodes.IF_ICMPNE, notEqualLabelNode)); ret.add(action); ret.add(notEqualLabelNode); return ret; }
From source file:com.retroduction.carma.transformer.asm.ror.IF_ICMPEQ_2_IF_ICMPNE_Transition.java
License:Open Source License
public IF_ICMPEQ_2_IF_ICMPNE_Transition() { super(); this.sourceInstruction = Opcodes.IF_ICMPEQ; this.targetInstruction = Opcodes.IF_ICMPNE; }
From source file:com.retroduction.carma.transformer.asm.ror.IF_ICMPNE_2_IF_ICMPEQ_Transition.java
License:Open Source License
public IF_ICMPNE_2_IF_ICMPEQ_Transition() { super(); this.sourceInstruction = Opcodes.IF_ICMPNE; this.targetInstruction = Opcodes.IF_ICMPEQ; }
From source file:com.trigersoft.jaque.expression.ExpressionMethodVisitor.java
License:Apache License
@Override public void visitJumpInsn(int opcode, Label label) { int etype;//from w w w. j a va 2 s . c om switch (opcode) { case Opcodes.GOTO: go(label); return; default: case Opcodes.JSR: throw notLambda(opcode); case Opcodes.IFEQ: etype = ExpressionType.NotEqual; // Equal pushZeroConstantOrReduce(); break; case Opcodes.IFNE: etype = ExpressionType.Equal; // NotEqual pushZeroConstantOrReduce(); break; case Opcodes.IFLT: etype = ExpressionType.GreaterThanOrEqual; // LessThan pushZeroConstantOrReduce(); break; case Opcodes.IFGE: etype = ExpressionType.LessThan; // GreaterThanOrEqual pushZeroConstantOrReduce(); break; case Opcodes.IFGT: etype = ExpressionType.LessThanOrEqual; // GreaterThan pushZeroConstantOrReduce(); break; case Opcodes.IFLE: etype = ExpressionType.GreaterThan; // LessThanOrEqual pushZeroConstantOrReduce(); break; case Opcodes.IF_ICMPEQ: case Opcodes.IF_ACMPEQ: // ?? etype = ExpressionType.NotEqual; // Equal break; case Opcodes.IF_ICMPNE: case Opcodes.IF_ACMPNE: // ?? etype = ExpressionType.Equal; // NotEqual break; case Opcodes.IF_ICMPLT: etype = ExpressionType.GreaterThanOrEqual; // LessThan break; case Opcodes.IF_ICMPGE: etype = ExpressionType.LessThan; // GreaterThanOrEqual break; case Opcodes.IF_ICMPGT: etype = ExpressionType.LessThanOrEqual; // GreaterThan break; case Opcodes.IF_ICMPLE: etype = ExpressionType.GreaterThan; // LessThanOrEqual break; case Opcodes.IFNULL: case Opcodes.IFNONNULL: Expression e = Expression.isNull(_exprStack.pop()); if (opcode == Opcodes.IFNULL) // IFNONNULL e = Expression.logicalNot(e); branch(label, e); return; } Expression second = _exprStack.pop(); Expression first = _exprStack.pop(); Expression e = Expression.binary(etype, first, second); branch(label, e); }
From source file:de.codesourcery.asm.util.ASMUtil.java
License:Apache License
/** * Check whether an instruction is a conditional branch operation. * //from w w w.j a va2 s . c o m * @param node * @return */ public static boolean isConditionalJump(AbstractInsnNode node) { if (node.getType() == AbstractInsnNode.JUMP_INSN) { switch (node.getOpcode()) { case Opcodes.IFEQ: case Opcodes.IFNE: case Opcodes.IFLT: case Opcodes.IFGE: case Opcodes.IFGT: case Opcodes.IFLE: case Opcodes.IF_ICMPEQ: case Opcodes.IF_ICMPNE: case Opcodes.IF_ICMPLT: case Opcodes.IF_ICMPGE: case Opcodes.IF_ICMPGT: case Opcodes.IF_ICMPLE: case Opcodes.IF_ACMPEQ: case Opcodes.IF_ACMPNE: case Opcodes.IFNULL: case Opcodes.IFNONNULL: return true; } } return false; }
From source file:de.scoopgmbh.copper.instrument.BuildStackInfoAdapter.java
License:Apache License
@Override public void visitJumpInsn(int arg0, Label arg1) { savePreviousFrame();/*from w ww .j a v a 2 s.c o m*/ switch (arg0) { case Opcodes.IF_ACMPEQ: case Opcodes.IF_ACMPNE: case Opcodes.IF_ICMPEQ: case Opcodes.IF_ICMPGE: case Opcodes.IF_ICMPGT: case Opcodes.IF_ICMPLE: case Opcodes.IF_ICMPLT: case Opcodes.IF_ICMPNE: currentFrame.popStack(); case Opcodes.IFEQ: case Opcodes.IFGE: case Opcodes.IFGT: case Opcodes.IFLE: case Opcodes.IFLT: case Opcodes.IFNE: case Opcodes.IFNONNULL: case Opcodes.IFNULL: currentFrame.popStack(); case Opcodes.GOTO: forwardFrames.put(arg1, new StackInfo(currentFrame)); break; case Opcodes.JSR: currentFrame.pushStack(retAddressType); forwardFrames.put(arg1, new StackInfo(currentFrame)); break; default: logger.debug("Unhandled: "); } if (logger.isDebugEnabled()) logger.debug("jumpInsn " + getOpCode(arg0) + " " + arg1); delegate.visitJumpInsn(arg0, arg1); }
From source file:de.tuberlin.uebb.jbop.optimizer.controlflow.ConstantIfInliner.java
License:Open Source License
private boolean evalTwoOpValue(final Number op1, final Number op2, final int opcode) { switch (opcode) { case Opcodes.IF_ICMPEQ: return op1.intValue() == op2.intValue(); case Opcodes.IF_ICMPNE: return op1.intValue() != op2.intValue(); case Opcodes.IF_ICMPLT: return op1.intValue() < op2.intValue(); case Opcodes.IF_ICMPGE: return op1.intValue() >= op2.intValue(); case Opcodes.IF_ICMPGT: return op1.intValue() > op2.intValue(); case Opcodes.IF_ICMPLE: return op1.intValue() <= op2.intValue(); case Opcodes.IF_ACMPEQ: return op1 == op2; case Opcodes.IF_ACMPNE: return op1 != op2; default://w ww . ja va 2 s . com return false; } }
From source file:de.tuberlin.uebb.jbop.optimizer.controlflow.ConstantIfInlinerTest.java
License:Open Source License
/** * Tests that constantIfInliner is working correctly. * /*from w w w . j a v a2 s . com*/ * Input is * * <pre> * if(1==1) * ... * </pre> * * @throws JBOPClassException * the jBOP class exception */ @Test public void testConstantIfInlinerIF_ICMPNE() throws JBOPClassException { // INIT final LabelNode label = new LabelNode(); builder.addInsn(new InsnNode(Opcodes.ICONST_1)).// addInsn(new InsnNode(Opcodes.ICONST_1)).// addInsn(new JumpInsnNode(Opcodes.IF_ICMPNE, label)).// addInsn(new InsnNode(Opcodes.NOP)).// addInsn(label).// addInsn(new InsnNode(Opcodes.RETURN)); // RUN assertEquals(6, method.instructions.size()); final InsnList optimized = constantIfInliner.optimize(method.instructions, method); // ASSERT assertEquals(3, optimized.size()); assertEquals(Opcodes.NOP, optimized.get(0).getOpcode()); }
From source file:de.tuberlin.uebb.jbop.optimizer.loop.ForLoop.java
License:Open Source License
private boolean eval(final int i, final int loopCount, final int ifNode) { if (ifNode == Opcodes.IF_ICMPLE) { return i <= loopCount; }//from w w w . java 2 s. c om if (ifNode == Opcodes.IF_ICMPEQ) { return i == loopCount; } if (ifNode == Opcodes.IF_ICMPGE) { return i >= loopCount; } if (ifNode == Opcodes.IF_ICMPGT) { return i > loopCount; } if (ifNode == Opcodes.IF_ICMPLT) { return i < loopCount; } if (ifNode == Opcodes.IF_ICMPNE) { return i != loopCount; } if (ifNode == Opcodes.IFGE) { return i >= 0; } if (ifNode == Opcodes.IFEQ) { return i == 0; } if (ifNode == Opcodes.IFGT) { return i > 0; } if (ifNode == Opcodes.IFLE) { return i <= 0; } if (ifNode == Opcodes.IFLT) { return i < 0; } if (ifNode == Opcodes.IFNE) { return i != 0; } return false; }
From source file:de.unisb.cs.st.javaslicer.common.classRepresentation.instructions.JumpInstruction.java
License:Open Source License
@Override public String toString() { String condition;//from w ww .j a v a2 s . co m switch (getOpcode()) { case Opcodes.IFEQ: condition = "IFEQ"; break; case Opcodes.IFNE: condition = "IFNE"; break; case Opcodes.IFLT: condition = "IFLT"; break; case Opcodes.IFGE: condition = "IFGE"; break; case Opcodes.IFGT: condition = "IFGT"; break; case Opcodes.IFLE: condition = "IFLE"; break; case Opcodes.IF_ICMPEQ: condition = "IF_ICMPEQ"; break; case Opcodes.IF_ICMPNE: condition = "IF_ICMPNE"; break; case Opcodes.IF_ICMPLT: condition = "IF_ICMPLT"; break; case Opcodes.IF_ICMPGE: condition = "IF_ICMPGE"; break; case Opcodes.IF_ICMPGT: condition = "IF_ICMPGT"; break; case Opcodes.IF_ICMPLE: condition = "IF_ICMPLE"; break; case Opcodes.IF_ACMPEQ: condition = "IF_ACMPEQ"; break; case Opcodes.IF_ACMPNE: condition = "IF_ACMPNE"; break; case Opcodes.GOTO: condition = "GOTO"; break; case Opcodes.JSR: condition = "JSR"; break; case Opcodes.IFNULL: condition = "IFNULL"; break; case Opcodes.IFNONNULL: condition = "IFNONNULL"; break; default: assert false; condition = "--ERROR--"; break; } return condition + " " + this.label; }