public bool ReadImpliedAccesses(string line, [NotNullWhen(true)] out ImpliedAccesses?accesses, [NotNullWhen(false)] out string?error) { accesses = null; if (!TryReadImpliedAccesses(line, out var conds, out error)) { return(false); } if (HasSpecialAccWithOtherAcc(conds)) { // They change rflags bits and the runtime code needs to check if it's one of these, see GetRflagsInfo() error = "These can only be used with no other commands: shift-mask=0x1F, shift-mask=0x3F, shift-mask-1F-mod, zero-reg-rflags"; return(false); } var mergedConds = MergeConds(conds); AddReadMemRegs(mergedConds); RemoveDupeStatements(mergedConds); RemoveUselessRegs(mergedConds); mergedConds.Sort((a, b) => a.Kind.CompareTo(b.Kind)); foreach (var cond in mergedConds) { Sort(cond.TrueStatements); Sort(cond.FalseStatements); } accesses = new ImpliedAccesses(mergedConds); return(true); }
public ImpliedAccessesDef(ImpliedAccesses impliedAccesses, EnumValue enumValue) { ImpliedAccesses = impliedAccesses; EnumValue = enumValue; }