Recover some lost EH performance on Unix amd64 (#90033)
authorJan Vorlicek <janvorli@microsoft.com>
Sun, 6 Aug 2023 10:07:55 +0000 (12:07 +0200)
committerGitHub <noreply@github.com>
Sun, 6 Aug 2023 10:07:55 +0000 (12:07 +0200)
commit1018da575a7284e42b4a8aff04c7e78901c30d71
tree4fd892834834c90d08ec251f6bc8d8434954363f
parenta820ef74860040f0e7c0d2c301a96a64dae10d1a
Recover some lost EH performance on Unix amd64 (#90033)

* Improve EH performance on Unix amd64

Few months ago, a change to enable AVX512 on Unix was merged in.
That change has enlarged the CONTEXT structure significantly and
it was found that it has caused 6..17% regressions in exception handling
microbenchmarks.

This change gets some of the lost performance back by adding custom
copy constructor and assignment operator to the CONTEXT structure
and preventing copying of the AVX / AVX512 stuff if the source
context doesn't have it. I have observed 3..9% gain on my machine.

Close #84308

* Fix gcc build and size for non-xstate case

* Fix yet another gcc break

* Fix build break

* Revert the gcc fixes and disable the warning

The zeroing of CONTEXT structure is used at too many places and
it is valid, so rather than trying to modify all the places by
using placement new, just disable the warning for gcc.
eng/native/configurecompiler.cmake
src/coreclr/debug/ee/debugger.cpp
src/coreclr/pal/inc/pal.h
src/coreclr/pal/src/thread/context.cpp
src/coreclr/vm/exceptionhandling.cpp