コード例 #1
0
ファイル: CSharpGenerator.cs プロジェクト: hahoyer/reni.cs
 void IVisitor.BitCast(Size size, Size targetSize, Size significantSize)
     => AddCode
         (
             "data.Push(data.Pull({0}).BitCast({1}).BitCast({2}))",
             targetSize.SaveByteCount,
             significantSize.ToInt(),
             size.ToInt()
         );
コード例 #2
0
ファイル: FormalMaschine.cs プロジェクト: hahoyer/reni.cs
 internal FormalMachine(Size dataSize)
 {
     _startAddress = dataSize;
     _data = new FormalValueAccess[dataSize.ToInt()];
     _points = new FormalPointer[dataSize.ToInt() + 1];
 }
コード例 #3
0
ファイル: FormalMaschine.cs プロジェクト: hahoyer/reni.cs
 void SetFormalValues(IFormalValue element, int startAddress, Size size)
 {
     var size1 = size.ToInt();
     for(var i = 0; i < size1; i++)
         _data[i + startAddress] = new FormalValueAccess(element, i, size1);
 }
コード例 #4
0
ファイル: FormalMaschine.cs プロジェクト: hahoyer/reni.cs
 void ResetInputValuesOfData(Size inputSize)
 {
     var start = _startAddress.ToInt();
     for(var i = 0; i < inputSize.ToInt(); i++)
         _data[i + start] = null;
 }
コード例 #5
0
ファイル: FormalMaschine.cs プロジェクト: hahoyer/reni.cs
 IFormalValue[] GetInputValuesFromData(Size offset, Size inputSize)
 {
     var accesses = new List<FormalValueAccess>();
     var start = (_startAddress + offset).ToInt();
     for(var i = 0; i < inputSize.ToInt(); i++)
         accesses.Add(_data[i + start]);
     return FormalValueAccess.Transpose(accesses.ToArray());
 }
コード例 #6
0
ファイル: FormalMaschine.cs プロジェクト: hahoyer/reni.cs
 IFormalValue[] GetInputValuesFromFrame(Size offset, Size size)
 {
     var accesses = new List<FormalValueAccess>();
     var start = _frameData.Length + offset.ToInt();
     for(var i = 0; i < size.ToInt(); i++)
         accesses.Add(_frameData[i + start]);
     return FormalValueAccess.Transpose(accesses.ToArray());
 }
コード例 #7
0
ファイル: FormalMaschine.cs プロジェクト: hahoyer/reni.cs
        void AlignFrame(Size offset)
        {
            var minSize = -offset.ToInt();
            if(_frameData.Length >= minSize)
                return;

            var frameData = _frameData;
            var framePoints = _framePoints;

            _frameData = new FormalValueAccess[minSize];
            _framePoints = new FormalPointer[minSize + 1];

            var delta = _frameData.Length - frameData.Length;

            for(var i = 0; i < frameData.Length; i++)
                _frameData[i + delta] = frameData[i];
            for(var i = 0; i < framePoints.Length; i++)
                _framePoints[i + delta] = framePoints[i];
        }
コード例 #8
0
ファイル: FormalMaschine.cs プロジェクト: hahoyer/reni.cs
 IFormalValue CreateValuesInFrame(Size size, Size offset)
 {
     var element = FormalValueAccess.Variable(Names[_nextValue++]);
     var size1 = size.ToInt();
     var start = _frameData.Length + offset.ToInt();
     for(var i = 0; i < size1; i++)
         _frameData[i + start] = new FormalValueAccess(element, i, size1);
     return element;
 }
コード例 #9
0
ファイル: FormalMaschine.cs プロジェクト: hahoyer/reni.cs
 void IVisitor.ReferencePlus(Size right)
 {
     var formalSubValue = PullInputValuesFromData(RefSize).Single();
     var startAddress = _startAddress.ToInt();
     var element = FormalValueAccess.RefPlus(formalSubValue, right.ToInt());
     SetFormalValues(element, startAddress, RefSize);
 }
コード例 #10
0
ファイル: CSharpGenerator.cs プロジェクト: hahoyer/reni.cs
 static string BitCast(Size size, Size dataSize)
 {
     if(size == dataSize)
         return "";
     return $".BitCast({dataSize.ToInt()}).BitCast({size.ToInt()})";
 }
コード例 #11
0
ファイル: BitsConst.cs プロジェクト: hahoyer/reni.cs
 static Size DivideSize(Size left, Size right)
     => Size.Create(DivideSize(left.ToInt(), right.ToInt()));
コード例 #12
0
ファイル: BitsConst.cs プロジェクト: hahoyer/reni.cs
 static Size MultiplySize(Size left, Size right)
     => Size.Create(MultiplySize(left.ToInt(), right.ToInt()));
コード例 #13
0
ファイル: BitsConst.cs プロジェクト: hahoyer/reni.cs
 static Size PlusSize(Size size, Size size1)
     => Size.Create(PlusSize(size.ToInt(), size1.ToInt()));
コード例 #14
0
ファイル: BitsConst.cs プロジェクト: hahoyer/reni.cs
 public BitsConst Divide(BitsConst right, Size size)
 {
     if(!(Marshal.SizeOf(typeof(long)) * 8 >= size.ToInt()))
         Tracer.AssertionFailed
             (
                 @"sizeof(Int64)*8 >= size.ToInt()",
                 () => "right=" + right + ";size=" + size.Dump());
     return Convert(ToInt64() / right.ToInt64()).Resize(size);
 }