case xor:
stack[++stackPos] = fixOp(b ^ a, fi.arg1);
break;
case isFallingEdge: {
final int off = fi.arg1;
final EncapsulatedAccess access = getInternal(off, arrayPos);
arrayPos = -1;
if (access.skip(deltaCycle, epsCycle)) {
if (listener != null) {
listener.skippingHandledEdge(uniqueID, access.ii, false, this);
}
return;
}
final long curr = access.getDataLong();
final EncapsulatedAccess prevAcc = internals_prev[off];
prevAcc.offset = access.offset;
final long prev = prevAcc.getDataLong();
if ((prev != 1) || (curr != 0)) {
if (listener != null) {
listener.skippingNotAnEdge(uniqueID, access.ii, false, this);
}
return;
}
access.setLastUpdate(deltaCycle, epsCycle);
break;
}
case isRisingEdge: {
final int off = fi.arg1;
final EncapsulatedAccess access = getInternal(off, arrayPos);
arrayPos = -1;
if (access.skip(deltaCycle, epsCycle)) {
if (listener != null) {
listener.skippingHandledEdge(uniqueID, access.ii, true, this);
}
return;
}
final long curr = access.getDataLong();
final EncapsulatedAccess prevAcc = internals_prev[off];
prevAcc.offset = access.offset;
final long prev = prevAcc.getDataLong();
if ((prev != 0) || (curr != 1)) {
if (listener != null) {
listener.skippingNotAnEdge(uniqueID, access.ii, true, this);
}
return;
}
access.setLastUpdate(deltaCycle, epsCycle);
break;
}
case posPredicate: {
final int off = fi.arg1;
final EncapsulatedAccess access = getInternal(off, arrayPos);
arrayPos = -1;
// If data is not from this deltaCycle it was not
// updated that means prior predicates failed
if (!access.isFresh(deltaCycle, epsCycle)) {
if (listener != null) {
listener.skippingPredicateNotFresh(uniqueID, access.ii, true, this);
}
return;
}
if (access.getDataLong() == 0) {
if (listener != null) {
listener.skippingPredicateNotMet(uniqueID, access.ii, true, access.getDataBig(), this);
}
return;
}
break;
}
case negPredicate: {
final int off = fi.arg1;
final EncapsulatedAccess access = getInternal(off, arrayPos);
arrayPos = -1;
// If data is not from this deltaCycle it was not
// updated that means prior predicates failed
if (!access.isFresh(deltaCycle, epsCycle)) {
if (listener != null) {
listener.skippingPredicateNotFresh(uniqueID, access.ii, false, this);
}
return;
}
if (access.getDataLong() != 0) {
if (listener != null) {
listener.skippingPredicateNotMet(uniqueID, access.ii, false, access.getDataBig(), this);
}
return;
}
break;
}
case pushAddIndex:
writeIndex[++arrayPos] = (int) a;
break;
case writeInternal:
final int off = fi.arg1;
final EncapsulatedAccess access = getInternal(off, -1);
access.fillDataLong(arrayPos, writeIndex, a, deltaCycle, epsCycle);
if (listener != null) {
listener.writeInternal(uniqueID, arrayPos, writeIndex, BigInteger.valueOf(a), access.ii, this);
}
arrayPos = -1;
break;