コード例 #1
0
ファイル: XS.FPU.cs プロジェクト: Zino2201/Cosmos
      public static void FloatStoreAndPop(Register32 register, bool isIndirect = false, int? displacement = null, RegisterSize? size = null)
      {
        if (displacement != null)
        {
          isIndirect = true;
          if (displacement == 0)
          {
            displacement = null;
          }
        }

        if (size == null)
        {
          if (isIndirect)
          {
            throw new InvalidOperationException("No size specified!");
          }
          size = register.Size;
        }

        new FloatStoreAndPop
        {
          DestinationReg = register.RegEnum,
          DestinationIsIndirect = isIndirect,
          DestinationDisplacement = displacement,
          Size = (byte)size
        };
      }
コード例 #2
0
ファイル: XS.SSE2.cs プロジェクト: Zino2201/Cosmos
 public static void ConvertSD2SIAndTruncate(Register32 destination, RegisterXMM source)
 {
   new ConvertSD2SIAndTruncate
   {
     DestinationReg = destination,
     SourceReg = source
   };
 }
コード例 #3
0
ファイル: XS.SSE2.cs プロジェクト: ChrisJamesSadler/IL2CPU
 public static void MoveSD(Register32 destination, RegisterXMM source, bool destinationIsIndirect = false)
 {
     new MoveSD()
     {
         DestinationReg        = destination,
         DestinationIsIndirect = destinationIsIndirect,
         SourceReg             = source
     };
 }
コード例 #4
0
 public static void MoveSS(RegisterXMM destination, Register32 source, bool sourceIsIndirect = false)
 {
     new MoveSS()
     {
         DestinationReg   = destination,
         SourceReg        = source,
         SourceIsIndirect = sourceIsIndirect
     };
 }
コード例 #5
0
ファイル: XS.SSE3.cs プロジェクト: Zino2201/Cosmos
 public static void MoveDoubleAndDuplicate(RegisterXMM destination, Register32 source, bool sourceIsIndirect = false)
 {
   new MoveDoubleAndDuplicate()
   {
     DestinationReg = destination,
     SourceReg = source,
     SourceIsIndirect = sourceIsIndirect
   };
 }
コード例 #6
0
ファイル: XS.SSE2.cs プロジェクト: Zino2201/Cosmos
  public static void ConvertSD2SS(RegisterXMM destination, Register32 source, bool sourceIsIndirect = false)
  {
    new ConvertSD2SS()
    {
        DestinationReg = destination,
        SourceReg = source,
        SourceIsIndirect = sourceIsIndirect
    };
 }
コード例 #7
0
ファイル: XS.SSE.cs プロジェクト: Zino2201/Cosmos
 public static void MoveSS(Register32 destination, RegisterXMM source, bool destinationIsIndirect = false)
 {
   new MoveSS()
   {
     DestinationReg = destination,
     DestinationIsIndirect = destinationIsIndirect,
     SourceReg = source
   };
 }
コード例 #8
0
 public static void ConvertSS2SD(RegisterXMM destination, Register32 source, bool sourceIsIndirect = false)
 {
     new ConvertSS2SD()
     {
         DestinationReg   = destination,
         SourceReg        = source,
         SourceIsIndirect = sourceIsIndirect
     };
 }
コード例 #9
0
        private static byte GetPrefix(ref Register32 r)
        {
            if (r.Value < 8)
            {
                return(r.Value);
            }

            r = new Register32((byte)(r.Value - 8));
            return(1);
        }
コード例 #10
0
ファイル: XS.SSE.cs プロジェクト: azmisahincom/XSharp
 public static void MoveUPS(Register32 destination, RegisterXMM source, bool destinationIsIndirect = false, Register32 destinationDisplacement = null, bool sourceIsIndirect = false, int?sourceDisplacement = null)
 {
     //DoDestinationSource<MoveUPS>(destination, source, destinationIsIndirect, destinationDisplacement, sourceIsIndirect, sourceDisplacement);
     new MoveUPS()
     {
         DestinationReg          = destination,
         DestinationIsIndirect   = destinationIsIndirect,
         DestinationDisplacement = (int)destinationDisplacement,
         SourceDisplacement      = sourceDisplacement,
         SourceReg = source
     };
 }
コード例 #11
0
ファイル: XS.SSE2.cs プロジェクト: Zino2201/Cosmos
 public static void ConvertSI2SD(RegisterXMM destination, Register32 source, bool sourceIsIndirect = false, int? sourceDisplacement = null, bool destinationIsIndirect = false, int? destinationDisplacement = null)
 {
     new ConvertSI2SD()
     {
        DestinationReg = destination,
        DestinationIsIndirect = destinationIsIndirect,
        DestinationDisplacement = destinationDisplacement,
        SourceReg = source,
        SourceIsIndirect = sourceIsIndirect,
        SourceDisplacement = sourceDisplacement
     };
  }
コード例 #12
0
ファイル: XS.SSE2.cs プロジェクト: ChrisJamesSadler/IL2CPU
 public static void ConvertSI2SD(RegisterXMM destination, Register32 source, bool sourceIsIndirect = false, int?sourceDisplacement = null, bool destinationIsIndirect = false, int?destinationDisplacement = null)
 {
     new ConvertSI2SD()
     {
         DestinationReg          = destination,
         DestinationIsIndirect   = destinationIsIndirect,
         DestinationDisplacement = destinationDisplacement,
         SourceReg          = source,
         SourceIsIndirect   = sourceIsIndirect,
         SourceDisplacement = sourceDisplacement
     };
 }
コード例 #13
0
ファイル: BootstrapCore32.cs プロジェクト: sovr610/PatoSim
        public BootstrapCore32(Architecture architecture)
        {
            Memory      = Factory.CreateDynamicMemory(architecture);
            Register    = new Register32(architecture);
            CsrRegister = Factory.CreateCsrRegister();

            RasStack     = new Stack <uint>();
            Environment  = HartEnvironmentFactory.Build(architecture, Register, Memory, CsrRegister);
            BaseAddres   = 0x100;
            EndianCoding = EndianType.Little;

            InstructionsProcessed = new List <Instruction>();
            InstructionPayloads   = new List <InstructionPayload>();
        }
コード例 #14
0
ファイル: XS.FPU.cs プロジェクト: ChrisJamesSadler/IL2CPU
            public static void IntLoad(Register32 destination, bool isIndirect = false, RegisterSize?size = null)
            {
                if (size == null)
                {
                    if (isIndirect)
                    {
                        throw new InvalidOperationException("No size specified!");
                    }
                    size = destination.Size;
                }

                new IntLoad
                {
                    DestinationReg        = destination,
                    DestinationIsIndirect = isIndirect,
                    Size = (byte)size.Value
                };
            }
コード例 #15
0
ファイル: XS.FPU.cs プロジェクト: Zino2201/Cosmos
      public static void FloatAdd(Register32 destination, bool isIndirect = false, RegisterSize? size = null)
      {
        if (size == null)
        {
          if (isIndirect)
          {
            throw new InvalidOperationException("No size specified!");
          }
          size = destination.Size;
        }

        new FloatAdd
        {
          DestinationReg = destination,
          DestinationIsIndirect = isIndirect,
          Size = (byte)size.Value
        };
      }
コード例 #16
0
        public void EqualityTest(uint value)
        {
            var r1 = new Register32(value);
            var r2 = new Register32(value / 2 - 1);
            var r3 = new Register32(value);

            Assert.True(r1 == r3);
            Assert.True(r1 != r2);
            Assert.True(r2 != r3);

            Assert.True(r1.Equals(r3));
            Assert.False(r1.Equals(r2));
            Assert.False(r2.Equals(r3));

            Assert.True(r1.Equals((object)r3));
            Assert.False(r1.Equals((object)r2));
            Assert.False(r2.Equals((object)r3));

            Assert.Equal(r1.GetHashCode(), r3.GetHashCode());
        }
コード例 #17
0
ファイル: SubClass.cs プロジェクト: Mikholap/UUM32
 public LineIndex(int line, int offest = 0)
 {
     Line   = line;
     Offest = offest;
     reg32  = null;
 }
コード例 #18
0
ファイル: XS.SSE.cs プロジェクト: azmisahincom/XSharp
 public static void MoveUPS(Register32 destination, RegisterXMM source, bool destinationIsIndirect = false, int?destinationDisplacement = null, bool sourceIsIndirect = false, int?sourceDisplacement = null)
 {
     DoDestinationSource <MoveUPS>(destination, source, destinationIsIndirect, destinationDisplacement, sourceIsIndirect, sourceDisplacement);
 }
コード例 #19
0
        public void ToStringTest(uint value)
        {
            var r = new Register32(value);

            Assert.Equal($"{r.Value}", r.ToString());
        }
コード例 #20
0
ファイル: XS.FPU.cs プロジェクト: Zino2201/Cosmos
 public static void FloatLoad(Register32 register, bool destinationIsIndirect = false, int? displacement = null, RegisterSize? size = null)
 {
   Do<FloatLoad>(register, isIndirect: destinationIsIndirect, displacement: displacement, size: size);
 }
コード例 #21
0
ファイル: XS.FPU.cs プロジェクト: ChrisJamesSadler/IL2CPU
 public static void FloatLoad(Register32 register, bool destinationIsIndirect = false, int?displacement = null, RegisterSize?size = null)
 {
     Do <FloatLoad>(register, isIndirect: destinationIsIndirect, displacement: displacement, size: size);
 }
コード例 #22
0
ファイル: SubClass.cs プロジェクト: Mikholap/UUM32
 public LineIndex(int line, Register32 offest)
 {
     Line   = line;
     Offest = 0;
     reg32  = offest;
 }
コード例 #23
0
ファイル: XS.SSE.cs プロジェクト: Zino2201/Cosmos
 public static void FXRestore(Register32 destination, bool isIndirect)
 {
   new FXStore()
   {
     DestinationReg = destination,
     DestinationIsIndirect = isIndirect
   };
 }
コード例 #24
0
ファイル: ILOp.cs プロジェクト: aura-systems/IL2CPU
        protected static void CopyValue(Register32 destination, int destinationDisplacement, Register32 source, int sourceDisplacement, uint size)
        {
            for (int i = 0; i < (size / 4); i++)
            {
                XS.Set(EAX, source, sourceDisplacement: sourceDisplacement + (i * 4));
                XS.Set(destination, EAX, destinationDisplacement: destinationDisplacement + (i * 4));
            }
            switch (size % 4)
            {
            case 1:
                XS.Set(AL, source, sourceDisplacement: (int)(sourceDisplacement + ((size / 4) * 4)));
                XS.Set(destination, AL,
                       destinationDisplacement: (int)(destinationDisplacement + ((size / 4) * 4)));
                break;

            case 2:
                XS.Set(AX, source, sourceDisplacement: (int)(sourceDisplacement + ((size / 4) * 4)));
                XS.Set(destination, AX,
                       destinationDisplacement: (int)(destinationDisplacement + ((size / 4) * 4)));
                break;

            case 0:
                break;

            default:
                throw new NotImplementedException();
            }
        }