Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c6cf841

Browse files
authored
Arm64: Implement ReverseBitOrder (dotnet#233)
1 parent dfcf884 commit c6cf841

23 files changed

+3056
-3
lines changed

src/coreclr/src/jit/hwintrinsicarm64.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,10 @@ GenTree* Compiler::impSpecialIntrinsic(NamedIntrinsic intrinsic,
367367
}
368368

369369
case NI_ArmBase_LeadingZeroCount:
370+
case NI_ArmBase_ReverseElementBits:
370371
case NI_ArmBase_Arm64_LeadingSignCount:
371372
case NI_ArmBase_Arm64_LeadingZeroCount:
373+
case NI_ArmBase_Arm64_ReverseElementBits:
372374
case NI_Sha1_FixedRotate:
373375
{
374376
assert(numArgs == 1);

src/coreclr/src/jit/hwintrinsiccodegenarm64.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,10 @@ void CodeGen::genSpecialIntrinsic(GenTreeHWIntrinsic* node)
248248
}
249249

250250
case NI_ArmBase_LeadingZeroCount:
251+
case NI_ArmBase_ReverseElementBits:
251252
case NI_ArmBase_Arm64_LeadingSignCount:
252253
case NI_ArmBase_Arm64_LeadingZeroCount:
254+
case NI_ArmBase_Arm64_ReverseElementBits:
253255
{
254256
assert(op1 != nullptr);
255257
assert(op2 == nullptr);

src/coreclr/src/jit/hwintrinsiclistarm64.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ HARDWARE_INTRINSIC(AdvSimd, PopCount, -
6666
HARDWARE_INTRINSIC(AdvSimd_Arm64, Abs, -1, -1, 1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_abs, INS_invalid, INS_fabs}, HW_Category_SimpleSIMD, HW_Flag_NoContainment|HW_Flag_UnfixedSIMDSize)
6767
HARDWARE_INTRINSIC(AdvSimd_Arm64, AbsScalar, -1, 8, 1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_abs, INS_invalid, INS_invalid}, HW_Category_SIMDScalar, HW_Flag_NoContainment)
6868
HARDWARE_INTRINSIC(AdvSimd_Arm64, Add, -1, 16, 2, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_fadd}, HW_Category_SIMDScalar, HW_Flag_NoContainment|HW_Flag_Commutative)
69+
HARDWARE_INTRINSIC(AdvSimd_Arm64, ReverseElementBits, -1, -1, 1, {INS_rbit, INS_rbit, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_SimpleSIMD, HW_Flag_NoContainment|HW_Flag_UnfixedSIMDSize)
6970

7071
// ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
7172
// ISA Function name ival SIMD size NumArg instructions Category Flags
@@ -83,6 +84,7 @@ HARDWARE_INTRINSIC(Aes, MixColumns, -
8384
// ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
8485
// Base Intrinsics
8586
HARDWARE_INTRINSIC(ArmBase, LeadingZeroCount, -1, 0, 1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_clz, INS_clz, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Scalar, HW_Flag_NoContainment|HW_Flag_BaseTypeFromFirstArg)
87+
HARDWARE_INTRINSIC(ArmBase, ReverseElementBits, -1, 0, 1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_rbit, INS_rbit, INS_invalid, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Scalar, HW_Flag_NoContainment)
8688

8789
// ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
8890
// ISA Function name ival SIMD size NumArg instructions Category Flags
@@ -91,6 +93,7 @@ HARDWARE_INTRINSIC(ArmBase, LeadingZeroCount, -
9193
// Base 64-bit only Intrinsics
9294
HARDWARE_INTRINSIC(ArmBase_Arm64, LeadingSignCount, -1, 0, 1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_cls, INS_invalid, INS_cls, INS_invalid, INS_invalid, INS_invalid}, HW_Category_Scalar, HW_Flag_NoContainment|HW_Flag_BaseTypeFromFirstArg)
9395
HARDWARE_INTRINSIC(ArmBase_Arm64, LeadingZeroCount, -1, 0, 1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_clz, INS_clz, INS_invalid, INS_invalid}, HW_Category_Scalar, HW_Flag_NoContainment|HW_Flag_BaseTypeFromFirstArg)
96+
HARDWARE_INTRINSIC(ArmBase_Arm64, ReverseElementBits, -1, 0, 1, {INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_invalid, INS_rbit, INS_rbit, INS_invalid, INS_invalid}, HW_Category_Scalar, HW_Flag_NoContainment)
9497

9598
// ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
9699
// ISA Function name ival SIMD size NumArg instructions Category Flags

src/coreclr/tests/src/JIT/HardwareIntrinsics/Arm/AdvSimd.Arm64/AdvSimd.Arm64_r.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
<ItemGroup>
1111
<Compile Include="Abs.Vector128.Double.cs" />
1212
<Compile Include="Abs.Vector128.UInt64.cs" />
13+
<Compile Include="ReverseElementBits.Vector128.Byte.cs" />
14+
<Compile Include="ReverseElementBits.Vector128.SByte.cs" />
15+
<Compile Include="ReverseElementBits.Vector64.Byte.cs" />
16+
<Compile Include="ReverseElementBits.Vector64.SByte.cs" />
1317
<Compile Include="Program.AdvSimd.Arm64.cs" />
1418
<Compile Include="..\Shared\Helpers.cs" />
1519
<Compile Include="..\Shared\Program.cs" />

src/coreclr/tests/src/JIT/HardwareIntrinsics/Arm/AdvSimd.Arm64/AdvSimd.Arm64_ro.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
<ItemGroup>
1111
<Compile Include="Abs.Vector128.Double.cs" />
1212
<Compile Include="Abs.Vector128.UInt64.cs" />
13+
<Compile Include="ReverseElementBits.Vector128.Byte.cs" />
14+
<Compile Include="ReverseElementBits.Vector128.SByte.cs" />
15+
<Compile Include="ReverseElementBits.Vector64.Byte.cs" />
16+
<Compile Include="ReverseElementBits.Vector64.SByte.cs" />
1317
<Compile Include="Program.AdvSimd.Arm64.cs" />
1418
<Compile Include="..\Shared\Helpers.cs" />
1519
<Compile Include="..\Shared\Program.cs" />

src/coreclr/tests/src/JIT/HardwareIntrinsics/Arm/AdvSimd.Arm64/Program.AdvSimd.Arm64.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ static Program()
1414
TestList = new Dictionary<string, Action>() {
1515
["Abs.Vector128.Double"] = Abs_Vector128_Double,
1616
["Abs.Vector128.UInt64"] = Abs_Vector128_UInt64,
17+
["ReverseElementBits.Vector128.Byte"] = ReverseElementBits_Vector128_Byte,
18+
["ReverseElementBits.Vector128.SByte"] = ReverseElementBits_Vector128_SByte,
19+
["ReverseElementBits.Vector64.Byte"] = ReverseElementBits_Vector64_Byte,
20+
["ReverseElementBits.Vector64.SByte"] = ReverseElementBits_Vector64_SByte,
1721
};
1822
}
1923
}

0 commit comments

Comments
 (0)