* Enable basic generation of ngen pdb from composite image
- Port non-line number handling portion of ngen pdb from crossgen to r2rdump
- This pdb generation logic may be used for both composite and non-composite R2R images
- Only pdb generation is supported. Perfmap generation for unix is not supported
- pdb generation is only supported on Windows x86 and amd64 platforms. Diasymreader is not supported on other systems
- Pdb generation does not generation symbols with the same names as crossgen. Instead it uses the name generator from r2rdump. For current needs this should be sufficient
- Update composite file format so that pdb generation process will work. Major difference is that a CorHeader is always produced for composite images now. This CorHeader is not used by the runtime, but is required for DiaSymReader to generate an ngen pdb.
To avoid confusion with `Func<>` delegate and object. At least to me it create a bit of unnecessary confusion. Whether this should be `Method` or just `F` can be discussed. However, `Method` makes it clear the discussion is about a generic **method** instantiation.
- Add support for the --instruction-set parameter as described in #226 .
NOTE: As the abi for Vector parameters is not yet stable, support for the --instruction-set parameter is only enabled if --inputbubble is also enabled. Parallel work to stabilize the abi is in progress, but is not complete.
ALSO NOTE: The names of the instruction sets are shared with mono, and don't follow the names in issue #226
- Add concept of baseline instruction set support to R2R file format
- Can be applied at a per method level or at the entire R2R file level
- R2RDump support for dumping the extra data
- Refactor how support for hardware intrinsics beyond SSE2 support are handled in crossgen2
- Add feature to the JIT to detect which hardware features are actually used
- Tell the JIT unconditionally that SSE42+Lzcnt+Popcnt+Pclmulqdq are supported
- But if support beyond the --instruction-set specified baseline is used, notate the method with a per-method instruction set support fixup.
- This enables usage of many intrinsics in corelib with greater efficiency than today
- This enables usage of SSE42 and below intrinsics safely in non-CoreLib code. Use of higher level intrinsics in non CoreLib code will generate code which does not use the higher level intrinsic, and note that the method's code should not be used in the presence of hardware which does support greater CPU capabilities.
- In the future a logical enhancement of this work would be to generate multiple bodies of code to handle these more complex cases.
- In combination with the --instruction-set argument, if Avx2 is enabled, then the logic gracefully adds a dependency on Avx2 capability and Vector<T> becomes useable by crossgen'd code.
* Make JitDump label output multi-thread safe
`s_compMethodsCount` is a static variable and incrementing it when
two JITs are running at the same time can result in inconsistent labels. This PR fixes it by adding an instance variable `compMethodID` on `Compiler` object and setting it to the value of `s_compMethodsCount` after incrementing it using `InterlockedIncrement()`.
Changed the type of `s_compMethodID` to `LONG` to match the signature of `InterlockedIncrement()` and made it private.
Fixes#10984
* Dynamic dictionary expansion feature
1) Separate dictionary layout expansion from dictionary expansions on types and methods
2) Dictionary expansions on types and methods done on-demand (if needed), after size checks by codegen (uses new JIT feature)
3) Update the R2R dictionary access stubs to perform size checks (and major cleanup there)
4) Add unit test
5) Update documentation
6) Update JIT interface guid
Based on my progress with composite R2R implementation I propose
clarifying the design as follows:
1) I have proposed a rewriting scheme for the standalone MSIL
files next to the composite R2R executable to receive forwarding
information pointing at the composite file;
2) I have updated the section names I renamed yesterday and I
added a description of the new section OwnerCompositeExecutable
to be used for the forwarding information.
Thanks
Tomas
I have resurrected my preliminary composite R2R format doc,
I rebased it to include some recent changes. For the process
itself, I assume I should first implement the self-contained
composite R2R format with standalone MSIL metadata as that's
the simplest scenario. After that I'll follow up w.r.t.
shared framework compilation and other scenarios (embedded MSIL,
single exe).
Thanks
Tomas
The existing inlining info format wasn't ready for large version bubble. This adds a new table that uses the NativeHashtable to store the inlining info.
This implements support in crossgen2, r2rdump, and the runtime. Crossgen will keep generating the old format until crossgen is decommissioned.
- update links to sources from dotnet/coreclr -> dotnet/runtime/src/coreclr
- fix dead urls (github and non-github) under docs/design/coreclr.
- use https://software.intel.com/sites/default/files/article/402129/mpx-linux64-abi.pdf as a new home for x64 System V ABI, as http://x86-64.org is now abandoned. Update source files as well.
- normalize “, ” and ’ to ascii " and ' and remove trailing whitespaces in modified files.
* Move files into hierarchy
* fix more links
* Fix botr and features links
* Remove bad apostrophe
* spelling
* Apply suggestions from code review
Co-Authored-By: Youssef Victor <31348972+Youssef1313@users.noreply.github.com>
* Update docs/coding-guidelines/package-projects.md
Co-Authored-By: Jan Kotas <jkotas@microsoft.com>
Co-authored-by: Youssef Victor <31348972+Youssef1313@users.noreply.github.com>
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
* Update RyuJIT documentation
1. Convert links to reference new repo
2. Update various mostly stylistic things in the RyuJIT overview
3. Add more high-level strategy/steps statements to the RyuJIT porting guide
* Update for code review comments