Skip to content

Commit 7fa4e50

Browse files
committed
Use LowBit encoding for BitRange
1 parent 396f232 commit 7fa4e50

File tree

2 files changed

+8
-13
lines changed

2 files changed

+8
-13
lines changed

src/AsmArm64.CodeGen/InstructionProcessor.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ private ImmediateOperandDescriptor ProcessImmediate(Instruction instruction, Ope
907907
if (symbol.BitValues.Count != 0)
908908
{
909909
var kind = $"[{string.Join(",", symbol.BitValues.Select(bitValue => $"{bitValue.BitFields[0]} = {bitValue.Value}"))}]";
910-
if (immediate.Size == 7 && immediate.Encoding[0] == new BitRange(22, 7) && symbol.BitValues.Count == 4 && symbol.BitValueNames.Count == 1 && symbol.BitValueNames[0] == "immh")
910+
if (immediate.Size == 7 && immediate.Encoding[0] == new BitRange(16, 7) && symbol.BitValues.Count == 4 && symbol.BitValueNames.Count == 1 && symbol.BitValueNames[0] == "immh")
911911
{
912912
switch (kind)
913913
{
@@ -946,7 +946,7 @@ private ImmediateOperandDescriptor ProcessImmediate(Instruction instruction, Ope
946946
}
947947
else if (symbol.BitValueNames.Count == 1 && symbol.BitValueNames[0] == "cmode<0>" && immediate.Encoding.Count == 1)
948948
{
949-
Debug.Assert(immediate.Encoding[0] == new BitRange(15,4));
949+
Debug.Assert(immediate.Encoding[0] == new BitRange(12,4));
950950
immediate.ImmediateKind = Arm64ImmediateEncodingKind.EnumAmount8Or16;
951951
immediate.Size = 1;
952952
immediate.Encoding[0] = new BitRange(12, 1);
@@ -1213,10 +1213,10 @@ private static int CollectEncodingForSymbol(Instruction instruction, List<string
12131213
if (encoding.Count > 0)
12141214
{
12151215
var previousEncoding = encoding[^1];
1216-
if (previousEncoding.HiBit - previousEncoding.Width == bitRangeInfo.HiBit)
1216+
if (previousEncoding.LowBit - 1 == bitRangeInfo.HiBit)
12171217
{
12181218
// Merge with previous encoding
1219-
encoding[^1] = new(previousEncoding.HiBit, previousEncoding.Width + bitRangeInfo.Width);
1219+
encoding[^1] = new(bitRangeInfo.HiBit - bitRangeInfo.Width + 1, previousEncoding.Width + bitRangeInfo.Width);
12201220
size += bitRangeInfo.Width;
12211221
continue;
12221222
}
@@ -1245,10 +1245,10 @@ private static int CollectEncodingForSymbol(Instruction instruction, EncodingSym
12451245
if (encoding.Count > 0)
12461246
{
12471247
var previousEncoding = encoding[^1];
1248-
if (previousEncoding.HiBit - previousEncoding.Width == bitRangeInfo.HiBit)
1248+
if (previousEncoding.LowBit - 1 == bitRangeInfo.HiBit)
12491249
{
12501250
// Merge with previous encoding
1251-
encoding[^1] = new(previousEncoding.HiBit, previousEncoding.Width + bitRangeInfo.Width);
1251+
encoding[^1] = new(bitRangeInfo.HiBit - bitRangeInfo.Width + 1, previousEncoding.Width + bitRangeInfo.Width);
12521252
size += bitRangeInfo.Width;
12531253
continue;
12541254
}

src/AsmArm64.CodeGen/Model/Operands.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -407,13 +407,8 @@ sealed class ShiftOperandDescriptor : OperandDescriptor
407407
public int AmountSize { get; set; }
408408

409409
public BitRange AmountEncoding { get; set; }
410-
411-
412410
}
413411

414-
415-
416-
417412
sealed class DynamicRegisterSelector
418413
{
419414
public int SelectorSize { get; set; }
@@ -504,9 +499,9 @@ public override string ToString()
504499
}
505500
}
506501

507-
readonly record struct BitRange(int HiBit, int Width)
502+
readonly record struct BitRange(int LowBit, int Width)
508503
{
509-
public override string ToString() => $"({HiBit}:{Width})";
504+
public override string ToString() => $"({LowBit}:{Width})";
510505
}
511506

512507
readonly record struct BitValueToRegister(string BitValues, Arm64RegisterEncodingKind RegisterKind)

0 commit comments

Comments
 (0)