diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 3cda07de4daf6d..d372056dad042d 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -15,7 +15,7 @@
]
},
"microsoft.dotnet.xharness.cli": {
- "version": "10.0.0-prerelease.24610.1",
+ "version": "10.0.0-prerelease.25077.1",
"commands": [
"xharness"
]
diff --git a/docs/coding-guidelines/breaking-change-rules.md b/docs/coding-guidelines/breaking-change-rules.md
index e8a5e5b7d0afda..21fc3103106f35 100644
--- a/docs/coding-guidelines/breaking-change-rules.md
+++ b/docs/coding-guidelines/breaking-change-rules.md
@@ -236,6 +236,8 @@ successfully bind to that overload, if simply passing an `int` value. However, i
Definite assignment rules allow use of uninitialized variables so long as the variable type is a stateless struct. If the struct is made stateful, code could now end up with uninitialized data. This is both potentially a source breaking and binary breaking change.
+* Adding a reference type field, a `ref` field, or a field involving a generic type parameter without the `unmanaged` constraint, to a value type that formerly had none of those field kinds. If the value type already contains at least one such field, adding another is non-breaking. This rule applies recursively to new fields that contain value types that may also introduce a new field kind.
+
### Signatures
✓ **Allowed**
* Adding `params` to a parameter
diff --git a/eng/DotNetBuild.props b/eng/DotNetBuild.props
index 72842bbc36f7b7..75cfd1acb039f5 100644
--- a/eng/DotNetBuild.props
+++ b/eng/DotNetBuild.props
@@ -72,6 +72,7 @@
$(InnerBuildArgs) /p:MonoAOTEnableLLVM=$(DotNetBuildMonoAOTEnableLLVM)
$(InnerBuildArgs) /p:MonoBundleLLVMOptimizer=$(DotNetBuildMonoBundleLLVMOptimizer)
$(InnerBuildArgs) /p:DotNetBuildAllRuntimePacks=$(DotNetBuildAllRuntimePacks)
+ $(InnerBuildArgs) /p:DotNetBuildPass=$(DotNetBuildPass)
$(InnerBuildArgs) $(FlagParameterPrefix)pgoinstrument
@@ -83,6 +84,7 @@
$(InnerBuildArgs) /p:RestoreConfigFile=$(RestoreConfigFile)
$(InnerBuildArgs) /p:ForceDryRunSigning=$(ForceDryRunSigning)
$(InnerBuildArgs) /p:DefaultArtifactVisibility=$(DefaultArtifactVisibility)
+ $(InnerBuildArgs) /p:DotNetEsrpToolPath=$(DotNetEsrpToolPath)
$(InnerBuildArgs) /p:SourceBuiltAssetsDir=$(SourceBuiltAssetsDir)
diff --git a/eng/Subsets.props b/eng/Subsets.props
index 50f75b082ea808..efb52377533bf2 100644
--- a/eng/Subsets.props
+++ b/eng/Subsets.props
@@ -67,6 +67,9 @@
clr+libs+tools+host+packs
mono+packs
+
+
+ crossdacpack
@@ -95,8 +98,8 @@
- clr.native+linuxdac+clr.corelib+clr.tools+clr.nativecorelib+clr.packages+clr.nativeaotlibs+clr.crossarchtools+host.native
- clr.native+linuxdac+clr.corelib+clr.tools+clr.nativecorelib+clr.packages+clr.nativeaotlibs+clr.crossarchtools
+ clr.native+clr.corelib+clr.tools+clr.nativecorelib+clr.packages+clr.nativeaotlibs+clr.crossarchtools+host.native
+ clr.native+clr.corelib+clr.tools+clr.nativecorelib+clr.packages+clr.nativeaotlibs+clr.crossarchtools
clr.iltools+clr.packages
@@ -194,7 +197,7 @@
-
+
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index a7faf16a2bd23a..d4109bba4deda3 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -8,37 +8,37 @@
https://github.com/dotnet/wcf
7f504aabb1988e9a093c1e74d8040bd52feb2f01
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
https://github.com/dotnet/command-line-api
@@ -50,121 +50,121 @@
feb61c7f328a2401d74f4317b39d02126cfdfe24
-
+
https://github.com/dotnet/cecil
- 2d5c8fb9aa8bd4c7fc085a73520061075c601655
+ dfa03011d6474bd0e6c9d0363e4f3b18b99f2ad8
-
+
https://github.com/dotnet/cecil
- 2d5c8fb9aa8bd4c7fc085a73520061075c601655
+ dfa03011d6474bd0e6c9d0363e4f3b18b99f2ad8
-
+
https://github.com/dotnet/emsdk
- 0de3165cb0d56323b6caaf8e9916d4d9e72da32d
+ 191ba073d94b647f70bce142d16ec96bfd436387
-
+
https://github.com/dotnet/emsdk
- 0de3165cb0d56323b6caaf8e9916d4d9e72da32d
+ 191ba073d94b647f70bce142d16ec96bfd436387
-
+
https://github.com/dotnet/source-build-reference-packages
- 67bfe60ba059348bfaec48537acd36157cd2be6e
+ f18184030957ae8b02c6cb971ff2a58a06d2e7b1
-
+
https://github.com/dotnet/source-build-externals
- 0c377e9585d2aeae504ff1d6529ccb1abef36172
+ 962bb86f95ebece01c2b1de97ed7d4261e00b058
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
https://github.com/dotnet/runtime-assets
@@ -218,89 +218,89 @@
https://github.com/dotnet/runtime-assets
fc476e8f2d685eb7cadf6342393a0af2708f4dbf
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
-
+
https://github.com/dotnet/llvm-project
- 317598aea216019b6164f599859c738f69595c60
+ 0417b8265304b7e52c63c9309271b15feb39ddd3
https://github.com/dotnet/runtime
@@ -336,83 +336,83 @@
https://github.com/dotnet/runtime
29013d8ae50f5bc35427a9155234ccebfa5e227c
-
+
https://github.com/dotnet/xharness
- 3119edb6d70fb252e6128b0c7e45d3fc2f49f249
+ 0d72885f0fd3329e58254831f04f4517a73e1b56
-
+
https://github.com/dotnet/xharness
- 3119edb6d70fb252e6128b0c7e45d3fc2f49f249
+ 0d72885f0fd3329e58254831f04f4517a73e1b56
-
+
https://github.com/dotnet/xharness
- 3119edb6d70fb252e6128b0c7e45d3fc2f49f249
+ 0d72885f0fd3329e58254831f04f4517a73e1b56
-
+
https://github.com/dotnet/arcade
- 44e60bcd48b52296fdc7d963ecb9e3fa66d2b55b
+ bbea86c614fcf4380c58c80eacd279a0b8305a79
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 93bf80f30db2e15a7d62c22ff80fecf3518519b1
+ 9fc4fa70da875eed41d3a69a5d65c83d2e3f4b06
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 93bf80f30db2e15a7d62c22ff80fecf3518519b1
+ 9fc4fa70da875eed41d3a69a5d65c83d2e3f4b06
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 93bf80f30db2e15a7d62c22ff80fecf3518519b1
+ 9fc4fa70da875eed41d3a69a5d65c83d2e3f4b06
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 93bf80f30db2e15a7d62c22ff80fecf3518519b1
+ 9fc4fa70da875eed41d3a69a5d65c83d2e3f4b06
-
+
https://github.com/dotnet/hotreload-utils
- a8ba820e852306e5098dce560629cd98e0eb8a4a
+ f30fb00238a27eff06b5a6bf11ff9c4a5e35c9ca
https://github.com/dotnet/runtime-assets
fc476e8f2d685eb7cadf6342393a0af2708f4dbf
-
+
https://github.com/dotnet/roslyn
- 250065a15ef94895ef87f3e09b313b987375b5b1
+ b5e48cce69950f6f8cf8b6c6919cddf4c03a2f48
-
+
https://github.com/dotnet/roslyn
- 250065a15ef94895ef87f3e09b313b987375b5b1
+ b5e48cce69950f6f8cf8b6c6919cddf4c03a2f48
-
+
https://github.com/dotnet/roslyn
- 250065a15ef94895ef87f3e09b313b987375b5b1
+ b5e48cce69950f6f8cf8b6c6919cddf4c03a2f48
-
+
https://github.com/dotnet/roslyn-analyzers
- 5ed336762c6260a83ece35cd1f6749251452bad0
+ 8fe7aeb135c64e095f43292c427453858d937184
-
+
https://github.com/dotnet/roslyn-analyzers
- 5ed336762c6260a83ece35cd1f6749251452bad0
+ 8fe7aeb135c64e095f43292c427453858d937184
-
+
https://github.com/dotnet/roslyn
- 250065a15ef94895ef87f3e09b313b987375b5b1
+ b5e48cce69950f6f8cf8b6c6919cddf4c03a2f48
https://github.com/dotnet/sdk
23e2ba847d79562b972dbf54eca3f87c3044d925
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 93bf80f30db2e15a7d62c22ff80fecf3518519b1
+ 9fc4fa70da875eed41d3a69a5d65c83d2e3f4b06
-
+
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
- 93bf80f30db2e15a7d62c22ff80fecf3518519b1
+ 9fc4fa70da875eed41d3a69a5d65c83d2e3f4b06
@@ -432,37 +432,37 @@
https://github.com/NuGet/NuGet.Client
8fef55f5a55a3b4f2c96cd1a9b5ddc51d4b927f8
-
+
https://github.com/dotnet/node
- 703264f70f553a06adfb330378c96f56b7583273
+ 7609fd62519260f6b2c10131b03ed878e671a2e4
-
+
https://github.com/dotnet/node
- 703264f70f553a06adfb330378c96f56b7583273
+ 7609fd62519260f6b2c10131b03ed878e671a2e4
-
+
https://github.com/dotnet/node
- 703264f70f553a06adfb330378c96f56b7583273
+ 7609fd62519260f6b2c10131b03ed878e671a2e4
-
+
https://github.com/dotnet/node
- 703264f70f553a06adfb330378c96f56b7583273
+ 7609fd62519260f6b2c10131b03ed878e671a2e4
-
+
https://github.com/dotnet/node
- 703264f70f553a06adfb330378c96f56b7583273
+ 7609fd62519260f6b2c10131b03ed878e671a2e4
-
+
https://github.com/dotnet/node
- 703264f70f553a06adfb330378c96f56b7583273
+ 7609fd62519260f6b2c10131b03ed878e671a2e4
-
+
https://github.com/dotnet/node
- 703264f70f553a06adfb330378c96f56b7583273
+ 7609fd62519260f6b2c10131b03ed878e671a2e4
-
+
https://github.com/dotnet/node
- 703264f70f553a06adfb330378c96f56b7583273
+ 7609fd62519260f6b2c10131b03ed878e671a2e4
https://github.com/dotnet/runtime-assets
diff --git a/eng/Versions.props b/eng/Versions.props
index c13b4256065336..a2d4fc5c5c2006 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -36,17 +36,17 @@
- 3.12.0-beta1.24629.1
- 10.0.0-preview.24629.1
+ 3.12.0-beta1.25081.1
+ 10.0.0-preview.25081.1
- 4.14.0-2.25079.2
- 4.14.0-2.25079.2
- 4.14.0-2.25079.2
+ 4.14.0-2.25081.4
+ 4.14.0-2.25081.4
+ 4.14.0-2.25081.4
10.0.100-alpha.1.25077.2
- 10.0.0-beta.25080.5
- 10.0.0-beta.25080.5
- 10.0.0-beta.25080.5
- 10.0.0-beta.25080.5
- 2.9.2-beta.25080.5
- 10.0.0-beta.25080.5
- 2.9.2-beta.25080.5
- 10.0.0-beta.25080.5
- 10.0.0-beta.25080.5
- 10.0.0-beta.25080.5
- 10.0.0-beta.25080.5
- 10.0.0-beta.25080.5
- 10.0.0-beta.25080.5
- 10.0.0-beta.25080.5
- 10.0.0-beta.25080.5
- 10.0.0-beta.25080.5
+ 10.0.0-beta.25080.7
+ 10.0.0-beta.25080.7
+ 10.0.0-beta.25080.7
+ 10.0.0-beta.25080.7
+ 2.9.2-beta.25080.7
+ 10.0.0-beta.25080.7
+ 2.9.2-beta.25080.7
+ 10.0.0-beta.25080.7
+ 10.0.0-beta.25080.7
+ 10.0.0-beta.25080.7
+ 10.0.0-beta.25080.7
+ 10.0.0-beta.25080.7
+ 10.0.0-beta.25080.7
+ 10.0.0-beta.25080.7
+ 10.0.0-beta.25080.7
+ 10.0.0-beta.25080.7
1.4.0
@@ -114,7 +114,7 @@
6.0.0
6.0.0
5.0.0
- 1.2.0-beta.507
+ 1.2.0-beta.556
4.6.0
5.0.0
4.9.0
@@ -158,18 +158,18 @@
10.0.0-beta.25070.2
10.0.0-beta.25070.2
- 10.0.0-prerelease.24610.1
- 10.0.0-prerelease.24610.1
- 10.0.0-prerelease.24610.1
+ 10.0.0-prerelease.25077.1
+ 10.0.0-prerelease.25077.1
+ 10.0.0-prerelease.25077.1
- 10.0.0-alpha.0.25070.1
+ 10.0.0-alpha.0.25077.1
- 1.0.0-prerelease.25067.2
- 1.0.0-prerelease.25067.2
- 1.0.0-prerelease.25067.2
- 1.0.0-prerelease.25067.2
- 1.0.0-prerelease.25067.2
- 1.0.0-prerelease.25067.2
+ 1.0.0-prerelease.25079.10
+ 1.0.0-prerelease.25079.10
+ 1.0.0-prerelease.25079.10
+ 1.0.0-prerelease.25079.10
+ 1.0.0-prerelease.25079.10
+ 1.0.0-prerelease.25079.10
2.0.0
17.10.0-beta1.24272.1
@@ -219,58 +219,58 @@
9.0.0-preview-20241010.1
- 0.11.5-alpha.25069.2
+ 0.11.5-alpha.25078.1
10.0.0-preview.2.25074.1
2.4.3
9.0.0-alpha.1.24167.3
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
- 10.0.0-alpha.1.25059.1
+ 10.0.0-preview.2.25103.1
$(MicrosoftNETWorkloadEmscriptenCurrentManifest100100TransportVersion)
1.1.87-gba258badda
1.0.0-v3.14.0.5722
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
- 19.1.0-alpha.1.25055.2
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
+ 19.1.0-alpha.1.25077.1
3.1.7
1.0.406601
$(MicrosoftDotNetApiCompatTaskVersion)
- 10.0.0-alpha.1.25057.1
+ 10.0.0-alpha.1.25077.1
$(MicrosoftNETRuntimeEmscriptenVersion)
$(runtimewinx64MicrosoftNETCoreRuntimeWasmNodeTransportPackageVersion)
diff --git a/eng/common/native/install-dependencies.sh b/eng/common/native/install-dependencies.sh
index 71bde0e4573b26..ce661e9e5cd8de 100755
--- a/eng/common/native/install-dependencies.sh
+++ b/eng/common/native/install-dependencies.sh
@@ -24,13 +24,13 @@ case "$os" in
apt update
apt install -y build-essential gettext locales cmake llvm clang lld lldb liblldb-dev libunwind8-dev libicu-dev liblttng-ust-dev \
- libssl-dev libkrb5-dev zlib1g-dev pigz cpio
+ libssl-dev libkrb5-dev pigz cpio
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
elif [ "$ID" = "fedora" ] || [ "$ID" = "rhel" ]; then
- dnf install -y cmake llvm lld lldb clang python curl libicu-devel openssl-devel krb5-devel zlib-devel lttng-ust-devel pigz cpio
+ dnf install -y cmake llvm lld lldb clang python curl libicu-devel openssl-devel krb5-devel lttng-ust-devel pigz cpio
elif [ "$ID" = "alpine" ]; then
- apk add build-base cmake bash curl clang llvm-dev lld lldb krb5-dev lttng-ust-dev icu-dev zlib-dev openssl-dev pigz cpio
+ apk add build-base cmake bash curl clang llvm-dev lld lldb krb5-dev lttng-ust-dev icu-dev openssl-dev pigz cpio
else
echo "Unsupported distro. distro: $ID"
exit 1
diff --git a/eng/extract-for-crossdac.ps1 b/eng/extract-for-crossdac.ps1
new file mode 100644
index 00000000000000..24ce91d1043fd3
--- /dev/null
+++ b/eng/extract-for-crossdac.ps1
@@ -0,0 +1,25 @@
+[CmdletBinding()]
+param (
+ [Parameter(Mandatory)]
+ [string]
+ $DownloadDirectory,
+ [Parameter(Mandatory)]
+ [string]
+ $ExtractDirectory
+)
+
+Add-Type -Assembly 'System.IO.Compression.FileSystem'
+
+Write-Host "Looking for packages under $DownloadDirectory"
+
+foreach ($file in Get-ChildItem $DownloadDirectory -Recurse -Filter '*.nupkg') {
+ Write-Host "Found Package: $($file.FullName)"
+ if ($file.Name -match '^(?Microsoft.NETCore.App.Runtime.linux(-musl)?-((arm(64)?)|x64)).(?.+).nupkg$') {
+ $id = $matches['id']
+ $ver = $matches['ver']
+ Write-Host "Extracting Package: $id $ver to $ExtractDirectory/$($id.ToLowerInvariant())/$ver"
+ [System.IO.Compression.ZipFile]::ExtractToDirectory($file.FullName, "$ExtractDirectory/$($id.ToLowerInvariant())/$ver")
+ } else {
+ throw "Unexpected file name: $($file.Name)"
+ }
+}
diff --git a/eng/native/sign-with-dac-certificate.ps1 b/eng/native/sign-with-dac-certificate.ps1
index 97d5c5d6763aad..11c14acb6e51da 100644
--- a/eng/native/sign-with-dac-certificate.ps1
+++ b/eng/native/sign-with-dac-certificate.ps1
@@ -6,19 +6,25 @@ param(
[Parameter(ValueFromRemainingArguments=$true)][string[]]$filesToSign
)
-$inputFile = Get-Content -Raw $PSScriptRoot/signing/input.template.json | ConvertFrom-Json
-$inputFile.SignBatches.SignRequestFiles = $filesToSign | ForEach-Object {
+[array]$signEntries = $filesToSign | ForEach-Object {
@{
SourceLocation = $_
}
}
+$inputFile = Get-Content -Raw $PSScriptRoot/signing/input.template.json | ConvertFrom-Json
+$inputFile.SignBatches[0].SignRequestFiles = $signEntries
+
$inputJson = [System.IO.Path]::GetTempFileName()
# Our JSON goes up to 6 levels deep, so we need to set the depth to 6
# to successfully round-trip our JSON through ConvertTo-Json
$inputFile | ConvertTo-Json -Depth 6 | Out-File -FilePath $inputJson -Encoding utf8
-$outputJson = Resolve-Path "$PSScriptRoot/../../artifacts/log/Release/signing-$(New-Guid).json.log"
+$outputJson = "$PSScriptRoot/../../artifacts/log/Release/signing-$(New-Guid).json.log"
+
+New-Item $outputJson -ItemType File
+
+$outputJson = Resolve-Path $outputJson
Write-Host "Signing files with DAC certificate"
Write-Host "Logging output to $outputJson"
diff --git a/eng/packaging.targets b/eng/packaging.targets
index f2dc6bfcf5e133..c64ccfb2fcc393 100644
--- a/eng/packaging.targets
+++ b/eng/packaging.targets
@@ -122,7 +122,7 @@
- <_RuntimeSymbolPath Include="$(RuntimeSymbolPath)" />
+ <_RuntimeSymbolPath Include="@(TfmRuntimeSpecificPackageFile->'%(RootDir)%(Directory)%(FileName).pdb')" Condition="'%(TfmRuntimeSpecificPackageFile.Extension)' == '.dll'" KeepMetadata="None" />
-
- mkdir -p $(librariesDownloadDir)/bin/wasm/wasm-data &&
- mkdir -p $(librariesDownloadDir)/bin/wasm/dotnet &&
- cp -r $(librariesDownloadDir)/BrowserWasm/staging/dotnet-latest/* $(librariesDownloadDir)/bin/wasm/dotnet &&
- cp -r $(librariesDownloadDir)/BrowserWasm/staging/built-nugets $(librariesDownloadDir)/bin/wasm &&
- cp src/mono/browser/test-main.js $(librariesDownloadDir)/bin/wasm/wasm-data/test-main.js &&
- find $(librariesDownloadDir)/bin/wasm -type d &&
- find $(librariesDownloadDir)/bin/wasm -type f -exec chmod 664 {} \;
- displayName: "Create wasm directory (Linux)"
- - ${{ elseif eq(parameters.codeGenType, 'AOT') }}:
- # Download mono AOT
- - template: /eng/pipelines/common/download-artifact-step.yml
- parameters:
- unpackFolder: $(Build.SourcesDirectory)/artifacts/bin
- artifactFileName: 'BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr$(archiveExtension)'
- artifactName: 'BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr'
- displayName: 'Runtime artifacts'
-
- - template: /eng/pipelines/common/download-artifact-step.yml
- parameters:
- unpackFolder: $(librariesDownloadDir)/LinuxMonoAOT
- artifactFileName: LinuxMonoAOT${{ parameters.archType }}.tar.gz
- artifactName: LinuxMonoAOT${{ parameters.archType }}
- displayName: AOT Mono Artifacts
-
- - script: "mkdir -p $(librariesDownloadDir)/bin/aot;mkdir -p $(librariesDownloadDir)/bin/aot/pack;cp -r $(librariesDownloadDir)/LinuxMonoAOT/artifacts/bin/mono/linux.${{ parameters.archType }}.Release/cross/linux-${{ parameters.archType }}/* $(librariesDownloadDir)/bin/aot;cp -r $(librariesDownloadDir)/LinuxMonoAOT/artifacts/bin/microsoft.netcore.app.runtime.linux-${{ parameters.archType }}/Release/* $(librariesDownloadDir)/bin/aot/pack"
- displayName: "Create aot directory (Linux)"
- - ${{ elseif in(parameters.runtimeType, 'coreclr', 'mono') }}:
- - template: /eng/pipelines/common/download-artifact-step.yml
- parameters:
- unpackFolder: $(Build.SourcesDirectory)/artifacts/bin
- artifactFileName: 'BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_${{ parameters.runtimeType }}$(archiveExtension)'
- artifactName: 'BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_${{ parameters.runtimeType }}'
- displayName: 'Runtime artifacts'
-
- - ${{ elseif eq(parameters.runtimeType, 'AndroidMono')}}:
- # Download artifacts for Android Testing
- - template: /eng/pipelines/common/download-artifact-step.yml
- parameters:
- unpackFolder: $(Build.SourcesDirectory)/androidHelloWorld
- cleanUnpackFolder: false
- artifactFileName: 'AndroidMonoarm64.tar.gz'
- artifactName: 'AndroidMonoarm64'
- displayName: 'Mono Android HelloWorld'
- - template: /eng/pipelines/common/download-artifact-step.yml
- parameters:
- unpackFolder: $(Build.SourcesDirectory)
- cleanUnpackFolder: false
- artifactFileName: 'AndroidBDNApk.tar.gz'
- artifactName: 'AndroidBDNApk'
- displayName: 'Mono Android BDN Apk'
-
- # Download iOSMono and Native AOT tests
- - ${{ elseif or(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.runtimeType, 'iOSNativeAOT')) }}:
- - template: /eng/pipelines/common/download-artifact-step.yml
- parameters:
- unpackFolder: $(Build.SourcesDirectory)/iosHelloWorld
- cleanUnpackFolder: false
- ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.iOSLlvmBuild, 'False'), eq(parameters.iOSStripSymbols, 'False')) }}:
- artifactName: 'iOSSampleAppNoLLVMSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- artifactFileName: 'iOSSampleAppNoLLVMSymbolsHybridGlobalization${{parameters.hybridGlobalization}}.zip'
- ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.iOSLlvmBuild, 'False'), eq(parameters.iOSStripSymbols, 'True')) }}:
- artifactName: 'iOSSampleAppNoLLVMNoSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- artifactFileName: 'iOSSampleAppNoLLVMNoSymbolsHybridGlobalization${{parameters.hybridGlobalization}}.zip'
- ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.iOSLlvmBuild, 'True'), eq(parameters.iOSStripSymbols, 'False')) }}:
- artifactName: 'iOSSampleAppLLVMSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- artifactFileName: 'iOSSampleAppLLVMSymbolsHybridGlobalization${{parameters.hybridGlobalization}}.zip'
- ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.iOSLlvmBuild, 'True'), eq(parameters.iOSStripSymbols, 'True')) }}:
- artifactName: 'iOSSampleAppLLVMNoSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- artifactFileName: 'iOSSampleAppLLVMNoSymbolsHybridGlobalization${{parameters.hybridGlobalization}}.zip'
- ${{ if and(eq(parameters.runtimeType, 'iOSNativeAOT'), eq(parameters.iOSStripSymbols, 'False')) }}:
- artifactName: 'iOSSampleAppSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- artifactFileName: 'iOSSampleAppSymbolsHybridGlobalization${{parameters.hybridGlobalization}}.zip'
- ${{ if and(eq(parameters.runtimeType, 'iOSNativeAOT'), eq(parameters.iOSStripSymbols, 'True')) }}:
- artifactName: 'iOSSampleAppNoSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- artifactFileName: 'iOSSampleAppNoSymbolsHybridGlobalization${{parameters.hybridGlobalization}}.zip'
- displayName: 'iOS Sample App'
- # same artifact as above but don't extract .zip
- - task: DownloadBuildArtifacts@0
- displayName: 'Download iOS Sample App'
- inputs:
- buildType: current
- downloadType: single
- downloadPath: '$(Build.SourcesDirectory)/iosHelloWorldZip'
- ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.iOSLlvmBuild, 'False'), eq(parameters.iOSStripSymbols, 'False')) }}:
- artifactName: 'iOSSampleAppNoLLVMSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.iOSLlvmBuild, 'False'), eq(parameters.iOSStripSymbols, 'True')) }}:
- artifactName: 'iOSSampleAppNoLLVMNoSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.iOSLlvmBuild, 'True'), eq(parameters.iOSStripSymbols, 'False')) }}:
- artifactName: 'iOSSampleAppLLVMSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- ${{ if and(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.iOSLlvmBuild, 'True'), eq(parameters.iOSStripSymbols, 'True')) }}:
- artifactName: 'iOSSampleAppLLVMNoSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- ${{ if and(eq(parameters.runtimeType, 'iOSNativeAOT'), eq(parameters.iOSStripSymbols, 'False')) }}:
- artifactName: 'iOSSampleAppSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- ${{ if and(eq(parameters.runtimeType, 'iOSNativeAOT'), eq(parameters.iOSStripSymbols, 'True')) }}:
- artifactName: 'iOSSampleAppNoSymbolsHybridGlobalization${{parameters.hybridGlobalization}}'
- checkDownloadedFiles: true
-
- # Create Core_Root
- - script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) $(buildConfig) $(archType) generatelayoutonly $(librariesOverrideArg) $(_crossBuildPropertyArg)
- displayName: Create Core_Root
- condition: and(succeeded(), ne(variables.runtimeFlavorName, 'Mono'), not(in('${{ parameters.runtimeType }}', 'wasm', 'AndroidMono', 'iOSMono', 'iOSNativeAOT')))
-
- - task: CopyFiles@2
- displayName: Create .dotnet-mono folder
- inputs:
- SourceFolder: $(Build.SourcesDirectory)/artifacts/bin/testhost/${{ parameters.framework }}-$(osGroup)-$(buildConfigUpper)-$(archType)
- TargetFolder: $(Build.SourcesDirectory)/.dotnet-mono
- condition: and(succeeded(), eq(variables.runtimeFlavorName, 'Mono'), ne(variables.osGroup, 'windows'), notIn('${{ parameters.runtimeType }}', 'wasm', 'AndroidMono', 'iOSMono', 'iOSNativeAOT'))
-
- - task: CopyFiles@2
- displayName: Copy corerun to .dotnet-mono
- inputs:
- SourceFolder: $(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(buildConfigUpper)
- Contents: 'corerun*'
- TargetFolder: $(Build.SourcesDirectory)/.dotnet-mono/shared/Microsoft.NETCore.App/$(productVersion)
- condition: and(succeeded(), eq(variables.runtimeFlavorName, 'Mono'), ne(variables.osGroup, 'windows'), notIn('${{ parameters.runtimeType }}', 'wasm', 'AndroidMono', 'iOSMono', 'iOSNativeAOT'))
diff --git a/eng/pipelines/coreclr/templates/perf-send-to-helix.yml b/eng/pipelines/coreclr/templates/perf-send-to-helix.yml
deleted file mode 100644
index f021d666292a87..00000000000000
--- a/eng/pipelines/coreclr/templates/perf-send-to-helix.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-parameters:
- ProjectFile: '' # required -- project file that specifies the helix workitems
- osGroup: '' # required -- operating system for the job
- DisplayNamePrefix: 'Send job to Helix' # optional -- rename the beginning of the displayName of the steps in AzDO
- condition: succeeded() # optional -- condition for step to execute; defaults to succeeded()
- continueOnError: false # optional -- determines whether to continue the build if the step errors; defaults to false
-
-steps:
-- template: /eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml
- parameters:
- osGroup: ${{ parameters.osGroup }}
- sendParams: ${{ parameters.ProjectFile }} /restore /t:Test /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog
- displayName: ${{ parameters.DisplayNamePrefix }}
- condition: ${{ parameters.condition }}
- shouldContinueOnError: ${{ parameters.continueOnError }}
- environment:
- BuildConfig: $(_BuildConfig)
- SYSTEM_ACCESSTOKEN: $(System.AccessToken)
diff --git a/eng/pipelines/coreclr/templates/remove-diagnostic-certs.yml b/eng/pipelines/coreclr/templates/remove-diagnostic-certs.yml
index e2ee7c8d224d7f..c510ea8f177cf7 100644
--- a/eng/pipelines/coreclr/templates/remove-diagnostic-certs.yml
+++ b/eng/pipelines/coreclr/templates/remove-diagnostic-certs.yml
@@ -1,11 +1,11 @@
parameters:
- isOfficialBuild:
- type: boolean
- displayName: 'Is Official Build'
+ isOfficialBuild: false
+ scriptRoot: '$(Build.SourcesDirectory)'
steps:
- ${{ if and(eq(parameters.isOfficialBuild, true), ne(variables['Build.Reason'], 'PullRequest'), or(startswith(variables['Build.SourceBranch'], 'refs/heads/release/'), startswith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'), startswith(variables['Build.SourceBranch'], 'refs/heads/reltest/')), not(endsWith(variables['Build.SourceBranch'], '-staging'))) }}:
- powershell: |
eng/pipelines/remove-diagnostic-certs.ps1 "$(DacCertificateThumbprints)"
+ workingDirectory: ${{ parameters.scriptRoot }}
displayName: 'Remove Diagnostic Certificates'
condition: always()
diff --git a/eng/pipelines/coreclr/templates/run-performance-job.yml b/eng/pipelines/coreclr/templates/run-performance-job.yml
deleted file mode 100644
index d824377b275256..00000000000000
--- a/eng/pipelines/coreclr/templates/run-performance-job.yml
+++ /dev/null
@@ -1,91 +0,0 @@
-parameters:
- steps: [] # optional -- any additional steps that need to happen before pulling down the performance repo and sending the performance benchmarks to helix (ie building your repo)
- variables: [] # optional -- list of additional variables to send to the template
- jobName: '' # required -- job name
- displayName: '' # optional -- display name for the job. Will use jobName if not passed
- pool: '' # required -- name of the Build pool
- container: '' # required -- name of the container
- buildConfig: '' # required -- build configuration
- archType: '' # required -- targeting CPU architecture
- osGroup: '' # required -- operating system for the job
- osSubgroup: '' # optional -- operating system subgroup
- extraSetupParameters: '' # optional -- extra arguments to pass to the setup script
- frameworks: ['netcoreapp3.0'] # optional -- list of frameworks to run against
- continueOnError: 'false' # optional -- determines whether to continue the build if the step errors
- dependsOn: '' # optional -- dependencies of the job
- timeoutInMinutes: 320 # optional -- timeout for the job
- enableTelemetry: false # optional -- enable for telemetry
- liveLibrariesBuildConfig: '' # optional -- live-live libraries configuration to use for the run
- pgoRunType: '' # optional -- different PGO configurations
- physicalPromotionRunType: '' # optional -- different physical promotion configurations
- r2rRunType: '' # optional -- different R2R configurations
- experimentName: '' # optional -- name of the experiment
- runtimeType: 'coreclr' # optional -- Sets the runtime as coreclr or mono
- codeGenType: 'JIT' # optional -- Decides on the codegen technology if running on mono
- projectFile: '$(Agent.BuildDirectory)/performance/eng/performance/helix.proj' # optional -- project file to build helix workitems
- runKind: '' # required -- test category
- logicalMachine: '' # required -- Used to specify a which pool of machines the test should run against
- javascriptEngine: 'NoJS'
- helixTypeSuffix: '' # optional -- appends to HelixType
- additionalSetupParameters: '' # optional -- additional setup parameters that are job-specific
-
-jobs:
-- template: /eng/pipelines/common/templates/runtimes/xplat-job.yml
- parameters:
- dependsOn: ${{ parameters.dependsOn }}
- buildConfig: ${{ parameters.buildConfig }}
- archType: ${{ parameters.archType }}
- osGroup: ${{ parameters.osGroup }}
- osSubgroup: ${{ parameters.osSubgroup }}
- liveLibrariesBuildConfig: ${{ parameters.liveLibrariesBuildConfig }}
- enableTelemetry: ${{ parameters.enableTelemetry }}
- enablePublishBuildArtifacts: true
- continueOnError: ${{ parameters.continueOnError }}
-
- ${{ if ne(parameters.displayName, '') }}:
- displayName: '${{ parameters.displayName }}'
- ${{ if eq(parameters.displayName, '') }}:
- displayName: '${{ parameters.jobName }}'
- name: ${{ replace(replace(parameters.jobName, ' ', '_'), '-', '_') }}
-
- timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
-
- logsName: 'Performance_Run_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)_${{ parameters.runtimeType }}_${{ parameters.codeGenType }}_${{ parameters.runKind }}_${{ parameters.logicalMachine }}_${{ parameters.javascriptEngine }}_${{ parameters.pgoRunType }}_${{ parameters.physicalPromotionRunType }}_${{ parameters.r2rRunType }}_${{ parameters.experimentName }}'
-
- variables:
- - ${{ each variable in parameters.variables }}:
- - ${{insert}}: ${{ variable }}
-
- - name: internalParam
- value: ''
-
- - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- - name: internalParam
- value: --internal
- - group: DotNet-HelixApi-Access
- - group: dotnet-benchview
-
- workspace:
- clean: all
- pool:
- ${{ parameters.pool }}
- ${{ if ne(parameters.runtimeType, 'wasm') }}:
- container: ${{ parameters.container }}
- strategy:
- matrix:
- ${{ each framework in parameters.frameworks }}:
- ${{ framework }}:
- _Framework: ${{ framework }}
- steps:
- - ${{ parameters.steps }}
- - script: $(Python) $(Agent.BuildDirectory)/performance/scripts/run_performance_job.py --framework $(_Framework) $(internalParam) ${{ parameters.extraSetupParameters }} ${{ parameters.additionalSetupParameters }}
- displayName: Run performance job script
- env:
- HelixAccessToken: '$(HelixApiAccessToken)'
- PerfCommandUploadToken: '$(PerfCommandUploadToken)'
- PerfCommandUploadTokenLinux: '$(PerfCommandUploadTokenLinux)'
- # Run perf testing in helix
- - template: /eng/pipelines/coreclr/templates/perf-send-to-helix.yml
- parameters:
- ProjectFile: ${{ parameters.projectFile }}
- osGroup: ${{ parameters.osGroup }}
diff --git a/eng/pipelines/coreclr/templates/run-scenarios-job.yml b/eng/pipelines/coreclr/templates/run-scenarios-job.yml
deleted file mode 100644
index 2bb05f14835773..00000000000000
--- a/eng/pipelines/coreclr/templates/run-scenarios-job.yml
+++ /dev/null
@@ -1,102 +0,0 @@
-parameters:
- steps: [] # optional -- any additional steps that need to happen before pulling down the performance repo and sending the performance benchmarks to helix (ie building your repo)
- variables: [] # optional -- list of additional variables to send to the template
- jobName: '' # required -- job name
- displayName: '' # optional -- display name for the job. Will use jobName if not passed
- pool: '' # required -- name of the Build pool
- container: '' # required -- name of the container
- buildConfig: '' # required -- build configuration
- archType: '' # required -- targeting CPU architecture
- osGroup: '' # required -- operating system for the job
- osSubgroup: '' # optional -- operating system subgroup
- extraSetupParameters: '' # optional -- extra arguments to pass to the setup script
- frameworks: ['netcoreapp3.0'] # optional -- list of frameworks to run against
- continueOnError: 'false' # optional -- determines whether to continue the build if the step errors
- dependsOn: '' # optional -- dependencies of the job
- timeoutInMinutes: 320 # optional -- timeout for the job
- enableTelemetry: false # optional -- enable for telemetry
- liveLibrariesBuildConfig: '' # optional -- live-live libraries configuration to use for the run
- runtimeType: 'coreclr' # optional -- Sets the runtime as coreclr or mono
- codeGenType: 'JIT' # optional -- Decides on the codegen technology if running on mono
- projectFile: '' # required -- project file to build helix workitems
- runKind: '' # required -- test category
- additionalSetupParameters: '' # optional -- additional setup parameters that are job-specific
-
-jobs:
-- template: /eng/pipelines/common/templates/runtimes/xplat-job.yml
- parameters:
- dependsOn: ${{ parameters.dependsOn }}
- buildConfig: ${{ parameters.buildConfig }}
- archType: ${{ parameters.archType }}
- osGroup: ${{ parameters.osGroup }}
- osSubgroup: ${{ parameters.osSubgroup }}
- liveLibrariesBuildConfig: ${{ parameters.liveLibrariesBuildConfig }}
- enableTelemetry: ${{ parameters.enableTelemetry }}
- enablePublishBuildArtifacts: true
- continueOnError: ${{ parameters.continueOnError }}
- logsName: 'Performance_Run_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)_${{ parameters.runtimeType }}_${{ parameters.codeGenType }}_${{ parameters.runKind }}_$(iOSLlvmBuild)_$(iOSStripSymbols)_$(hybridGlobalization)'
-
- ${{ if ne(parameters.displayName, '') }}:
- displayName: '${{ parameters.displayName }}'
- ${{ if eq(parameters.displayName, '') }}:
- displayName: '${{ parameters.jobName }}'
- name: ${{ replace(replace(parameters.jobName, ' ', '_'), '-', '_') }}
-
- timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
-
- variables:
- - ${{ each variable in parameters.variables }}:
- - ${{insert}}: ${{ variable }}
-
- - name: internalParam
- value: ''
-
- - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
- - name: internalParam
- value: --internal
- - group: DotNet-HelixApi-Access
- - group: dotnet-benchview
-
- - ExtraSetupArguments: ''
- - name: ExtraSetupArguments
- ${{ if ne(parameters.runtimeType, 'wasm') }}:
- value: --install-dir $(PayloadDirectory)/dotnet
-
- - name: librariesDownloadDir
- value: '$(Build.SourcesDirectory)/artifacts'
-
- workspace:
- clean: all
- pool:
- ${{ parameters.pool }}
- ${{ if ne(parameters.runtimeType, 'wasm') }}:
- container: ${{ parameters.container }}
- strategy:
- matrix:
- ${{ each framework in parameters.frameworks }}:
- ${{ framework }}:
- _Framework: ${{ framework }}
- steps:
- - ${{ parameters.steps }}
- # copy wasm packs if running on wasm (TODO: move to run-performance-job.py)
- - script: >-
- mkdir -p $(librariesDownloadDir)/bin/wasm/data &&
- cp -r $(librariesDownloadDir)/BrowserWasm/staging/dotnet-latest $(librariesDownloadDir)/bin/wasm &&
- cp -r $(librariesDownloadDir)/BrowserWasm/staging/built-nugets $(librariesDownloadDir)/bin/wasm &&
- cp src/mono/browser/test-main.js $(librariesDownloadDir)/bin/wasm/data/test-main.js &&
- find $(librariesDownloadDir)/bin/wasm -type f -exec chmod 664 {} \;
- displayName: "Create wasm directory (Linux)"
- condition: and(succeeded(), eq('${{ parameters.runtimeType }}', 'wasm'))
- # run run-performance-job.py
- - script: $(Python) $(Agent.BuildDirectory)/performance/scripts/run_performance_job.py --is-scenario --framework $(_Framework) $(internalParam) ${{ parameters.extraSetupParameters }} ${{ parameters.additionalSetupParameters }}
- displayName: Run performance job script
- env:
- HelixAccessToken: '$(HelixApiAccessToken)'
- PerfCommandUploadToken: '$(PerfCommandUploadToken)'
- PerfCommandUploadTokenLinux: '$(PerfCommandUploadTokenLinux)'
-
- # run perf testing in helix
- - template: /eng/pipelines/coreclr/templates/perf-send-to-helix.yml
- parameters:
- ProjectFile: ${{ parameters.projectFile }}
- osGroup: ${{ parameters.osGroup }}
diff --git a/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml b/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml
index 06b65b209ba500..f0b197b68db9ac 100644
--- a/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml
+++ b/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml
@@ -55,12 +55,6 @@ jobs:
runAOT: true
alwaysRun: true
- # Disabled for now
- #- template: /eng/pipelines/coreclr/perf-wasm-jobs.yml
- #parameters:
- #runProfile: 'v8'
- #onlySanityCheck: true
-
#
# ********** For !rolling builds, IOW - PR builds *************
# - run everything, if relevant paths changed
@@ -197,12 +191,6 @@ jobs:
isExtraPlatformsBuild: ${{ parameters.isExtraPlatformsBuild }}
isWasmOnlyBuild: ${{ parameters.isWasmOnlyBuild }}
- # Disable for now
- #- template: /eng/pipelines/coreclr/perf-wasm-jobs.yml
- #parameters:
- #runProfile: 'v8'
- #onlySanityCheck: true
-
- ${{ if and(ne(parameters.isRollingBuild, true), ne(parameters.excludeOptional, true)) }}:
- template: /eng/pipelines/common/templates/wasm-library-tests.yml
parameters:
diff --git a/eng/pipelines/libraries/helix-queues-setup.yml b/eng/pipelines/libraries/helix-queues-setup.yml
index bf01c06ae4d66a..46f897e80b259e 100644
--- a/eng/pipelines/libraries/helix-queues-setup.yml
+++ b/eng/pipelines/libraries/helix-queues-setup.yml
@@ -119,14 +119,17 @@ jobs:
# libraries on mono outerloop
- ${{ if and(eq(parameters.jobParameters.testScope, 'outerloop'), eq(parameters.jobParameters.runtimeFlavor, 'mono')) }}:
- Windows.Amd64.Server2022.Open
+ - Windows.Server2025.Amd64.Open
# libraries on coreclr (outerloop and innerloop), or libraries on mono innerloop
- ${{ if or(ne(parameters.jobParameters.testScope, 'outerloop'), ne(parameters.jobParameters.runtimeFlavor, 'mono')) }}:
- ${{ if or(eq(parameters.jobParameters.isExtraPlatformsBuild, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}:
- Windows.Amd64.Server2022.Open
+ - Windows.Server2025.Amd64.Open
- ${{ if ne(parameters.jobParameters.testScope, 'outerloop') }}:
- (Windows.10.Amd64.ServerRS5.Open)windows.10.amd64.serverrs5.open@mcr.microsoft.com/dotnet-buildtools/prereqs:windowsservercore-ltsc2019-helix-amd64
- ${{ if or(ne(parameters.jobParameters.isExtraPlatformsBuild, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}:
- Windows.Amd64.Server2022.Open
+ - Windows.Server2025.Amd64.Open
- Windows.11.Amd64.Client.Open
- ${{ if eq(parameters.jobParameters.testScope, 'outerloop') }}:
- (Windows.10.Amd64.ServerRS5.Open)windows.10.amd64.serverrs5.open@mcr.microsoft.com/dotnet-buildtools/prereqs:windowsservercore-ltsc2019-helix-amd64
@@ -147,11 +150,9 @@ jobs:
- Windows.11.Amd64.Client.Open
# libraries on coreclr (outerloop and innerloop), or libraries on mono innerloop
- ${{ if or(ne(parameters.jobParameters.testScope, 'outerloop'), ne(parameters.jobParameters.runtimeFlavor, 'mono')) }}:
+ - Windows.Server2025.Amd64.Open
- ${{ if or(eq(parameters.jobParameters.isExtraPlatformsBuild, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}:
- Windows.11.Amd64.Client.Open
- - Windows.Amd64.Server2022.Open
- - ${{ if or(ne(parameters.jobParameters.isExtraPlatformsBuild, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}:
- - Windows.Amd64.Server2022.Open
# .NETFramework
- ${{ if eq(parameters.jobParameters.framework, 'net48') }}:
@@ -176,5 +177,6 @@ jobs:
# Browser WebAssembly windows
- ${{ if in(parameters.platform, 'browser_wasm_win', 'wasi_wasm_win') }}:
- (Windows.Amd64.Server2022.Open)windows.amd64.server2022.open@mcr.microsoft.com/dotnet-buildtools/prereqs:windowsservercore-ltsc2022-helix-webassembly
+ - (Windows.Server2025.Amd64.Open)windows.server2025.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:windowsservercore-ltsc2025-helix-webassembly-amd64
${{ insert }}: ${{ parameters.jobParameters }}
diff --git a/eng/pipelines/performance/perf-slow.yml b/eng/pipelines/performance/perf-slow.yml
new file mode 100644
index 00000000000000..d30ecea46d79a5
--- /dev/null
+++ b/eng/pipelines/performance/perf-slow.yml
@@ -0,0 +1,65 @@
+parameters:
+- name: runPrivateJobs
+ type: boolean
+ default: false
+- name: runScheduledJobs
+ type: boolean
+ default: false
+- name: onlySanityCheck
+ type: boolean
+ default: false
+
+trigger:
+ batch: true
+ branches:
+ include:
+ - main
+ - release/9.0
+ paths:
+ include:
+ - '*'
+ - src/libraries/System.Private.CoreLib/*
+ exclude:
+ - '**.md'
+ - .devcontainer/*
+ - .github/*
+ - docs/*
+ - LICENSE.TXT
+ - PATENTS.TXT
+ - THIRD-PARTY-NOTICES.TXT
+
+resources:
+ repositories:
+ - repository: performance
+ type: git
+ name: internal/dotnet-performance
+
+variables:
+ - template: /eng/pipelines/common/variables.yml
+
+schedules:
+- cron: "30 2 * * *"
+ displayName: Every night at 2:30AM
+ branches:
+ include:
+ - main
+ always: true
+
+extends:
+ template: /eng/pipelines/common/templates/pipeline-with-resources.yml
+ parameters:
+ stages:
+ - stage: Build
+ jobs:
+ - ${{ if ne(variables['System.TeamProject'], 'public') }}:
+ - template: /eng/pipelines/runtime-slow-perf-jobs.yml@performance
+ parameters:
+ ${{ if or(in(variables['Build.Reason'], 'Schedule'), parameters.runScheduledJobs) }}:
+ runScheduledJobs: true
+ ${{ if or(notin(variables['Build.Reason'], 'Schedule', 'Manual'), parameters.runPrivateJobs) }}:
+ runPrivateJobs: true
+ runtimeRepoAlias: self
+ performanceRepoAlias: performance
+ jobParameters:
+ ${{ if parameters.onlySanityCheck }}:
+ onlySanityCheck: true
\ No newline at end of file
diff --git a/eng/pipelines/performance/perf.yml b/eng/pipelines/performance/perf.yml
new file mode 100644
index 00000000000000..e717fbe4915927
--- /dev/null
+++ b/eng/pipelines/performance/perf.yml
@@ -0,0 +1,76 @@
+parameters:
+ - name: onlySanityCheck
+ type: boolean
+ default: false
+
+trigger:
+ batch: true
+ branches:
+ include:
+ - main
+ - release/9.0
+ - release/8.0
+ paths:
+ include:
+ - '*'
+ - src/libraries/System.Private.CoreLib/*
+ exclude:
+ - '**.md'
+ - .devcontainer/*
+ - .github/*
+ - docs/*
+ - LICENSE.TXT
+ - PATENTS.TXT
+ - THIRD-PARTY-NOTICES.TXT
+
+resources:
+ repositories:
+ - repository: performance
+ type: git
+ name: internal/dotnet-performance
+
+variables:
+- template: /eng/pipelines/common/variables.yml
+
+#
+# For the 'schedule' case, only wasm/jsc perf jobs are run.
+# And the rest are build jobs - wasm, mono, coreclr, and libraries.
+#
+# Since, we are not running *any* perf jobs, none of these builds are needed,
+# thus the whole scheduled run can be disabled.
+#
+schedules:
+- cron: "0 0 * * 1"
+ displayName: Weekly Monday 12am UTC Build
+ branches:
+ include:
+ - main
+ always: true
+
+extends:
+ template: /eng/pipelines/common/templates/pipeline-with-resources.yml
+ parameters:
+ stages:
+ - stage: Build
+ jobs:
+
+ - template: /eng/pipelines/runtime-wasm-perf-jobs.yml@performance
+ parameters:
+ #${{ and(ne(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'Schedule')) }}:
+ # runProfile: 'non-v8'
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ runProfile: 'v8'
+ runtimeRepoAlias: self
+ performanceRepoAlias: performance
+ jobParameters:
+ ${{ if parameters.onlySanityCheck }}:
+ onlySanityCheck: true
+
+ - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'Schedule')) }}:
+ - template: /eng/pipelines/runtime-perf-jobs.yml@performance
+ parameters:
+ runtimeRepoAlias: self
+ performanceRepoAlias: performance
+ jobParameters:
+ ${{ if parameters.onlySanityCheck }}:
+ onlySanityCheck: true
diff --git a/eng/pipelines/performance/runtime-wasm-perf.yml b/eng/pipelines/performance/runtime-wasm-perf.yml
new file mode 100644
index 00000000000000..bb99c421344af8
--- /dev/null
+++ b/eng/pipelines/performance/runtime-wasm-perf.yml
@@ -0,0 +1,43 @@
+# This is a wrapper yml for `perf-wasm-jobs`, which has all the perf related
+# wasm jobs. This file is essentially so we can point the pipeline in azdo
+# UI to this, and thus avoid any scheduled triggers
+
+trigger: none
+
+pr:
+ branches:
+ include:
+ - main
+ paths:
+ include:
+ - eng/pipelines/performance/*
+ - eng/testing/performance/*
+ - eng/testing/BrowserVersions.props
+
+resources:
+ repositories:
+ - repository: performance
+ type: github
+ name: dotnet/performance
+ endpoint: public
+
+variables:
+ - template: /eng/pipelines/common/variables.yml
+
+extends:
+ template: /eng/pipelines/common/templates/pipeline-with-resources.yml
+ parameters:
+ stages:
+ - stage: Build
+ jobs:
+ - template: /eng/pipelines/runtime-wasm-perf-jobs.yml@performance
+ parameters:
+ runtimeRepoAlias: self
+ performanceRepoAlias: performance
+ runProfile: 'v8'
+ jobParameters:
+ onlySanityCheck: true
+ #downloadSpecificBuild:
+ #buildId: '1878694'
+ #pipeline: 'perf-wasm'
+ #branchName: 'refs/pull/72119/head'
diff --git a/eng/pipelines/coreclr/templates/build-perf-bdn-app.yml b/eng/pipelines/performance/templates/build-perf-bdn-app.yml
similarity index 100%
rename from eng/pipelines/coreclr/templates/build-perf-bdn-app.yml
rename to eng/pipelines/performance/templates/build-perf-bdn-app.yml
diff --git a/eng/pipelines/coreclr/templates/build-perf-maui-apps-net6.yml b/eng/pipelines/performance/templates/build-perf-maui-apps-net6.yml
similarity index 100%
rename from eng/pipelines/coreclr/templates/build-perf-maui-apps-net6.yml
rename to eng/pipelines/performance/templates/build-perf-maui-apps-net6.yml
diff --git a/eng/pipelines/coreclr/templates/build-perf-maui-apps-net7.yml b/eng/pipelines/performance/templates/build-perf-maui-apps-net7.yml
similarity index 100%
rename from eng/pipelines/coreclr/templates/build-perf-maui-apps-net7.yml
rename to eng/pipelines/performance/templates/build-perf-maui-apps-net7.yml
diff --git a/eng/pipelines/coreclr/templates/build-perf-sample-apps.yml b/eng/pipelines/performance/templates/build-perf-sample-apps.yml
similarity index 100%
rename from eng/pipelines/coreclr/templates/build-perf-sample-apps.yml
rename to eng/pipelines/performance/templates/build-perf-sample-apps.yml
diff --git a/eng/pipelines/performance/templates/perf-arm64-build-jobs.yml b/eng/pipelines/performance/templates/perf-arm64-build-jobs.yml
new file mode 100644
index 00000000000000..f15b89c09ace81
--- /dev/null
+++ b/eng/pipelines/performance/templates/perf-arm64-build-jobs.yml
@@ -0,0 +1,77 @@
+parameters:
+ mono: false
+ coreclr: false
+ monoAot: false
+
+jobs:
+ - ${{ if eq(parameters.mono, true) }}:
+ # build mono
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - linux_arm64
+ jobParameters:
+ nameSuffix: mono
+ buildArgs: -s mono+clr.iltools+clr.hosts+libs+host+packs -c $(_BuildConfig)
+ isOfficialBuild: false
+ postBuildSteps:
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: $(Build.SourcesDirectory)/artifacts/bin
+ includeRootFolder: false
+ archiveType: $(archiveType)
+ archiveExtension: $(archiveExtension)
+ tarCompression: $(tarCompression)
+ artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_mono
+ displayName: Build Assets
+
+ - ${{ if eq(parameters.coreclr, true) }}:
+ # build coreclr and libraries
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ platforms:
+ - linux_arm64
+ - windows_arm64
+ jobParameters:
+ nameSuffix: coreclr
+ buildArgs: -s clr+libs+host+packs -c $(_BuildConfig)
+ isOfficialBuild: false
+ postBuildSteps:
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: $(Build.SourcesDirectory)/artifacts/bin
+ includeRootFolder: false
+ archiveType: $(archiveType)
+ archiveExtension: $(archiveExtension)
+ tarCompression: $(tarCompression)
+ artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr
+ displayName: Build Assets
+
+ - ${{ if eq(parameters.monoAot, true) }}:
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ runtimeVariant: 'llvmaot'
+ platforms:
+ - linux_arm64
+ jobParameters:
+ buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:MonoAOTEnableLLVM=true /p:MonoEnableLLVM=true /p:BuildMonoAOTCrossCompiler=true /p:AotHostArchitecture=arm64 /p:AotHostOS=linux
+ nameSuffix: AOT
+ isOfficialBuild: false
+ postBuildSteps:
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: '$(Build.SourcesDirectory)/artifacts/'
+ includeRootFolder: true
+ displayName: AOT Mono Artifacts
+ artifactName: LinuxMonoAOTarm64
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
\ No newline at end of file
diff --git a/eng/pipelines/performance/templates/perf-build-jobs.yml b/eng/pipelines/performance/templates/perf-build-jobs.yml
new file mode 100644
index 00000000000000..a69f35ce11a3e6
--- /dev/null
+++ b/eng/pipelines/performance/templates/perf-build-jobs.yml
@@ -0,0 +1,143 @@
+parameters:
+ perfBranch: 'main' # Currently only used for building the BDN App
+
+jobs:
+ # build coreclr and libraries
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ platforms:
+ - linux_x64
+ - windows_x64
+ - windows_x86
+ - linux_musl_x64
+ jobParameters:
+ nameSuffix: coreclr
+ buildArgs: -s clr+libs+host+packs -c $(_BuildConfig)
+ isOfficialBuild: false
+ postBuildSteps:
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: $(Build.SourcesDirectory)/artifacts/bin
+ includeRootFolder: false
+ archiveType: $(archiveType)
+ archiveExtension: $(archiveExtension)
+ tarCompression: $(tarCompression)
+ artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr
+ displayName: Build Assets
+
+ # build mono for AOT
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - linux_x64
+ jobParameters:
+ buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:MonoAOTEnableLLVM=true /p:MonoEnableLLVM=true /p:BuildMonoAOTCrossCompiler=true /p:AotHostArchitecture=x64 /p:AotHostOS=linux
+ nameSuffix: AOT
+ isOfficialBuild: false
+ postBuildSteps:
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: '$(Build.SourcesDirectory)/artifacts/'
+ includeRootFolder: true
+ displayName: AOT Mono Artifacts
+ artifactName: LinuxMonoAOTx64
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
+
+ # build mono Android scenarios
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - android_arm64
+ jobParameters:
+ buildArgs: -s mono+libs+host+packs -c $(_BuildConfig)
+ nameSuffix: AndroidMono
+ isOfficialBuild: false
+ postBuildSteps:
+ - template: /eng/pipelines/performance/templates/build-perf-sample-apps.yml
+ parameters:
+ rootFolder: '$(Build.SourcesDirectory)/artifacts/'
+ includeRootFolder: true
+ displayName: Android Mono Artifacts
+ artifactName: AndroidMonoarm64
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
+
+ # build mono
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - linux_x64
+ jobParameters:
+ nameSuffix: mono
+ buildArgs: -s mono+clr.iltools+clr.hosts+libs+host+packs -c $(_BuildConfig)
+ isOfficialBuild: false
+ postBuildSteps:
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: $(Build.SourcesDirectory)/artifacts/bin
+ includeRootFolder: false
+ archiveType: $(archiveType)
+ archiveExtension: $(archiveExtension)
+ tarCompression: $(tarCompression)
+ artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_mono
+ displayName: Build Assets
+
+ # build mono runtime packs
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - android_arm64
+ jobParameters:
+ buildArgs: -s mono+libs+host+packs -c $(_BuildConfig)
+ nameSuffix: Mono_Packs
+ isOfficialBuild: false
+ postBuildSteps:
+ - template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml
+ parameters:
+ name: MonoRuntimePacks
+ isOfficialBuild: false
+
+ # build PerfBDN app
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - ios_arm64
+ jobParameters:
+ dependsOn:
+ - Build_android_arm64_release_Mono_Packs
+ buildArgs: -s mono -c $(_BuildConfig)
+ nameSuffix: PerfBDNApp
+ isOfficialBuild: false
+ pool:
+ vmImage: 'macos-13'
+ postBuildSteps:
+ - template: /eng/pipelines/performance/templates/build-perf-bdn-app.yml
+ parameters:
+ rootFolder: '$(Build.SourcesDirectory)/artifacts/'
+ includeRootFolder: true
+ displayName: Android BDN App Artifacts
+ artifactName: PerfBDNAppArm
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
+ perfBranch: ${{ parameters.perfBranch }}
diff --git a/eng/pipelines/performance/templates/perf-ios-scenarios-build-jobs.yml b/eng/pipelines/performance/templates/perf-ios-scenarios-build-jobs.yml
new file mode 100644
index 00000000000000..d281ef6044ce77
--- /dev/null
+++ b/eng/pipelines/performance/templates/perf-ios-scenarios-build-jobs.yml
@@ -0,0 +1,51 @@
+parameters:
+ hybridGlobalization: true
+
+jobs:
+ # build mono iOS scenarios HybridGlobalization
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - ios_arm64
+ jobParameters:
+ buildArgs: -s mono+libs+host+packs -c $(_BuildConfig)
+ nameSuffix: iOSMono
+ isOfficialBuild: false
+ postBuildSteps:
+ - template: /eng/pipelines/performance/templates/build-perf-sample-apps.yml
+ parameters:
+ rootFolder: '$(Build.SourcesDirectory)/artifacts/'
+ includeRootFolder: true
+ displayName: iOS Mono Artifacts
+ artifactName: iOSMonoarm64
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
+ hybridGlobalization: ${{ parameters.hybridGlobalization }}
+
+ # build NativeAOT iOS scenarios HybridGlobalization
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: coreclr
+ platforms:
+ - ios_arm64
+ jobParameters:
+ buildArgs: --cross -s clr.alljits+clr.tools+clr.nativeaotruntime+clr.nativeaotlibs+libs -c $(_BuildConfig)
+ nameSuffix: iOSNativeAOT
+ isOfficialBuild: false
+ postBuildSteps:
+ - template: /eng/pipelines/performance/templates/build-perf-sample-apps.yml
+ parameters:
+ rootFolder: '$(Build.SourcesDirectory)/artifacts/'
+ includeRootFolder: true
+ displayName: iOS NativeAOT Artifacts
+ artifactName: iOSNativeAOTarm64
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
+ hybridGlobalization: ${{ parameters.hybridGlobalization }}
diff --git a/eng/pipelines/performance/templates/perf-wasm-build-jobs.yml b/eng/pipelines/performance/templates/perf-wasm-build-jobs.yml
new file mode 100644
index 00000000000000..a31a3727b423a4
--- /dev/null
+++ b/eng/pipelines/performance/templates/perf-wasm-build-jobs.yml
@@ -0,0 +1,16 @@
+jobs:
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: Release
+ runtimeFlavor: mono
+ platforms:
+ - browser_wasm
+ jobParameters:
+ buildArgs: -s mono+libs+host+packs -c $(_BuildConfig) /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS)
+ nameSuffix: wasm
+ isOfficialBuild: false
+ postBuildSteps:
+ - template: /eng/pipelines/performance/templates/perf-wasm-prepare-artifacts-steps.yml
+ parameters:
+ configForBuild: Release
\ No newline at end of file
diff --git a/eng/pipelines/coreclr/perf-wasm-prepare-artifacts-steps.yml b/eng/pipelines/performance/templates/perf-wasm-prepare-artifacts-steps.yml
similarity index 100%
rename from eng/pipelines/coreclr/perf-wasm-prepare-artifacts-steps.yml
rename to eng/pipelines/performance/templates/perf-wasm-prepare-artifacts-steps.yml
diff --git a/eng/pipelines/runtime-linker-tests.yml b/eng/pipelines/runtime-linker-tests.yml
index 2b001b769f50f9..712890ffe1cfb0 100644
--- a/eng/pipelines/runtime-linker-tests.yml
+++ b/eng/pipelines/runtime-linker-tests.yml
@@ -18,10 +18,7 @@ trigger:
- LICENSE.TXT
- PATENTS.TXT
- THIRD-PARTY-NOTICES.TXT
- - eng/pipelines/coreclr/perf*yml
- - eng/pipelines/coreclr/templates/build-perf*
- - eng/pipelines/coreclr/templates/perf-job.yml
- - eng/pipelines/coreclr/templates/run-perf*
+ - eng/pipelines/performance/*
- eng/testing/performance/*
schedules:
diff --git a/eng/pipelines/runtime-official.yml b/eng/pipelines/runtime-official.yml
index d167fa18712556..03c4308e13aebf 100644
--- a/eng/pipelines/runtime-official.yml
+++ b/eng/pipelines/runtime-official.yml
@@ -151,7 +151,6 @@ extends:
#
# Build all runtime packs for Linux and Linux musl
- # Upload CoreCLR runtime for CrossDac packaging
#
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
@@ -171,26 +170,10 @@ extends:
isOfficialBuild: ${{ variables.isOfficialBuild }}
timeoutInMinutes: 120
postBuildSteps:
- # Upload libcoreclr.so for CrossDac packaging
- - task: CopyFiles@2
- displayName: Gather runtime for CrossDac
- inputs:
- SourceFolder: $(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(_BuildConfig)
- Contents: libcoreclr.so
- TargetFolder: $(Build.SourcesDirectory)/artifacts/CoreCLRCrossDacArtifacts/$(osGroup)$(osSubgroup).$(archType).$(_BuildConfig)/$(crossDacHostArch)
- - task: 1ES.PublishBuildArtifacts@1
- displayName: Publish runtime for CrossDac
- inputs:
- PathtoPublish: $(Build.SourcesDirectory)/artifacts/CoreCLRCrossDacArtifacts
- PublishLocation: Container
- ArtifactName: CoreCLRCrossDacArtifacts
-
# Upload the results.
- template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml
parameters:
name: $(osGroup)$(osSubgroup)_$(archType)
- extraVariablesTemplates:
- - template: /eng/pipelines/coreclr/templates/crossdac-hostarch.yml
#
# Build and Pack CrossDac
@@ -203,17 +186,21 @@ extends:
- windows_x64
jobParameters:
templatePath: 'templates-official'
- buildArgs: -s crossdacpack -c $(_BuildConfig) /p:CrossDacArtifactsDir=$(crossDacArtifactsPath)
+ buildArgs: -s crossdacpack -c $(_BuildConfig) /p:CrossRuntimeExtractionRoot=$(CrossRuntimeExtractionRoot) $(_SignDiagnosticFilesArgs)
nameSuffix: CrossDac
isOfficialBuild: ${{ variables.isOfficialBuild }}
timeoutInMinutes: 120
preBuildSteps:
- - task: DownloadBuildArtifacts@0
- displayName: Download Runtimes for CrossDac packaging
+ - task: DownloadPipelineArtifact@2
+ displayName: Download runtime packs for CrossDac
inputs:
- artifactName: $(crossDacArtifactsContainer)
- downloadPath: $(crossDacArtifactsBasePath)
- checkDownloadedFiles: true
+ artifact: 'IntermediateArtifacts'
+ path: $(Build.SourcesDirectory)/artifacts/RuntimeDownload
+ patterns: |
+ IntermediateArtifacts/linux_*/Shipping/Microsoft.NETCore.App.Runtime.linux-*.nupkg
+ !IntermediateArtifacts/linux_*/Shipping/Microsoft.NETCore.App.Runtime.linux-*.symbols.nupkg
+ - powershell: $(Build.SourcesDirectory)/eng/extract-for-crossdac.ps1 -DownloadDirectory $(Build.SourcesDirectory)/artifacts/RuntimeDownload -ExtractDirectory $(CrossRuntimeExtractionRoot)
+ displayName: Extract runtime packs
- template: /eng/pipelines/coreclr/templates/install-diagnostic-certs.yml
parameters:
isOfficialBuild: ${{ variables.isOfficialBuild }}
@@ -222,22 +209,10 @@ extends:
- 'dotnet-diagnostics-esrp-pki-onecert'
vaultName: 'clrdiag-esrp-id'
azureSubscription: 'diagnostics-esrp-kvcertuser'
- - template: /eng/pipelines/common/templates/global-build-step.yml
- parameters:
- buildArgs: -s linuxdac+alpinedac -c $(_BuildConfig) $(_SignDiagnosticFilesArgs)
- archParameter: -arch x64,x86,arm,arm64
+ postBuildSteps:
- template: /eng/pipelines/coreclr/templates/remove-diagnostic-certs.yml
parameters:
isOfficialBuild: ${{ variables.isOfficialBuild }}
- - task: CopyFiles@2
- displayName: Gather CrossDacs
- inputs:
- SourceFolder: $(Build.SourcesDirectory)/artifacts/bin/coreclr
- Contents: |
- **
- !**\sharedFramework\**
- TargetFolder: $(crossDacArtifactsPath)
- postBuildSteps:
# Save packages using the prepare-signed-artifacts format.
# CrossDac packages are expected to be in the windows_x64 folder.
- template: /eng/pipelines/common/upload-intermediate-artifacts-step.yml
@@ -251,12 +226,10 @@ extends:
- build_linux_musl_arm_release_AllRuntimes
- build_linux_musl_arm64_release_AllRuntimes
variables:
- - name: crossDacArtifactsContainer
- value: CoreCLRCrossDacArtifacts
- - name: crossDacArtifactsBasePath
- value: $(Build.StagingDirectory)/CrossDac
- - name: crossDacArtifactsPath
- value: $(crossDacArtifactsBasePath)/$(crossDacArtifactsContainer)
+ - name: CrossRuntimeExtractionRoot
+ value: $(Build.SourcesDirectory)/artifacts/CrossDac
+ - name: _SignDiagnosticFilesArgs
+ value: ''
#
# Build All runtime packs for mobile platforms
diff --git a/eng/pipelines/runtime-wasm-perf.yml b/eng/pipelines/runtime-wasm-perf.yml
index b07b619773398c..168ab93576ba56 100644
--- a/eng/pipelines/runtime-wasm-perf.yml
+++ b/eng/pipelines/runtime-wasm-perf.yml
@@ -1,13 +1,9 @@
+# This file will be deleted in a follow-up PR once we have changed the pipeline in Azure Pipelines to point to /eng/pipelines/performance/runtime-wasm-perf.yml
+
# This is a wrapper yml for `perf-wasm-jobs`, which has all the perf related
# wasm jobs. This file is essentially so we can point the pipeline in azdo
# UI to this, and thus avoid any scheduled triggers
-parameters:
-- name: perfBranch
- displayName: Performance Repo Branch
- type: string
- default: 'main'
-
trigger: none
pr:
@@ -16,14 +12,17 @@ pr:
- main
paths:
include:
- - eng/pipelines/runtime-wasm-perf.yml
- - eng/pipelines/coreclr/perf*.yml
- - eng/pipelines/coreclr/templates/perf-job.yml
- - eng/pipelines/coreclr/templates/run-perf*
- - eng/pipelines/coreclr/templates/run-scenarios-job.yml
+ - eng/pipelines/performance/*
- eng/testing/performance/*
- eng/testing/BrowserVersions.props
+resources:
+ repositories:
+ - repository: performance
+ type: github
+ name: dotnet/performance
+ endpoint: public
+
variables:
- template: /eng/pipelines/common/variables.yml
@@ -33,12 +32,13 @@ extends:
stages:
- stage: Build
jobs:
- - template: /eng/pipelines/coreclr/perf-wasm-jobs.yml
+ - template: /eng/pipelines/runtime-wasm-perf-jobs.yml@performance
parameters:
+ runtimeRepoAlias: self
+ performanceRepoAlias: performance
runProfile: 'v8'
- collectHelixLogsScript: ${{ variables._wasmCollectHelixLogsScript }}
- onlySanityCheck: true
- perfBranch: ${{ parameters.perfBranch }}
+ jobParameters:
+ onlySanityCheck: true
#downloadSpecificBuild:
#buildId: '1878694'
#pipeline: 'perf-wasm'
diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml
index 40b8d9fbba4aec..f39bb89d3294fb 100644
--- a/eng/pipelines/runtime.yml
+++ b/eng/pipelines/runtime.yml
@@ -19,10 +19,7 @@ trigger:
- LICENSE.TXT
- PATENTS.TXT
- THIRD-PARTY-NOTICES.TXT
- - eng/pipelines/coreclr/perf*yml
- - eng/pipelines/coreclr/templates/build-perf*
- - eng/pipelines/coreclr/templates/perf-job.yml
- - eng/pipelines/coreclr/templates/run-perf*
+ - eng/pipelines/performance/*
- eng/testing/performance/*
schedules:
diff --git a/eng/testing/BrowserVersions.props b/eng/testing/BrowserVersions.props
index 674577d8559fc2..04449d76d065fa 100644
--- a/eng/testing/BrowserVersions.props
+++ b/eng/testing/BrowserVersions.props
@@ -4,10 +4,10 @@
1381561
https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/1381561
13.2.152
- 132.0.6834.84
- 1381561
- https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/1381570
- 13.2.152
+ 133.0.6943.35
+ 1402768
+ https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/1402771
+ 13.3.415
125.0.1
0.34.0
125.0.1
diff --git a/eng/testing/tests.singlefile.targets b/eng/testing/tests.singlefile.targets
index be4d606f0891d6..9c5585602da775 100644
--- a/eng/testing/tests.singlefile.targets
+++ b/eng/testing/tests.singlefile.targets
@@ -28,6 +28,7 @@
$(CoreCLRAotSdkDir)
$(NetCoreAppCurrentTestHostSharedFrameworkPath)
$(NetCoreAppCurrentTestHostSharedFrameworkPath)
+ module compiled with /GL found
$(NoWarn);IL1005;IL2122;IL3000;IL3001;IL3002;IL3003;IL3050;IL3051;IL3052;IL3053
partial
true
diff --git a/global.json b/global.json
index 2d83db85c8d9bd..d00329a3e0da85 100644
--- a/global.json
+++ b/global.json
@@ -8,9 +8,9 @@
"dotnet": "10.0.100-alpha.1.25077.2"
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25080.5",
- "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.25080.5",
- "Microsoft.DotNet.SharedFramework.Sdk": "10.0.0-beta.25080.5",
+ "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25080.7",
+ "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.25080.7",
+ "Microsoft.DotNet.SharedFramework.Sdk": "10.0.0-beta.25080.7",
"Microsoft.Build.NoTargets": "3.7.0",
"Microsoft.Build.Traversal": "3.4.0",
"Microsoft.NET.Sdk.IL": "10.0.0-alpha.1.25068.1"
diff --git a/src/coreclr/.nuget/Microsoft.CrossOsDiag.Private.CoreCLR/Microsoft.CrossOsDiag.Private.CoreCLR.pkgproj b/src/coreclr/.nuget/Microsoft.CrossOsDiag.Private.CoreCLR/Microsoft.CrossOsDiag.Private.CoreCLR.pkgproj
index 85c1562e2a3514..b7b0a6b3a02acb 100644
--- a/src/coreclr/.nuget/Microsoft.CrossOsDiag.Private.CoreCLR/Microsoft.CrossOsDiag.Private.CoreCLR.pkgproj
+++ b/src/coreclr/.nuget/Microsoft.CrossOsDiag.Private.CoreCLR/Microsoft.CrossOsDiag.Private.CoreCLR.pkgproj
@@ -4,18 +4,19 @@
false
false
Private transport package for .NET Core cross OS diagnostic tooling.
+ $(ArtifactsBinDir)/coreclr/$(CrossDacOutputDir)
-
-
+
+
runtimes/$(PackageTargetRuntime)/native
-
+
diff --git a/src/coreclr/.nuget/Microsoft.CrossOsDiag.Private.CoreCLR/Microsoft.CrossOsDiag.Private.CoreCLR.proj b/src/coreclr/.nuget/Microsoft.CrossOsDiag.Private.CoreCLR/Microsoft.CrossOsDiag.Private.CoreCLR.proj
index 993908a8e6ea4f..4fbe217f42068c 100644
--- a/src/coreclr/.nuget/Microsoft.CrossOsDiag.Private.CoreCLR/Microsoft.CrossOsDiag.Private.CoreCLR.proj
+++ b/src/coreclr/.nuget/Microsoft.CrossOsDiag.Private.CoreCLR/Microsoft.CrossOsDiag.Private.CoreCLR.proj
@@ -4,21 +4,71 @@
linux-x64;linux-musl-x64;linux-arm64;linux-musl-arm64;linux-arm;linux-musl-arm
-
-
+
+
+ $(NuGetPackageRoot)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_CrossOSDacProject Include="@(SupportedRid->'$(RepoRoot)Build.proj')"
+ AdditionalProperties="TargetOS=%(TargetOS);
+ TargetArchitecture=%(TargetArchitecture);
+ Subset=linuxdac+alpinedac" />
+ <_RuntimePrereqsProject Include="$(CoreClrProjectRoot)runtime-prereqs.proj" />
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
- <_projectsToBuild Include="@(Project)" Condition="$(SupportedRids.Contains('%(Project.PackageTargetRuntime)'))">
- %(AdditionalProperties);CrossDacBinRoot=$(CrossDacArtifactsDir)/linux.x64.$(Configuration)/x64
- %(AdditionalProperties);CrossDacBinRoot=$(CrossDacArtifactsDir)/linux_musl.x64.$(Configuration)/x64
- %(AdditionalProperties);CrossDacBinRoot=$(CrossDacArtifactsDir)/linux.arm64.$(Configuration)/x64
- %(AdditionalProperties);CrossDacBinRoot=$(CrossDacArtifactsDir)/linux_musl.arm64.$(Configuration)/x64
- %(AdditionalProperties);CrossDacBinRoot=$(CrossDacArtifactsDir)/linux.arm.$(Configuration)/x86
- %(AdditionalProperties);CrossDacBinRoot=$(CrossDacArtifactsDir)/linux_musl.arm.$(Configuration)/x86
-
+ <_projectsToBuild CoreCLRRuntimePath="$(CrossRuntimeExtractionRoot)/microsoft.netcore.app.runtime.%(Rid)/$(Version)/runtimes/%(Rid)/native" />
+
+ <_projectsToBuild AdditionalProperties="%(_projectsToBuild.AdditionalProperties);CrossDacOutputDir=%(CrossDacOutputDir);CoreCLRRuntimePath=%(CoreCLRRuntimePath)" />
diff --git a/src/coreclr/System.Private.CoreLib/src/System/RuntimeType.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/RuntimeType.CoreCLR.cs
index 3e77ddeb2acf8c..88113f771b7e41 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/RuntimeType.CoreCLR.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/RuntimeType.CoreCLR.cs
@@ -3365,6 +3365,7 @@ public override unsafe Guid GUID
Guid result;
#if FEATURE_COMINTEROP
+ Debug.Assert(OperatingSystem.IsWindows());
// The fully qualified name is needed since the RuntimeType has a TypeHandle property.
if (System.Runtime.CompilerServices.TypeHandle.AreSameType(th, System.Runtime.CompilerServices.TypeHandle.TypeHandleOf<__ComObject>()))
{
diff --git a/src/coreclr/debug/daccess/CMakeLists.txt b/src/coreclr/debug/daccess/CMakeLists.txt
index fa26f55cc37fa2..6c02154de2e4de 100644
--- a/src/coreclr/debug/daccess/CMakeLists.txt
+++ b/src/coreclr/debug/daccess/CMakeLists.txt
@@ -47,7 +47,7 @@ target_link_libraries(daccess PRIVATE cdacreader_api)
add_dependencies(daccess eventing_headers)
-if(CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS OR CLR_CMAKE_HOST_APPLE)
+if(CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS)
add_definitions(-DUSE_DAC_TABLE_RVA)
set(args $<$>:--dynamic> $ ${GENERATED_INCLUDE_DIR}/dactablerva.h)
@@ -72,4 +72,4 @@ if(CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS OR CL
)
add_dependencies(daccess dactablerva_header)
-endif(CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS OR CLR_CMAKE_HOST_APPLE)
+endif(CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_NETBSD OR CLR_CMAKE_HOST_SUNOS)
diff --git a/src/coreclr/debug/daccess/daccess.cpp b/src/coreclr/debug/daccess/daccess.cpp
index 5deb0937c3acbd..8af160fd73d064 100644
--- a/src/coreclr/debug/daccess/daccess.cpp
+++ b/src/coreclr/debug/daccess/daccess.cpp
@@ -3245,6 +3245,10 @@ ClrDataAccess::QueryInterface(THIS_
{
ifaceRet = static_cast(this);
}
+ else if (IsEqualIID(interfaceId, __uuidof(ISOSDacInterface16)))
+ {
+ ifaceRet = static_cast(this);
+ }
else
{
*iface = NULL;
diff --git a/src/coreclr/debug/daccess/dacimpl.h b/src/coreclr/debug/daccess/dacimpl.h
index 588777171333db..c8947048ec92ef 100644
--- a/src/coreclr/debug/daccess/dacimpl.h
+++ b/src/coreclr/debug/daccess/dacimpl.h
@@ -814,7 +814,8 @@ class ClrDataAccess
public ISOSDacInterface12,
public ISOSDacInterface13,
public ISOSDacInterface14,
- public ISOSDacInterface15
+ public ISOSDacInterface15,
+ public ISOSDacInterface16
{
public:
ClrDataAccess(ICorDebugDataTarget * pTarget, ICLRDataTarget * pLegacyTarget=0);
@@ -1222,6 +1223,9 @@ class ClrDataAccess
// ISOSDacInterface15
virtual HRESULT STDMETHODCALLTYPE GetMethodTableSlotEnumerator(CLRDATA_ADDRESS mt, ISOSMethodEnum **enumerator);
+ // ISOSDacInterface16
+ virtual HRESULT STDMETHODCALLTYPE GetGCDynamicAdaptationMode(int* pDynamicAdaptationMode);
+
//
// ClrDataAccess.
//
diff --git a/src/coreclr/debug/daccess/request.cpp b/src/coreclr/debug/daccess/request.cpp
index 7a07a8c0f6c3c1..9c6669b0810f76 100644
--- a/src/coreclr/debug/daccess/request.cpp
+++ b/src/coreclr/debug/daccess/request.cpp
@@ -2908,6 +2908,24 @@ ClrDataAccess::GetGCHeapStaticData(struct DacpGcHeapDetails *detailsData)
return hr;
}
+HRESULT
+ClrDataAccess::GetGCDynamicAdaptationMode(int* pDynamicAdaptationMode)
+{
+ SOSDacEnter();
+ if (IsDatasEnabled())
+ {
+ *pDynamicAdaptationMode = *g_gcDacGlobals->dynamic_adaptation_mode;
+ hr = S_OK;
+ }
+ else
+ {
+ *pDynamicAdaptationMode = -1;
+ hr = S_FALSE;
+ }
+ SOSDacLeave();
+ return hr;
+}
+
HRESULT
ClrDataAccess::GetHeapSegmentData(CLRDATA_ADDRESS seg, struct DacpHeapSegmentData *heapSegment)
{
diff --git a/src/coreclr/debug/daccess/request_common.h b/src/coreclr/debug/daccess/request_common.h
index 623761ba250687..e2f4531e267b97 100644
--- a/src/coreclr/debug/daccess/request_common.h
+++ b/src/coreclr/debug/daccess/request_common.h
@@ -103,14 +103,47 @@ HeapTableIndex(DPTR(unused_gc_heap**) heaps, size_t index)
DacEnumMemoryRegion(p_##field_name.GetAddr(), sizeof(field_type) * array_length); \
}
+inline bool UseBuildVariant()
+{
+ int major = g_gcDacGlobals->major_version_number;
+ int minor = g_gcDacGlobals->minor_version_number;
+ return (major > 2) || (major == 2 && minor >= 4);
+}
+
inline bool IsRegionGCEnabled()
{
- return (g_gcDacGlobals->minor_version_number & 1) != 0;
+ if (UseBuildVariant())
+ {
+ return (*(g_gcDacGlobals->build_variant) & build_variant_use_region) != 0;
+ }
+ else
+ {
+ return (g_gcDacGlobals->minor_version_number & 1) != 0;
+ }
}
inline bool IsBackgroundGCEnabled()
{
- return (g_gcDacGlobals->minor_version_number & 2) == 0;
+ if (UseBuildVariant())
+ {
+ return (*(g_gcDacGlobals->build_variant) & build_variant_background_gc) != 0;
+ }
+ else
+ {
+ return (g_gcDacGlobals->minor_version_number & 2) == 0;
+ }
+}
+
+inline bool IsDatasEnabled()
+{
+ if (UseBuildVariant())
+ {
+ return (*(g_gcDacGlobals->build_variant) & build_variant_dynamic_heap_count) != 0;
+ }
+ else
+ {
+ return false;
+ }
}
// Load an instance of dac_gc_heap for the heap pointed by heap.
diff --git a/src/coreclr/debug/dbgutil/CMakeLists.txt b/src/coreclr/debug/dbgutil/CMakeLists.txt
index 0ad223630a5839..802f56eb6061cc 100644
--- a/src/coreclr/debug/dbgutil/CMakeLists.txt
+++ b/src/coreclr/debug/dbgutil/CMakeLists.txt
@@ -23,10 +23,10 @@ if(CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_HAIKU)
)
endif(CLR_CMAKE_TARGET_LINUX OR CLR_CMAKE_TARGET_HAIKU)
-if(CLR_CMAKE_TARGET_OSX)
+if(CLR_CMAKE_TARGET_APPLE)
list(APPEND DBGUTIL_SOURCES
machoreader.cpp
)
-endif(CLR_CMAKE_TARGET_OSX)
+endif(CLR_CMAKE_TARGET_APPLE)
add_library_clr(dbgutil STATIC ${DBGUTIL_SOURCES})
diff --git a/src/coreclr/gc/dac_gcheap_fields.h b/src/coreclr/gc/dac_gcheap_fields.h
index 39b2dca81008ac..862ef04fac4cb9 100644
--- a/src/coreclr/gc/dac_gcheap_fields.h
+++ b/src/coreclr/gc/dac_gcheap_fields.h
@@ -53,4 +53,4 @@ DEFINE_MISSING_FIELD(freeable_uoh_segment)
DEFINE_ARRAY_FIELD (free_regions, dac_region_free_list, FREE_REGION_KINDS)
#else
DEFINE_MISSING_FIELD(free_regions)
-#endif // ALL_FIELDS
+#endif // defined(ALL_FIELDS) || defined(USE_REGIONS)
diff --git a/src/coreclr/gc/gc.cpp b/src/coreclr/gc/gc.cpp
index 3b717a6e239157..8bc4043b54e7e2 100644
--- a/src/coreclr/gc/gc.cpp
+++ b/src/coreclr/gc/gc.cpp
@@ -53194,6 +53194,7 @@ bool GCHeap::IsConcurrentGCEnabled()
void PopulateDacVars(GcDacVars *gcDacVars)
{
bool v2 = gcDacVars->minor_version_number >= 2;
+ bool v4 = gcDacVars->minor_version_number >= 4;
#define DEFINE_FIELD(field_name, field_type) offsetof(CLASS_NAME, field_name),
#define DEFINE_DPTR_FIELD(field_name, field_type) offsetof(CLASS_NAME, field_name),
@@ -53225,15 +53226,16 @@ void PopulateDacVars(GcDacVars *gcDacVars)
// work differently than .Net SOS. When making breaking changes here you may need to
// find NativeAOT's equivalent of SOS_BREAKING_CHANGE_VERSION and increment it.
gcDacVars->major_version_number = 2;
- gcDacVars->minor_version_number = 0;
+ gcDacVars->minor_version_number = 4;
if (v2)
{
gcDacVars->total_bookkeeping_elements = total_bookkeeping_elements;
gcDacVars->card_table_info_size = sizeof(card_table_info);
}
+ g_build_variant = 0;
#ifdef USE_REGIONS
- gcDacVars->minor_version_number |= 1;
+ g_build_variant |= build_variant_use_region;
if (v2)
{
gcDacVars->count_free_region_kinds = count_free_region_kinds;
@@ -53242,8 +53244,11 @@ void PopulateDacVars(GcDacVars *gcDacVars)
}
#endif //USE_REGIONS
#ifndef BACKGROUND_GC
- gcDacVars->minor_version_number |= 2;
+ g_build_variant |= build_variant_background_gc;
#endif //!BACKGROUND_GC
+#ifdef DYNAMIC_HEAP_COUNT
+ g_build_variant |= build_variant_dynamic_heap_count;
+#endif //DYNAMIC_HEAP_COUNT
gcDacVars->built_with_svr = &g_built_with_svr_gc;
gcDacVars->build_variant = &g_build_variant;
gcDacVars->gc_structures_invalid_cnt = const_cast(&GCScan::m_GcStructuresInvalidCnt);
@@ -53319,6 +53324,14 @@ void PopulateDacVars(GcDacVars *gcDacVars)
{
gcDacVars->bookkeeping_start = &gc_heap::bookkeeping_start;
}
+ if (v4)
+ {
+#ifdef DYNAMIC_HEAP_COUNT
+ gcDacVars->dynamic_adaptation_mode = &gc_heap::dynamic_adaptation_mode;
+#else
+ gcDacVars->dynamic_adaptation_mode = nullptr;
+#endif //DYNAMIC_HEAP_COUNT
+ }
}
int GCHeap::RefreshMemoryLimit()
diff --git a/src/coreclr/gc/gcinterface.dac.h b/src/coreclr/gc/gcinterface.dac.h
index b3be7b09cee60f..fadb890ccc638a 100644
--- a/src/coreclr/gc/gcinterface.dac.h
+++ b/src/coreclr/gc/gcinterface.dac.h
@@ -206,6 +206,10 @@ struct unused_generation
uint8_t unused;
};
+#define build_variant_use_region 1
+#define build_variant_background_gc 2
+#define build_variant_dynamic_heap_count 4
+
// The DAC links against six symbols that build as part of the VM DACCESS_COMPILE
// build. These symbols are considered to be GC-private functions, but the DAC needs
// to use them in order to perform some handle-related functions. These six functions
diff --git a/src/coreclr/gc/gcinterface.dacvars.def b/src/coreclr/gc/gcinterface.dacvars.def
index a78b9d720930c6..fc071e881faef8 100644
--- a/src/coreclr/gc/gcinterface.dacvars.def
+++ b/src/coreclr/gc/gcinterface.dacvars.def
@@ -88,6 +88,9 @@ GC_DAC_VAL (int, total_bookkeeping_elements)
GC_DAC_VAL (int, count_free_region_kinds)
GC_DAC_VAL (size_t, card_table_info_size)
+// Here is where v5.4 fields starts
+GC_DAC_VAR (int, dynamic_adaptation_mode)
+
#undef GC_DAC_VAR
#undef GC_DAC_ARRAY_VAR
#undef GC_DAC_PTR_VAR
diff --git a/src/coreclr/gc/gcinterface.h b/src/coreclr/gc/gcinterface.h
index b41d3005ae6721..bb1e5bc173e1b7 100644
--- a/src/coreclr/gc/gcinterface.h
+++ b/src/coreclr/gc/gcinterface.h
@@ -11,7 +11,7 @@
// The minor version of the IGCHeap interface. Non-breaking changes are required
// to bump the minor version number. GCs and EEs with minor version number
// mismatches can still interoperate correctly, with some care.
-#define GC_INTERFACE_MINOR_VERSION 3
+#define GC_INTERFACE_MINOR_VERSION 4
// The major version of the IGCToCLR interface. Breaking changes to this interface
// require bumps in the major version number.
diff --git a/src/coreclr/inc/sospriv.idl b/src/coreclr/inc/sospriv.idl
index 141f597dcb4e94..0820d20386b9e0 100644
--- a/src/coreclr/inc/sospriv.idl
+++ b/src/coreclr/inc/sospriv.idl
@@ -562,3 +562,13 @@ interface ISOSDacInterface15 : IUnknown
{
HRESULT GetMethodTableSlotEnumerator(CLRDATA_ADDRESS mt, ISOSMethodEnum **enumerator);
}
+
+[
+ object,
+ local,
+ uuid(4ba12ff8-daac-4e43-ac56-98cf8d5c595d)
+]
+interface ISOSDacInterface16 : IUnknown
+{
+ HRESULT GetGCDynamicAdaptationMode(int* pDynamicAdaptationMode);
+}
diff --git a/src/coreclr/jit/codegenarm64.cpp b/src/coreclr/jit/codegenarm64.cpp
index 8811349b8cdbb3..20ae1c67817d08 100644
--- a/src/coreclr/jit/codegenarm64.cpp
+++ b/src/coreclr/jit/codegenarm64.cpp
@@ -2580,7 +2580,7 @@ void CodeGen::genCodeForMulHi(GenTreeOp* treeNode)
genProduceReg(treeNode);
}
-// Generate code for ADD, SUB, MUL, DIV, UDIV, AND, AND_NOT, OR and XOR
+// Generate code for ADD, SUB, MUL, DIV, UDIV, AND, AND_NOT, OR, OR_NOT, XOR and XOR_NOT
// This method is expected to have called genConsumeOperands() before calling it.
void CodeGen::genCodeForBinary(GenTreeOp* tree)
{
@@ -2589,7 +2589,8 @@ void CodeGen::genCodeForBinary(GenTreeOp* tree)
var_types targetType = tree->TypeGet();
emitter* emit = GetEmitter();
- assert(tree->OperIs(GT_ADD, GT_SUB, GT_MUL, GT_DIV, GT_UDIV, GT_AND, GT_AND_NOT, GT_OR, GT_XOR));
+ assert(tree->OperIs(GT_ADD, GT_SUB, GT_MUL, GT_DIV, GT_UDIV, GT_AND, GT_AND_NOT, GT_OR, GT_OR_NOT, GT_XOR,
+ GT_XOR_NOT));
GenTree* op1 = tree->gtGetOp1();
GenTree* op2 = tree->gtGetOp2();
@@ -4276,6 +4277,9 @@ instruction CodeGen::genGetInsForOper(genTreeOps oper, var_types type)
case GT_OR:
ins = INS_orr;
break;
+ case GT_OR_NOT:
+ ins = INS_orn;
+ break;
case GT_ROR:
ins = INS_ror;
break;
@@ -4291,6 +4295,9 @@ instruction CodeGen::genGetInsForOper(genTreeOps oper, var_types type)
case GT_XOR:
ins = INS_eor;
break;
+ case GT_XOR_NOT:
+ ins = INS_eon;
+ break;
default:
NYI("Unhandled oper in genGetInsForOper() - integer");
diff --git a/src/coreclr/jit/codegenarmarch.cpp b/src/coreclr/jit/codegenarmarch.cpp
index fb1e738f81451e..6060dab3ae66d0 100644
--- a/src/coreclr/jit/codegenarmarch.cpp
+++ b/src/coreclr/jit/codegenarmarch.cpp
@@ -216,7 +216,9 @@ void CodeGen::genCodeForTreeNode(GenTree* treeNode)
break;
case GT_OR:
+ case GT_OR_NOT:
case GT_XOR:
+ case GT_XOR_NOT:
case GT_AND:
case GT_AND_NOT:
assert(varTypeIsIntegralOrI(treeNode));
diff --git a/src/coreclr/jit/codegencommon.cpp b/src/coreclr/jit/codegencommon.cpp
index d535dfb1454570..d4477e3ef7b53e 100644
--- a/src/coreclr/jit/codegencommon.cpp
+++ b/src/coreclr/jit/codegencommon.cpp
@@ -1195,15 +1195,9 @@ bool CodeGen::genCreateAddrMode(GenTree* addr,
/* Check for an addition of a constant */
- if (op2->IsIntCnsFitsInI32() && (op2->gtType != TYP_REF) && FitsIn(cns + op2->AsIntConCommon()->IconValue()))
+ if (op2->IsIntCnsFitsInI32() && op2->AsIntConCommon()->ImmedValCanBeFolded(compiler, addr->OperGet()) &&
+ (op2->gtType != TYP_REF) && FitsIn(cns + op2->AsIntConCommon()->IconValue()))
{
- // We should not be building address modes out of non-foldable constants
- if (!op2->AsIntConCommon()->ImmedValCanBeFolded(compiler, addr->OperGet()))
- {
- assert(compiler->opts.compReloc);
- return false;
- }
-
/* We're adding a constant */
cns += op2->AsIntConCommon()->IconValue();
diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp
index 7f72b807301ac0..e6df481d571441 100644
--- a/src/coreclr/jit/gentree.cpp
+++ b/src/coreclr/jit/gentree.cpp
@@ -27760,7 +27760,8 @@ bool GenTreeHWIntrinsic::OperIsCreateScalarUnsafe() const
//
bool GenTreeHWIntrinsic::OperIsBitwiseHWIntrinsic(genTreeOps oper)
{
- return (oper == GT_AND) || (oper == GT_AND_NOT) || (oper == GT_NOT) || (oper == GT_OR) || (oper == GT_XOR);
+ return (oper == GT_AND) || (oper == GT_AND_NOT) || (oper == GT_NOT) || (oper == GT_OR) || (oper == GT_OR_NOT) ||
+ (oper == GT_XOR) || (oper == GT_XOR_NOT);
}
//------------------------------------------------------------------------
@@ -31046,7 +31047,9 @@ bool GenTree::IsVectorPerElementMask(var_types simdBaseType, unsigned simdSize)
case GT_AND:
case GT_AND_NOT:
case GT_OR:
+ case GT_OR_NOT:
case GT_XOR:
+ case GT_XOR_NOT:
{
// We are a binary bitwise operation where both inputs are per-element masks
return intrinsic->Op(1)->IsVectorPerElementMask(simdBaseType, simdSize) &&
diff --git a/src/coreclr/jit/gtlist.h b/src/coreclr/jit/gtlist.h
index 8c6c67fd6a3273..75726fc2ef713f 100644
--- a/src/coreclr/jit/gtlist.h
+++ b/src/coreclr/jit/gtlist.h
@@ -212,6 +212,12 @@ GTNODE(MUL_LONG , GenTreeOp ,1,0,GTK_BINOP|DBK_NOTHIR)
// AndNot - emitted on ARM/ARM64 as the BIC instruction. Also used for creating AndNot HWINTRINSIC vector nodes in a cross-ISA manner.
GTNODE(AND_NOT , GenTreeOp ,0,0,GTK_BINOP|DBK_NOTHIR)
+// OrNot - emitted on ARM64 as the ORN instruction.
+GTNODE(OR_NOT , GenTreeOp ,0,0,GTK_BINOP|DBK_NOTHIR)
+
+// XorNot - emitted on ARM64 as the EON instruction.
+GTNODE(XOR_NOT , GenTreeOp ,0,0,GTK_BINOP|DBK_NOTHIR)
+
#ifdef TARGET_ARM64
GTNODE(BFIZ , GenTreeOp ,0,0,GTK_BINOP|DBK_NOTHIR) // Bitfield Insert in Zero.
#endif
diff --git a/src/coreclr/jit/likelyclass.cpp b/src/coreclr/jit/likelyclass.cpp
index e181a2e9a135ab..b3b86804f55093 100644
--- a/src/coreclr/jit/likelyclass.cpp
+++ b/src/coreclr/jit/likelyclass.cpp
@@ -38,7 +38,10 @@ struct LikelyClassMethodHistogramEntry
//
struct LikelyClassMethodHistogram
{
- LikelyClassMethodHistogram(INT_PTR* histogramEntries, unsigned entryCount);
+ LikelyClassMethodHistogram(INT_PTR* histogramEntries, unsigned entryCount, bool int32Data = false);
+
+ template
+ void LikelyClassMethodHistogramInner(ElemType* histogramEntries, unsigned entryCount);
// Sum of counts from all entries in the histogram. This includes "unknown" entries which are not captured in
// m_histogram
@@ -61,8 +64,22 @@ struct LikelyClassMethodHistogram
// Arguments:
// histogramEntries - pointer to the table portion of a ClassProfile* object (see corjit.h)
// entryCount - number of entries in the table to examine
+// int32Data - true if table entries are 32 bits
//
-LikelyClassMethodHistogram::LikelyClassMethodHistogram(INT_PTR* histogramEntries, unsigned entryCount)
+LikelyClassMethodHistogram::LikelyClassMethodHistogram(INT_PTR* histogramEntries, unsigned entryCount, bool int32Data)
+{
+ if (int32Data)
+ {
+ LikelyClassMethodHistogramInner((int*)histogramEntries, entryCount);
+ }
+ else
+ {
+ LikelyClassMethodHistogramInner(histogramEntries, entryCount);
+ }
+}
+
+template
+void LikelyClassMethodHistogram::LikelyClassMethodHistogramInner(ElemType* histogramEntries, unsigned entryCount)
{
m_unknownHandles = 0;
m_totalCount = 0;
@@ -76,8 +93,7 @@ LikelyClassMethodHistogram::LikelyClassMethodHistogram(INT_PTR* histogramEntries
}
m_totalCount++;
-
- INT_PTR currentEntry = histogramEntries[k];
+ INT_PTR currentEntry = (INT_PTR)histogramEntries[k];
bool found = false;
unsigned h = 0;
@@ -385,15 +401,18 @@ extern "C" DLLEXPORT UINT32 WINAPI getLikelyValues(LikelyValueRecord*
continue;
// We currently re-use existing infrastructure for type handles for simplicity.
-
- const bool isHistogramCount =
- (schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::ValueHistogramIntCount) ||
+ //
+ const bool isIntHistogramCount =
+ (schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::ValueHistogramIntCount);
+ const bool isLongHistogramCount =
(schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::ValueHistogramLongCount);
+ const bool isHistogramCount = isIntHistogramCount || isLongHistogramCount;
if (isHistogramCount && (schema[i].Count == 1) && ((i + 1) < countSchemaItems) &&
(schema[i + 1].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::ValueHistogram))
{
- LikelyClassMethodHistogram h((INT_PTR*)(pInstrumentationData + schema[i + 1].Offset), schema[i + 1].Count);
+ LikelyClassMethodHistogram h((INT_PTR*)(pInstrumentationData + schema[i + 1].Offset), schema[i + 1].Count,
+ isIntHistogramCount);
LikelyClassMethodHistogramEntry sortedEntries[HISTOGRAM_MAX_SIZE_COUNT];
if (h.countHistogramElements == 0)
diff --git a/src/coreclr/jit/lower.cpp b/src/coreclr/jit/lower.cpp
index ad6df947eafd35..eee9a5859ecb43 100644
--- a/src/coreclr/jit/lower.cpp
+++ b/src/coreclr/jit/lower.cpp
@@ -4352,24 +4352,32 @@ GenTree* Lowering::OptimizeConstCompare(GenTree* cmp)
if (cmp->OperIs(GT_TEST_EQ, GT_TEST_NE))
{
//
- // Transform TEST_EQ|NE(x, LSH(1, y)) into BT(x, y) when possible. Using BT
+ // Transform TEST_EQ|NE(x, LSH(1, y)) or TEST_EQ|NE(LSH(1, y), x) into BT(x, y) when possible. Using BT
// results in smaller and faster code. It also doesn't have special register
// requirements, unlike LSH that requires the shift count to be in ECX.
// Note that BT has the same behavior as LSH when the bit index exceeds the
// operand bit size - it uses (bit_index MOD bit_size).
//
- GenTree* lsh = cmp->gtGetOp2();
+ GenTree* lsh = cmp->AsOp()->gtOp1;
+ GenTree* op = cmp->AsOp()->gtOp2;
- if (lsh->OperIs(GT_LSH) && varTypeIsIntOrI(lsh->TypeGet()) && lsh->gtGetOp1()->IsIntegralConst(1))
+ if (!lsh->OperIs(GT_LSH))
+ {
+ std::swap(lsh, op);
+ }
+
+ if (lsh->OperIs(GT_LSH) && varTypeIsIntOrI(lsh) && lsh->gtGetOp1()->IsIntegralConst(1))
{
cmp->SetOper(cmp->OperIs(GT_TEST_EQ) ? GT_BITTEST_EQ : GT_BITTEST_NE);
- cmp->AsOp()->gtOp2 = lsh->gtGetOp2();
- cmp->gtGetOp2()->ClearContained();
BlockRange().Remove(lsh->gtGetOp1());
BlockRange().Remove(lsh);
+ cmp->AsOp()->gtOp1 = op;
+ cmp->AsOp()->gtOp2 = lsh->gtGetOp2();
+ cmp->gtGetOp2()->ClearContained();
+
return cmp->gtNext;
}
}
diff --git a/src/coreclr/jit/lowerarmarch.cpp b/src/coreclr/jit/lowerarmarch.cpp
index 852d912a133e78..d06bfaa892abce 100644
--- a/src/coreclr/jit/lowerarmarch.cpp
+++ b/src/coreclr/jit/lowerarmarch.cpp
@@ -304,7 +304,7 @@ bool Lowering::IsContainableUnaryOrBinaryOp(GenTree* parentNode, GenTree* childN
}
}
- if (childNode->OperIs(GT_LSH, GT_RSH, GT_RSZ) && parentNode->OperIs(GT_NOT, GT_AND_NOT))
+ if (childNode->OperIs(GT_LSH, GT_RSH, GT_RSZ) && parentNode->OperIs(GT_NOT, GT_AND_NOT, GT_OR_NOT, GT_XOR_NOT))
{
return true;
}
@@ -652,6 +652,37 @@ GenTree* Lowering::LowerBinaryArithmetic(GenTreeOp* binOp)
return next;
}
}
+
+ if (binOp->OperIs(GT_OR, GT_XOR))
+ {
+ GenTree* opNode = nullptr;
+ GenTree* notNode = nullptr;
+ if (binOp->gtGetOp1()->OperIs(GT_NOT))
+ {
+ notNode = binOp->gtGetOp1();
+ opNode = binOp->gtGetOp2();
+ }
+ else if (binOp->gtGetOp2()->OperIs(GT_NOT))
+ {
+ notNode = binOp->gtGetOp2();
+ opNode = binOp->gtGetOp1();
+ }
+
+ if (notNode != nullptr)
+ {
+ binOp->gtOp1 = opNode;
+ binOp->gtOp2 = notNode->AsUnOp()->gtGetOp1();
+ if (binOp->OperIs(GT_OR))
+ {
+ binOp->ChangeOper(GT_OR_NOT);
+ }
+ else
+ {
+ binOp->ChangeOper(GT_XOR_NOT);
+ }
+ BlockRange().Remove(notNode);
+ }
+ }
#endif
}
diff --git a/src/coreclr/jit/lsraarm64.cpp b/src/coreclr/jit/lsraarm64.cpp
index fdde96ef3acdef..9af6bef2f17f19 100644
--- a/src/coreclr/jit/lsraarm64.cpp
+++ b/src/coreclr/jit/lsraarm64.cpp
@@ -859,7 +859,9 @@ int LinearScan::BuildNode(GenTree* tree)
case GT_AND:
case GT_AND_NOT:
case GT_OR:
+ case GT_OR_NOT:
case GT_XOR:
+ case GT_XOR_NOT:
case GT_LSH:
case GT_RSH:
case GT_RSZ:
diff --git a/src/coreclr/jit/morph.cpp b/src/coreclr/jit/morph.cpp
index ee20a20bd20211..4c0fc233196482 100644
--- a/src/coreclr/jit/morph.cpp
+++ b/src/coreclr/jit/morph.cpp
@@ -9915,8 +9915,8 @@ GenTree* Compiler::fgOptimizeHWIntrinsic(GenTreeHWIntrinsic* node)
genTreeOps actualOper = node->GetOperForHWIntrinsicId(&isScalar);
genTreeOps oper = actualOper;
- // We shouldn't find AND_NOT nodes since it should only be produced in lowering
- assert(oper != GT_AND_NOT);
+ // We shouldn't find AND_NOT, OR_NOT or XOR_NOT nodes since it should only be produced in lowering
+ assert((oper != GT_AND_NOT) && (oper != GT_OR_NOT) && (oper != GT_XOR_NOT));
if (GenTreeHWIntrinsic::OperIsBitwiseHWIntrinsic(oper))
{
diff --git a/src/coreclr/jit/scev.cpp b/src/coreclr/jit/scev.cpp
index 94e75dc22a35af..e1140e48660cd5 100644
--- a/src/coreclr/jit/scev.cpp
+++ b/src/coreclr/jit/scev.cpp
@@ -60,6 +60,19 @@
#include "jitpch.h"
+ScevConstant::ScevConstant(var_types type, int64_t value)
+ : Scev(ScevOper::Constant, type)
+{
+ if (genTypeSize(type) == 4)
+ {
+ Value = (int32_t)value;
+ }
+ else
+ {
+ Value = value;
+ }
+}
+
//------------------------------------------------------------------------
// GetConstantValue: If this SSA use refers to a constant, then fetch that
// constant.
diff --git a/src/coreclr/jit/scev.h b/src/coreclr/jit/scev.h
index 6d55ccc80227ca..46036daaf25cf0 100644
--- a/src/coreclr/jit/scev.h
+++ b/src/coreclr/jit/scev.h
@@ -82,11 +82,7 @@ struct Scev
struct ScevConstant : Scev
{
- ScevConstant(var_types type, int64_t value)
- : Scev(ScevOper::Constant, type)
- , Value(value)
- {
- }
+ ScevConstant(var_types type, int64_t value);
int64_t Value;
};
diff --git a/src/coreclr/jit/simd.h b/src/coreclr/jit/simd.h
index 1a0748667b3a58..2f7610b7e6147c 100644
--- a/src/coreclr/jit/simd.h
+++ b/src/coreclr/jit/simd.h
@@ -704,8 +704,9 @@ void EvaluateUnarySimd(genTreeOps oper, bool scalar, var_types baseType, TSimd*
inline bool IsBinaryBitwiseOperation(genTreeOps oper)
{
- return (oper == GT_AND) || (oper == GT_AND_NOT) || (oper == GT_LSH) || (oper == GT_OR) || (oper == GT_ROL) ||
- (oper == GT_ROR) || (oper == GT_RSH) || (oper == GT_RSZ) || (oper == GT_XOR);
+ return (oper == GT_AND) || (oper == GT_AND_NOT) || (oper == GT_LSH) || (oper == GT_OR) || (oper == GT_OR_NOT) ||
+ (oper == GT_ROL) || (oper == GT_ROR) || (oper == GT_RSH) || (oper == GT_RSZ) || (oper == GT_XOR) ||
+ (oper == GT_XOR_NOT);
}
template
@@ -842,6 +843,11 @@ TBase EvaluateBinaryScalarSpecialized(genTreeOps oper, TBase arg0, TBase arg1)
return arg0 | arg1;
}
+ case GT_OR_NOT:
+ {
+ return arg0 | ~arg1;
+ }
+
case GT_ROL:
{
// Normalize the "rotate by" value
@@ -901,6 +907,11 @@ TBase EvaluateBinaryScalarSpecialized(genTreeOps oper, TBase arg0, TBase arg1)
return arg0 ^ arg1;
}
+ case GT_XOR_NOT:
+ {
+ return arg0 ^ ~arg1;
+ }
+
default:
{
unreached();
diff --git a/src/coreclr/jit/valuenum.cpp b/src/coreclr/jit/valuenum.cpp
index fd13668c405e8d..ecd7f4fbdf475c 100644
--- a/src/coreclr/jit/valuenum.cpp
+++ b/src/coreclr/jit/valuenum.cpp
@@ -8271,8 +8271,8 @@ ValueNum ValueNumStore::EvalHWIntrinsicFunBinary(
if (oper != GT_NONE)
{
- // We shouldn't find AND_NOT nodes since it should only be produced in lowering
- assert(oper != GT_AND_NOT);
+ // We shouldn't find AND_NOT, OR_NOT or XOR_NOT nodes since it should only be produced in lowering
+ assert((oper != GT_AND_NOT) && (oper != GT_OR_NOT) && (oper != GT_XOR_NOT));
if (varTypeIsMask(type))
{
@@ -8415,7 +8415,7 @@ ValueNum ValueNumStore::EvalHWIntrinsicFunBinary(
genTreeOps oper = tree->GetOperForHWIntrinsicId(&isScalar);
// We shouldn't find AND_NOT nodes since it should only be produced in lowering
- assert(oper != GT_AND_NOT);
+ assert((oper != GT_AND_NOT) && (oper != GT_OR_NOT) && (oper != GT_XOR_NOT));
if (isScalar)
{
@@ -8903,7 +8903,7 @@ ValueNum ValueNumStore::EvalHWIntrinsicFunBinary(
genTreeOps oper = tree->GetOperForHWIntrinsicId(&isScalar);
// We shouldn't find AND_NOT nodes since it should only be produced in lowering
- assert(oper != GT_AND_NOT);
+ assert((oper != GT_AND_NOT) && (oper != GT_OR_NOT) && (oper != GT_XOR_NOT));
if (isScalar)
{
diff --git a/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets b/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets
index 3f156ac50fe48c..16c7fbb4081a9c 100644
--- a/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets
+++ b/src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.targets
@@ -372,11 +372,16 @@ The .NET Foundation licenses this file to you under the MIT license.
-
+
-
+
diff --git a/src/coreclr/pal/prebuilt/idl/sospriv_i.cpp b/src/coreclr/pal/prebuilt/idl/sospriv_i.cpp
index 579be51d356f7f..f3c4867a3a0ace 100644
--- a/src/coreclr/pal/prebuilt/idl/sospriv_i.cpp
+++ b/src/coreclr/pal/prebuilt/idl/sospriv_i.cpp
@@ -127,6 +127,9 @@ MIDL_DEFINE_GUID(IID, IID_ISOSMethodEnum,0x3c0fe725,0xc324,0x4a4f,0x81,0x00,0xd3
MIDL_DEFINE_GUID(IID, IID_ISOSDacInterface15,0x7ed81261,0x52a9,0x4a23,0xa3,0x58,0xc3,0x31,0x3d,0xea,0x30,0xa8);
+
+MIDL_DEFINE_GUID(IID, IID_ISOSDacInterface16,0x4ba12ff8,0xdaac,0x4e43,0xac,0x56,0x98,0xcf,0x8d,0x5c,0x59,0x5d);
+
#undef MIDL_DEFINE_GUID
#ifdef __cplusplus
diff --git a/src/coreclr/pal/prebuilt/inc/sospriv.h b/src/coreclr/pal/prebuilt/inc/sospriv.h
index a3d741f740defa..4ff12d95b74894 100644
--- a/src/coreclr/pal/prebuilt/inc/sospriv.h
+++ b/src/coreclr/pal/prebuilt/inc/sospriv.h
@@ -3685,6 +3685,86 @@ EXTERN_C const IID IID_ISOSDacInterface15;
#endif /* __ISOSDacInterface15_INTERFACE_DEFINED__ */
+#ifndef __ISOSDacInterface16_INTERFACE_DEFINED__
+#define __ISOSDacInterface16_INTERFACE_DEFINED__
+
+/* interface ISOSDacInterface16 */
+/* [uuid][local][object] */
+
+
+EXTERN_C const IID IID_ISOSDacInterface16;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("4ba12ff8-daac-4e43-ac56-98cf8d5c595d")
+ ISOSDacInterface16 : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE GetGCDynamicAdaptationMode(
+ int *pDynamicAdaptationMode) = 0;
+
+ };
+
+
+#else /* C style interface */
+
+ typedef struct ISOSDacInterface16Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ ISOSDacInterface16 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ _COM_Outptr_ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ ISOSDacInterface16 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ ISOSDacInterface16 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetGCDynamicAdaptationMode )(
+ ISOSDacInterface16 * This,
+ int *pDynamicAdaptationMode);
+
+ END_INTERFACE
+ } ISOSDacInterface16Vtbl;
+
+ interface ISOSDacInterface16
+ {
+ CONST_VTBL struct ISOSDacInterface16Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define ISOSDacInterface16_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define ISOSDacInterface16_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define ISOSDacInterface16_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define ISOSDacInterface16_GetGCDynamicAdaptationMode(This,pDynamicAdaptationMode) \
+ ( (This)->lpVtbl -> GetGCDynamicAdaptationMode(This,pDynamicAdaptationMode) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __ISOSDacInterface16_INTERFACE_DEFINED__ */
+
+
/* Additional Prototypes for ALL interfaces */
/* end of Additional Prototypes */
diff --git a/src/libraries/Common/src/System/Security/Cryptography/Pkcs/Pkcs12CertBag.cs b/src/libraries/Common/src/System/Security/Cryptography/Pkcs/Pkcs12CertBag.cs
index b5e712ac06fe0a..eacd4bc7cd2c84 100644
--- a/src/libraries/Common/src/System/Security/Cryptography/Pkcs/Pkcs12CertBag.cs
+++ b/src/libraries/Common/src/System/Security/Cryptography/Pkcs/Pkcs12CertBag.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.Formats.Asn1;
+using System.Runtime.Versioning;
using System.Security.Cryptography.Asn1.Pkcs12;
using System.Security.Cryptography.X509Certificates;
using Internal.Cryptography;
@@ -75,6 +76,7 @@ public Oid GetCertificateType()
public ReadOnlyMemory EncodedCertificate => _decoded.CertValue;
+ [UnsupportedOSPlatform("browser")]
public X509Certificate2 GetCertificate()
{
if (!IsX509Certificate)
diff --git a/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.Windows.cs b/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.Windows.cs
index 6a166b298cd517..1cd57d147a77ed 100644
--- a/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.Windows.cs
+++ b/src/libraries/Common/tests/TestUtilities/System/PlatformDetection.Windows.cs
@@ -26,6 +26,7 @@ public static partial class PlatformDetection
public static bool IsWindows10OrLater => IsWindowsVersionOrLater(10, 0);
public static bool IsWindowsServer2019 => IsWindows && IsNotWindowsNanoServer && GetWindowsVersion() == 10 && GetWindowsMinorVersion() == 0 && GetWindowsBuildVersion() == 17763;
public static bool IsWindowsServer2022 => IsWindows && IsNotWindowsNanoServer && GetWindowsVersion() == 10 && GetWindowsMinorVersion() == 0 && GetWindowsBuildVersion() == 20348;
+ public static bool IsWindowsServer2025 => IsWindows && IsNotWindowsNanoServer && GetWindowsVersion() == 10 && GetWindowsMinorVersion() == 0 && GetWindowsBuildVersion() == 26100;
public static bool IsWindowsNanoServer => IsWindows && (IsNotWindowsIoTCore && GetWindowsInstallationType().Equals("Nano Server", StringComparison.OrdinalIgnoreCase));
public static bool IsWindowsServerCore => IsWindows && GetWindowsInstallationType().Equals("Server Core", StringComparison.OrdinalIgnoreCase);
public static int WindowsVersion => IsWindows ? (int)GetWindowsVersion() : -1;
diff --git a/src/libraries/System.Diagnostics.Process/ref/System.Diagnostics.Process.cs b/src/libraries/System.Diagnostics.Process/ref/System.Diagnostics.Process.cs
index bd58edc786fba1..d4cf2170b88b83 100644
--- a/src/libraries/System.Diagnostics.Process/ref/System.Diagnostics.Process.cs
+++ b/src/libraries/System.Diagnostics.Process/ref/System.Diagnostics.Process.cs
@@ -71,7 +71,7 @@ public Process() { }
public long PrivateMemorySize64 { get { throw null; } }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatform("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatform("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public System.TimeSpan PrivilegedProcessorTime { get { throw null; } }
public string ProcessName { get { throw null; } }
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
@@ -86,17 +86,17 @@ public Process() { }
public System.Diagnostics.ProcessStartInfo StartInfo { get { throw null; } set { } }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public System.DateTime StartTime { get { throw null; } }
public System.ComponentModel.ISynchronizeInvoke? SynchronizingObject { get { throw null; } set { } }
public System.Diagnostics.ProcessThreadCollection Threads { get { throw null; } }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public System.TimeSpan TotalProcessorTime { get { throw null; } }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public System.TimeSpan UserProcessorTime { get { throw null; } }
[System.ObsoleteAttribute("Process.VirtualMemorySize has been deprecated because the type of the property can't represent all valid results. Use System.Diagnostics.Process.VirtualMemorySize64 instead.")]
public int VirtualMemorySize { get { throw null; } }
@@ -120,50 +120,50 @@ public static void EnterDebugMode() { }
public static System.Diagnostics.Process GetProcessById(int processId, string machineName) { throw null; }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public static System.Diagnostics.Process[] GetProcesses() { throw null; }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public static System.Diagnostics.Process[] GetProcesses(string machineName) { throw null; }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public static System.Diagnostics.Process[] GetProcessesByName(string? processName) { throw null; }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public static System.Diagnostics.Process[] GetProcessesByName(string? processName, string machineName) { throw null; }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public void Kill() { }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public void Kill(bool entireProcessTree) { }
public static void LeaveDebugMode() { }
protected void OnExited() { }
public void Refresh() { }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public bool Start() { throw null; }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public static System.Diagnostics.Process? Start(System.Diagnostics.ProcessStartInfo startInfo) { throw null; }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public static System.Diagnostics.Process Start(string fileName) { throw null; }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public static System.Diagnostics.Process Start(string fileName, string arguments) { throw null; }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public static System.Diagnostics.Process Start(string fileName, System.Collections.Generic.IEnumerable arguments) { throw null; }
[System.CLSCompliantAttribute(false)]
[System.Runtime.Versioning.SupportedOSPlatformAttribute("windows")]
@@ -271,7 +271,7 @@ public int IdealProcessor { set { } }
public System.Diagnostics.ThreadPriorityLevel PriorityLevel { [System.Runtime.Versioning.SupportedOSPlatform("windows")] [System.Runtime.Versioning.SupportedOSPlatform("linux")] [System.Runtime.Versioning.SupportedOSPlatform("freebsd")] get { throw null; } [System.Runtime.Versioning.SupportedOSPlatformAttribute("windows")] set { } }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public System.TimeSpan PrivilegedProcessorTime { get { throw null; } }
[System.Runtime.Versioning.SupportedOSPlatformAttribute("windows")]
public System.IntPtr ProcessorAffinity { set { } }
@@ -282,11 +282,11 @@ public System.IntPtr ProcessorAffinity { set { } }
public System.Diagnostics.ThreadState ThreadState { get { throw null; } }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public System.TimeSpan TotalProcessorTime { get { throw null; } }
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public System.TimeSpan UserProcessorTime { get { throw null; } }
public System.Diagnostics.ThreadWaitReason WaitReason { get { throw null; } }
public void ResetIdealProcessor() { }
diff --git a/src/libraries/System.DirectoryServices.Protocols/tests/DirectoryServicesTestHelpers.cs b/src/libraries/System.DirectoryServices.Protocols/tests/DirectoryServicesTestHelpers.cs
index 422c37e70dbb30..4a11570d810344 100644
--- a/src/libraries/System.DirectoryServices.Protocols/tests/DirectoryServicesTestHelpers.cs
+++ b/src/libraries/System.DirectoryServices.Protocols/tests/DirectoryServicesTestHelpers.cs
@@ -4,8 +4,6 @@
using System.Runtime.InteropServices;
using Xunit;
-[assembly: ActiveIssue("https://github.com/dotnet/runtime/issues/35912", TestRuntimes.Mono)]
-
namespace System.DirectoryServices.Protocols.Tests
{
public static class DirectoryServicesTestHelpers
diff --git a/src/libraries/System.Net.Security/tests/FunctionalTests/NegotiateStreamStreamToStreamTest.cs b/src/libraries/System.Net.Security/tests/FunctionalTests/NegotiateStreamStreamToStreamTest.cs
index 7b8cc18c40f3b7..662f7d1fa48e93 100644
--- a/src/libraries/System.Net.Security/tests/FunctionalTests/NegotiateStreamStreamToStreamTest.cs
+++ b/src/libraries/System.Net.Security/tests/FunctionalTests/NegotiateStreamStreamToStreamTest.cs
@@ -9,8 +9,9 @@
using System.Text;
using System.Threading;
using System.Threading.Tasks;
-
+using Microsoft.DotNet.XUnitExtensions;
using Xunit;
+using Xunit.Abstractions;
namespace System.Net.Security.Tests
{
@@ -192,6 +193,11 @@ public async Task NegotiateStream_StreamToStream_Authentication_EmptyCredentials
{
string targetName = "testTargetName";
+ if (PlatformDetection.IsWindowsServer2025)
+ {
+ throw new SkipTestException("Empty credentials not supported on Server 2025");
+ }
+
// Ensure there is no confusion between DefaultCredentials / DefaultNetworkCredentials and a
// NetworkCredential object with empty user, password and domain.
NetworkCredential emptyNetworkCredential = new NetworkCredential("", "", "");
diff --git a/src/libraries/System.Private.CoreLib/src/System/Decimal.DecCalc.cs b/src/libraries/System.Private.CoreLib/src/System/Decimal.DecCalc.cs
index 722a1343a0537d..442e00870d4935 100644
--- a/src/libraries/System.Private.CoreLib/src/System/Decimal.DecCalc.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/Decimal.DecCalc.cs
@@ -8,6 +8,8 @@
using X86 = System.Runtime.Intrinsics.X86;
+#pragma warning disable SYSLIB5004 // DivRem is marked as [Experimental], see https://github.com/dotnet/runtime/issues/82194
+
namespace System
{
public partial struct Decimal
@@ -186,35 +188,74 @@ private static void UInt64x64To128(ulong a, ulong b, ref DecCalc result)
result.High = (uint)high;
}
+ // Do partial divide for the case where (left >> 32) < den
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static (uint Quotient, uint Remainder) Div64By32(ulong dividend, uint den)
+ {
+ if (X86.X86Base.IsSupported)
+ {
+ return X86.X86Base.DivRem((uint)dividend, (uint)(dividend >> 32), den);
+ }
+ else
+ {
+ // TODO: https://github.com/dotnet/runtime/issues/5213
+ uint quo = (uint)(dividend / den);
+ return (quo, (uint)dividend - quo * den);
+ }
+ }
+
///
/// Do full divide, yielding 96-bit result and 32-bit remainder.
///
/// 96-bit dividend as array of uints, least-sig first
/// 32-bit divisor
/// Returns remainder. Quotient overwrites dividend.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
private static uint Div96By32(ref Buf12 bufNum, uint den)
{
- // TODO: https://github.com/dotnet/runtime/issues/5213
- ulong tmp, div;
- if (bufNum.U2 != 0)
- {
- tmp = bufNum.High64;
- div = tmp / den;
- bufNum.High64 = div;
- tmp = ((tmp - (uint)div * den) << 32) | bufNum.U0;
+ if (X86.X86Base.IsSupported)
+ {
+ uint remainder = 0;
+
+ if (bufNum.U2 != 0)
+ goto Div3Word;
+ if (bufNum.U1 >= den)
+ goto Div2Word;
+
+ remainder = bufNum.U1;
+ bufNum.U1 = 0;
+ goto Div1Word;
+Div3Word:
+ (bufNum.U2, remainder) = X86.X86Base.DivRem(bufNum.U2, remainder, den);
+Div2Word:
+ (bufNum.U1, remainder) = X86.X86Base.DivRem(bufNum.U1, remainder, den);
+Div1Word:
+ (bufNum.U0, remainder) = X86.X86Base.DivRem(bufNum.U0, remainder, den);
+ return remainder;
+ }
+ else
+ {
+ ulong tmp, div, rem;
+ if (bufNum.U2 != 0)
+ {
+ tmp = bufNum.High64;
+
+ (div, rem) = Math.DivRem(tmp, den);
+ bufNum.High64 = div;
+ tmp = (rem << 32) | bufNum.U0;
+ if (tmp == 0)
+ return 0;
+ (div, rem) = Math.DivRem(tmp, den);
+ bufNum.U0 = (uint)div;
+ return (uint)rem;
+ }
+
+ tmp = bufNum.Low64;
if (tmp == 0)
return 0;
- uint div32 = (uint)(tmp / den);
- bufNum.U0 = div32;
- return (uint)tmp - div32 * den;
+ (bufNum.Low64, rem) = Math.DivRem(tmp, den);
+ return (uint)rem;
}
-
- tmp = bufNum.Low64;
- if (tmp == 0)
- return 0;
- div = tmp / den;
- bufNum.Low64 = div;
- return (uint)(tmp - div * den);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -312,6 +353,32 @@ private static void Unscale(ref uint low, ref ulong high64, ref int scale)
scale--;
}
+ ///
+ /// Do partial divide, yielding 64-bit result and 64-bit remainder.
+ /// Divisor must be larger than upper 64 bits of dividend.
+ ///
+ /// 128-bit dividend as array of uints, least-sig first
+ /// 64-bit divisor
+ /// Returns quotient. Remainder overwrites lower 64-bits of dividend.
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static unsafe ulong Div128By64(Buf16* bufNum, ulong den)
+ {
+ Debug.Assert(den > bufNum->High64);
+
+ if (X86.X86Base.X64.IsSupported)
+ {
+ // Assert above states: den > bufNum.High64 so den > bufNum.U2 and we can be sure we will not overflow
+ (ulong quotient, bufNum->Low64) = X86.X86Base.X64.DivRem(bufNum->Low64, bufNum->High64, den);
+ return quotient;
+ }
+ else
+ {
+ uint hiBits = Div96By64(ref *(Buf12*)&bufNum->U1, den);
+ uint loBits = Div96By64(ref *(Buf12*)bufNum, den);
+ return ((ulong)hiBits << 32 | loBits);
+ }
+ }
+
///
/// Do partial divide, yielding 32-bit result and 64-bit remainder.
/// Divisor must be larger than upper 64 bits of dividend.
@@ -322,6 +389,14 @@ private static void Unscale(ref uint low, ref ulong high64, ref int scale)
private static uint Div96By64(ref Buf12 bufNum, ulong den)
{
Debug.Assert(den > bufNum.High64);
+
+ if (X86.X86Base.X64.IsSupported)
+ {
+ // Assert above states: den > bufNum.High64 so den > bufNum.U2 and we can be sure we will not overflow
+ (ulong quotient, bufNum.Low64) = X86.X86Base.X64.DivRem(bufNum.Low64, bufNum.U2, den);
+ return (uint)quotient;
+ }
+
ulong num;
uint num2 = bufNum.U2;
if (num2 == 0)
@@ -367,9 +442,9 @@ private static uint Div96By64(ref Buf12 bufNum, ulong den)
//
return 0;
- // TODO: https://github.com/dotnet/runtime/issues/5213
- quo = (uint)(num64 / denHigh32);
- num = bufNum.U0 | ((num64 - quo * denHigh32) << 32); // remainder
+
+ (quo, uint rem) = Div64By32(num64, denHigh32);
+ num = bufNum.U0 | ((ulong)rem << 32); // remainder
// Compute full remainder, rem = dividend - (quo * divisor).
//
@@ -413,23 +488,17 @@ private static uint Div128By96(ref Buf16 bufNum, ref Buf12 bufDen)
//
return 0;
- // TODO: https://github.com/dotnet/runtime/issues/5213
- uint quo = (uint)(dividend / den);
- uint remainder = (uint)dividend - quo * den;
+ (uint quo, uint remainder) = Div64By32(dividend, den);
// Compute full remainder, rem = dividend - (quo * divisor).
//
- ulong prod1 = Math.BigMul(quo, bufDen.U0); // quo * lo divisor
- ulong prod2 = Math.BigMul(quo, bufDen.U1); // quo * mid divisor
- prod2 += prod1 >> 32;
- prod1 = (uint)prod1 | (prod2 << 32);
- prod2 >>= 32;
-
- ulong num = bufNum.Low64;
- num -= prod1;
+ ulong prod1;
+ uint prod2 = (uint)Math.BigMul(bufDen.Low64, quo, out prod1);
+ ulong num = bufNum.Low64 - prod1;
remainder -= (uint)prod2;
// Propagate carries
+ // can be simplified if https://github.com/dotnet/runtime/issues/48247 is done
//
if (num > ~prod1)
{
@@ -479,24 +548,52 @@ private static uint Div128By96(ref Buf16 bufNum, ref Buf12 bufDen)
/// Returns highest 32 bits of product
private static uint IncreaseScale(ref Buf12 bufNum, uint power)
{
- ulong tmp = Math.BigMul(bufNum.U0, power);
+#if TARGET_64BIT
+ ulong hi64 = Math.BigMul(bufNum.Low64, power, out ulong low64);
+ bufNum.Low64 = low64;
+ hi64 = Math.BigMul(bufNum.U2, power) + hi64;
+ bufNum.U2 = (uint)hi64;
+ return (uint)(hi64 >> 32);
+#else
+ ulong tmp = (ulong)bufNum.U0 * power;
bufNum.U0 = (uint)tmp;
tmp >>= 32;
- tmp += Math.BigMul(bufNum.U1, power);
+ tmp += (ulong)bufNum.U1 * power;
bufNum.U1 = (uint)tmp;
tmp >>= 32;
- tmp += Math.BigMul(bufNum.U2, power);
+ tmp += (ulong)bufNum.U2 * power;
bufNum.U2 = (uint)tmp;
return (uint)(tmp >> 32);
+#endif
+ }
+
+ ///
+ /// Multiply the two numbers. The result overwrite the input.
+ ///
+ /// buffer
+ /// Scale factor to multiply by
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static void IncreaseScale(ref Buf16 bufNum, uint power)
+ {
+#if TARGET_64BIT
+ ulong hi64 = Math.BigMul(bufNum.Low64, power, out ulong low64);
+ bufNum.Low64 = low64;
+ bufNum.High64 = Math.BigMul(bufNum.U2, power) + (nuint)hi64;
+#else
+ bufNum.U3 = IncreaseScale(ref Unsafe.As(ref bufNum), power);
+#endif
}
+ ///
+ /// Multiply the two numbers 64bit * 32bit.
+ /// The 96 bits of the result overwrite the input.
+ ///
+ /// 64-bit number as array of uints, least-sig first
+ /// Scale factor to multiply by
private static void IncreaseScale64(ref Buf12 bufNum, uint power)
{
- ulong tmp = Math.BigMul(bufNum.U0, power);
- bufNum.U0 = (uint)tmp;
- tmp >>= 32;
- tmp += Math.BigMul(bufNum.U1, power);
- bufNum.High64 = tmp;
+ bufNum.U2 = (uint)Math.BigMul(bufNum.Low64, power, out ulong low64);
+ bufNum.Low64 = low64;
}
///
@@ -712,13 +809,28 @@ private static int OverflowUnscale(ref Buf12 bufQuo, int scale, bool sticky)
// We have overflown, so load the high bit with a one.
const ulong highbit = 1UL << 32;
bufQuo.U2 = (uint)(highbit / 10);
- ulong tmp = ((highbit % 10) << 32) + bufQuo.U1;
- uint div = (uint)(tmp / 10);
- bufQuo.U1 = div;
- tmp = ((tmp - div * 10) << 32) + bufQuo.U0;
- div = (uint)(tmp / 10);
- bufQuo.U0 = div;
- uint remainder = (uint)(tmp - div * 10);
+
+ uint remainder;
+#if TARGET_32BIT
+ if (X86.X86Base.IsSupported)
+ {
+ // 32-bit RyuJIT doesn't convert 64-bit division by constant into multiplication by reciprocal.
+ // Do "32bit" divides instead of calling full 64bit helper
+ (bufQuo.U1, remainder) = X86.X86Base.DivRem(bufQuo.U1, (uint)(highbit % 10), 10);
+ (bufQuo.U0, remainder) = X86.X86Base.DivRem(bufQuo.U0, remainder, 10);
+ }
+ else
+#endif
+ {
+ ulong tmp = ((highbit % 10) << 32) + bufQuo.U1;
+ uint div = (uint)(tmp / 10);
+ bufQuo.U1 = div;
+ tmp = ((tmp - div * 10) << 32) + bufQuo.U0;
+ div = (uint)(tmp / 10);
+ bufQuo.U0 = div;
+ remainder = (uint)(tmp - div * 10);
+ }
+
// The remainder is the last digit that does not fit, so we can use it to work out if we need to round up
if (remainder > 5 || remainder == 5 && (sticky || (bufQuo.U0 & 1) != 0))
Add32To96(ref bufQuo, 1);
@@ -883,7 +995,7 @@ internal static unsafe void DecAddSub(ref DecCalc d1, ref DecCalc d2, bool sign)
}
uint power;
- ulong tmp64, tmpLow;
+ ulong tmp64;
// d1 will need to be multiplied by 10^scale so
// it will have the same scale as d2. We could be
@@ -924,10 +1036,7 @@ internal static unsafe void DecAddSub(ref DecCalc d1, ref DecCalc d2, bool sign)
power = TenToPowerNine;
if (scale < MaxInt32Scale)
power = UInt32Powers10[scale];
- tmpLow = Math.BigMul((uint)low64, power);
- tmp64 = Math.BigMul((uint)(low64 >> 32), power) + (tmpLow >> 32);
- low64 = (uint)tmpLow + (tmp64 << 32);
- high = (uint)(tmp64 >> 32);
+ high = (uint)Math.BigMul(low64, power, out low64);
if ((scale -= MaxInt32Scale) <= 0)
goto AlignedAdd;
} while (high == 0);
@@ -940,10 +1049,7 @@ internal static unsafe void DecAddSub(ref DecCalc d1, ref DecCalc d2, bool sign)
power = TenToPowerNine;
if (scale < MaxInt32Scale)
power = UInt32Powers10[scale];
- tmpLow = Math.BigMul((uint)low64, power);
- tmp64 = Math.BigMul((uint)(low64 >> 32), power) + (tmpLow >> 32);
- low64 = (uint)tmpLow + (tmp64 << 32);
- tmp64 >>= 32;
+ tmp64 = Math.BigMul(low64, power, out low64);
tmp64 += Math.BigMul(high, power);
scale -= MaxInt32Scale;
@@ -1179,12 +1285,8 @@ internal static long VarCyFromDec(ref DecCalc pdecIn)
if (pdecIn.High != 0)
goto ThrowOverflow;
uint pwr = UInt32Powers10[-scale];
- ulong high = Math.BigMul(pwr, pdecIn.Mid);
- if (high > uint.MaxValue)
- goto ThrowOverflow;
- ulong low = Math.BigMul(pwr, pdecIn.Low);
- low += high <<= 32;
- if (low < high)
+ ulong high = Math.BigMul(pdecIn.Low64, pwr, out ulong low);
+ if (high != 0)
goto ThrowOverflow;
value = (long)low;
}
@@ -1267,10 +1369,7 @@ private static int VarDecCmpSub(in decimal d1, in decimal d2)
do
{
uint power = scale >= MaxInt32Scale ? TenToPowerNine : UInt32Powers10[scale];
- ulong tmpLow = Math.BigMul((uint)low64, power);
- ulong tmp = Math.BigMul((uint)(low64 >> 32), power) + (tmpLow >> 32);
- low64 = (uint)tmpLow + (tmp << 32);
- tmp >>= 32;
+ ulong tmp = Math.BigMul(low64, power, out low64);
tmp += Math.BigMul(high, power);
// If the scaled value has more than 96 significant bits then it's greater than d2
if (tmp > uint.MaxValue)
@@ -1345,12 +1444,8 @@ internal static unsafe void VarDecMul(ref DecCalc d1, ref DecCalc d2)
else
{
// Left value is 32-bit, result fits in 4 uints
- tmp = Math.BigMul(d1.Low, d2.Low);
- bufProd.U0 = (uint)tmp;
-
- tmp = Math.BigMul(d1.Low, d2.Mid) + (tmp >> 32);
- bufProd.U1 = (uint)tmp;
- tmp >>= 32;
+ tmp = Math.BigMul(d1.Low, d2.Low64, out ulong low);
+ bufProd.Low64 = low;
if (d2.High != 0)
{
@@ -1369,12 +1464,8 @@ internal static unsafe void VarDecMul(ref DecCalc d1, ref DecCalc d2)
else if ((d2.High | d2.Mid) == 0)
{
// Right value is 32-bit, result fits in 4 uints
- tmp = Math.BigMul(d2.Low, d1.Low);
- bufProd.U0 = (uint)tmp;
-
- tmp = Math.BigMul(d2.Low, d1.Mid) + (tmp >> 32);
- bufProd.U1 = (uint)tmp;
- tmp >>= 32;
+ tmp = Math.BigMul(d1.Low64, d2.Low, out ulong low);
+ bufProd.Low64 = low;
if (d1.High != 0)
{
@@ -1391,80 +1482,50 @@ internal static unsafe void VarDecMul(ref DecCalc d1, ref DecCalc d2)
}
else
{
- // Both operands have bits set in the upper 64 bits.
+ // At least one operand has bits set in the upper 64 bits.
//
// Compute and accumulate the 9 partial products into a
- // 192-bit (24-byte) result.
+ // 192-bit (3*64bit) result.
//
- // [l-h][l-m][l-l] left high, middle, low
- // x [r-h][r-m][r-l] right high, middle, low
- // ------------------------------
+ // [l-hi][l-lo] left high32, low64
+ // x [r-hi][r-lo] right high32, low64
+ // -------------------------------
//
- // [0-h][0-l] l-l * r-l
- // [1ah][1al] l-l * r-m
- // [1bh][1bl] l-m * r-l
- // [2ah][2al] l-m * r-m
- // [2bh][2bl] l-l * r-h
- // [2ch][2cl] l-h * r-l
- // [3ah][3al] l-m * r-h
- // [3bh][3bl] l-h * r-m
- // [4-h][4-l] l-h * r-h
+ // [ 0-h][0-l ] l-lo * r-lo => 64 + 64 bit result
+ // [ h*l][h*l ] l-lo * r-hi => 32 + 64 bit result
+ // [ l*h][l*h ] l-hi * r-lo => 32 + 64 bit result
+ // [ h*h] l-hi * r-hi => 32 + 32 bit result
// ------------------------------
- // [p-5][p-4][p-3][p-2][p-1][p-0] prod[] array
+ // [Hi64][Mid64][Low64] bufProd "array"
//
- tmp = Math.BigMul(d1.Low, d2.Low);
- bufProd.U0 = (uint)tmp;
-
- ulong tmp2 = Math.BigMul(d1.Low, d2.Mid) + (tmp >> 32);
+ ulong mid64 = Math.BigMul(d1.Low64, d2.Low64, out tmp);
+ bufProd.Low64 = tmp;
- tmp = Math.BigMul(d1.Mid, d2.Low);
- tmp += tmp2; // this could generate carry
- bufProd.U1 = (uint)tmp;
- if (tmp < tmp2) // detect carry
- tmp2 = (tmp >> 32) | (1UL << 32);
- else
- tmp2 = tmp >> 32;
-
- tmp = Math.BigMul(d1.Mid, d2.Mid) + tmp2;
-
- if ((d1.High | d2.High) > 0)
+ if ((d1.High | d2.High) != 0)
{
- // Highest 32 bits is non-zero. Calculate 5 more partial products.
- //
- tmp2 = Math.BigMul(d1.Low, d2.High);
- tmp += tmp2; // this could generate carry
- uint tmp3 = 0;
- if (tmp < tmp2) // detect carry
- tmp3 = 1;
-
- tmp2 = Math.BigMul(d1.High, d2.Low);
- tmp += tmp2; // this could generate carry
- bufProd.U2 = (uint)tmp;
- if (tmp < tmp2) // detect carry
- tmp3++;
- tmp2 = ((ulong)tmp3 << 32) | (tmp >> 32);
-
- tmp = Math.BigMul(d1.Mid, d2.High);
- tmp += tmp2; // this could generate carry
- tmp3 = 0;
- if (tmp < tmp2) // detect carry
- tmp3 = 1;
-
- tmp2 = Math.BigMul(d1.High, d2.Mid);
- tmp += tmp2; // this could generate carry
- bufProd.U3 = (uint)tmp;
- if (tmp < tmp2) // detect carry
- tmp3++;
- tmp = ((ulong)tmp3 << 32) | (tmp >> 32);
-
- bufProd.High64 = Math.BigMul(d1.High, d2.High) + tmp;
-
+ // hi64 will never overflow since the result will always fit in 192 (2*96) bits
+ ulong hi64 = Math.BigMul(d1.High, d2.High);
+
+ // Do crosswise multiplications between upper 32bit and lower 64 bits
+ hi64 += Math.BigMul(d1.Low64, d2.High, out tmp);
+ mid64 += tmp;
+ // propagate carry, can be simplified if https://github.com/dotnet/runtime/issues/48247 is done
+ if (mid64 < tmp)
+ ++hi64;
+
+ hi64 += Math.BigMul(d2.Low64, d1.High, out tmp);
+ mid64 += tmp;
+ if (mid64 < tmp)
+ ++hi64;
+
+ bufProd.Mid64 = mid64;
+ bufProd.High64 = hi64;
hiProd = 5;
}
else
{
- bufProd.Mid64 = tmp;
+ bufProd.Mid64 = mid64;
hiProd = 3;
}
}
@@ -1472,7 +1533,7 @@ internal static unsafe void VarDecMul(ref DecCalc d1, ref DecCalc d2)
// Check for leading zero uints on the product
//
uint* product = (uint*)&bufProd;
- while (product[(int)hiProd] == 0)
+ while (product[hiProd] == 0)
{
if (hiProd == 0)
goto ReturnZero;
@@ -1595,12 +1656,8 @@ internal static void VarDecFromR4(float input, out DecCalc result)
else
{
ulong low64 = Math.BigMul(mant, UInt32Powers10[power - 9]);
- ulong hi64 = Math.BigMul(TenToPowerNine, (uint)(low64 >> 32));
- low64 = Math.BigMul(TenToPowerNine, (uint)low64);
- result.Low = (uint)low64;
- hi64 += low64 >> 32;
- result.Mid = (uint)hi64;
- hi64 >>= 32;
+ ulong hi64 = Math.BigMul(TenToPowerNine, low64, out low64);
+ result.Low64 = low64;
result.High = (uint)hi64;
}
}
@@ -1952,9 +2009,7 @@ internal static unsafe void VarDecDiv(ref DecCalc d1, ref DecCalc d2)
goto ThrowOverflow;
ulong num = Math.BigMul(remainder, power);
- // TODO: https://github.com/dotnet/runtime/issues/5213
- uint div = (uint)(num / den);
- remainder = (uint)num - div * den;
+ (uint div, remainder) = Div64By32(num, den);
if (!Add32To96(ref bufQuo, div))
{
@@ -1993,9 +2048,7 @@ internal static unsafe void VarDecDiv(ref DecCalc d1, ref DecCalc d2)
// (currently 96 bits spread over 4 uints) will be < divisor.
//
bufQuo.U2 = 0;
- bufQuo.U1 = Div96By64(ref *(Buf12*)&bufRem.U1, divisor);
- bufQuo.U0 = Div96By64(ref *(Buf12*)&bufRem, divisor);
-
+ bufQuo.Low64 = Div128By64(&bufRem, divisor);
while (true)
{
if (bufRem.Low64 == 0)
@@ -2104,7 +2157,7 @@ internal static unsafe void VarDecDiv(ref DecCalc d1, ref DecCalc d2)
if (IncreaseScale(ref bufQuo, power) != 0)
goto ThrowOverflow;
- bufRem.U3 = IncreaseScale(ref *(Buf12*)&bufRem, power);
+ IncreaseScale(ref bufRem, power);
tmp = Div128By96(ref bufRem, ref bufDivisor);
if (!Add32To96(ref bufQuo, tmp))
{
@@ -2184,12 +2237,9 @@ internal static void VarDecMod(ref DecCalc d1, ref DecCalc d2)
do
{
uint power = scale >= MaxInt32Scale ? TenToPowerNine : UInt32Powers10[scale];
- ulong tmp = Math.BigMul(d2.Low, power);
- d2.Low = (uint)tmp;
- tmp >>= 32;
- tmp += (d2.Mid + ((ulong)d2.High << 32)) * power;
- d2.Mid = (uint)tmp;
- d2.High = (uint)(tmp >> 32);
+ uint hi32 = (uint)Math.BigMul(d2.Low64, power, out ulong low64);
+ d2.Low64 = low64;
+ d2.High = hi32 + d2.High * power;
} while ((scale -= MaxInt32Scale) > 0);
scale = 0;
}
@@ -2211,10 +2261,7 @@ internal static void VarDecMod(ref DecCalc d1, ref DecCalc d2)
break;
uint power = iCurScale >= MaxInt32Scale ? TenToPowerNine : UInt32Powers10[iCurScale];
scale += iCurScale;
- ulong tmp = Math.BigMul(bufQuo.U0, power);
- bufQuo.U0 = (uint)tmp;
- tmp >>= 32;
- bufQuo.High64 = tmp + bufQuo.High64 * power;
+ IncreaseScale(ref bufQuo, power);
if (power != TenToPowerNine)
break;
}
diff --git a/src/libraries/System.Private.CoreLib/src/System/Globalization/Normalization.Icu.cs b/src/libraries/System.Private.CoreLib/src/System/Globalization/Normalization.Icu.cs
index cffa2705c380f6..8c91464a9d86c3 100644
--- a/src/libraries/System.Private.CoreLib/src/System/Globalization/Normalization.Icu.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/Globalization/Normalization.Icu.cs
@@ -15,7 +15,9 @@ private static unsafe bool IcuIsNormalized(ReadOnlySpan source, Normalizat
Debug.Assert(!GlobalizationMode.Invariant);
Debug.Assert(!GlobalizationMode.UseNls);
Debug.Assert(!source.IsEmpty);
+#pragma warning disable CA1416 // FormKC and FormKD are unsupported on browser, ValidateArguments is throwing PlatformNotSupportedException in that case so suppressing the warning here
Debug.Assert(normalizationForm is NormalizationForm.FormC or NormalizationForm.FormD or NormalizationForm.FormKC or NormalizationForm.FormKD);
+#pragma warning restore CA1416
ValidateArguments(source, normalizationForm, nameof(source));
diff --git a/src/libraries/System.Private.CoreLib/src/System/Math.cs b/src/libraries/System.Private.CoreLib/src/System/Math.cs
index 32c3eee4712bfc..9337314de15b01 100644
--- a/src/libraries/System.Private.CoreLib/src/System/Math.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/Math.cs
@@ -181,6 +181,31 @@ public static long BigMul(int a, int b)
return ((long)a) * b;
}
+
+ ///
+ /// Perform multiplication between 64 and 32 bit numbers, returning lower 64 bits in
+ ///
+ /// hi bits of the result
+ /// REMOVE once BigMul(ulong, ulong) is treated as intrinsics and optimizes 32 by 64 multiplications
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ internal static ulong BigMul(ulong a, uint b, out ulong low)
+ {
+#if TARGET_64BIT
+ return Math.BigMul((ulong)a, (ulong)b, out low);
+#else
+ ulong prodL = ((ulong)(uint)a) * b;
+ ulong prodH = (prodL >> 32) + (((ulong)(uint)(a >> 32)) * b);
+
+ low = ((prodH << 32) | (uint)prodL);
+ return (prodH >> 32);
+#endif
+ }
+
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ internal static ulong BigMul(uint a, ulong b, out ulong low)
+ => BigMul(b, a, out low);
+
/// Produces the full product of two unsigned 64-bit numbers.
/// The first number to multiply.
/// The second number to multiply.
diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs
index 5f8847cf2f4518..a63e3a85f25359 100644
--- a/src/libraries/System.Runtime/ref/System.Runtime.cs
+++ b/src/libraries/System.Runtime/ref/System.Runtime.cs
@@ -2668,10 +2668,10 @@ protected Enum() { }
public static partial class Environment
{
public static string CommandLine { get { throw null; } }
- [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("browser")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatformAttribute("tvos")]
+ [System.Runtime.Versioning.SupportedOSPlatformAttribute("maccatalyst")] // this needs to come after the ios attribute due to limitations in the platform analyzer
public static System.Environment.ProcessCpuUsage CpuUsage { get { throw null; } }
public static string CurrentDirectory { get { throw null; } set { } }
public static int CurrentManagedThreadId { get { throw null; } }
diff --git a/src/libraries/System.Security.Cryptography.Pkcs/ref/System.Security.Cryptography.Pkcs.netcoreapp.cs b/src/libraries/System.Security.Cryptography.Pkcs/ref/System.Security.Cryptography.Pkcs.netcoreapp.cs
index 0f53e8d734e9f2..91290677204be9 100644
--- a/src/libraries/System.Security.Cryptography.Pkcs/ref/System.Security.Cryptography.Pkcs.netcoreapp.cs
+++ b/src/libraries/System.Security.Cryptography.Pkcs/ref/System.Security.Cryptography.Pkcs.netcoreapp.cs
@@ -48,6 +48,7 @@ public sealed partial class Pkcs12CertBag : System.Security.Cryptography.Pkcs.Pk
public Pkcs12CertBag(System.Security.Cryptography.Oid certificateType, System.ReadOnlyMemory encodedCertificate) : base (default(string), default(System.ReadOnlyMemory), default(bool)) { }
public System.ReadOnlyMemory EncodedCertificate { get { throw null; } }
public bool IsX509Certificate { get { throw null; } }
+ [System.Runtime.Versioning.UnsupportedOSPlatformAttribute("browser")]
public System.Security.Cryptography.X509Certificates.X509Certificate2 GetCertificate() { throw null; }
public System.Security.Cryptography.Oid GetCertificateType() { throw null; }
}
diff --git a/src/mono/System.Private.CoreLib/src/System/Reflection/TypeNameResolver.Mono.cs b/src/mono/System.Private.CoreLib/src/System/Reflection/TypeNameResolver.Mono.cs
index ef5d63ec28074d..9825299577c395 100644
--- a/src/mono/System.Private.CoreLib/src/System/Reflection/TypeNameResolver.Mono.cs
+++ b/src/mono/System.Private.CoreLib/src/System/Reflection/TypeNameResolver.Mono.cs
@@ -18,7 +18,7 @@ internal unsafe ref partial struct TypeNameResolver
private Func? _typeResolver;
private bool _throwOnError;
private bool _ignoreCase;
- private void* _stackMark;
+ private ref StackCrawlMark _stackMark;
[RequiresUnreferencedCode("The type might be removed")]
internal static Type? GetType(
@@ -52,7 +52,7 @@ internal unsafe ref partial struct TypeNameResolver
_typeResolver = typeResolver,
_throwOnError = throwOnError,
_ignoreCase = ignoreCase,
- _stackMark = Unsafe.AsPointer(ref stackMark)
+ _stackMark = ref stackMark
}.Resolve(parsed);
}
@@ -69,11 +69,9 @@ internal unsafe ref partial struct TypeNameResolver
}
else
{
- ref StackCrawlMark stackMark = ref Unsafe.AsRef(_stackMark);
-
if (_throwOnError)
{
- assembly = Assembly.Load(name, ref stackMark, null);
+ assembly = Assembly.Load(name, ref _stackMark, null);
}
else
{
@@ -81,7 +79,7 @@ internal unsafe ref partial struct TypeNameResolver
// Other exceptions like BadImangeFormatException should still fly.
try
{
- assembly = Assembly.Load(name, ref stackMark, null);
+ assembly = Assembly.Load(name, ref _stackMark, null);
}
catch (FileNotFoundException)
{
@@ -123,9 +121,7 @@ internal unsafe ref partial struct TypeNameResolver
{
if (assembly is null)
{
- ref StackCrawlMark stackMark = ref Unsafe.AsRef(_stackMark);
-
- type = RuntimeType.GetType(escapedTypeName, _throwOnError, _ignoreCase, ref stackMark);
+ type = RuntimeType.GetType(escapedTypeName, _throwOnError, _ignoreCase, ref _stackMark);
}
else
{
diff --git a/src/mono/mono/mini/intrinsics.c b/src/mono/mono/mini/intrinsics.c
index 10ce426717eb75..41c5be9c82022c 100644
--- a/src/mono/mono/mini/intrinsics.c
+++ b/src/mono/mono/mini/intrinsics.c
@@ -2224,11 +2224,7 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign
}
}
return NULL;
- } else if (((!strcmp (cmethod_klass_image->assembly->aname.name, "Xamarin.iOS") ||
- !strcmp (cmethod_klass_image->assembly->aname.name, "Xamarin.TVOS") ||
- !strcmp (cmethod_klass_image->assembly->aname.name, "Xamarin.MacCatalyst") ||
- !strcmp (cmethod_klass_image->assembly->aname.name, "Xamarin.Mac") ||
- !strcmp (cmethod_klass_image->assembly->aname.name, "Microsoft.iOS") ||
+ } else if (((!strcmp (cmethod_klass_image->assembly->aname.name, "Microsoft.iOS") ||
!strcmp (cmethod_klass_image->assembly->aname.name, "Microsoft.tvOS") ||
!strcmp (cmethod_klass_image->assembly->aname.name, "Microsoft.MacCatalyst") ||
!strcmp (cmethod_klass_image->assembly->aname.name, "Microsoft.macOS")) &&
diff --git a/src/tasks/MobileBuildTasks/Apple/AppleSdk.cs b/src/tasks/MobileBuildTasks/Apple/AppleSdk.cs
index 29b9b98515116e..07d9dc1de1e5ee 100644
--- a/src/tasks/MobileBuildTasks/Apple/AppleSdk.cs
+++ b/src/tasks/MobileBuildTasks/Apple/AppleSdk.cs
@@ -104,7 +104,7 @@ private string GetXCodeDevRoot()
debugMessageImportance: MessageImportance.Low,
label: "xcode-select");
- output.Trim();
+ output = output.Trim();
if (Directory.Exists(output))
{
if (output.EndsWith("/Contents/Developer", StringComparison.Ordinal))
diff --git a/src/tests/Common/helixpublishwitharcade.proj b/src/tests/Common/helixpublishwitharcade.proj
index 66365473a397ce..21238d37183a89 100644
--- a/src/tests/Common/helixpublishwitharcade.proj
+++ b/src/tests/Common/helixpublishwitharcade.proj
@@ -449,7 +449,7 @@
-
+
diff --git a/src/tests/GC/Stress/Framework/ReliabilityFramework.cs b/src/tests/GC/Stress/Framework/ReliabilityFramework.cs
index 478b6895049a66..3403e33e5091d8 100644
--- a/src/tests/GC/Stress/Framework/ReliabilityFramework.cs
+++ b/src/tests/GC/Stress/Framework/ReliabilityFramework.cs
@@ -119,6 +119,8 @@ public class ReliabilityFramework
private int _reportedFailCnt = 0;
private RFLogging _logger = new RFLogging();
private DateTime _lastLogTime = DateTime.Now;
+ private Dictionary _testRunCounter = new();
+ private object _testRunCounterLock = new();
// static members
private static int s_seed = (int)System.DateTime.Now.Ticks;
@@ -161,6 +163,11 @@ public static int Main(string[] args)
ReliabilityFramework rf = new ReliabilityFramework();
rf._logger.WriteToInstrumentationLog(null, LoggingLevels.StartupShutdown, "Started");
+
+ Console.CancelKeyPress += (object _, ConsoleCancelEventArgs _) => {
+ rf.RecordTestRunCount();
+ };
+
var configVars = GC.GetConfigurationVariables();
foreach (var kvp in configVars)
{
@@ -305,7 +312,7 @@ public static int Main(string[] args)
}
NoExitPoll();
-
+ rf.RecordTestRunCount();
rf._logger.WriteToInstrumentationLog(null, LoggingLevels.StartupShutdown, String.Format("Shutdown w/ ret val of {0}", retVal));
@@ -314,6 +321,19 @@ public static int Main(string[] args)
return (retVal);
}
+ public void RecordTestRunCount()
+ {
+ StringBuilder sb = new();
+ lock (_testRunCounterLock)
+ {
+ foreach(var item in _testRunCounter)
+ {
+ sb.AppendLine($"{item.Key}: {item.Value}");
+ }
+ }
+ _logger.WriteToInstrumentationLog(_curTestSet, LoggingLevels.StartupShutdown, $"Tests run count:\n{sb}");
+ }
+
public void HandleOom(Exception e, string message)
{
_logger.WriteToInstrumentationLog(_curTestSet, LoggingLevels.Tests, String.Format("Exception while running tests: {0}", e));
@@ -621,6 +641,11 @@ private void TestStarter()
DateTime lastStart = DateTime.Now; // keeps track of when we last started a test
TimeSpan minTimeToStartTest = new TimeSpan(0, 5, 0); // after 5 minutes if we haven't started a test we're having problems...
int cpuAdjust = 0, memAdjust = 0; // if we discover that we're not starting new tests quick enough we adjust the CPU/Mem percentages
+
+ foreach (var test in _curTestSet.Tests)
+ {
+ _testRunCounter[test.RefOrID] = 0;
+ }
// so we start new tests sooner (so they start BEFORE we drop below our minimum CPU)
//Console.WriteLine("RF - TestStarter found {0} tests to run", totalTestsToRun);
@@ -1196,6 +1221,12 @@ private void StartTestWorker(object test)
}
break;
}
+
+ lock (_testRunCounterLock)
+ {
+ string testRefOrID = daTest.RefOrID;
+ _testRunCounter[testRefOrID] = _testRunCounter.GetValueOrDefault(testRefOrID, 0) + 1;
+ }
}
catch (Exception e)
{
diff --git a/src/tests/JIT/opt/InstructionCombining/Eon.cs b/src/tests/JIT/opt/InstructionCombining/Eon.cs
new file mode 100644
index 00000000000000..f7e6cd30158e11
--- /dev/null
+++ b/src/tests/JIT/opt/InstructionCombining/Eon.cs
@@ -0,0 +1,121 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Runtime.CompilerServices;
+using Xunit;
+
+namespace TestEon
+{
+ public class Program
+ {
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ [Fact]
+ public static int CheckEon()
+ {
+ bool fail = false;
+
+ if (Eon(5, 1) != 0xFFFFFFFB)
+ {
+ fail = true;
+ }
+
+ if (EonLSL(0x12345678, 0xA) != 0xEDC92987)
+ {
+ fail = true;
+ }
+
+ if (EonLSLSwapInt(0x12345678, 0xA) != -0x1236d679)
+ {
+ fail = true;
+ }
+
+ if (EonLSLSwapUint(0xFDFDFDFD, 0xB) != 0x200C202)
+ {
+ fail = true;
+ }
+
+ if (EonLSR(0x87654321, 0xFEDCBA) != 0x789D4A3B)
+ {
+ fail = true;
+ }
+
+ if (EonASR(0x2468, 0xFEDCBA) != -0x246C)
+ {
+ fail = true;
+ }
+
+ if (EonLargeShift(0x87654321, 0x12345678) != 0xB89ABCDE)
+ {
+ fail = true;
+ }
+
+ if (EonLargeShift64Bit(0x1357135713571357, 0x123456789ABCDEF0) != 0xECA8ECA8ECE03DF1)
+ {
+ fail = true;
+ }
+
+ if (fail)
+ {
+ return 101;
+ }
+ return 100;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static uint Eon(uint a, uint b)
+ {
+ //ARM64-FULL-LINE: eon {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
+ return a ^ ~b;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static uint EonLSL(uint a, uint b)
+ {
+ //ARM64-FULL-LINE: eon {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, LSL #14
+ return a ^ ~(b<<14);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static int EonLSLSwapInt(int a, int b)
+ {
+ //ARM64-FULL-LINE: eon {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, LSL #14
+ return ~(b<<14) ^ a;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static uint EonLSLSwapUint(uint a, uint b)
+ {
+ //ARM64-FULL-LINE: eon {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, LSL #14
+ return ~(b<<14) ^ a;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static uint EonLSR(uint a, uint b)
+ {
+ //ARM64-FULL-LINE: eon {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, LSR #5
+ return a ^ ~(b>>5);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static int EonASR(int a, int b)
+ {
+ //ARM64-FULL-LINE: eon {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, ASR #22
+ return a ^ ~(b>>22);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static uint EonLargeShift(uint a, uint b)
+ {
+ //ARM64-FULL-LINE: eon {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, LSL #27
+ return a ^ ~(b<<123);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static ulong EonLargeShift64Bit(ulong a, ulong b)
+ {
+ //ARM64-FULL-LINE: eon {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, LSR #38
+ return a ^ ~(b>>166);
+ }
+ }
+}
diff --git a/src/tests/JIT/opt/InstructionCombining/Eon.csproj b/src/tests/JIT/opt/InstructionCombining/Eon.csproj
new file mode 100644
index 00000000000000..5bb8b91def67fb
--- /dev/null
+++ b/src/tests/JIT/opt/InstructionCombining/Eon.csproj
@@ -0,0 +1,17 @@
+
+
+
+ true
+
+
+ None
+ True
+
+
+
+ true
+
+
+
+
+
diff --git a/src/tests/JIT/opt/InstructionCombining/Orn.cs b/src/tests/JIT/opt/InstructionCombining/Orn.cs
new file mode 100644
index 00000000000000..79b05f9112662c
--- /dev/null
+++ b/src/tests/JIT/opt/InstructionCombining/Orn.cs
@@ -0,0 +1,121 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Runtime.CompilerServices;
+using Xunit;
+
+namespace TestOrn
+{
+ public class Program
+ {
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ [Fact]
+ public static int CheckOrn()
+ {
+ bool fail = false;
+
+ if (Orn(0xAB, 0xCD) != 0xFFFFFFBB)
+ {
+ fail = true;
+ }
+
+ if (OrnLSL(0xAB, 0xCDE) != 0xCC87FFFF)
+ {
+ fail = true;
+ }
+
+ if (OrnLSLSwapInt(0xAB, -0xCDE) != 0x3377FFFF)
+ {
+ fail = true;
+ }
+
+ if (OrnLSLSwapUint(0xAB, 0xCDE) != 0xCC87FFFF)
+ {
+ fail = true;
+ }
+
+ if (OrnLSR(0x123456, 0xA9876543) != 0xFFFFFD5F)
+ {
+ fail = true;
+ }
+
+ if (OrnASR(0x141414, 0x13579) != -0x9AC)
+ {
+ fail = true;
+ }
+
+ if (OrnLargeShift(0x63636363, 0xE) != 0xFFFFFF7F)
+ {
+ fail = true;
+ }
+
+ if (OrnLargeShift64Bit(0xACEACEACEACEACE0, 0xFEDCFEDCFEDCFEDC) != 0xFFFFFFFFEACEECE8)
+ {
+ fail = true;
+ }
+
+ if (fail)
+ {
+ return 101;
+ }
+ return 100;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static uint Orn(uint a, uint b)
+ {
+ //ARM64-FULL-LINE: orn {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
+ return a | ~b;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static uint OrnLSL(uint a, uint b)
+ {
+ //ARM64-FULL-LINE: orn {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, LSL #18
+ return a | ~(b<<18);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static int OrnLSLSwapInt(int a, int b)
+ {
+ //ARM64-FULL-LINE: orn {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, LSL #18
+ return ~(b<<18) | a;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static uint OrnLSLSwapUint(uint a, uint b)
+ {
+ //ARM64-FULL-LINE: orn {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, LSL #18
+ return ~(b<<18) | a;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static uint OrnLSR(uint a, uint b)
+ {
+ //ARM64-FULL-LINE: orn {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, LSR #22
+ return a | ~(b>>22);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static int OrnASR(int a, int b)
+ {
+ //ARM64-FULL-LINE: orn {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, ASR #5
+ return a | ~(b>>5);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static uint OrnLargeShift(uint a, uint b)
+ {
+ //ARM64-FULL-LINE: orn {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, LSL #6
+ return a | ~(b<<102);
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ static ulong OrnLargeShift64Bit(ulong a, ulong b)
+ {
+ //ARM64-FULL-LINE: orn {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, LSR #34
+ return a | ~(b>>162);
+ }
+ }
+}
diff --git a/src/tests/JIT/opt/InstructionCombining/Orn.csproj b/src/tests/JIT/opt/InstructionCombining/Orn.csproj
new file mode 100644
index 00000000000000..d7ca4a6ad9f1e3
--- /dev/null
+++ b/src/tests/JIT/opt/InstructionCombining/Orn.csproj
@@ -0,0 +1,17 @@
+
+
+
+ true
+
+
+ None
+ True
+
+
+
+ true
+
+
+
+
+
diff --git a/src/tests/Loader/classloader/InterfaceFolding/Ambiguous.ilproj b/src/tests/Loader/classloader/InterfaceFolding/Ambiguous.ilproj
index 82b82978e01989..adf90f77e15efd 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/Ambiguous.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/Ambiguous.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase0.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase0.ilproj
index 9792c17863cf2f..31ed277887212c 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase0.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase0.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_I.ilproj
index 867cca06c9e666..a5711085cfbf63 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_I_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_I_Nested_J.ilproj
index 9ef40fa908c3ec..02d3d6539a180e 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_I_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_I_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_J.ilproj
index aec1a12b20040c..03e9af52cc20b4 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_J_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_J_Nested_I.ilproj
index f07d5da2402cb0..3705d25b998500 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_J_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase0_Nested_J_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase1.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase1.ilproj
index 4923543d8b47b8..50002710464aae 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase1.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase1.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_I.ilproj
index 1375c0227faf5b..5fcf469a4d5dd8 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_I_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_I_Nested_J.ilproj
index 4f841a389fb3ff..9a6dffb4406086 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_I_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_I_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_J.ilproj
index 48d1a5af515d60..a7885a27357558 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_J_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_J_Nested_I.ilproj
index 75dd45e2ae20ee..d826a1db4cf787 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_J_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase1_Nested_J_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase2.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase2.ilproj
index 2138a70640736d..e53f1e4027693f 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase2.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase2.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_I.ilproj
index c4c611927e12e6..1ad77dc7138f9b 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_I_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_I_Nested_J.ilproj
index 90756460dc718a..486a4132cedeec 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_I_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_I_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_J.ilproj
index 22369c07e7fa84..ec58e1979679de 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_J_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_J_Nested_I.ilproj
index 35039f2fc123e1..cbd0e7020bcf87 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_J_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase2_Nested_J_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase3.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase3.ilproj
index c171d5117cf988..82e42bfa18c594 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase3.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase3.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_I.ilproj
index 08c8f0a04abeb2..f2864863ad6c10 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_I_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_I_Nested_J.ilproj
index dae77763f96d3c..35636b0774d444 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_I_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_I_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_J.ilproj
index 08a25a606cb1b2..bc75f77696795f 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_J_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_J_Nested_I.ilproj
index ed5696c2213027..cdf6f638eb0f04 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_J_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase3_Nested_J_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase4.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase4.ilproj
index ff033d90f4c65a..52b4932347ce4b 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase4.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase4.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_I.ilproj
index 8a2220c960a0ac..2f17747c4b9f18 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_I_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_I_Nested_J.ilproj
index 3e73742f812064..3cf495157dc52d 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_I_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_I_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_J.ilproj
index fdc5de70f7b93f..609437fb7dffba 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_J_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_J_Nested_I.ilproj
index 5d65badc490c3a..d5ec3afadcc229 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_J_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase4_Nested_J_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase5.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase5.ilproj
index 6af4af52870e99..4c4ddae4ac3c4f 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase5.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase5.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_I.ilproj
index 93fc05bac34050..3fcaf149bf4806 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_I_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_I_Nested_J.ilproj
index 05b131d1b27886..a7f5b56ba4035a 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_I_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_I_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_J.ilproj
index 79c86a767b2e32..e26e73f375fda9 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_J_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_J_Nested_I.ilproj
index 08cc3257e23f2f..4780c6c5de9e8f 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_J_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase5_Nested_J_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase6.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase6.ilproj
index aada4b81bb7802..b608b26936fbe6 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase6.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase6.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_I.ilproj
index b7643c07f69ff4..3fd25b15ea0b39 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_I_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_I_Nested_J.ilproj
index 1d83f5971cafaf..8f49d67dd729cd 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_I_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_I_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_J.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_J.ilproj
index 099f27bb476f1d..fa84b36ad4e2d5 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_J.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_J.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_J_Nested_I.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_J_Nested_I.ilproj
index 0e72a2ad769140..1559185f90f07b 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_J_Nested_I.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase6_Nested_J_Nested_I.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tests/Loader/classloader/InterfaceFolding/TestCase7.ilproj b/src/tests/Loader/classloader/InterfaceFolding/TestCase7.ilproj
index 5e1e8a020384d6..e900d50f04d4b2 100644
--- a/src/tests/Loader/classloader/InterfaceFolding/TestCase7.ilproj
+++ b/src/tests/Loader/classloader/InterfaceFolding/TestCase7.ilproj
@@ -1,7 +1,5 @@
-
- true
1
diff --git a/src/tools/illink/external/Mono.Options/Options.cs b/src/tools/illink/external/Mono.Options/Options.cs
index d8b3d78a455096..b89840c83b6c25 100644
--- a/src/tools/illink/external/Mono.Options/Options.cs
+++ b/src/tools/illink/external/Mono.Options/Options.cs
@@ -440,7 +440,7 @@ protected Option (string prototype, string description, int maxValueCount, bool
this.names = (this is OptionSet.Category)
// append GetHashCode() so that "duplicate" categories have distinct
// names, e.g. adding multiple "" categories should be valid.
- ? new[]{prototype + this.GetHashCode ()}
+ ? [prototype + this.GetHashCode ()]
: prototype.Split ('|');
if (this is OptionSet.Category || this is CommandOption)
diff --git a/src/tools/illink/src/ILLink.CodeFix/DynamicallyAccessedMembersCodeFixProvider.cs b/src/tools/illink/src/ILLink.CodeFix/DynamicallyAccessedMembersCodeFixProvider.cs
index 28d82bafae8872..2c4763bd99f035 100644
--- a/src/tools/illink/src/ILLink.CodeFix/DynamicallyAccessedMembersCodeFixProvider.cs
+++ b/src/tools/illink/src/ILLink.CodeFix/DynamicallyAccessedMembersCodeFixProvider.cs
@@ -132,14 +132,14 @@ private static async Task AddAttributeAsync (
var editor = await DocumentEditor.CreateAsync (document, cancellationToken).ConfigureAwait (false);
var generator = editor.Generator;
- var attributeArguments = new[] { generator.AttributeArgument (generator.MemberAccessExpression (generator.DottedName ("System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes"), stringArguments)) };
+ SyntaxNode[] attributeArguments = [generator.AttributeArgument (generator.MemberAccessExpression (generator.DottedName ("System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes"), stringArguments))];
var attribute = generator.Attribute (
generator.TypeExpression (attributeSymbol), attributeArguments)
.WithAdditionalAnnotations (Simplifier.Annotation, Simplifier.AddImportsAnnotation);
if (addAsReturnAttribute) {
// don't use AddReturnAttribute because it's the same as AddAttribute https://github.com/dotnet/roslyn/pull/63084
- editor.ReplaceNode (targetNode, (d, g) => g.AddReturnAttributes (d, new[] { attribute }));
+ editor.ReplaceNode (targetNode, (d, g) => g.AddReturnAttributes (d, [attribute]));
} else if (addGenericParameterAttribute) {
// AddReturnAttributes currently doesn't support adding attributes to type arguments https://github.com/dotnet/roslyn/pull/63292
var newNode = (TypeParameterSyntax) targetNode;
diff --git a/src/tools/illink/src/ILLink.CodeFix/RequiresHelpers.cs b/src/tools/illink/src/ILLink.CodeFix/RequiresHelpers.cs
index b38f11ca4a8e5e..b150275e49c4fb 100644
--- a/src/tools/illink/src/ILLink.CodeFix/RequiresHelpers.cs
+++ b/src/tools/illink/src/ILLink.CodeFix/RequiresHelpers.cs
@@ -16,7 +16,7 @@ internal static SyntaxNode[] GetAttributeArgumentsForRequires (ISymbol targetSym
if (string.IsNullOrEmpty (symbolDisplayName) || hasPublicAccessibility)
return Array.Empty ();
- return new[] { syntaxGenerator.AttributeArgument (syntaxGenerator.LiteralExpression ($"Calls {symbolDisplayName}")) };
+ return [syntaxGenerator.AttributeArgument (syntaxGenerator.LiteralExpression ($"Calls {symbolDisplayName}"))];
}
}
}
diff --git a/src/tools/illink/src/ILLink.CodeFix/UnconditionalSuppressMessageCodeFixProvider.cs b/src/tools/illink/src/ILLink.CodeFix/UnconditionalSuppressMessageCodeFixProvider.cs
index 2fd1b81a604c47..1dc66ae89aad80 100644
--- a/src/tools/illink/src/ILLink.CodeFix/UnconditionalSuppressMessageCodeFixProvider.cs
+++ b/src/tools/illink/src/ILLink.CodeFix/UnconditionalSuppressMessageCodeFixProvider.cs
@@ -56,7 +56,7 @@ protected override SyntaxNode[] GetAttributeArguments (ISymbol? attributableSymb
syntaxGenerator.LiteralExpression (""));
// [UnconditionalSuppressWarning (category, id, Justification = "")]
- return new[] { ruleCategory, ruleId, suppressionJustification };
+ return [ruleCategory, ruleId, suppressionJustification];
}
}
}
diff --git a/src/tools/illink/src/ILLink.RoslynAnalyzer/NullableAttributes.cs b/src/tools/illink/src/ILLink.RoslynAnalyzer/NullableAttributes.cs
index 7cf10912ea38b2..c07621e244d500 100644
--- a/src/tools/illink/src/ILLink.RoslynAnalyzer/NullableAttributes.cs
+++ b/src/tools/illink/src/ILLink.RoslynAnalyzer/NullableAttributes.cs
@@ -96,7 +96,7 @@ internal sealed class MemberNotNullAttribute : Attribute
///
/// The field or property member that is promised to be not-null.
///
- public MemberNotNullAttribute (string member) => Members = new[] { member };
+ public MemberNotNullAttribute (string member) => Members = [member];
/// Initializes the attribute with the list of field and property members.
///
@@ -122,7 +122,7 @@ internal sealed class MemberNotNullWhenAttribute : Attribute
public MemberNotNullWhenAttribute (bool returnValue, string member)
{
ReturnValue = returnValue;
- Members = new[] { member };
+ Members = [member];
}
/// Initializes the attribute with the specified return value condition and list of field and property members.
diff --git a/src/tools/illink/src/linker/Linker/AssemblyResolver.cs b/src/tools/illink/src/linker/Linker/AssemblyResolver.cs
index 98a593aabdb311..964f8c8a4dca62 100644
--- a/src/tools/illink/src/linker/Linker/AssemblyResolver.cs
+++ b/src/tools/illink/src/linker/Linker/AssemblyResolver.cs
@@ -187,7 +187,7 @@ AssemblyDefinition IAssemblyResolver.Resolve (AssemblyNameReference name, Reader
throw new NotSupportedException ();
}
- static readonly string[] Extensions = new[] { ".dll", ".exe", ".winmd" };
+ static readonly string[] Extensions = [".dll", ".exe", ".winmd"];
AssemblyDefinition? SearchDirectory (AssemblyNameReference name)
{
diff --git a/src/tools/illink/src/tlens/TLens/LensesCollection.cs b/src/tools/illink/src/tlens/TLens/LensesCollection.cs
index 94bded70816136..632cc454f82f89 100644
--- a/src/tools/illink/src/tlens/TLens/LensesCollection.cs
+++ b/src/tools/illink/src/tlens/TLens/LensesCollection.cs
@@ -37,7 +37,8 @@ public Analyzer CreateAnalyzer ()
// Most used/unused attributes
// Constants passed as arguments
//
- static readonly LensAnalyzerDetails[] all = new[] {
+ static readonly LensAnalyzerDetails[] all =
+ [
new LensAnalyzerDetails ("duplicated-code",
"Methods which are possible duplicates", typeof (DuplicatedCodeAnalyzer)),
new LensAnalyzerDetails ("fields-init",
@@ -64,7 +65,7 @@ public Analyzer CreateAnalyzer ()
"Types with limited number of constructions", typeof (TypeInstatiationAnalyzer)) { DefaultSet = true },
new LensAnalyzerDetails ("unused-param",
"Methods with unused parameters", typeof (UnusedParametersAnalyzer)),
- };
+ ];
public static IEnumerable All => all;