diff options
author | Sergey Andreenko <seandree@microsoft.com> | 2018-12-21 12:24:52 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-21 12:24:52 -0800 |
commit | a9ceb1534e5a205bc1b56d0c097595ef8c2ff7f6 (patch) | |
tree | 32fca9f2a3f9ae2cde333c7270aa1f00067d0ed2 /tests | |
parent | a8ed07a5ee70f0864290f3e9870d53665c2aef4a (diff) | |
download | coreclr-a9ceb1534e5a205bc1b56d0c097595ef8c2ff7f6.tar.gz coreclr-a9ceb1534e5a205bc1b56d0c097595ef8c2ff7f6.tar.bz2 coreclr-a9ceb1534e5a205bc1b56d0c097595ef8c2ff7f6.zip |
Fix arm64 prolog generation for register masks with holes. (#21395)
* Check that `genSaveCalleeSavedRegistersHelp` doesn't accept `REG_LR`.
There are two callers and both save `LR` with `FP` before calling this helper.
In case if somebody calls this function wth`REG_LR` it won't work because unwinding info doesn't expect holes in the reg pairs.
* Extract `genPushOrPopCalleeSavedRegisters`.
It will be used for both float and int types.
* Extend `genSaveCaleeSavedRegisterGroup` to support float.
The previous version was a copy-paste with an additional case for `REG_LR` that was unreachable. Fix that.
* Use `genSaveCaleeSavedRegisterGroup` for floats.
* Extract `genRestoreCaleeSavedRegisterGroup`.
It will be used for both int and float groups.
* Prepare `genPopCalleeSavedRegisters` to work with float.
* Use `genRestoreCaleeSavedRegisterGroup` for float.
* Check that `genRestoreCalleeSavedRegistersHelp` doesn't restore `REG_LR`.
Both callers do it later.
* Extract `CheckSPOffset`.
and move it out of loops because it works only before the first save intruction.
* Format `genRestoreCaleeSavedRegisterGroup` as `genSaveCalleeSavedRegistersHelp`.
* Extract `buildRegPairsStack` from `genSaveCaleeSavedRegisterGroup` and `genRestoreCaleeSavedRegisterGroup`.
Build a stack of registers that we want to save/restore and then iterate over it doing the actual saving/restoring.
* Extract `GetSlotSizeForRegsInMask`.
* Tolerate holes in arm64 prolog/epilog register masks.
Fixes #21363
* Reenable the test.
* Add new methods headers.
* Fix typos.
* Do not use non-const references.
* Describe `buildRegPairsStack` better.
* Change signature of `buildRegPairsStack` to avoid copyings of big structs.
* Return the logic for `RBM_LR`.
For future use.
* Clean-up some unused variables.
* Fix comments.
* Get rid of file-level functions.
* Make new methods static.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/issues.targets | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/tests/issues.targets b/tests/issues.targets index b3bed8a126..7c44b6ef25 100644 --- a/tests/issues.targets +++ b/tests/issues.targets @@ -239,9 +239,6 @@ <ExcludeList Include="$(XunitTestBinBase)/readytorun/r2rdump/R2RDumpTest/*"> <Issue>19441</Issue> </ExcludeList> - <ExcludeList Include="$(XunitTestBinBase)/JIT/Regression/JitBlue/DevDiv_736188/DevDiv_736188/*"> - <Issue>21363</Issue> - </ExcludeList> </ItemGroup> <ItemGroup Condition="'$(XunitTestBinBase)' != ''"> |