From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x433.google.com (mail-pf1-x433.google.com [IPv6:2607:f8b0:4864:20::433]) by sourceware.org (Postfix) with ESMTPS id 0511F3857C74 for ; Fri, 16 Apr 2021 19:09:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 0511F3857C74 Received: by mail-pf1-x433.google.com with SMTP id c3so154702pfo.3 for ; Fri, 16 Apr 2021 12:09:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=rokYfQyp5BdiBRfyYwCZeLCIZCRhQkfPlps92ftVdQ4=; b=mG9ONafSXiRS92psxBntwWarkZmr+ezkh1lMJvPhLkvQweVdnrLv7ktQtZfc4WaiF2 d6DRkOh83aTpuVBPhszlYvGhaVTL5Wnx41+80p6AOmWl45oHOCpgxu6onyNlhvLsuKQg QYFzFBiwJIS+WwSAe/uZKxP4TCBP81XppGkagYOlDCLMwxSTAlyrL8uJETLBM0kwSKVu ZTM016z+wGXJPKAS4Auzs47Cw9KiCx701o8ogLVdZbocNZKQvjODXhkx9S0pEKxsc0X/ Z2+1yPJedHRKPw7F8S784QOjDY7bf9NDNXVZbQMizJJV6J0911cErqEvAMJJZ8uM3NMY 1cjw== X-Gm-Message-State: AOAM530wjiE8z2kygnmT2l2cUZLVXklF/jJM0EYgljyC7fqvBWhy8mRA WnaXjG349wFnB/J6wsciFrU= X-Google-Smtp-Source: ABdhPJzM/hzt1ayBuZF+aaAkz/SUjs57hiJJ/NqU9UEGDIRt0Z6tLkwNsxVkmsF1eO4bOa5SU8rniw== X-Received: by 2002:a05:6a00:134f:b029:25a:b502:e1aa with SMTP id k15-20020a056a00134fb029025ab502e1aamr2713972pfu.64.1618600162998; Fri, 16 Apr 2021 12:09:22 -0700 (PDT) Received: from gnu-cfl-2.localdomain ([172.58.35.177]) by smtp.gmail.com with ESMTPSA id h22sm5465910pfn.55.2021.04.16.12.09.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Apr 2021 12:09:22 -0700 (PDT) Received: by gnu-cfl-2.localdomain (Postfix, from userid 1000) id A7CF01A03E7; Fri, 16 Apr 2021 12:09:20 -0700 (PDT) Date: Fri, 16 Apr 2021 12:09:20 -0700 From: "H.J. Lu" To: Noah Goldstein Cc: libc-alpha@sourceware.org, carlos@systemhalted.org Subject: Re: [PATCH v8 2/2] x86: Expanding test-memmove.c, test-memcpy.c, bench-memcpy-large.c Message-ID: References: <20210403081215.2309505-1-goldstein.w.n@gmail.com> <20210403081215.2309505-2-goldstein.w.n@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210403081215.2309505-2-goldstein.w.n@gmail.com> X-Spam-Status: No, score=-3036.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Apr 2021 19:09:25 -0000 On Sat, Apr 03, 2021 at 04:12:16AM -0400, Noah Goldstein wrote: > From: noah > > No Bug. This commit expanding the range of tests / benchmarks for > memmove and memcpy. The test expansion is mostly in the vein of > increasing the maximum size, increasing the number of unique > alignments tested, and testing both source < destination and vice > versa. The benchmark expansaion is just to increase the number of > unique alignments. test-memcpy, test-memccpy, test-mempcpy, > test-memmove, and tst-memmove-overflow all pass. > > Signed-off-by: Noah Goldstein > --- > benchtests/bench-memcpy-large.c | 8 +++- > string/test-memcpy.c | 61 ++++++++++++++++------------- > string/test-memmove.c | 68 ++++++++++++++++++++------------- > 3 files changed, 82 insertions(+), 55 deletions(-) > > diff --git a/benchtests/bench-memcpy-large.c b/benchtests/bench-memcpy-large.c > index 3df1575514..efb9627b1e 100644 > --- a/benchtests/bench-memcpy-large.c > +++ b/benchtests/bench-memcpy-large.c > @@ -57,11 +57,11 @@ do_test (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len) > size_t i, j; > char *s1, *s2; > > - align1 &= 63; > + align1 &= 4095; > if (align1 + len >= page_size) > return; > > - align2 &= 63; > + align2 &= 4095; > if (align2 + len >= page_size) > return; > > @@ -113,6 +113,10 @@ test_main (void) > do_test (&json_ctx, 0, 3, i + 15); > do_test (&json_ctx, 3, 0, i + 31); > do_test (&json_ctx, 3, 5, i + 63); > + do_test (&json_ctx, 0, 127, i); > + do_test (&json_ctx, 0, 255, i); > + do_test (&json_ctx, 0, 256, i); > + do_test (&json_ctx, 0, 4064, i); > } > > json_array_end (&json_ctx); > diff --git a/string/test-memcpy.c b/string/test-memcpy.c > index 2e9c6bd099..c9dfc88fed 100644 > --- a/string/test-memcpy.c > +++ b/string/test-memcpy.c > @@ -82,11 +82,11 @@ do_test (size_t align1, size_t align2, size_t len) > size_t i, j; > char *s1, *s2; > > - align1 &= 63; > + align1 &= 4095; > if (align1 + len >= page_size) > return; > > - align2 &= 63; > + align2 &= 4095; > if (align2 + len >= page_size) > return; > > @@ -213,11 +213,9 @@ do_random_tests (void) > } > > static void > -do_test1 (void) > +do_test1 (size_t size) > { > - size_t size = 0x100000; > void *large_buf; > - > large_buf = mmap (NULL, size * 2 + page_size, PROT_READ | PROT_WRITE, > MAP_PRIVATE | MAP_ANON, -1, 0); > if (large_buf == MAP_FAILED) > @@ -233,27 +231,32 @@ do_test1 (void) > uint32_t *dest = large_buf; > uint32_t *src = large_buf + size + page_size; > size_t i; > - > - for (i = 0; i < arrary_size; i++) > - src[i] = (uint32_t) i; > - > - FOR_EACH_IMPL (impl, 0) > + size_t repeats; > + for(repeats = 0; repeats < 2; repeats++) > { > - memset (dest, -1, size); > - CALL (impl, (char *) dest, (char *) src, size); > for (i = 0; i < arrary_size; i++) > - if (dest[i] != src[i]) > - { > - error (0, 0, > - "Wrong result in function %s dst \"%p\" src \"%p\" offset \"%zd\"", > - impl->name, dest, src, i); > - ret = 1; > - break; > - } > + src[i] = (uint32_t) i; > + > + FOR_EACH_IMPL (impl, 0) > + { > + printf ("\t\tRunning: %s\n", impl->name); > + memset (dest, -1, size); > + CALL (impl, (char *) dest, (char *) src, size); > + for (i = 0; i < arrary_size; i++) > + if (dest[i] != src[i]) > + { > + error (0, 0, > + "Wrong result in function %s dst \"%p\" src \"%p\" offset \"%zd\"", > + impl->name, dest, src, i); > + ret = 1; > + munmap ((void *) large_buf, size * 2 + page_size); > + return; > + } > + } > + dest = src; > + src = large_buf; > } > - > - munmap ((void *) dest, size); > - munmap ((void *) src, size); > + munmap ((void *) large_buf, size * 2 + page_size); > } > > int > @@ -275,7 +278,6 @@ test_main (void) > do_test (0, i, 1 << i); > do_test (i, i, 1 << i); > } > - > for (i = 0; i < 32; ++i) > { > do_test (0, 0, i); > @@ -294,12 +296,19 @@ test_main (void) > do_test (i, i, 16 * i); > } > > + for (i = 19; i <= 25; ++i) > + { > + do_test (255, 0, 1 << i); > + do_test (0, 255, i); > + do_test (0, 4000, i); > + } > + > do_test (0, 0, getpagesize ()); > > do_random_tests (); > > - do_test1 (); > - > + do_test1 (0x100000); > + do_test1 (0x2000000); > return ret; > } > > diff --git a/string/test-memmove.c b/string/test-memmove.c > index 2e3ce75b9b..2e665fa3a5 100644 > --- a/string/test-memmove.c > +++ b/string/test-memmove.c > @@ -247,7 +247,7 @@ do_random_tests (void) > } > > static void > -do_test2 (void) > +do_test2 (size_t offset) > { > size_t size = 0x20000000; > uint32_t * large_buf; > @@ -268,33 +268,45 @@ do_test2 (void) > } > > size_t bytes_move = 0x80000000 - (uintptr_t) large_buf; > + if (bytes_move + offset * sizeof (uint32_t) > size) > + { > + munmap ((void *) large_buf, size); > + return; > + } > size_t arr_size = bytes_move / sizeof (uint32_t); > size_t i; > - > - FOR_EACH_IMPL (impl, 0) > + size_t repeats; > + uint32_t * src = large_buf; > + uint32_t * dst = &large_buf[offset]; > + for (repeats = 0; repeats < 2; ++repeats) > { > - for (i = 0; i < arr_size; i++) > - large_buf[i] = (uint32_t) i; > - > - uint32_t * dst = &large_buf[33]; > - > -#ifdef TEST_BCOPY > - CALL (impl, (char *) large_buf, (char *) dst, bytes_move); > -#else > - CALL (impl, (char *) dst, (char *) large_buf, bytes_move); > -#endif > - > - for (i = 0; i < arr_size; i++) > - { > - if (dst[i] != (uint32_t) i) > - { > - error (0, 0, > - "Wrong result in function %s dst \"%p\" src \"%p\" offset \"%zd\"", > - impl->name, dst, large_buf, i); > - ret = 1; > - break; > - } > - } > + FOR_EACH_IMPL (impl, 0) > + { > + for (i = 0; i < arr_size; i++) > + src[i] = (uint32_t) i; > + > + > + #ifdef TEST_BCOPY > + CALL (impl, (char *) src, (char *) dst, bytes_move); > + #else > + CALL (impl, (char *) dst, (char *) src, bytes_move); > + #endif > + > + for (i = 0; i < arr_size; i++) > + { > + if (dst[i] != (uint32_t) i) > + { > + error (0, 0, > + "Wrong result in function %s dst \"%p\" src \"%p\" offset \"%zd\"", > + impl->name, dst, large_buf, i); > + ret = 1; > + munmap ((void *) large_buf, size); > + return; > + } > + } > + } > + src = dst; > + dst = large_buf; > } > > munmap ((void *) large_buf, size); > @@ -340,8 +352,10 @@ test_main (void) > > do_random_tests (); > > - do_test2 (); > - > + do_test2 (33); > + do_test2 (0x200000); > + do_test2 (0x4000000 - 1); > + do_test2 (0x4000000); > return ret; > } > > -- > 2.29.2 > LGTM. I am committing it for you. Thanks. H.J.