[Coop] InterlockedCompare/Exchange (object/T) (mono/mono#16873)
authorJay Krell <jaykrell@microsoft.com>
Fri, 20 Sep 2019 02:36:18 +0000 (19:36 -0700)
committerZoltan Varga <vargaz@gmail.com>
Fri, 20 Sep 2019 02:36:18 +0000 (22:36 -0400)
commit689a186b981ea9e11ecdc1bd2862ee518a623d26
tree820412d18aae534810efb796ce03864b040f1685
parentb94203ee72060f5c04623395be771196e8b5dfb9
[Coop] InterlockedCompare/Exchange (object/T) (mono/mono#16873)

* [Coop] InterlockedExchange (object and T), InterlockedCompareExchange (object and T).

 - Usually intrinsified.
 - Always?
 - Avoid coop handles by manually always using ref to object.
 - For efficiency on input, and efficiency wrt MonoError.
 - For correctness on output (due to aliasing in the wrappers).
 - To probably avoid assertion failure in runtime around icall marshaling of generics.
 - Unclear on location.

* Balance parens in prints, so they are balanced in the code.

* Reduce local arrays from 16 to auto-sized 1.

* Update and reformat System.Threading.Interlocked signature recognition.

* Rename the generic again to "_T" (or "Generic"?) on the theory
that the aot-runtime.c signature check is too strict/incorrect,
but that if we loosen it, it is not clearly specific to the generic.

* Revise corlib version again.

* Bump API snapshot submodule

Commit migrated from https://github.com/mono/mono/commit/d49d7b47165b2c629a916a2c3b0fb11067e49151
src/mono/configure.ac
src/mono/mono/metadata/icall-def-netcore.h
src/mono/mono/metadata/icall-def.h
src/mono/mono/metadata/marshal-ilgen.c
src/mono/mono/metadata/marshal.c
src/mono/mono/metadata/threads-types.h
src/mono/mono/metadata/threads.c
src/mono/mono/mini/aot-compiler.c
src/mono/mono/mini/aot-runtime.c
src/mono/netcore/System.Private.CoreLib/src/System.Threading/Interlocked.cs