Franck Bui-Huu wrote: > Thiemo Seufer wrote: > > Franck Bui-Huu wrote: > >> /* > >> - * memset(void *s, int c, size_t n) > >> + * An outline version of memset, which should be used either by gcc or > >> + * by assembly code. > >> + */ > >> +NESTED(memset, 24, ra) > >> + PTR_ADDU sp, sp, -24 > >> + LONG_S a0, 16(sp) > >> + LONG_S ra, 20(sp) > >> + jal __fill_user > >> + LONG_L v0, 16(sp) > >> + LONG_L ra, 20(sp) > >> + PTR_ADDU sp, sp, 24 > >> + jr ra > >> +END(memset) > > > > This will break on 64bit kernels. > > > > Is the following correct ? > > NESTED(memset, 16, ra) > PTR_ADDU sp, sp, -16 > LONG_S a0, 8(sp) > LONG_S ra, 16(sp) > jal __fill_user > LONG_L v0, 8(sp) > LONG_L ra, 16(sp) > PTR_ADDU sp, sp, 16 > jr ra > END(memset) > > I know it doesn't respect any mips ABI but in this case do > we really care ? In general we do (think of stack unwinding etc.). I believe this implementation should move to C, as it doesn't need an assembler implementation: void *memset (void *s, int c, kernel_size_t n) { __fill_user(s, c, n); return s; } It looks much nicer that way. :-) Thiemo