Initial implementation of two field span.
authorJan Kotas <jkotas@microsoft.com>
Wed, 7 Dec 2016 05:30:54 +0000 (21:30 -0800)
committerRussell C Hadley <rhadley@microsoft.com>
Wed, 11 Jan 2017 22:12:57 +0000 (14:12 -0800)
commit0bedde3a63f22b65155d5f369e75c448c6afb786
treece0c00bd13c7b2e5ff727b3daabae789c059f7ec
parentbaa998029e27b5927122d40f3a3a208e6e728421
Initial implementation of two field span.

Implements two field span struct which is comprised of a byref field
that may be an interior pointer to a managed object, or a native
pointer indicating the start of the span, and a length field which
describes the span of access.

Since there is no MSIL operation which assign a byref field, the jit
gets involved and treats the constructor and getter of a special struct
called ByReference that contains an declared IntPtr.  This special
struct is then used as a field in the span implementation and recognized
by the runtime as a field that may contain a GC pointer.  In
implementation, the ctor of ByReference is converted into an assignment
value is returned by a reverse assignment.

Since there are some dependencies on CoreFX for the span implementation
local testing of the implementation has been done using the
BasicSpanTest.cs in the CoreCLR tests.  Once this is checked in and is
propagated to CoreFX the apporopate code in the packages will be enabled
and then may be referenced in CoreCLR tests.  At that time more span
tests will be added.

Additional comments and fixes based on code review added.
src/inc/corinfo.h
src/jit/compiler.h
src/jit/importer.cpp
src/mscorlib/model.xml
src/mscorlib/src/System/ByReference.cs
src/vm/argdestination.h
src/vm/jitinterface.cpp
src/vm/method.cpp
src/vm/siginfo.cpp