summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJan Kotas <jkotas@microsoft.com>2015-02-04 13:18:29 -0800
committerJan Kotas <jkotas@microsoft.com>2015-02-04 13:18:29 -0800
commitcbf5cbf6c257bc7766185b813a5d50078defcb74 (patch)
treec11544a069bb6ec2e126f603f16acfa20ed2aab8 /src
parent8dd39ebdd57bf5a5678fbf4bd37fb7b5f60a8eea (diff)
parenta5dd659fdc1719f943fead7e1b6e2db167a271a4 (diff)
downloadcoreclr-cbf5cbf6c257bc7766185b813a5d50078defcb74.tar.gz
coreclr-cbf5cbf6c257bc7766185b813a5d50078defcb74.tar.bz2
coreclr-cbf5cbf6c257bc7766185b813a5d50078defcb74.zip
Merge pull request #36 from benaadams/patch-1
Avoid unnecessary work for identical locations in Buffer.BlockCopy
Diffstat (limited to 'src')
-rw-r--r--src/vm/comutilnative.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/vm/comutilnative.cpp b/src/vm/comutilnative.cpp
index 8c27b2f478..ae9a9c18ed 100644
--- a/src/vm/comutilnative.cpp
+++ b/src/vm/comutilnative.cpp
@@ -1443,9 +1443,12 @@ FCIMPL5(VOID, Buffer::BlockCopy, ArrayBase *src, int srcOffset, ArrayBase *dst,
if (srcLen < (SIZE_T)srcOffset + (SIZE_T)count || dstLen < (SIZE_T)dstOffset + (SIZE_T)count) {
FCThrowArgumentVoid(NULL, W("Argument_InvalidOffLen"));
}
+
+ PTR_BYTE srcPtr = src->GetDataPtr() + srcOffset;
+ PTR_BYTE dstPtr = dst->GetDataPtr() + dstOffset;
- if (count > 0) {
- memmove(dst->GetDataPtr() + dstOffset, src->GetDataPtr() + srcOffset, count);
+ if ((srcPtr != dstPtr) && (count > 0)) {
+ memmove(dstPtr, srcPtr, count);
}
FC_GC_POLL();