summaryrefslogtreecommitdiff
path: root/libc/src/string/memcpy.cpp
AgeCommit message (Collapse)Author
2025-06-04[libc] Expand usage of libc null checks. (#116262)Aly ElAshram
Fixes #111546 --------- Co-authored-by: alyyelashram <150528548+alyyelashram@users.noreply.github.com>
2024-07-12[libc] Migrate to using LIBC_NAMESPACE_DECL for namespace declaration (#98597)Petr Hosek
This is a part of #97655.
2024-07-12Revert "[libc] Migrate to using LIBC_NAMESPACE_DECL for namespace ↵Mehdi Amini
declaration" (#98593) Reverts llvm/llvm-project#98075 bots are broken
2024-07-11[libc] Migrate to using LIBC_NAMESPACE_DECL for namespace declaration (#98075)Petr Hosek
This is a part of #97655.
2023-09-26[libc] Mass replace enclosing namespace (#67032)Guillaume Chatelet
This is step 4 of https://discourse.llvm.org/t/rfc-customizable-namespace-to-allow-testing-the-libc-when-the-system-libc-is-also-llvms-libc/73079
2023-07-19[libc][NFC] Rename filesGuillaume Chatelet
This patch mostly renames files so it better reflects the function they declare. Reviewed By: michaelrj Differential Revision: https://reviews.llvm.org/D155607
2022-11-02[reland][libc] Switch to new implementation of mem* functionsGuillaume Chatelet
The new framework makes it explicit which processor feature is being used and allows for easier per platform customization: - ARM cpu now uses trivial implementations to reduce code size. - Memcmp, Bcmp and Memmove have been optimized for x86 - Bcmp has been optimized for aarch64. This is a reland of https://reviews.llvm.org/D135134 (b3f1d58, 028414881381) Reviewed By: courbet Differential Revision: https://reviews.llvm.org/D136595
2022-10-27Revert D136595 "[libc] Switch to new implementation of mem* functions"Guillaume Chatelet
This patch seems to introduce bugs on aarch64. Reverting while we investigate the root cause. This reverts commit 02841488138160f9064f334a833d4bf3e80385c6.
2022-10-25[libc] Switch to new implementation of mem* functionsGuillaume Chatelet
The new framework makes it explicit which processor feature is being used and allows for easier per platform customization: - ARM cpu now uses trivial implementations to reduce code size. - Memcmp, Bcmp and Memmove have been optimized for x86 - Bcmp has been optimized for aarch64. This is a reland of https://reviews.llvm.org/D135134 (b3f1d58) Differential Revision: https://reviews.llvm.org/D136595
2021-11-04[libc][NFC] Allow memcpy to be inlinedGuillaume Chatelet
This allows shipping individual functions without also having to provide `memcpy` at the expense of bigger functions. Next is to use this `inlined_memcpy` in: - loader/linux/x86_64/start.cpp - src/string/memmove.cpp - src/string/mempcpy.cpp - src/string/strcpy.cpp - src/string/strdup.cpp - src/string/strndup.cpp Differential Revision: https://reviews.llvm.org/D113097
2021-06-16[libc] Add a set of elementary operationsGuillaume Chatelet
Resubmission of D100646 now making sure that we handle cases were `__builtin_memcpy_inline` is not available. Original commit message: Each of these elementary operations can be assembled to support higher order constructs (Overlapping access, Loop, Aligned Loop). The patch does not compile yet as it depends on other ones (D100571, D100631) but it allows to get the conversation started. A self-contained version of this code is available at https://godbolt.org/z/e1x6xdaxM
2021-06-16Revert "[libc] Add a set of elementary operations"Guillaume Chatelet
This reverts commit 4694321fbe54628513b75a4395124cd7508581a6.
2021-06-16[libc] Add a set of elementary operationsGuillaume Chatelet
Resubmission of D100646 now making sure that we handle cases were `__builtin_memcpy_inline` is not available. Original commit message: Each of these elementary operations can be assembled to support higher order constructs (Overlapping access, Loop, Aligned Loop). The patch does not compile yet as it depends on other ones (D100571, D100631) but it allows to get the conversation started. A self-contained version of this code is available at https://godbolt.org/z/e1x6xdaxM
2021-06-15Revert "[libc] Add a set of elementary operations"Guillaume Chatelet
This reverts commit 8387187c2ffe0bef0696edfffab00cd7d0ee3e6e.
2021-06-15[libc] Add a set of elementary operationsGuillaume Chatelet
Resubmission of D100646 now making sure that we handle cases were `__builtin_memcpy_inline` is not available. Original commit message: Each of these elementary operations can be assembled to support higher order constructs (Overlapping access, Loop, Aligned Loop). The patch does not compile yet as it depends on other ones (D100571, D100631) but it allows to get the conversation started. A self-contained version of this code is available at https://godbolt.org/z/e1x6xdaxM
2021-06-15Revert "[libc] Add a set of elementary operations"Guillaume Chatelet
This reverts commit 454d92ac3b3b13f5c8b3f57e03b2d93f0cf60738.
2021-06-15[libc] Add a set of elementary operationsGuillaume Chatelet
Resubmission of D100646 now making sure that we handle cases were `__builtin_memcpy_inline` is not available. Original commit message: Each of these elementary operations can be assembled to support higher order constructs (Overlapping access, Loop, Aligned Loop). The patch does not compile yet as it depends on other ones (D100571, D100631) but it allows to get the conversation started. A self-contained version of this code is available at https://godbolt.org/z/e1x6xdaxM
2021-06-14Revert "[libc] Add a set of elementary operations"Guillaume Chatelet
This reverts commit e63f27a3cf8129cb66b8350ad50bf19633554a6b.
2021-06-14[libc] Add a set of elementary operationsGuillaume Chatelet
Each of these elementary operations can be assembled to support higher order constructs (Overlapping access, Loop, Aligned Loop). The patch does not compile yet as it depends on other ones (D100571, D100631) but it allows to get the conversation started. Differential Revision: https://reviews.llvm.org/D100646
2021-04-26[libc] Use different alignment for memcpy between ARM and x86.Guillaume Chatelet
Aligned copy used to be 'destination aligned' for x86 but this decision was reverted in D93457 where we noticed that it was better for ARM to be 'source aligned'. More benchmarking confirmed that it can be up to 30% faster to align copy to destination for x86. This Patch offers both implementations and switches x86 back to destination aligned. It also fixes alignment to 32 byte on x86. Differential Revision: https://reviews.llvm.org/D101296
2021-01-08[libc] Switch to use a macro which does not insert a section for every libc ↵Michael Jones
function. Summary: The new macro also inserts the C alias for the C++ implementations without needing an objcopy based post processing step. The CMake rules have been updated to reflect this. More CMake cleanup can be taken up in future rounds and appropriate TODOs have been added for them. Reviewers: mcgrathr, sivachandra Subscribers:
2020-09-15[libc] Remove special case for 8 and 16 bytesGuillaume Chatelet
They don't seem to gain much in real apps and its better to favor less branches and smaller code.
2020-06-15[libc] Extract an architecture independent copy of memcpy implementation.Siva Chandra Reddy
Along that way, platform specific options to memcpy, memset and bzero builds have been enclosed in conditionals. Also, the optimization level has been set to -O2 for the memory function builds to actually see the static functions inlined. Reviewers: gchatelet Differential Revision: https://reviews.llvm.org/D81621
2020-05-26[libc][NFC] Simplify memcpy implementationGuillaume Chatelet
Summary: This is a NFC, it aims at simplifying both the code and build files. Reviewers: abrachet, sivachandra Subscribers: mgorny, tschuett, ecnelises, libc-commits, courbet Tags: #libc-project Differential Revision: https://reviews.llvm.org/D80291
2020-04-08[libc][NFC] Make all top of file comments consistent.Paula Toth
Summary: Made all header files consistent based of this documentation: https://llvm.org/docs/CodingStandards.html#file-headers. And did the same for all source files top of file comments. Reviewers: sivachandra, abrachet Reviewed By: sivachandra, abrachet Subscribers: MaskRay, tschuett, libc-commits Tags: #libc-project Differential Revision: https://reviews.llvm.org/D77533
2020-03-18[libc] Adding memcpy implementation for x86_64Guillaume Chatelet
Summary: The patch is not ready yet and is here to discuss a few options: - How do we customize the implementation? (i.e. how to define `kRepMovsBSize`), - How do we specify custom compilation flags? (We'd need `-fno-builtin-memcpy` to be passed in), - How do we build? We may want to test in debug but build the libc with `-march=native` for instance, - Clang has a brand new builtin `__builtin_memcpy_inline` which makes the implementation easy and efficient, but: - If we compile with `gcc` or `msvc` we can't use it, resorting on less efficient code generation, - With gcc we can use `__builtin_memcpy` but then we'd need a postprocess step to check that the final assembly do not contain call to `memcpy` (unlikely but allowed), - For msvc we'd need to resort on the compiler optimization passes. Reviewers: sivachandra, abrachet Subscribers: mgorny, MaskRay, tschuett, libc-commits, courbet Tags: #libc-project Differential Revision: https://reviews.llvm.org/D74397