Пример #1
0
        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);
        }
Пример #2
0
 public ImpliedAccessesDef(ImpliedAccesses impliedAccesses, EnumValue enumValue)
 {
     ImpliedAccesses = impliedAccesses;
     EnumValue       = enumValue;
 }