summaryrefslogtreecommitdiff
path: root/src/vm/comdelegate.h
diff options
context:
space:
mode:
authorJUNG DONG-HEON <dheon.jung@samsung.com>2020-05-28 11:15:47 +0900
committer이형주/Common Platform Lab(SR)/Staff Engineer/삼성전자 <leee.lee@samsung.com>2020-06-18 07:38:46 +0900
commit488be5d790020489f7f4dd7d43680f43b101dbd4 (patch)
treee051d18299dfa580fabdb1ca32863f517f0ab356 /src/vm/comdelegate.h
parent45278569f1e32a5e3ab52f1643ee5f0f3b1f00c9 (diff)
downloadcoreclr-488be5d790020489f7f4dd7d43680f43b101dbd4.tar.gz
coreclr-488be5d790020489f7f4dd7d43680f43b101dbd4.tar.bz2
coreclr-488be5d790020489f7f4dd7d43680f43b101dbd4.zip
Fix GenerateShuffleArray to support cyclic shuffles (dotnet/coreclr#26169)
* Fix GenerateShuffleArray to support cyclic shuffles The GenerateShuffleArray was not handling case when there was a cycle in the register / stack slots shuffle and it resulted in an infinite loop in this function. This issue is Unix Amd64 ABI specific. To fix that, this change reworks the algorithm completely. Besides fixing the issue, it has also better performance in some cases. To fix the cyclic shuffling, I needed an extra helper register. However, there was no available general purpose register available, so I had to use xmm8 for this purpose. * Remove special handling of the hang from ABI stress
Diffstat (limited to 'src/vm/comdelegate.h')
-rw-r--r--src/vm/comdelegate.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/vm/comdelegate.h b/src/vm/comdelegate.h
index 3d5ec8e30e..330f1f8886 100644
--- a/src/vm/comdelegate.h
+++ b/src/vm/comdelegate.h
@@ -194,6 +194,7 @@ struct ShuffleEntry
OFSMASK = 0x7fff, // Mask to get stack offset
OFSREGMASK = 0x1fff, // Mask to get register index
SENTINEL = 0xffff, // Indicates end of shuffle array
+ HELPERREG = 0xcfff, // Use a helper register as source or destination (used to handle cycles in the shuffling)
};
#if defined(_TARGET_AMD64_) && !defined(UNIX_AMD64_ABI)