> > +void * > +grub_memset (void *s, int c, grub_size_t n) > +{ > + unsigned char *p = (unsigned char *) s; > + > + while (n--) > + *p++ = (unsigned char) c; > + > + return s; > +} > Attached is a possible generic implementation. Not even compile-tested. Could you test it and compare disasm of this version on i386 and glibc i386 version. Perhaps they are equivalent. If they are for maintainance reasons it's better to always use generic one. > + > +#ifndef APPLE_CC > +void *memset (void *s, int c, grub_size_t n) > + __attribute__ ((alias ("grub_memset"))); > +#else > +void *memset (void *s, int c, grub_size_t n) > +{ > + return grub_memset (s, c, n); > +} > +#endif > > Thanks, > >
-- Regards Vladimir 'φ-coder/phcoder' Serbinenko
void grub_memset (void *p, int c, grub_size_t len) { grub_uint8_t pattern8 = c; if (len >= 3 * sizeof (unsigned long)) { unsigned long patternl = 0; int i; for (i = 0; i < sizeof (unsigned long); i++) patternl |= ((unsigned long) pattern8) << (8 * i); while (len > 0 && (((grub_addr_t) p) & (sizeof (unsigned long) - 1))) { *(grub_uint8_t *) p = pattern8; p = (grub_uint8_t *) p + 1; } while (len >= sizeof (unsigned long)) { *(unsigned long *) p = patternl; p = (unsigned long *) p + 1; } } while (len > 0) { *(grub_uint8_t *) p = pattern8; p = (grub_uint8_t *) p + 1; } }
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel