diff --git a/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake b/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake index 1ce027114f73..2e2c5e3ad747 100644 --- a/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake +++ b/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake @@ -100,6 +100,10 @@ function(_get_compile_options_from_config output_var) list(APPEND config_options "-DLIBC_COPT_MEMSET_X86_USE_SOFTWARE_PREFETCHING") endif() + if(LIBC_CONF_COPT_MEMCPY_X86_USE_NTA_STORES) + list(APPEND config_options "-DLIBC_COPT_MEMCPY_X86_USE_NTA_STORES") + endif() + if(LIBC_TYPES_TIME_T_IS_32_BIT AND LLVM_LIBC_FULL_BUILD) list(APPEND config_options "-DLIBC_TYPES_TIME_T_IS_32_BIT") endif() diff --git a/libc/config/config.json b/libc/config/config.json index 2ab09f6717f2..39cb2d8cfa33 100644 --- a/libc/config/config.json +++ b/libc/config/config.json @@ -101,6 +101,10 @@ "LIBC_CONF_MEMSET_X86_USE_SOFTWARE_PREFETCHING": { "value": false, "doc": "Inserts prefetch for write instructions (PREFETCHW) for memset on x86 to recover performance when hardware prefetcher is disabled." + }, + "LIBC_CONF_COPT_MEMCPY_X86_USE_NTA_STORES": { + "value": false, + "doc": "Use Non-temporal stores in memcpy on x86 to improve performance of large copies." } }, "ctype": { diff --git a/utils/bazel/llvm-project-overlay/libc/libc_configure_options.bzl b/utils/bazel/llvm-project-overlay/libc/libc_configure_options.bzl index 1c2b65ea2011..340893850bfe 100644 --- a/utils/bazel/llvm-project-overlay/libc/libc_configure_options.bzl +++ b/utils/bazel/llvm-project-overlay/libc/libc_configure_options.bzl @@ -24,6 +24,7 @@ LIBC_CONFIGURE_OPTIONS = [ # Documentation in libc/src/string/memory_utils/... # "LIBC_COPT_MEMCPY_USE_EMBEDDED_TINY", # "LIBC_COPT_MEMCPY_X86_USE_REPMOVSB_FROM_SIZE", + # "LIBC_COPT_MEMCPY_X86_USE_NTA_STORES", "LIBC_COPT_MEMCPY_X86_USE_SOFTWARE_PREFETCHING", "LIBC_COPT_MEMSET_X86_USE_SOFTWARE_PREFETCHING",