| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | /* * Simple string operations using longword operations. * The ones in newlib-nano are bytewise... */#include "fw.h"void * __hot memset(void *s, int c, size_t n){    xptr_t q;    uint32_t cc;    if (unlikely(!n))	return s;    cc = (uint8_t)c;    cc = cc | (cc << 16);    cc = cc | (cc << 8);    q.b = s;    if (unlikely(q.a & 1)) {	*q.b++ = cc;	n--;    }    if (likely(n >= 2)) {	if (unlikely(q.a & 2)) {	    *q.w++ = cc;	    n -= 2;	}	while (n >= 4*8) {	    q.l[0] = cc;	    q.l[1] = cc;	    q.l[2] = cc;	    q.l[3] = cc;	    q.l[4] = cc;	    q.l[5] = cc;	    q.l[6] = cc;	    q.l[7] = cc;	    q.l += 8;	    n -= 32;	}	while (n >= 4) {	    *q.l++ = cc;	    n -= 4;	}	if (unlikely(n & 2))	    *q.w++ = c;    }    if (unlikely(n & 1))	*q.b++ = c;    return s;}
 |