示例#1
0
        public IEnumerable <IXILMapping> TryMap(ITransactionSite taSite, XILInstr instr, TypeDescriptor[] operandTypes, TypeDescriptor[] resultTypes)
        {
            var    fu     = taSite.Host;
            Slicer slicer = fu as Slicer;

            if (slicer == null)
            {
                yield break;
            }

            bool isSigned;
            int  inputWidth, hiOffset, loOffset;

            if (!GetSliceParams(instr, operandTypes, resultTypes, out isSigned, out inputWidth, out hiOffset, out loOffset))
            {
                yield break;
            }

            if (slicer.IsSigned != isSigned)
            {
                yield break;
            }

            if (slicer.InputWidth != inputWidth)
            {
                yield break;
            }

            if (hiOffset != slicer.HiOffset || loOffset != slicer.LoOffset)
            {
                yield break;
            }

            yield return(new SlicerXILMapping(slicer));
        }
示例#2
0
        public IXILMapping TryAllocate(Component host, XILInstr instr, TypeDescriptor[] operandTypes, TypeDescriptor[] resultTypes, IProject proj)
        {
            bool isSigned;
            int  inputWidth, hiOffset, loOffset;

            if (!GetSliceParams(instr, operandTypes, resultTypes, out isSigned, out inputWidth, out hiOffset, out loOffset))
            {
                return(null);
            }

            if (inputWidth == 0 || (hiOffset - loOffset + 1) <= 0)
            {
                return(null);
            }

            var slicer = new Slicer(inputWidth, hiOffset, loOffset, isSigned);

            return(new SlicerXILMapping(slicer));
        }
示例#3
0
 public SlicerTransactionSite(Slicer host) :
     base(host)
 {
     _host = host;
 }
示例#4
0
        public IXILMapping TryAllocate(Component host, XILInstr instr, TypeDescriptor[] operandTypes, TypeDescriptor[] resultTypes, IProject proj)
        {
            bool isSigned;
            int inputWidth, hiOffset, loOffset;
            if (!GetSliceParams(instr, operandTypes, resultTypes, out isSigned, out inputWidth, out hiOffset, out loOffset))
                return null;

            if (inputWidth == 0 || (hiOffset - loOffset + 1) <= 0)
                return null;

            var slicer = new Slicer(inputWidth, hiOffset, loOffset, isSigned);

            return new SlicerXILMapping(slicer);
        }
示例#5
0
 public SlicerXILMapping(Slicer host)
 {
     _host = host;
 }
示例#6
0
 public SlicerTransactionSite(Slicer host) :
     base(host)
 {
     _host = host;
 }
示例#7
0
 public SlicerXILMapping(Slicer host)
 {
     _host = host;
 }