[libc-commits] [PATCH] D92236: [LIBC] Add optimized memcpy routine for AArch64
Guillaume Chatelet via Phabricator via libc-commits
libc-commits at lists.llvm.org
Thu Dec 17 06:02:23 PST 2020
gchatelet added inline comments.
================
Comment at: libc/src/string/aarch64/memcpy.cpp:71-103
+ // Large copy
+ // Copy 16 bytes and then align src to 16-byte alignment.
+ CopyBlock<16>(dst, src);
+
+ // Align to either source or destination depending on target.
+ // Default aligns to source, define 'ALIGN_DST' to align to destination.
+#if ALIGN_DST
----------------
avieira wrote:
> gchatelet wrote:
> > I think the code here could be replaced with a call to `CopyAlignedBlocks<64>` from `src/string/memory_utils/memcpy_utils.h` which essentially aligns the destination pointers, copies blocks of 64 bytes and handles the trailing bytes with an overlapping copy.
> >
> > If it's important that the alignment is 16B instead of 64B I can change the implementation but since the code is heavily tested I'd be in favor of reusing it as much as possible.
> >
> > Note: I believe that the compiler will generate the same code whether using two `CopyBlock<32>` or a single `CopyBlock<64>`.
> I am looking at this one, the reason I wrote out this code was because we want to align for source, not destination. I will have a look at the implementation of CopyAlignedBlocks, maybe the answer is to further template this to allow a switch between src and dst alignment?
>
> I am also looking at a potential codegen difference between 2* CopyBlock<32> and CopyBlock<64>, will get back to you next week on this.
> I am looking at this one, the reason I wrote out this code was because we want to align for source, not destination. I will have a look at the implementation of CopyAlignedBlocks, maybe the answer is to further template this to allow a switch between src and dst alignment?
Rereading this comment, it seems there's a mistake in our code, it should be source aligned as you suggest and not destination aligned.
I've sent D93457 to fix it.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92236/new/
https://reviews.llvm.org/D92236
More information about the libc-commits
mailing list