Exemple #1
0
 public Avr8CallingConvention(IProcessorArchitecture arch)
 {
     this.arch    = arch;
     this.argRegs = (from reg in arch.GetRegisters()
                     where 8 <= reg.Number && reg.Number <= 26
                     orderby reg.Number
                     select reg).ToArray();
 }
Exemple #2
0
            public override void InitializeBlockFlow(Block block, ProgramDataFlow flow, bool isExitBlock)
            {
                BlockFlow bf = flow[block];

                if (isExitBlock && block.Procedure.Signature.ParametersValid)
                {
                    Identifier ret = block.Procedure.Signature.ReturnValue;
                    if (ret != null)
                    {
                        RegisterStorage rs = ret.Storage as RegisterStorage;
                        if (rs != null)
                        {
                            bf.DataOut.UnionWith(arch.GetAliases(rs));
                        }
                    }
                    foreach (Identifier id in block.Procedure.Signature.Parameters)
                    {
                        OutArgumentStorage os = id.Storage as OutArgumentStorage;
                        if (os == null)
                        {
                            continue;
                        }
                        RegisterStorage rs = os.OriginalIdentifier.Storage as RegisterStorage;
                        if (rs != null)
                        {
                            bf.DataOut.UnionWith(arch.GetAliases(rs));
                        }
                    }
                }
                else if (bf.TerminatesProcess)
                {
                    bf.DataOut.Clear();
                }
                else
                {
                    bf.DataOut.Clear();
                    if (isExitBlock)
                    {
                        //Add all registers except preserved registers
                        bf.DataOut.UnionWith(arch.GetRegisters());
                        bf.DataOut.ExceptWith(flow[block.Procedure].PreservedRegisters);
                    }
                }
            }