use of com.dat3m.dartagnan.expression.IExpr in project Dat3M by hernanponcedeleon.
the class VisitorLitmusAArch64 method visitOffset.
private Register visitOffset(LitmusAArch64Parser.OffsetContext ctx, Register register) {
Register result = programBuilder.getOrCreateRegister(mainThread, null, ARCH_PRECISION);
IExpr expr = ctx.immediate() == null ? programBuilder.getOrErrorRegister(mainThread, ctx.expressionConversion().register32().id) : new IValue(new BigInteger(ctx.immediate().constant().getText()), ARCH_PRECISION);
programBuilder.addChild(mainThread, EventFactory.newLocal(result, new IExprBin(register, IOpBin.PLUS, expr)));
return result;
}
use of com.dat3m.dartagnan.expression.IExpr in project Dat3M by hernanponcedeleon.
the class VisitorLitmusAArch64 method visitExpressionRegister32.
@Override
public IExpr visitExpressionRegister32(LitmusAArch64Parser.ExpressionRegister32Context ctx) {
IExpr expr = programBuilder.getOrCreateRegister(mainThread, ctx.register32().id, ARCH_PRECISION);
if (ctx.shift() != null) {
IValue val = new IValue(new BigInteger(ctx.shift().immediate().constant().getText()), ARCH_PRECISION);
expr = new IExprBin(expr, ctx.shift().shiftOperator().op, val);
}
return expr;
}
use of com.dat3m.dartagnan.expression.IExpr in project Dat3M by hernanponcedeleon.
the class VisitorBase method visitUnlock.
@Override
public List<Event> visitUnlock(Unlock e) {
Register resultRegister = e.getResultRegister();
IExpr address = e.getAddress();
String mo = e.getMo();
List<Event> events = eventSequence(newLoad(resultRegister, address, mo), newJump(new Atom(resultRegister, NEQ, IValue.ONE), (Label) e.getThread().getExit()), newStore(address, IValue.ZERO, mo));
for (Event child : events) {
child.addFilters(C11.LOCK, RMW);
}
return events;
}
Aggregations