@Override public Instruction execute(ThreadInfo th) { StackFrame sf = th.getModifiableTopFrame(); IntegerExpression sym_v1 = (IntegerExpression) sf.getOperandAttr(0); IntegerExpression sym_v2 = (IntegerExpression) sf.getOperandAttr(1); if (sym_v1 == null && sym_v2 == null) return super.execute(th); // we'll still do the concrete execution else { int v1 = sf.pop(); int v2 = sf.pop(); sf.push(0, false); // for symbolic expressions, the concrete value does not matter IntegerExpression result = null; if (sym_v1 != null) { if (sym_v2 != null) result = sym_v1._or(sym_v2); else // v2 is concrete result = sym_v1._or(v2); } else if (sym_v2 != null) result = sym_v2._or(v1); sf.setOperandAttr(result); // System.out.println("Execute IADD: "+result); return getNext(th); } }