The branch stable/13 has been updated by arichardson:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=fc19e3cb4fd1403a6c6dba3c9879db031faa9df3

commit fc19e3cb4fd1403a6c6dba3c9879db031faa9df3
Author:     Alex Richardson <[email protected]>
AuthorDate: 2021-04-19 23:19:20 +0000
Commit:     Alex Richardson <[email protected]>
CommitDate: 2021-05-11 08:39:27 +0000

    libc/string/memset.c: Use unsigned long for stores
    
    While most 64-bit architectures have an assembly implementation of this
    file, RISC-V does not. As we now store 8 bytes instead of 4 it should speed
    up RISC-V.
    
    Reviewed By:    kib
    MFC after:      1 week
    Differential Revision: https://reviews.freebsd.org/D29536
    
    (cherry picked from commit ab147542b7c0bbc41f7f0499b16933bd8f3f31d7)
---
 lib/libc/string/memset.c | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/lib/libc/string/memset.c b/lib/libc/string/memset.c
index 7d9909a76083..e2d4027eea0c 100644
--- a/lib/libc/string/memset.c
+++ b/lib/libc/string/memset.c
@@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$");
 
 #include <limits.h>
 
-#define        wsize   sizeof(u_int)
+#define        wsize   sizeof(u_long)
 #define        wmask   (wsize - 1)
 
 #ifdef BZERO
@@ -67,7 +67,7 @@ memset(void *dst0, int c0, size_t length)
 {
        size_t t;
 #ifndef BZERO
-       u_int c;
+       u_long c;
 #endif
        u_char *dst;
 
@@ -84,6 +84,9 @@ memset(void *dst0, int c0, size_t length)
         *
         * but we use a minimum of 3 here since the overhead of the code
         * to do word writes is substantial.
+        *
+        * TODO: This threshold might not be sensible for 64-bit u_long.
+        * We should benchmark and revisit this decision.
         */
        if (length < 3 * wsize) {
                while (length != 0) {
@@ -95,12 +98,12 @@ memset(void *dst0, int c0, size_t length)
 
 #ifndef BZERO
        if ((c = (u_char)c0) != 0) {    /* Fill the word. */
-               c = (c << 8) | c;       /* u_int is 16 bits. */
-#if UINT_MAX > 0xffff
-               c = (c << 16) | c;      /* u_int is 32 bits. */
+               c = (c << 8) | c;       /* u_long is 16 bits. */
+#if ULONG_MAX > 0xffff
+               c = (c << 16) | c;      /* u_long is 32 bits. */
 #endif
-#if UINT_MAX > 0xffffffff
-               c = (c << 32) | c;      /* u_int is 64 bits. */
+#if ULONG_MAX > 0xffffffff
+               c = (c << 32) | c;      /* u_long is 64 bits. */
 #endif
        }
 #endif
@@ -116,7 +119,7 @@ memset(void *dst0, int c0, size_t length)
        /* Fill words.  Length was >= 2*words so we know t >= 1 here. */
        t = length / wsize;
        do {
-               *(u_int *)dst = WIDEVAL;
+               *(u_long *)(void *)dst = WIDEVAL;
                dst += wsize;
        } while (--t != 0);
 
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to