This happens on xamarin-android/main (.NET8), but I suppose it will apply to other platforms as well.
I noticed that System.Private.CoreLib.dll output by the linker for arm64 RID contains X86 and WASM intrinsics types:
549: System.Runtime.Intrinsics.Wasm.PackedSimd (flist=2253, mlist=6116, flags=0x100081, extends=0xa0)
554: System.Runtime.Intrinsics.X86.X86Base (flist=2253, mlist=6151, flags=0x100081, extends=0xa0)
555: System.Runtime.Intrinsics.X86.Sse (flist=2253, mlist=6151, flags=0x100081, extends=0x8a8)
556: System.Runtime.Intrinsics.X86.Sse2 (flist=2253, mlist=6151, flags=0x100081, extends=0x8ac)
557: System.Runtime.Intrinsics.X86.Sse3 (flist=2253, mlist=6154, flags=0x100081, extends=0x8b0)
558: System.Runtime.Intrinsics.X86.Sse41 (flist=2253, mlist=6154, flags=0x100081, extends=0x8bc)
559: System.Runtime.Intrinsics.X86.Ssse3 (flist=2253, mlist=6155, flags=0x100081, extends=0x8b4)
It appears some of the x86 classes are removed, but not all. For comparison, this is a list of types from the same assembly but linked for x84:
558: System.Runtime.Intrinsics.X86.X86Base (flist=2255, mlist=6330, flags=0x100081, extends=0xa0)
559: System.Runtime.Intrinsics.X86.X86Base/X64 (flist=2255, mlist=6333, flags=0x100082, extends=0xa0)
560: System.Runtime.Intrinsics.X86.Avx (flist=2255, mlist=6336, flags=0x100081, extends=0x90c)
561: System.Runtime.Intrinsics.X86.Avx2 (flist=2255, mlist=6338, flags=0x100081, extends=0x8c0)
562: System.Runtime.Intrinsics.X86.Avx512BW (flist=2255, mlist=6344, flags=0x100081, extends=0x8cc)
563: System.Runtime.Intrinsics.X86.Avx512F (flist=2255, mlist=6346, flags=0x100081, extends=0x8c4)
564: System.Runtime.Intrinsics.X86.Bmi1 (flist=2255, mlist=6347, flags=0x100081, extends=0x8b8)
565: System.Runtime.Intrinsics.X86.Bmi1/X64 (flist=2255, mlist=6349, flags=0x100082, extends=0x8bc)
566: System.Runtime.Intrinsics.X86.Bmi2 (flist=2255, mlist=6352, flags=0x100081, extends=0x8b8)
567: System.Runtime.Intrinsics.X86.Bmi2/X64 (flist=2255, mlist=6352, flags=0x100082, extends=0x8bc)
568: System.Runtime.Intrinsics.X86.Lzcnt (flist=2255, mlist=6354, flags=0x100081, extends=0x8b8)
569: System.Runtime.Intrinsics.X86.Lzcnt/X64 (flist=2255, mlist=6356, flags=0x100082, extends=0x8bc)
570: System.Runtime.Intrinsics.X86.Popcnt (flist=2255, mlist=6358, flags=0x100081, extends=0x90c)
571: System.Runtime.Intrinsics.X86.Sse (flist=2255, mlist=6360, flags=0x100081, extends=0x8b8)
572: System.Runtime.Intrinsics.X86.Sse/X64 (flist=2255, mlist=6360, flags=0x100082, extends=0x8bc)
573: System.Runtime.Intrinsics.X86.Sse2 (flist=2255, mlist=6360, flags=0x100081, extends=0x8ec)
574: System.Runtime.Intrinsics.X86.Sse2/X64 (flist=2255, mlist=6373, flags=0x100082, extends=0x8f0)
575: System.Runtime.Intrinsics.X86.Sse3 (flist=2255, mlist=6376, flags=0x100081, extends=0x8f4)
576: System.Runtime.Intrinsics.X86.Sse3/X64 (flist=2255, mlist=6376, flags=0x100082, extends=0x8f8)
577: System.Runtime.Intrinsics.X86.Sse41 (flist=2255, mlist=6376, flags=0x100081, extends=0x910)
578: System.Runtime.Intrinsics.X86.Sse41/X64 (flist=2255, mlist=6379, flags=0x100082, extends=0x914)
579: System.Runtime.Intrinsics.X86.Sse42 (flist=2255, mlist=6380, flags=0x100081, extends=0x904)
580: System.Runtime.Intrinsics.X86.Ssse3 (flist=2255, mlist=6380, flags=0x100081, extends=0x8fc)
581: System.Runtime.Intrinsics.X86.Ssse3/X64 (flist=2255, mlist=6382, flags=0x100082, extends=0x900)
The x64 version also contains some ARM intrinsics, but not all:
553: System.Runtime.Intrinsics.Wasm.PackedSimd (flist=2255, mlist=6322, flags=0x100081, extends=0xa0)
554: System.Runtime.Intrinsics.Arm.AdvSimd (flist=2255, mlist=6325, flags=0x100081, extends=0x8b0)
555: System.Runtime.Intrinsics.Arm.AdvSimd/Arm64 (flist=2255, mlist=6326, flags=0x100082, extends=0x8b4)
556: System.Runtime.Intrinsics.Arm.ArmBase (flist=2255, mlist=6330, flags=0x100081, extends=0xa0)
557: System.Runtime.Intrinsics.Arm.ArmBase/Arm64 (flist=2255, mlist=6330, flags=0x100082, extends=0xa0)
Would it be possible to remove all of them? They are essentially dead weight for the target RID.
Attached is a zip with both assemblies mentioned above. The app being built was the dotnet new android template for NET8
corlib.zip
This happens on xamarin-android/main (.NET8), but I suppose it will apply to other platforms as well.
I noticed that
System.Private.CoreLib.dlloutput by the linker for arm64 RID contains X86 and WASM intrinsics types:It appears some of the x86 classes are removed, but not all. For comparison, this is a list of types from the same assembly but linked for
x84:The
x64version also contains some ARM intrinsics, but not all:Would it be possible to remove all of them? They are essentially dead weight for the target RID.
Attached is a zip with both assemblies mentioned above. The app being built was the
dotnet new androidtemplate for NET8corlib.zip