static DecoderMemoryTestCase ReadTestCase(int bitness, string line, int lineNumber) { var parts = line.Split(colSep, StringSplitOptions.None); if (parts.Length != 11 && parts.Length != 12) { throw new InvalidOperationException(); } var tc = new DecoderMemoryTestCase(); tc.LineNumber = lineNumber; tc.Bitness = bitness; tc.HexBytes = parts[0].Trim(); tc.Code = ToEnumConverter.GetCode(parts[1].Trim()); tc.Register = ToEnumConverter.GetRegister(parts[2].Trim()); tc.SegmentPrefix = ToEnumConverter.GetRegister(parts[3].Trim()); tc.SegmentRegister = ToEnumConverter.GetRegister(parts[4].Trim()); tc.BaseRegister = ToEnumConverter.GetRegister(parts[5].Trim()); tc.IndexRegister = ToEnumConverter.GetRegister(parts[6].Trim()); tc.Scale = (int)ParseUInt32(parts[7].Trim()); tc.Displacement = ParseUInt32(parts[8].Trim()); tc.DisplacementSize = (int)ParseUInt32(parts[9].Trim()); var coStr = parts[10].Trim(); if (!DecoderTestParser.TryParseConstantOffsets(coStr, out tc.ConstantOffsets)) { throw new InvalidOperationException($"Invalid ConstantOffsets: '{coStr}'"); } tc.EncodedHexBytes = parts.Length > 11 ? parts[11].Trim() : tc.HexBytes; tc.DecoderOptions = DecoderOptions.None; tc.CanEncode = true; return(tc); }
static DecoderMemoryTestCase ReadTestCase(int bitness, string line, int lineNumber) { var parts = line.Split(colSep, StringSplitOptions.None); if (parts.Length != 11 && parts.Length != 12) { throw new InvalidOperationException(); } var tc = new DecoderMemoryTestCase(); tc.LineNumber = lineNumber; tc.Bitness = bitness; tc.IP = bitness switch { 16 => DecoderConstants.DEFAULT_IP16, 32 => DecoderConstants.DEFAULT_IP32, 64 => DecoderConstants.DEFAULT_IP64, _ => throw new InvalidOperationException(), }; tc.HexBytes = parts[0].Trim(); var code = parts[1].Trim(); if (CodeUtils.IsIgnored(code)) { return(null); } tc.Code = ToEnumConverter.GetCode(code); tc.Register = ToEnumConverter.GetRegister(parts[2].Trim()); tc.SegmentPrefix = ToEnumConverter.GetRegister(parts[3].Trim()); tc.SegmentRegister = ToEnumConverter.GetRegister(parts[4].Trim()); tc.BaseRegister = ToEnumConverter.GetRegister(parts[5].Trim()); tc.IndexRegister = ToEnumConverter.GetRegister(parts[6].Trim()); tc.Scale = (int)NumberConverter.ToUInt32(parts[7].Trim()); tc.Displacement = NumberConverter.ToUInt64(parts[8].Trim()); tc.DisplacementSize = (int)NumberConverter.ToUInt32(parts[9].Trim()); var coStr = parts[10].Trim(); if (!DecoderTestParser.TryParseConstantOffsets(coStr, out tc.ConstantOffsets)) { throw new InvalidOperationException($"Invalid ConstantOffsets: '{coStr}'"); } tc.EncodedHexBytes = parts.Length > 11 ? parts[11].Trim() : tc.HexBytes; tc.DecoderOptions = DecoderOptions.None; tc.TestOptions = DecoderTestOptions.None; return(tc); }
static DecoderTestCase[] ReadTestCases(int bitness) { var filename = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Intel", "DecoderTests", $"DecoderTest{bitness}.txt"); return(DecoderTestParser.ReadFile(bitness, filename).ToArray()); }