Пример #1
0
 void GetInfo_throws_if_invalid_value(MemorySize memorySize)
 {
     Assert.Throws <ArgumentOutOfRangeException>(() => memorySize.GetInfo());
     Assert.Throws <ArgumentOutOfRangeException>(() => memorySize.GetSize());
     Assert.Throws <ArgumentOutOfRangeException>(() => memorySize.GetElementSize());
     Assert.Throws <ArgumentOutOfRangeException>(() => memorySize.GetElementType());
     Assert.Throws <ArgumentOutOfRangeException>(() => memorySize.IsSigned());
     Assert.Throws <ArgumentOutOfRangeException>(() => memorySize.IsPacked());
     Assert.Throws <ArgumentOutOfRangeException>(() => memorySize.GetElementCount());
     memorySize.IsBroadcast();            // Does not throw
 }
Пример #2
0
        void VerifyMemorySizeProperties(MemorySize memorySize, int size, int elementSize, MemorySize elementType, int elementCount, MemorySizeFlags flags)
        {
            var info = memorySize.GetInfo();

            Assert.Equal(memorySize, info.MemorySize);
            Assert.Equal(size, info.Size);
            Assert.Equal(elementSize, info.ElementSize);
            Assert.Equal(elementType, info.ElementType);
            Assert.Equal((flags & MemorySizeFlags.Signed) != 0, info.IsSigned);
            Assert.Equal((flags & MemorySizeFlags.Broadcast) != 0, info.IsBroadcast);
            Assert.Equal((flags & MemorySizeFlags.Packed) != 0, info.IsPacked);
            Assert.Equal(elementCount, info.ElementCount);

            Assert.Equal(size, memorySize.GetSize());
            Assert.Equal(elementSize, memorySize.GetElementSize());
            Assert.Equal(elementType, memorySize.GetElementType());
            Assert.Equal((flags & MemorySizeFlags.Signed) != 0, memorySize.IsSigned());
            Assert.Equal((flags & MemorySizeFlags.Packed) != 0, memorySize.IsPacked());
            Assert.Equal((flags & MemorySizeFlags.Broadcast) != 0, memorySize.IsBroadcast());
            Assert.Equal(elementCount, memorySize.GetElementCount());
        }
Пример #3
0
        void WriteMemorySize(MemorySize memorySize)
        {
            switch (opCode.Code)
            {
            case Code.Fldcw_m16:
            case Code.Fnstcw_m16:
            case Code.Fstcw_m16:
            case Code.Fnstsw_m16:
            case Code.Fstsw_m16:
                sb.Append("2byte");
                return;
            }

            switch (memorySize)
            {
            case MemorySize.Bound16_WordWord:
                sb.Append("16&16");
                break;

            case MemorySize.Bound32_DwordDword:
                sb.Append("32&32");
                break;

            case MemorySize.FpuEnv14:
                sb.Append("14byte");
                break;

            case MemorySize.FpuEnv28:
                sb.Append("28byte");
                break;

            case MemorySize.FpuState94:
                sb.Append("94byte");
                break;

            case MemorySize.FpuState108:
                sb.Append("108byte");
                break;

            case MemorySize.Fxsave_512Byte:
            case MemorySize.Fxsave64_512Byte:
                sb.Append("512byte");
                break;

            case MemorySize.Xsave:
            case MemorySize.Xsave64:
                // 'm' has already been appended
                sb.Append("em");
                break;

            case MemorySize.SegPtr16:
                sb.Append("16:16");
                break;

            case MemorySize.SegPtr32:
                sb.Append("16:32");
                break;

            case MemorySize.SegPtr64:
                sb.Append("16:64");
                break;

            case MemorySize.Fword5:
                if (!IsSgdtOrSidt())
                {
                    sb.Append("16&24");
                }
                break;

            case MemorySize.Fword6:
                if (!IsSgdtOrSidt())
                {
                    sb.Append("16&32");
                }
                break;

            case MemorySize.Fword10:
                if (!IsSgdtOrSidt())
                {
                    sb.Append("16&64");
                }
                break;

            default:
                int memSize = memorySize.GetSize();
                if (memSize != 0)
                {
                    sb.Append(memSize * 8);
                }
                break;
            }

            if (IsFpuInstruction(opCode.Code))
            {
                switch (memorySize)
                {
                case MemorySize.Int16:
                case MemorySize.Int32:
                case MemorySize.Int64:
                    sb.Append("int");
                    break;

                case MemorySize.Float32:
                case MemorySize.Float64:
                case MemorySize.Float80:
                    sb.Append("fp");
                    break;

                case MemorySize.Bcd:
                    sb.Append("bcd");
                    break;
                }
            }
        }