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 }; }
public static void ConvertSD2SIAndTruncate(Register32 destination, RegisterXMM source) { new ConvertSD2SIAndTruncate { DestinationReg = destination, SourceReg = source }; }
public static void MoveSD(Register32 destination, RegisterXMM source, bool destinationIsIndirect = false) { new MoveSD() { DestinationReg = destination, DestinationIsIndirect = destinationIsIndirect, SourceReg = source }; }
public static void MoveSS(RegisterXMM destination, Register32 source, bool sourceIsIndirect = false) { new MoveSS() { DestinationReg = destination, SourceReg = source, SourceIsIndirect = sourceIsIndirect }; }
public static void MoveDoubleAndDuplicate(RegisterXMM destination, Register32 source, bool sourceIsIndirect = false) { new MoveDoubleAndDuplicate() { DestinationReg = destination, SourceReg = source, SourceIsIndirect = sourceIsIndirect }; }
public static void ConvertSD2SS(RegisterXMM destination, Register32 source, bool sourceIsIndirect = false) { new ConvertSD2SS() { DestinationReg = destination, SourceReg = source, SourceIsIndirect = sourceIsIndirect }; }
public static void MoveSS(Register32 destination, RegisterXMM source, bool destinationIsIndirect = false) { new MoveSS() { DestinationReg = destination, DestinationIsIndirect = destinationIsIndirect, SourceReg = source }; }
public static void ConvertSS2SD(RegisterXMM destination, Register32 source, bool sourceIsIndirect = false) { new ConvertSS2SD() { DestinationReg = destination, SourceReg = source, SourceIsIndirect = sourceIsIndirect }; }
private static byte GetPrefix(ref Register32 r) { if (r.Value < 8) { return(r.Value); } r = new Register32((byte)(r.Value - 8)); return(1); }
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 }; }
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 }; }
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 }; }
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>(); }
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 }; }
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 }; }
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()); }
public LineIndex(int line, int offest = 0) { Line = line; Offest = offest; reg32 = null; }
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); }
public void ToStringTest(uint value) { var r = new Register32(value); Assert.Equal($"{r.Value}", r.ToString()); }
public static void FloatLoad(Register32 register, bool destinationIsIndirect = false, int? displacement = null, RegisterSize? size = null) { Do<FloatLoad>(register, isIndirect: destinationIsIndirect, displacement: displacement, size: size); }
public static void FloatLoad(Register32 register, bool destinationIsIndirect = false, int?displacement = null, RegisterSize?size = null) { Do <FloatLoad>(register, isIndirect: destinationIsIndirect, displacement: displacement, size: size); }
public LineIndex(int line, Register32 offest) { Line = line; Offest = 0; reg32 = offest; }
public static void FXRestore(Register32 destination, bool isIndirect) { new FXStore() { DestinationReg = destination, DestinationIsIndirect = isIndirect }; }
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(); } }